@shitty_android Contest - AppsConf'19
@alexey_mileevВ объявлении о конкурсе я ставил ограничение в 1024 символа с пробелами, но здесь просто не смог не пойти на уступку. Думаю, прочитав, ты со мной согласишься. Человек сначала прислал крутой текст, ясно понимая, что в лимит он не проходит. Потом напрягся и прислал укороченную версию, которая занимает ровно (!) 1024 символа, но без пробелов. Но текст настолько крут, что я просто не могу не отдать билет ему.
Итак, победил @frank_fontaine со следующим текстом (а в конце поста ты найдёшь полную версию):
— Честно? Любой придурок сможет переписывать уже существующие решения, но под соусом Android X. Я хотел, чтобы вы преодолели пределы ожидаемого, иначе мы лишим мир нового Дениса Неклюдова. Я же рассказывал тебе, как Денис Неклюдов стал Денисом Неклюдовым?
— Артем Зиннатуллин швырнул в него module-per-feature.
— Точно. Денис неплохо шарит в алгоритмах и пишет обертки, вот он уже подрос и пишет весь код в Activity. Зиннатуллин чуть ли не обезглавил его за это. Под смех всего Android-коммьюнити Сингапура. Денис всю ночь проплакал, но уже на утро что он делает? Разбивает на модули. И разбивает на модули, и разбивает на модули. Вот он в Lyft, садится за компьютер и выдает самое охренительное количество модулей, о котором только слышали. А представь, что Артем сказал бы: «Сойдет, Ден, подумаешь, собирается за 17 минут, зато AppsConf обсудим!» Тогда Денис подумал бы: «Да я же норм юзаю ConstraintLayout. И миру сейчас нужно именно это. Неудивительно, что Android разработка умирает. Я вот думаю, что в языке слова вреднее, чем... «сойдет».
— А где же грань? Может, вы перестараетесь, и тогда новый Неклюдов остановится разбивать на модули?
— Нет, что ты, нет. Настоящий Денис Неклюдов никогда не остановится.
Другие крутые работы
@ConstOrVar прошёлся по стихам:
Скажи-ка, Google, ведь не даром
Создание android программ
Сопровождается борьбой с системой
На протяжении десятка лет?!
Вы предоставили 4 компонента,
Но создавать их запретили нам.
С тех пор никак снаружи не послать
Зависимости, что нужны объекту.
А вместе с тем во время кувыркания
Решили Вы экран пересоздать —
Потомки до сих пор пытаются понять
За что так хладнокровно и без сожаления
Activity готовы раз за разом убивать.
Пришла пора ужесточить контроль,
Чтоб экономить батарею и ресурсы —
И вот познали мы смирение и покой,
Пытаясь запустить задачу из храпящего смартфона.
Запреты без альтернативы,
Вопросы без ответов — сколько уже лет?!
Единолично все решения принимая
Под лозунгом «забочусь о тебе»,
Дальнейший план ты нам не раскрываешь.
Возможно, его просто нет...
@punksta зашёл с oneline-рами (однострочниками?):
Я долго думал, что дизайна хуже, чем у acticity lifecycle быть не может, пока не увидел 2 camera api.
У андроида как у России - свой уникальный путь, и уважение к наследнию предков.
Architecture components - импортозамещение
@Dryupa любит RxJava:
Люблю RxJava. Люблю Subject-ы. Люблю RxBinding. Люблю RxRelay. Люблю реактивность. Люблю огромные цепочки неизвестных операторов. Люблю людей, которые открывают код, написанный Rx-гениями, которые используют его везде и всюду и тупят в него на протяжении дня.(я)(не Rx-гений). Люблю, когда дебаггер не заходит в многочисленные лямбды. На вопрос почему я это все люблю - я отвечаю: потому что я видел колбеки...
@ymolodtsova любит Звёздные Войны (представьте, что текст бежит в стиле их открывающих титров):
AsyncTask. Эпизод 1. Тайная угроза
Давным давно в Андроид галактике,
был
предложен один из механизмов выполнения кода
в отдельном потоке
с возможностью передать результат в основной поток.
Но не спасла его простота исполнения,
Хоть и с благими намерияниями, но коварен он оказался.
Не со зла пришлось ему встал на темную сторону,
его темные наклонности укрепляли неумелые разработчики.
Не понимая тонкостей работы механизма,
создавали они ситуации когда у него
не оставалось выбора, кроме как захватить память.
Его война окончена, на замену пришли новые герои.
@angmarr закопал ConstraintLayout:
Трудно представить более убогую и одновременно переоцененную вещь, чем ConstrainLayout (CL).
Давайте пройдемся по проблемам:
- Сложность модификации UI - попробуйте поменять местами элементы, как в LinearLayout
- CL форсит "плоскость" и мешает разбиению большого UI на include
- Забудьте про код-ревью - это просто нагромождение текста, без структуры. Человек не способен строить констрейты в голове
Превьювер: куда же без него:
- Он тваливается, тормозит, у него течет память
- Натыканный в нем UI генерирует лишние атрибуты
- Его конвертор в CL, просто ломает семантику вложенных LL
@npopov любит Dagger:
Вспомни момент, когда твоему приложению понадобился DI. Недолго думая ты выбрал даггер. Он популярный, сделан гуглом, к нему приложил руку и благословил Jake Wharton. Даже на собесе эйчарка спрашивала тебя: "Молодой человек, а вы точно знаете даггер?" Все идеально, надо вкатываться.
Ты начинаешь читать доку даггера, ничего не понимаешь, закрываешь через 15 минут. Прочитал все статьи на хабре и от индусов на медиуме. В каждой статье даггер готовят по разному и логики никто не объясняет. Начинаешь делать пет проджект, разбираться, собираешь кучу подводных камней, пытаешься понять работу скоупов, ничего красивого не получается, приходит стадия отчаяния.
Ты начинаешь сопротивляться: "Зачем нужен даггер, если можно все делать через Application?" К тебе сразу подлетает тимлид , прописывает с вертухи и кричит: "ЭТО НЕ DI". Но потом помогает разобраться, передает тайные знания из уст в уста. Теперь ты пишешь используя даггер и довольно урчишь.
До сих пор полноценно не понимаешь как это все работает.
Я люблю даггер
Ну и небольшой бонус
Полная версия текста @frank_fontaine:
— Честно? Думаю, ни до кого не дошло, что я пытался сделать в Маунтин-Вью. Я там не создавал фреймворки. Любой придурок может делать обертки над обертками, абстракции над абстракциями и переписывать уже существующие решения, но под соусом AndroidX. Я хотел, чтобы вы преодолели пределы ожидаемого. Я думаю, что это абсолютно необходимо. Иначе мы лишим мир нового Джейка Вортона, нового Дениса Неклюдова. Я же рассказывал тебе, как Денис Неклюдов стал Денисом Неклюдовым?
— Артем Зиннатуллин швырнул в него module-per-feature.
— Точно. Денис-юнец неплохо шарит в алгоритмах и пишет обертки, вот он вливается в 90secondsи пишет весь код в Activity. Зиннатуллин чуть ли не обезглавил его за это. Под смех всего Android-коммьюнити Сингапура. Неклюдов всю ночь проплакал, но уже на утро что он делает? Разбивает на модули. И разбивает на модули, и разбивает на модули. Думая только об одном: над ним больше не будут смеяться. Через год он в Lyft, снова садится за компьютер и выдает самое охренительное количество модулей, о котором только слышал Зиннатуллин. А представь, что Артем сказал бы: «И так сойдет, Ден, подумаешь, собирается за 17 минут, зато с коллегами AppsConfобсудить можно!» Тогда Денис подумал бы: «Насрать, я же норм юзаю ConstraintLayoutна любой разметке». И все, конец, нет Птахи. Для меня это величайшая трагедия. Но миру сейчас нужно именно это. Неудивительно, что Android-разработка умирает. Я вот думаю, и с каждым новым коммитом хипстера из «Старбакса» убеждаюсь все больше, что нет в нашем языке слов вреднее и опаснее, чем... «и так сойдет».
— А где же грань? Может, вы перестараетесь, и тогда новый Неклюдов остановится разбивать на модули и не станет Неклюдовым?
— Нет, что ты, нет. Настоящий Денис Неклюдов никогда не остановится.
Дополнение от @angmarr:
Набросы это конечно хорошо, но есть ли что-то взамен?
Далеко ходить не надо, достаточно посмотреть на HTML + Flexbox. Простой и +- читаемый формат описания UI + мощный язык разметки (Flexbox), но есть и минус - это XML.
Лучше дела обстоят в ReactNative, где взяли XML и перенесли его в код (JSX), сделав верстку более гибкой.
Еще дальше пошли в Flutter - там нет JSX препроцессора, тк все верстается в DSL, на обычных Dart классах и функциях.
Если у Android надежда на спасение? Может быть - если кто-то в осилит хороший Kotlin DSL поверх виртуального UI (как в RN), ведь там будет:
Композиция. Разбиение сложного UI на множество простых компонентов.
Легкость выделения абстракций и создания переиспользуемых компонентов
Почему? Да потому что это не ограниченный XML, а just fucking code, с ним доступен весь функционал Kotlin как языка и Android Studio как IDE для рефакторинга.