iOS Makes Me Hate
3.94K subscribers
1.16K photos
167 videos
15 files
1.34K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Forwarded from Креатив со звездочкой
СМИ бьют тревогу: джуны отбирают хлеб у опытных айтишников
😁15😐5😢2👍1
Будет ли гонка?
🤫 Ответ на опрос выше:

🟢 Как происходит гонка, если мы заблокировали мутацию lock'ом?

Для типов значений, изменяющих функции, self неявно передается функции в качестве параметра inout. И в контексте доступа к памяти в параметрах in-out есть доступ на запись, который автоматически начинается в начале функции и заканчивается, когда функция завершается. Таким образом, в приведенном примере, даже если мы не изменяем наш массив внутри функции, существует долгосрочный доступ на запись для всего выполнения метода.

ℹ️ Из документации Apple (раздел Conflicting Access to In-Out Parameters):

A function has long-term write access to all of its in-out parameters. The write access for an in-out parameter starts after all of the non-in-out parameters have been evaluated and lasts for the entire duration of that function call. If there are multiple in-out parameters, the write accesses start in the same order as the parameters appear.

Получается, что гонка происходит, когда мы вызываем node.clearChilds() в первой очереди, начиная доступ на запись для self, который также является node, и после этого снова пытаемся использовать node.clearChilds() во второй, начиная другой доступ на запись на node, а также пытаясь прочитать self в self.childs.isEmpty.

Решение: Если мы знаем, что доступ на запись начинается с мутирующих функций, нам нужно залочить метод вместе с его объектом

Полный разбор в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Способы сериализации данных в iOS

🟡 lvl: mid

Сериализация — процесс перевода данных в битовую последовательность. Сериализация используется для передачи объектов по сети и для сохранения их в файлы.

В iOS самые популярные способы:
- NSCoding (NSKeyedArchiver)
- JSON
- Plist
- Codable

JSON — самый быстрый, а NSKeyedArchiver самый медленный.

В статье ниже можно ознакомиться с чего начиналось кодирование и почему Codable пока лучшее, что имеем

- Сериализация в iOS
👍8
Недавно меня спросили: "а как решать литкод? с чего вообще начинать?".

Честно, хер его знает. Особой страты у меня пока нет. Я беру грокаем алгоритмы -> читаю главу -> решаю по этой теме пару тасок.

Но вот наткнулся на рекомендации изучения тем новичкам.
🔥15
Очень актуальная вещь с первым синдромом. Как там пословица индейцев? Лошадь сдохла - слезь?
Эффект IKEA

Исследование 2011 года показало, что люди, которые сами собрали мебель из IKEA, считают ее выгодным вложением на 63% чаще, чем те, кто просто приценивается к аналогичной собранной кем-то еще мебели. Привязанность к предмету тоже значительно повышается для тех, кто своими руками его собирает.

Этот эффект объясняет два других часто встречающихся в разработке синдрома:

💦Sunk costs effect – продолжение инвестиций в проект, который уже очевидно не выгорел, только потому, что в него уже многое было вложено раньше
🤷🏻‍♂️Not invented here syndrom – отказ от идей и технологий, разработанных где-то или кем-то еще только потому, что это не in-house разработка
Че по тестам?

Учимся тестить пуши. Как мне кажется очень полезная практика покрывать пуши и диплинки юнит тестами. Частая проблема, когда хер пойми сколько пушей и диплинков у вас в приложении. Иногда уходили месяцы на их актуализацию. Покрывать их тестами приведет к экономии и времени, и денег

https://medium.com/testableapple/testing-push-notifications-within-xctest-75f719ab0494
👍51💯1
Уехать — это как написать юнит тест. Вроде и не нужно, но безопасней
👍22😁6🤔3😢3
Качество как функция системы его обеспечения

Качество продукта зависит не столько от скиллов разработчиков, сколько от системного подхода к его обеспечению. Группа супер-крутых разработчиков, работающих без оглядки на качество, скорее всего произведет продукт хуже, чем группа средненьких мидлов, работающих в системе, построенной с целью производить качественный результат.

К характеристикам такой системы обеспечения качества относится:

🐞Культура и инфраструктура, поощряющие написание тестов и дающие на это время
💻Надежные и простые в использовании dev/test окружения
☮️Отсутствие давления на команду, заставляющего релизить недостаточно протестированный код
📝Наличие документации и выделяемое на нее время
💬Регулярный разбор факапов с исправлением их корневых причин, без попыток блеймить кого-то
👍5
Похвастаюсь своей первой ачивкой в авито

Приятно получать такие награды в такое напряженное время. Поблагодарите своих коллег. Сильно повышает моральный дух.

А я благодарю всех вас. Хэйтеров и фанов и тех, кто подписался и даже не читает
👍33❤‍🔥5🔥4🎉4
Memory Unsafety in Apple's Operating Systems

🟡 lvl: mid+

Большая часть ошибок и уязвимостей ОС эйпл связана с небезопастным использованием памяти

Языки, как C и C++ небезопасны для памяти. Использование неинициализированной памяти, двойное освобождение, переполнение буфера, использование после освобождения и т. д. Программист должен идеально выделять, записывать, читать и освобождать память или иначе легко могут возникнуть серьезные уязвимости.

Казалось бы, Memory Safe языки должны помочь нам и сделать работу с памятью лучше. В погоне за скоростью авторы Swift забывают о крайне важной вещью — безопасной память.

👾 Для сравнения в iOS 12 было исправлено 261 из которых 173 были связаны с небезопасностью памяти. А в macOS Mojave исправлено 298 из которых 213.

Также автор ругает Swift за его попытку в безопасность, но при этом сильное снижение скорости, в отличие от других практик

- Основная статья
- Работа современных языков с Memory Safety
👍3
С учетом последних ситуаций считаю необходимым сделать этот канал также и средством помощи. В том виде, в котором можно.

1️⃣ Если вас или ваших друзей итшников взяли призвали — пишите. Только факты и прочеканные вещи
2️⃣ Будем делиться советами. Долг долгом, но от ошибок необученных или непорядочных людей в призывных пунктах никто не застрахован 
3️⃣ Будет много шокирующих новостей. Нужно быть готовым. Учиться не отключать мозг и не травмировать себя думскроллингом. Здесь будут методички, курсы или литература как справляться с текущим давлением и не делать необдуманные поступки 

Я твердо убежден, что позиция "моя хата скраю Еревана" сейчас проигрышная. Нужно объединиться и снизить градус паники, который пожирает всех изнутри ежедневно

Наше молчание будет спонсировать беспредел
👍27❤‍🔥6💯32
Плюс еще пост любви к авито.

Помимо совместимости ценностей с самой компанией я еще попал в крутую команду.

Нам дали право выбрать нэйминг, когда сильно выросли и понадобилось разделиться.

Выбрали название Lions. И его предложил не я.

Сегодня пришел прикольный мерч
👍7😐2