Содержание статьи
Каждый месяц со страниц рубрики «Кодинг» на тебя смотрят самые обычные (просто очень крутые :)) программисты. В свободное от написания статей время они живут обычной кодерской жизнью — программирование по работе, поддержка своего софта, выступления на конференциях, опенсорсные проекты...
В этом месяце мы решили сделать экспериментальную колонку, в которой не один колумнист, а сразу несколько авторов расскажут о том, что им показалось интересным в этом месяце. Мне, кстати, понравилось :).
Виталий Худобахшов
Недавно выступил на Java-конференции Joker и разобрал вопросы реального применения функционального программирования и особенности стандартной библиотеки Scala, которые правильно было бы считать ошибками. Очень интересная история с нестандартным порядком аргументов в методе foldLeft, что очень запутывает и не дает каррировать правильно, а также нарушение контракта функтора map(g ? f) = map(g) ? map(f) в случае применения метода map одновременно для ключей и значений словаря (Map). Последний пример в обыденной жизни означает, что Map.map в каком-то не вполне известном порядке схлопывает повторяющиеся ключи, если они возникают во время обработки, а это может приводить к очень большим проблемам. Вообще, функциональные языки и языки со смешанной парадигмой хороши для тех, кто умеет всем этим пользоваться.
Deeonis
Удалось поучаствовать в проекте по созданию нового дистрибутива Linux с нуля. Соответственно, существенно расширился бэкграунд системных знаний о Linux, о том, как разные компоненты в этой ОС взаимодействуют друг с другом. Кроме того, пришлось немного пописать софт под этот дистрибутив. В частности, что-то похожее на desktop shell со своим доком и прочими атрибутами. Главной особенностью этого приложения было то, что оно использовало библиотеку XCB для общения с X-сервером. Да-да, не GTK и даже не XLib, а XCB.
Эта библиотека является тонкой C-оберткой над протоколом X11 и его расширениями. Большинство ее кода генерируется из описания протокола в XML. Основной плюс XCB — полная асинхронность, что существенно повышает производительность GUI-приложений, особенно при сетевом запуске. Главный минус — это не GUI-фреймворк. Там нет привычных контролов, таких как кнопки или поля ввода. Все это приходилось рисовать вручную, благо есть библиотека Cairo, которая умеет использовать в качестве бэкенда XCB, что облегчало непосредственно рисование, но не избавляло от написания логики работы контролов. В общем, было весело :).
Николай Марков
В моем случае новой идеей, которая поставила все с ног на голову, стало активное использование CLI-инструментов для ad hoc анализа данных прямо в консоли. Нет, Pandas и Numpy в Python — штуки отличные, но простые задачи можно решать быстро и эффективно и без них. GNU Parallel/mawk/sed/csvkit/jq — и гигабайты и даже терабайты данных за какие-то минуты обсчитываются на нескольких ядрах. Я уж молчу про Hadoop и Spark. В общем, азы вспомнить никогда не повредит, будь уверен.
Андрей Пахомов
Подметил для себя «новые» веяния в material design. Сначала был «бургер» — когда меню скрывается за иконкой в левом верхнем углу, похожей на фастфуд-продукт. Теперь Google предлагает разработчикам использовать bottom navigation: расположить элементы меню в один ряд внизу экрана так, чтобы они были всегда перед глазами у пользователя. По-моему, мы это уже когда-то видели. Ждем top navigation?
Владимир Тимофеев
Недавно прошла новость про перехват ввода данных из андроид-приложений. В уязвимости используется сервис спецвозможностей, поскольку он может, например, читать поля ввода EditText. Эту особенность я уже раскрывал в своей старой статье. Если тебя беспокоит безопасность ввода, рекомендую последовать советам из статьи.
Еще недавно провел небольшое исследование своего проекта «Wi-Fi напоминатель паролей» — возможно ли уменьшить APK-файл и снизить количество методов. Получилось ужать его с трех до двух мегабайт, попутно удалив из него фрагменты. Вот тут описано, как сделать ViewPager на простых классах View. У меня он применяется в двух местах: в основном активити и в обучающем.
Во время своих ковыряний я узнал особенности работы некоторых подключаемых библиотек — главное, как они сами подтягивают лишние зависимости. От этого число методов в приложении увеличивается, а манифест наполняется совсем ненужными разрешениями.
В Gradle мы можем прописать вручную, какие разрешения убрать из итогового манифеста и какие библиотеки отключить принудительно.
После всех оптимизаций, как всегда, желательно хорошенько проверить работоспособность :).
Артур Глызин
А я расскажу про Servless-приложение на базе Firebase. Если тебя периодически посещают идеи написать очередное крутое приложение, но ты останавливаешься на этапе написания бэкенда под него, то самое время тебе узнать, что в современном мире мобильной разработки можно обойтись и без собственного сервера. Облачных платформ много, но я рекомендую взглянуть на Firebase, которым с недавнего времени владеет Google.
Хочешь, чтобы пользователи твоего приложения обменивались файлами? Firebase Storage! Нужно внутри приложения организовать чатик или функцию бэкапа? Firebase Database! Нужна авторизация в приложении? Firebase Authentication! С Firebase Notifications тебе даже не нужен сервер для рассылки уведомлений! Check this out.
Юрий «yurembo» Язев
За последнее время yurembo примкнул к разработке двух indie-игр. А что? Инди — это романтика, кодинг, арт, смелые идеи, выходящие за рамки продюсеров больших компаний, иногда еда и прочие радости жизни :).
Первый проект разрабатывается длительное время на пресловутом движке Cryengine 3.8. Эту версию уже не поддерживает сама Crytek. Поэтому мы решили перенести имеющиеся наработки на Lumberyard. Причина в том, что Amazon основала Lumberyard на версии 3.8 «плачущего движка». Следовательно, это должно облегчить перенос.
Еще до того, как я присоединился, было решено не переходить на Cryengine 5, поскольку в нем отсутствуют коды для редактора движка World Editor. Дело в том, что в имеющуюся версию (3.8) уже внесено много важных модификаций, которые необходимо сохранить при переходе. А в Lumberyard есть основательная поддержка облака и при необходимости автоматически расширяющаяся облачная инфраструктура, которая поможет не беспокоиться о наращивании ресурсов при увеличении нагрузки.
Вторая игра представляет собой двумерную онлайновую аркаду. Игра разрабатывается на голом энтузиазме, вроде Game Jam. В качестве движка будем юзать мною горячо любимый Torque 2D. Выбор на него пал во многом благодаря тому, что у него есть мощная сетевая подсистема, о чем я неоднократно говорил.