Архив недели
Понедельник
Привет, Твиттер! Я Андрей, iOS инжир с большим багажом и всё такое. Не скажу, что я у тебя первый, поэтому могу повторяться по темам. Но, думаю, что новую и интересную информацию ты увидишь. Поехали!
Mon: Знакомство. Немного о себе и своём же опыте;
Tue: Код. Мои практики, подходы и костыли;
Wed: Работа. Собес, команда, процессы;
Thu: VK и Telegram. Где стена? Код – Джон Фёдор;
Fri: Публичная активность. Говорим не только с кодом;
Weekend: Иду к реке с (не)случайными мыслями.
Да, я еще не сплю, а не уже, поэтому мой понедельник начнется чуть позже
Если я правильно помню формат Твиттера, когда я был активным в 2011, то вот: я проснулся ради вас пораньше и иду наливать кофу, скоро начну текстогенерацию
Бтв, сколько кружек в день выпиваете? Я в офисе, бывало, выпивал по 5-10 почти нонстоп
Я тоже стал переживать о здоровье, да и дома пить кофе дороже, чем в офисе, поэтому пью 1 кружку в день
Есть много примеров, когда менеджер, дизайнер или пивовар в один момент решают начать программировать и добиваются нужных результатов
Так вот, это не я. Лет в 15 решил заниматься IT, работал в ремонте телефонов и попутно прошивал / анлочил первые модели айфонов
Увидев впервые вот эту красоту на прилавке, когда все ноутбуки вокруг были черными здоровыми коробками, я заработал на 13шку и счастливый гонял в Дальнобойщиков и GTA: SA на уроках
К моменту поступления в универ у меня был минимальный комплект разработчика, и я начал трогать XCode во всех местах по имеющимся на то время учебникам по C/C++, Obj-C, iOS
Вот и засел я в универе за разработку и рейтинг в Доке 2. Со вторым пошло не очень, поэтому сконцентрировался на первом
После изучения основ языка и UI, стал читать почти всегда cookbook’и. Кто не в курсе, это (кто бы мог подумать) книга рецептов с различными задачами и их решениями
Типичные примеры – сделать контрол в виде колеса из iPod, UIGestureRecognizer, распознающий окружность, Paint на минималках
Эти книги заменяли мне старших разработчиков, а также учили гуглить и решать проблемы самому. После задания всегда было решение, очень подробно объясняющее механизмы решения
В этом моменте отвлекусь и посоветую начинающим разработчикам не стесняться смотреть решение задачи, а также его переписывать (не копировать!). Постепенно основные принципы станут понятнее и сможете решать сами. Гугл выручает
Для меня было страшно искать работу в то время. Я считал, что ничего не умею, хотя через пару лет имел в портфолио несколько различных приложений и игр, свободно себя чувствовал с iOS. Не будь как я, ищи работу / стажировку!
Бтв, пока учился, все курсовые выполнял в рамках iOS. Алгоритмы? Пишу на Obj-C. БД? Использую CoreData в небольшом приложении. Системное программирование? Ок, сервер будет на C, а на клиентом служит игра для Mac
В итоге я все-таки выставил резюме на hh, на следующее утро получил первое предложение, а на собесе мне показали экраны приложения и спросили: "Можешь?". Я ответил: "Могу", и так начались мои приключения в продакшне
На первой работе занимался приложением для iPad, и важной его частью было чтение и редактирование PDF файлов. Долго не думая, сделал клон iBooks, добавил функционала типа рисования поверх страниц или их перестановки / удаления
В итоге убил двух зайцев сразу: выполнил работу и сдал библиотеку по работе с PDF как диплом, так как в опенсорсе на тот момент еще ничего подобного не было: github.com/Moonko/MNKPDFE…
Сам зашел посмотреть на код. Скобочки, фреймы, KVO, NSEnum. Как говорят знатоки, Obj-C, ты не просто стар, ты супер стар!
Как бы это и есть назначение этих учебных пособий, не? И их юзают и старшие, и ведущие, когда надо. Старший != ментор twitter.com/mobileunderhoo…
twitter.com/anioutkajarkov…
Тут вижу 3 момента:
Тогда не было чатиков в телеграме или регулярных встреч разрабов, книги были почти единственным источником хорошей информации для меня
Под заменой я имел в виду выдачу задания и объяснение решения, в чем может помогать ментор
Сейчас не использую книги для нахождения решения. Хватает документации и примеров на сайте эппла. Редкое исключение из правил: по AVFoundation довольно мало доки / статей, пришлось заказывать книгу с Амазона
Возвращаясь к истории: далее, как и у многих, последовал аутсорс, где я освоился довольно быстро и попробовал себя в разных направлениях от клонов социальных сетей до AR
В аутсорсе окзалось довольно тяжело расти вверх, так как там важно закрыть проект поскорее, и ценится знание разных технологий, а я на тот момент хотел прокачаться в iOS. В общем, критерий оценки задачи "довольный заказчик" надоел, и я ушел к одному из клиентов в продукт
Около 2 лет делал систему приложений для финансовой компании, получилось сделать расширяемую архитектуру для создания различных видов приложений (но об этом завтра), запилить клона HotOption и дослужиться до хедофмобил
В один прекрасный день вышел подышать свежим воздухом (в городе, ага), и, утрируя, обратно в офис уже не зашел. Уволился в никуда (?)
@mobileunderhood Вот так интрига! Как в сериалах :) Жду второй сезон
twitter.com/askarsyzdykov/…
На самом деле, начался рабочий день, пока перерыв. Небольшой клиффхенгер (у меня был в тот момент)
Ушел я в никуда, но получил приглашение на собес от ВК на следующий день после написания заявления, так как ребята давно звали туда, но я отказывался. Хотел завершить свои цели как хедофмобил, но об этом поговорим подробнее на неделе
В течение работы в ВК принял участие в контесте Телеграма и занял призовые места в 1 и 2 этапах, затем победил в финале. Немного познакомился с кодовой базой ТГ, поделюсь подробностями участия и наблюдениями в четверг
Из ВК либо в стартап, либо в Телеграм. Я оказался в стартапе, затем в другом, а потом снова...
В итоге сейчас работаю с калифорнийским стартапом и "немного" перешел жить на PT time
Со-админю питерский PeerLab, так что забегайте на встречи, если еще не были. t.me/spbpeerlab
Также веду индивидуальные занятия по iOS для разработчиков с опытом. С учениками разбираем их код, обсуждаем новые темы, проводим интервью
По теме на сегодня все, если есть вопросы, задавайте! А завтра продолжу заметками о своих подходах к разработке
Вторник
Когда проснулся в 15, еще и кокосовое молоко для кофе кончилось, а за смузи идти лень
@mobileunderhood название книги бы, может быть интересно)
@mobileunderhood Насколько это реально, и какие временны́е затраты на это нужны?
Все оооочень индивидуально. Сейчас есть подходящие ресурсы, менторские программы и т.д. Я думаю, что при сильном желании за ~полгода можно научиться делать базовые вещи и начинать искать стажировку.
P.S. Про пивовара не шутка
twitter.com/SantaMezenka/s…
Из моих знакомых в разработке довольно много людей не имеют профильного образования в IT, при этом они – крутые специалисты
Давайте посмотрим, сколько из нас имеют вышку в IT сфере (от бакалавра/специалиста) и работают/работали разработчиком
Начнем тему дня с простого. Я явно не пишу self. при обращении к переменным или методам экземпляра, за исключением инициализатора, где имена параметров совпадают с именами переменных.
Небольшой пример:
Является ли в случае выше замыкание escaping или нет?
@mobileunderhood Зависит от реализации ф-ии fetchData. Если escaping, то параметр замыкания помечен как escaping🙂
Правильный ответ – "Не знаю". Имеем 3 строки кода, которые разбили прочитавших их людей на три лагеря. После этого твита 3 вариант уже начинает набирать обороты
twitter.com/kazai_mazai/st…
Привыкли писать везде self – можете на автомате написать его в замыкании и получить цикл
Тот же вариант без self.
Не использую unowned модификатор, вообще. Всегда weak. Гарантировать срок жизни объекта? Нет, спасибо, я не голодный. Выйгрыша от этого никакого не вижу. Напишите, если когда-то unowned нужно использовать, а я это не понимаю
Примерно по тем же причинам неясности не люблю guard let self = self, особенно если пишут стену текста в замыкании. Не хочу искать эту строчку, чтобы понимать, объявлен ли локальный self. Хочу strongSelf. или self?, сразу все ясно
Уже видно, что почти половина читателей без профильной вышки, так что не останавливайтесь перед тем фактом, что у вас нет нужного образования, дерзайте! 💪
@mobileunderhood weak это runtime оверхед за счет того что значение берется не напрямую, а из таблицы ссылок, плюс weak это тред сейф фича - вероятно тот же лок, что и у рефкаунтера
Это все хорошо, но мне от понимания принципа работы в данном случае ни холодно ни жарко. Лучше сохраню гибкость в отношении срока жизни
twitter.com/mood_tuna/stat…
Раз говорим про замыкания, ловите небольшую задачку. В каких случаях получим утечку? Опроса с мультивыбором я тут не вижу, так что отвечайте для себя или в коментах
@mobileunderhood Кажется она в 99% случаев будет первой идти, зачем искать
Можно написать HomeVC, titleLbl и тоже все будет понятно, и можно посмотреть, но я люблю полные и точные названия, в том числе и guard let strongSelf = self
twitter.com/complexityclas…
В коментах напомнили про тесты. Я никогда не писал их в продакшне и до сих пор жив
А что таким принято хвалиться???) twitter.com/mobileunderhoo…
А не писать тесты это плохо? Или хорошо? Или плохо писать плохие тесты?
twitter.com/devundefined1/…
@mobileunderhood «О, тут у нас никогда не может быть nil. Что же здесь использовать? Ах да, мы же решили всегда использовать weak.» — я, каждый день.
Безусловно, так может быть. Можешь привести пример?
twitter.com/imgnta/status/…
@mobileunderhood Зачем писать тесты, когда можно просто сразу писать без багов?
Вот именно!
twitter.com/PavelPotapkin/…
Да, я слышал много раз "не писать тесты плохо" и "писать тесты хорошо", но пока не столкнулся с такой необходимостью в реальной жизни
Маленькая компания? Вряд ли дадут время на тесты. Большая – ваш отряд тестировщиков действительно поверит вашей фразе "там все покрыто тестами" и не проверит все ещё несколько раз?
@mobileunderhood Могу. А вы?) Тут кстати отличное объяснение docs.swift.org/swift-book/Lan… на примере кредитных карточек и кастомеров. То есть всегда, когда у объекта один оунер, например, но у них должна быть ссылка друг на друга. И замыканий это тоже касается.
Отличный пример!
twitter.com/imgnta/status/…
Ну всё, теперь после объяснений я понял, что тесты нужны, иначе в будущем будет плохо
@mobileunderhood Подожди, но если ты их никогда не писал, ты не можешь сравнить, на сколько с ними лучше чем без них. Никогда не думал, что ты обрекаешь себя на мучения и даже не подозреваешь об этом?)
Я понимаю, что с ними скорее всего будет лучше, просто мне это не нужно и я не испытываю каких-либо мучений по этому поводу
twitter.com/tygeddar/statu…
Хотел дальше написать, что не знаю, что такое VIPER, но после реакции на тесты стало обидно, и придется снова постить что-нибудь про код
Пока еще не все спят, как верстаем?
@PavelPotapkin @mobileunderhood у меня был коллега, который не умел пользоваться дебагером. На мой вопрос "как так?", он сказал "я сразу пишу все правильно". Коллеге 40+ лет, опыта в IT > 20 лет. О тестах речи конечно тоже не шло
Принты – лучший дебаггер. А в OpenGL окно красным закрашиваю
twitter.com/maxxkazakov/st…
Ух, 2/3 в коде верстают, красота
@mobileunderhood Все говорят как важны тесты, но честно говоря во многих компаниях их нет либо они устаревшие или на худой конец их количество предельно маленькое. Все конечно пытаются, надеюсь, но множество просто не тратят на это время. Я против такого, но это правда и ничего тут не сделаешь.
На UI долго останавливаться не буду: сейчас для большинства случаев вам хватит AL, и в своих проектах я использую SnapKit, изредка переходя на фреймы, где это удобно
Если AL мало, можно воспользоваться альтернативными системами лейаута. Вот мой старый разбор основных варинтов на тот момент: youtube.com/watch?v=8DmckS…
Среда
Как я упомянул ранее, VIPER, YARCH, PIDOR и тд я никогда не использовал, так как не нужно было делать строгие контракты на большую команду
Даже в ВК, где было 20-30 разработчиков, используют MVC, хотя и с довольно интересной и сложной моделью
C 0 проекты предпочитаю начинаю с MVC / MVVM, но все равно зависит от требований к продукту – сроки, бюджет, кол-во людей в команде и т.д.
Для сложной навигации использую координаторы. Очень помогают при переиспользовании и изменении цепочек экранов не только в одном приложении, но и в нескольких
Пример по координатору + Swinject есть у меня: github.com/Moonko/Coordin… (видео, к сожалению, не записали), также очень рекомендую погуглить статьи / доклады Андрея Панова
@mobileunderhood Работал там где тесты писали и работал там где не писали. Компании работают и зарабатывают так что хз что сказать. Работал даже там где не было тестировщиков, возможно был самый незабагованный прод и ответственное отношение к выкатке новых версий
Оказывается, не только я могу жить без тестов!
twitter.com/punknavsegda/s…
Судя по кол-ву советов, что тесты помогают жить, уточню: я понимаю, что это такое, писал их и буду писать, если это понадобится, но не делал это в компаниях для iOS. Уважаю тесты на бекенде, про Андроид не в курсе. Это не совет отказаться, а мой опыт
Обновился до 14.2, а Хкода нету
В течение последних лет я стал один из тех, кто в первую очередь тащит в новый проект RxSwift и почти весь его багаж
В большинстве случаев Rx касается только ViewModel, в которой находится бизнес-логика, да и биндинги в контроллере. Модель стараюсь писать императивно, выставляя наружу Rx-обертку, если нужно
Выглядит это примерно как у blablacar: medium.com/blablacar/rxsw…
Отчасти из-за этого я редко вижу self в коде, так как этот подход подразумевает чистые функции. Вьюмоделька имеет 1 метод – init, в который передаются все необходимые зависимости, а их сигналы обрабатываются и отдаются наружу
С совокупной MVVM-архитектурой на RxSwift, координаторами, работой с зависимостями через Swinject как в примере, занял 3 место на конкурсе архитектур FunCorp в прошлом году. Нареканий по коду не получил. Выше ребята, которые сделали больше фич
Шарить проект, к сожалению, не могу. Но, если зайдете на кофе на пирлаб, с радостью покажу/расскажу
Баланс растительного молока восстановлен, теперь после завтрака, безглютенового конечно же, можно снова писать, что я не умею или не знаю
Вчера не успел толком потвитить про код, поэтому буду иногда делать небольшие вставки про него
@mobileunderhood Координаторы самописные или RxFlow какой-нибудь? Я сейчас тоже перехожу на координаторы интересно про это поподробней
За основу взята реализация от Андрея Панова, от меня были добавлены контейнеры из Swinject для удобной работы с зависимостями в каждой цепочке экранов
twitter.com/wolfram_pro/st…
Грубо говоря, каждый экран и координатор имеет фабрику. Если какой-то объект-сервис должен существовать на протяжении всей навигации в ответственности координатора – зависимость будет создана на его уровне
Особенно удобно для разделения на закрытую / открытую части приложения. Как только пользователь получает токен, инициализируется координатор закрытой части и, соответственно, все сервисы для работы с пользователем и его данными
При логауте такие зависимости автоматически уничтожаются, то есть нет необходимости помнить об этом и вызывать кучу cleanUp()
Сидишь себе спокойно, приходит уведомление вида "на ваш твит "иди сюда ты решил ко мне лезть я тебя сам.." ответили". Охреневаешь, через пару секунд доходит, что это писал другой автор
Пока мне нужно поработать, ловите задачку на перерыв. Что будет выведено в консоли?
А это для тех, кому слишком легко
Все индивидуально, мне гораздо комфортнее на черном читать, и как только появляется возможность, перевожу на темную тему. Еще пользуюсь очками Xiaomi Roidmi b1, гораздо легче глазам под конец дня
twitter.com/KovaLE707/stat…
@mobileunderhood Ого! Расскажи пожалуйста про опыт использования компьютерных очков
Использую постоянно за компом. Меньше пропускают синий цвет, уменьшают блики. Также беру в долгую дорогу за рулём, особенно ночью. Конструкция модульная, то есть дужки и крепление на нос заменяются, а при падении просто отваливаются, и очки остаются целые
twitter.com/ilyabiltuev/st…
Около 2 лет назад начал проводить собеседования. Первые несколько раз было довольно стрессово, поэтому я подготовил листочек с планом и боялся от него отойти. Мало ли, запутаюсь!
В зависимости от позиции претендующего, план включал в себя одну из задач на логику/алгоритмы, вопросы по Swift и Obj-C, архитектуру, основные понятия из UIKit и т.д.
Но ответы на вопросы из листочка не давали мне понимания, будет ли комфортно работать с этим человеком, насколько он адекватен и способен продуктивно решать ежедневные задачи, работая в команде
Тогда я изменил формат: вместе с собеседником мы решаем несколько небольших реальных задач, которые могут встретиться нам в работе, например сихронизировать данные между экранами, реализовать интересный интерфейс или придумать решение для архитектурной задачи
Главный вопрос, который задаю себе перед проводимым мной собеседованием – будет ли мне самому интересно его проходить, решать задачу, общаться?
Важным в процессе собеседования считаю именно дружелюбное общение, схожее с тем, что будет в каждодневных процессах. Ожидаю от кандидата живое общение и вопросы, комментарии, предложения
Не зацикливайтесь на своих ошибках во время интервью, они бывают у всех, особенно, если вы волнуетесь. Я, например, постоянно волнуюсь, проходя интервью, хотя давно не испытываю трудностей / боязни
Четверг
Во время прохождения интервью я анализирую, как собеседник разговаривает со мной, например, насколько он дружелюбен, пытается ли действительно выяснить, что я знаю, или хочет побыстрее закопать и пойти гребсти дальше
В конце обычно просят задать вопросы о компании. Не пропускайте эту часть, не стесняйтесь спросить все то, то вас волнует. Вряд ли вам супер честно расскажут, как все плохо, но по крайней мере можно посмотреть на реакцию
@mobileunderhood То что язык позволяет такое, точнее компилятор - это плохо. А то что кто то умудряется это использовать - ещё хуже
Мой топ 1
Кофе на банановом молоке готов, сегодня говорим про ВК и Телеграм
В ВК берут олимпиадников по конкурсам?
В Телеграм попадают только через конкурсы?
Когда впервые увидел сайт с вакансиями в Телеграм
В ВК берут олимпиадников по конкурсам?
Нужно было добавить вариант, что теперь в ВК попадают через Мейл
twitter.com/mobileunderhoo…
В ВК берут олимпиадников по конкурсам?
Я тоже долгое время думал, что туда берут по конкурсам, либо очень сложно попасть, но это давно не так. Высылают приглашение на интервью, проходите его, получаете оффер
twitter.com/mobileunderhoo…
2 года назад на iOS было 3 этапа интервью – первичное (минут 30 удаленно), основное (~3 часа с командой и HR) и culture fit с HR
На основном около 1,5 часа разбирали моё резюме и задачи, которые я там указал. Спрашивали по детали реализации, решения и т.д. довольно глубоко. В общем, все, чтобы понять, действительно ли я все это делал
Моё лицо, когда после этого сказали, что начинается техническая часть собеседования
В технической части было довольно мало вопросов вида "чем frame отличается от bounds?", в основном вместе решали задачи для приложения, как я и люблю <3
На самом деле многое зависит от команды, в которую вы хотите попасть. Лента? Готовтесь к вопросам о рендер сервере. Месендежер? Архитектура и функциональщина (@omelics подскажет)
Вне зависимости от команды, могу с уверенностью сказать, что вас будут ждать супер-дупер крутые ребята!
В ВК по-прежнему довольно много кода на Obj-C, хотя из-за разбиения на модули некоторые из них написаны полностью на Свифте, например, сообщения и шаринг
Какого-то умного названия для местной архитектуры я не знаю, ближе всего к MVC с довольно высоким порогом вхождения из-за глубокой иерархии наследования и самописного механизма обработки сайд еффектов и контекстов
Из-за наследования при создании нового экрана вы получаете сразу кучу поведений типа PTR или постраничной загрузки. Но если вам это не нужно, то придется на первых порах долго искать, где это все добро выключается
Ребята из команды Ленты ВК попросили передать, что они лучшие
Когда привык писать effects 🤪
@mobileunderhood Звучит как куча говна
Вот и аналитика подъехала
twitter.com/hex__0x29A/sta…
По процессам для рядового разработчика все было очень просто – есть Jira, двигаешь свою тасочку туда-сюда. Раз в неделю делишься впечатлениями и успехами с командой
Очень понравилось, что у тебя практически свободный график, много вещей основываются на доверии к разработчику. Не успел сделать? Значит ты действительно пытался изо всех сил, но не хватило времени
Как это проверяют? Да никак. Просто ты попадаешь в атмосферу, где каждый хочет добиться крутого результата. Подходишь к дизайнеру – он рад экспериментировать, к менеджеру – в беклог полетит задача на рефакторинг, которая дойдет до спринта
@mobileunderhood Это уже юристам из ВК решать.
Приехали юристы из ВК, будут бить за Свифт. Немного поотбиваюсь и перейду к Телеграму
twitter.com/glitterOfHyad/…
Пятница
В ВК я, кстати, занимался постингом и историями, вот небольшой доклад о добавлении gif'ок и анимированных стикеров в истории: youtube.com/watch?v=ZJ-04d…
Пока все спят: год назад я решил попробовать разработку под Андроид. Скачал студию, создал шаблонный пустой проект. При попытке билда студия падала с ошибкой ядра. Андроид – не моё
@0leGG @mobileunderhood youtu.be/AS3kA_AtRTo Если вы понимаете о чем я
Впервые слышу
twitter.com/ivanksk1/statu…
Точно, обещал про Телеграм
Никто:
Я: обновляюсь на новую ОС через неделю после выхода
Проснулся, а в мак ос теперь все как-то по-гейски. Не скажу, что это минус
В Телеграм попадают только через конкурсы?
В Телеграм же попадают через конкурсы, такова политика Дурова. В ВК его давно нет, поэтому там все изменилось, хотя первые версии мобильных приложений появились тоже через конкурсы
twitter.com/mobileunderhoo…
Если вы все-таки нашли сайт с вакансиями Телеграм, то наверняка заметили, что почти под каждым описанием есть вот такая сноска
Собственно, в одном из таких конкурсов от Телеграм я и принял участие (на iOS конечно же). После него внезапно был еще один для победителей предыдущего, а затем финал
Первые 2 этапа были связаны с отрисовкой графиков с большим количеством данных, а также темной темой. Про мою реализацию можно посмотреть тут: youtube.com/watch?v=xgsG5j…
TL;DR: Графики сделал на OpenGL, чтобы на iPhone 4 работали быстрее системных настроек, темную тему сделал самописную с поддержкой любых свойств и iOS < 12. Исходники: github.com/moonko/racharts
Третий этап оказался самым интересным: нужно было за 9 дней пофиксить как можно больше багов / улучшить производительность / отшлифовать UI/UX в приложении Телеграм
После этого немного моего кода есть в Телеграме, а я покопался в открытом исходном коде и расскажу свои наблюдения. Надеюсь, сегодня времени на это хватит. Публичность пока переезжает на завтра
Пятница, 13, идешь напугать коллегу-iOSника
Первый челендж, с которым придется столкнуться при работе с кодом Телеграма iOS – собрать проект. Открыв заветную папочку, вы не обнаружите там .xcodeproj или Podfile, а Readme устарел
Покопавшись в 192 issues на данный момент, можно найти пару объяснений, какими костылями нужно закрыть параметры, чтобы собрать хотя бы на симулятор. Для сборки на девайс подготовьте провижн профили для приложения и всех его расширений с нужными опциями
Я потратил на сборку на девайс около 8 часов, и это с комментариями разработчика
Пара ссылочек:
docs.bazel.build
buck.build
@mobileunderhood А в чем смысл? Или причины? Ну т.е. это специально так сделано или из-за подхода определённого так сложилось?
Смысл в агрессивном кешировании единожды собранных модулей, проект очень долго билдится
twitter.com/YevgeniyK/stat…
На минимальном маке 16' даже при таком раскладе при изменении 1 строки кода в основном UI модуле билд занимал ~75 секунд
Суббота
@mobileunderhood Интересно. И много желающих тратить время и силы? За вычетом студентов, которым нечего делать)
Суммарный призовой фонд 3 этапов составил в итоге, насколько я помню, около 500000$. Да, участвовали не только студенты и те, кому нечего делать
twitter.com/algridmd/statu…
Почти весь UI сделан с использованием части кода Texture(ASDK) – библиотеки от Facebook, которая позволяет считать фреймы элементов в бекграунде
Огромный плюс такого подхода – у разработчика развязаны руки в работе с UI, можно довольно быстро верстать, не сильно заботясь о производительности довольно сложных интерфейсов
Самый заметный минус для человека, который не особо знаком с кодом – отсутствие имен у UIView в дебаггере. Если вы откроете вью дебаг, то увидите почти везде просто UIView, а не LeftHeaderButton
Это происходит, потому что работа с интерфейсом идет через враппер над UIView – ASNode. Принцип похож на обертку UIView над CALayer, только в данном случае добавляется асинхронный расчет фреймов
Представьте ситуацию: вам дали задачу исправить баг у вьюшки на экране чата в Телеграм. В контроллере 6000 строк, во вью чуть поменьше. В дебаггере все называется UIView и куча элементов. Как найти нужный элемент в коде? Присылаете варианты действий, лучшее ретвитну в этот тред
Да, шутка "уйти" или "перейти на Андроид" будет очень уместной и смешной, обязательно репостну -_-
@mobileunderhood Если проблема в поиске кода самой вьюхи - поставлю symbolic breakpoint на receiveTochEvent или как там его. Ткну на вьюху и посмотрю где остановится. Можно еще if self == адрес вьюхи из дебагера чтобы долго не step ать. Еще как вариант по тексту близ лежащему искать
Если из вью есть ссылка на ее ноду (я не помню уже), то да. По тексту можно, если он не в локализации (а там он в локализации, поэтому бесполезно)
twitter.com/root_domain/st…
@mobileunderhood То есть там тесты как в спортивном программировании? Input/Output? Или смотрят UI?
Никому не интересен твой код, хоть лицом по клавиатуре катайся. Смотрят на приложение – UI / UX, кол-во багов
twitter.com/algridmd/statu…
@mobileunderhood По аксессабилити айдентифаерам?
Как вариант опять же без локализации
twitter.com/danylenkome/st…
@mobileunderhood Даже при локализации можно найти. По идее английский это эталонная строка. То есть если в настройках девайса англ то все найдется. Если интернационализация как-нибудь через enum ы настроена, то так же можно обратным поиском. БОльшая проблема если элементы без текста
Тут извиняюсь, не пояснил. Да, при стандартном способе локализации найти очень просто. Там свой механизм локализации :)
twitter.com/root_domain/st…
Допустим, вы получили .xcworkspace файл, открываем файлики с чатом
(пришлось уменьшить шрифт, чтобы все влезло)
Продолжать не буду, смысл понятен. Думаю, что все, что не любят принципалы-архитекторы, можно отыскать. Большинство на этом моменте просто плюнет, рассказав друзьям, какой плохой код. Но мы ведь не такие, прорвемся
@mobileunderhood А реактивщина там вообще есть?
Да, самописный!
twitter.com/ufa_iskhakov/s…
Действительно ли все плохо или это люди не готовы?
@mobileunderhood Ну... Он заканчивается пустой строкой, а это уже не плохо
Воскресенье
Суммарно я провёл с кодом Телеграма около месяца. Спустя неделю начал свободно ориентироваться в коде чата, каких-то серьезных проблем с чтением кода не испытал. Да, много строчек, ну и что?
Когда начинаешь разбираться в сути происходящего, видишь, что код написан человеком, который очень хорошо понимает, как изнутри устроен iOS. Код написан под 1-2 человек, а больше им и не нужно
Да, ты не посмотришь на идеальную архитектуру или устройство проекта. Но при этом можно увидеть технические решения довольно интересных задач, в том числе и костыли для обхода системных багов
Я не адвокат Телеграма, но суть в том, что это не наше дело, насколько «плохо» написан код и есть ли там тесты. Мы не смотрим на него в повседневной жизни, а пользуемся его результатом
Кратко по поводу публичности: очень рекомендую начать общаться не только со своими коллегами, если вы ещё этого не делаете. Под общением я подразумеваю любой доступный формат – разговор, переписка, статья, доклад, менторство и т.д.
В первую очередь, это полезно вам, а потом уже собеседнику (аудитории). Вы учитесь формулировать и выражать свои мысли, узнаете привычные вещи с новых сторон. В чём ценность ваших знаний, если вы можете их воспроизвести только как заученные фразы?
Я стеснялся выступать на публику, потому что было страшно ошибиться, показаться глупым. Одно дело – вершить правосудие в интернете, скрываясь за аниме-аватаркой, а другое – облажаться перед аудиторией
idc. Постепенно дошло, что любой опыт важен, а мои рассказанные неудачи могут помочь кому-то не наступить на те же грабли. Мне не страшно не знать чего-то, пока я могу это признать и сделать выводы
Точно так же в обратную сторону. Если вы выступаете в роли аудитории, не бойтесь указать на ошибку или задать вопрос, даже если кажется, что ваши слова прозвучат очень глупо
Универ. Препод рассказывает про пределы. Ты моргаешь, на доске дикая дичь. Все переглядываются, но никто не поднимает руку спросить, и ты не будешь. Все поняли, а ты нет, дурачок. Ты лучше просидишь оставшийся час пары в телефоне, ведь там никто не подумает, что ты тупой!
Через минуту ботан на 1 парте останавливает препода с вопросом. Иван Иваныч замирает на секунду, задумывается и выдает: "Ой, а я ошибся, перескочил через страницу, чего вы молчите?". И ты молча благодарен, ведь иначе пара прошла бы зря, верно?
Далеко не все успел рассказать, в частности про поход к реке, но время подходит к концу, я уже тыква. С субботы спал полчаса, нужно бы режим вернуть