Хороший разбор про производительность всяких мутексов и других блокировок:
https://swiftrocks.com/thread-safety-in-swift
https://swiftrocks.com/thread-safety-in-swift
Swiftrocks
Thread Safety in Swift
Concurrency is the entry point for the most complicated and bizarre bugs a programmer will ever experience. In this article, I'll share my favorite methods of ensuring thread safety, as well as analyzing the performance of the different mechanisms.
👍4🔥2
Dispatch Group
⚡️ При работе с сетевыми запросами зачастую возникает следущий кейс: программе нужно выполнить сразу несколько запросов и дождаться завершения каждого из них прежде, чем переходить к следующему этапу.
✅ Для таких кейсов поможет Dispatch Group.
Он состоит из четырех основных методов:
1. enter(): вызывая enter, мы сообщаем DispatchGroup, что асинхронная задача началась.
2. leave(): означает, что асинхронная задача завершена.
3. notify(): уведомляет требуемый поток о том, что задачи в группе завершены.
4. wait(): блокирует текущий поток до тех пор, пока все задачи в группе не будут завершены
⚡️ При работе с сетевыми запросами зачастую возникает следущий кейс: программе нужно выполнить сразу несколько запросов и дождаться завершения каждого из них прежде, чем переходить к следующему этапу.
✅ Для таких кейсов поможет Dispatch Group.
Он состоит из четырех основных методов:
1. enter(): вызывая enter, мы сообщаем DispatchGroup, что асинхронная задача началась.
2. leave(): означает, что асинхронная задача завершена.
3. notify(): уведомляет требуемый поток о том, что задачи в группе завершены.
4. wait(): блокирует текущий поток до тех пор, пока все задачи в группе не будут завершены
👍10🔥3
Swift Concurrency
Почти все примеры выше были с GCD. Часы пробили. Делаем разбор на Swift Concurrency
Новая модель concurrency тесно связана с языком. Она абстрагирует такие понятия как потоки. Но ее долгожданная фича – это async/await синтаксис
Подробнее можно познакомиться у покойного ситимобила, но и тут детально все разберем
Почти все примеры выше были с GCD. Часы пробили. Делаем разбор на Swift Concurrency
Новая модель concurrency тесно связана с языком. Она абстрагирует такие понятия как потоки. Но ее долгожданная фича – это async/await синтаксис
Подробнее можно познакомиться у покойного ситимобила, но и тут детально все разберем
👍9🔥1😢1
Ментальные модели для итшника
Программист — это не только технарь. Давно уже нет. Программистом не станешь изучив доку очередного инструмента, или кишки компьютерных наук.
Программист должен обладать особым складом ума. Иметь культуру и повадки, присущие нашей индустрии.
Буду переодически кидать сюда интересные модели, которые, как мне кажется, должны быть в идеальном портрете программиста.
Вы можете с ними не согласиться, что нормально.
https://shopify.engineering/building-mental-models
Программист — это не только технарь. Давно уже нет. Программистом не станешь изучив доку очередного инструмента, или кишки компьютерных наук.
Программист должен обладать особым складом ума. Иметь культуру и повадки, присущие нашей индустрии.
Буду переодически кидать сюда интересные модели, которые, как мне кажется, должны быть в идеальном портрете программиста.
Вы можете с ними не согласиться, что нормально.
https://shopify.engineering/building-mental-models
Shopify
Building Mental Models of Ideas That Don’t Change - Shopify
Developers constantly face information overload. There's always a new programming language, methodology, framework, or platform. How do you make sense of it all? You use mental models to guide you.
👍5
Очень простой сборник. Для новичков идеально. Лучше всегда такое держать под рукой. Иногда рефрешить знания
https://tproger.ru/articles/sobesedovanie-ios-razrabotchika-voprosy-i-zadanija/
https://tproger.ru/articles/sobesedovanie-ios-razrabotchika-voprosy-i-zadanija/
Tproger
Собеседование iOS разработчика: вопросы и задания
Собрали для вас самые часто используемые вопросы и задания, которые дают iOS разработчикам на собеседованиях.
👍11
Хорошая статья по решению проблем читателей писателей с опять же замером производительности всяких мутексов
Как можем заметить NSLock в большинстве кейсах в разы (!) медленнее при записи и при чтении, чем барьер GCD и POSIX тредов
https://dmytro-anokhin.medium.com/concurrency-in-swift-reader-writer-lock-4f255ae73422
Как можем заметить NSLock в большинстве кейсах в разы (!) медленнее при записи и при чтении, чем барьер GCD и POSIX тредов
https://dmytro-anokhin.medium.com/concurrency-in-swift-reader-writer-lock-4f255ae73422
🔥6🤔2
Изменения в структуре
Обычно такой текст пишут когда набирают красивую цифру подписчиков. Благодарят всех, пишут о ценности каждого. Но я напишу сейчас. Посмотрю в гугле какой там сегодня рандомный праздник и скажу, что в честь него. Как алкаш, который ищет повод, чтобы бахнуть очередную.
В сентябре прошлого года этот канал был создан как сборщик материалов. Тогда я был преподом в одной онлайн школе у 10 человек. Потом я написал пару статей и вот нас уже чуть больше 400.
Пора усиляться. Дальнейшие планы такие:
1️⃣ Добавить ранжирование контента на грейды. К каждой записи прекреплять тэг на какой уровень та или иная статья подходит.
2️⃣ Больше авторского контента. Делать библиотекой чужих статей ради вашего внимания и паразитировать на чужой работе особой мотивации нет. Буду выделять крутые статьи, или юзать как вводные, но приоритетней все же мутить свое:
- Разбор известных/инструментов либ и задачи их применения
- Марафоны по темам как с многопоточкой. Возможны сразу несколько марафонов в нескольких потоках (впереди UI и анимации, проектирование и много чего)
3️⃣ Возможно, как нас станет еще чуть больше, то будем делать закрытые чаты и создавать недельные интенсивы с домашним заданием и онлайн проверкой.
4️⃣ Мб в далекой перспективе усиление контентологов и создание какого-то свое микро-комьюнити, где важно качество, а не кол-во
5️⃣ Думаю о редизайне. Пздц конечно говорю будто это сайт и у меня какой-то бренд бук свой, но подумать об удобном формате материала и слоге стоит
С рандомным праздником Вас всех! Ценю, люблю.
Обычно такой текст пишут когда набирают красивую цифру подписчиков. Благодарят всех, пишут о ценности каждого. Но я напишу сейчас. Посмотрю в гугле какой там сегодня рандомный праздник и скажу, что в честь него. Как алкаш, который ищет повод, чтобы бахнуть очередную.
В сентябре прошлого года этот канал был создан как сборщик материалов. Тогда я был преподом в одной онлайн школе у 10 человек. Потом я написал пару статей и вот нас уже чуть больше 400.
Пора усиляться. Дальнейшие планы такие:
1️⃣ Добавить ранжирование контента на грейды. К каждой записи прекреплять тэг на какой уровень та или иная статья подходит.
2️⃣ Больше авторского контента. Делать библиотекой чужих статей ради вашего внимания и паразитировать на чужой работе особой мотивации нет. Буду выделять крутые статьи, или юзать как вводные, но приоритетней все же мутить свое:
- Разбор известных/инструментов либ и задачи их применения
- Марафоны по темам как с многопоточкой. Возможны сразу несколько марафонов в нескольких потоках (впереди UI и анимации, проектирование и много чего)
3️⃣ Возможно, как нас станет еще чуть больше, то будем делать закрытые чаты и создавать недельные интенсивы с домашним заданием и онлайн проверкой.
4️⃣ Мб в далекой перспективе усиление контентологов и создание какого-то свое микро-комьюнити, где важно качество, а не кол-во
5️⃣ Думаю о редизайне. Пздц конечно говорю будто это сайт и у меня какой-то бренд бук свой, но подумать об удобном формате материала и слоге стоит
С рандомным праздником Вас всех! Ценю, люблю.
👍29❤🔥2🔥1
Swift Concurrency Manifest
🟡 lvl: mid+
Отличный материал понять корни Swift Concurrency. С крутыми рефами и разборами проблем. Интересно почитать куда разрабы копали и где искали рефернсы, искали обоснования сложностям новых языковым конструкций.
Виден путь сделать язык не только популярным инструментом для мобильных разработок, но и взять рубежи на серверные проблемы
https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782
#lvl_mid
🟡 lvl: mid+
Отличный материал понять корни Swift Concurrency. С крутыми рефами и разборами проблем. Интересно почитать куда разрабы копали и где искали рефернсы, искали обоснования сложностям новых языковым конструкций.
Виден путь сделать язык не только популярным инструментом для мобильных разработок, но и взять рубежи на серверные проблемы
https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782
#lvl_mid
Gist
Swift Concurrency Manifesto
Swift Concurrency Manifesto. GitHub Gist: instantly share code, notes, and snippets.
❤🔥10
Async/Await
🟢 lvl: jun
Концепция async/await не придумана эйпл. От ассинхронного кода никуда не деться. Мы не можем блокировать главный поток, пока будет ожидать ответа от сервера или других внешних устройств.
С этим драконом борятся давно и в других языках. Эйпл в очередной раз что-то позаимствовала у других. И это что-то очень хорошо работает и облегчает жить.
Её задача упростить работу с асинхронным кодом и уйти от уродской модели колбэков
В XCode есть даже функционал, который помогает нам безболезненно все изменить
Заботливо 👨👨👦
#lvl_jun
🟢 lvl: jun
Концепция async/await не придумана эйпл. От ассинхронного кода никуда не деться. Мы не можем блокировать главный поток, пока будет ожидать ответа от сервера или других внешних устройств.
С этим драконом борятся давно и в других языках. Эйпл в очередной раз что-то позаимствовала у других. И это что-то очень хорошо работает и облегчает жить.
Её задача упростить работу с асинхронным кодом и уйти от уродской модели колбэков
В XCode есть даже функционал, который помогает нам безболезненно все изменить
Заботливо 👨👨👦
#lvl_jun
❤🔥13👍4🔥2
Тесты — это отдельная тема для споров.
В авито прям почти полный отказ от ручного тестирования , где QA специалист занимается в последнюю очередь ручными прогонами. Мб как-нибудь лучше об этом расскажу в марафоне про тестирования. Пока же можете почитать у моего тимлида тут
Считаю мощнейшим инструментом, который:
- Экономит время и деньги на ручное тестирование
- Дополнительно документирует код
- Ускоряют time-to-market
- Вся команда лучше заботится о качества
Вот еще крутейшая статья от @akaDuality
А еще мы ищем хорошего автотестера в нашу команду 💖 Если у вас есть такой, то пишите
В авито прям почти полный отказ от ручного тестирования , где QA специалист занимается в последнюю очередь ручными прогонами. Мб как-нибудь лучше об этом расскажу в марафоне про тестирования. Пока же можете почитать у моего тимлида тут
Считаю мощнейшим инструментом, который:
- Экономит время и деньги на ручное тестирование
- Дополнительно документирует код
- Ускоряют time-to-market
- Вся команда лучше заботится о качества
Вот еще крутейшая статья от @akaDuality
А еще мы ищем хорошего автотестера в нашу команду 💖 Если у вас есть такой, то пишите
❤🔥6🔥2
Actors
🟢 lvl: jun
Акторная модель еще в древней Греции помогала решать проблемы гонки.
Actor’ы — это ссылочные типы, что вкратце означает, что копии ссылаются на один и тот же фрагмент данных. Тем не менее у акторов есть важное отличие от классов: они не поддерживают наследование.
Actor’ы предотвращают гонки данных, создавая синхронизированный доступ к своим изолированным данным
1️⃣ На первом скрине мы бы реализовали свой потокобезопасный класс через барьеры.
2️⃣ На втором так, если бы воспользовались actor’ами
https://www.avanderlee.com/swift/actors/
#lvl_jun
🟢 lvl: jun
Акторная модель еще в древней Греции помогала решать проблемы гонки.
Actor’ы — это ссылочные типы, что вкратце означает, что копии ссылаются на один и тот же фрагмент данных. Тем не менее у акторов есть важное отличие от классов: они не поддерживают наследование.
Actor’ы предотвращают гонки данных, создавая синхронизированный доступ к своим изолированным данным
1️⃣ На первом скрине мы бы реализовали свой потокобезопасный класс через барьеры.
2️⃣ На втором так, если бы воспользовались actor’ами
https://www.avanderlee.com/swift/actors/
#lvl_jun
🐳9👍5
MainActor
🟢 lvl: jun
MainActor — это глобальный актор, который использует main очередь для выполнения своей работы. Раньше нам приходилось DispatchQueue.main.async (1), чтобы обновлять ui. MainActor помогает с помощью компилятора делать это за нас автоматически.
Если же нужно выполнить код на главном акторе, то можно выполнить `MainActor.run` (2)
#lvl_jun
🟢 lvl: jun
MainActor — это глобальный актор, который использует main очередь для выполнения своей работы. Раньше нам приходилось DispatchQueue.main.async (1), чтобы обновлять ui. MainActor помогает с помощью компилятора делать это за нас автоматически.
Если же нужно выполнить код на главном акторе, то можно выполнить `MainActor.run` (2)
#lvl_jun
🐳5👍3🌭1
SwagGen
🟡lvl: mid-
Я большой сторонник адекватной автоматизации. Если есть силы сократить деньги и время на рутинных задачах — только вперед.
Кажется, что создание апи-моделей и описание нетворк слоя одно из самых рутинных и монотоных занятий. Скучнее только локализация на 18 языков ручным вводом из гугл-переводчика
Если ваша апи-документация в сваггере, то отличный повод затащить в проект генератор моделей и запросов. Юзал это на боевых проектах и видел в продуктах магнита
#lvl_mid
🟡lvl: mid-
Я большой сторонник адекватной автоматизации. Если есть силы сократить деньги и время на рутинных задачах — только вперед.
Кажется, что создание апи-моделей и описание нетворк слоя одно из самых рутинных и монотоных занятий. Скучнее только локализация на 18 языков ручным вводом из гугл-переводчика
Если ваша апи-документация в сваггере, то отличный повод затащить в проект генератор моделей и запросов. Юзал это на боевых проектах и видел в продуктах магнита
#lvl_mid
GitHub
GitHub - yonaskolb/SwagGen: OpenAPI/Swagger 3.0 Parser and Swift code generator
OpenAPI/Swagger 3.0 Parser and Swift code generator - yonaskolb/SwagGen
👍7🐳3
Локализации
Поговорим еще о теме автоматизации и о чехах.
Если приложение небольшое, то хватит пару Localizable.strings и ручками можно сидеть переводить в гугл переводчике. Есть история, когда будучи еще джуном и вебером нас заставили сидеть переводить текста в гуглпереводчике на четыре языка. Это было в одном риелторском агенстве
С русского -> на английский -> казахский -> чешский. Настоящее инженерское решение, не так ли?
Мы кстати неплохо так заработали по той сдельной системе, где были не разработчиками, а копипастерами. (отдельная тема вреда таких мотиваций)
Что получилось сложно представить, но легко предположить, как реагировали чехи. Они, мягко говоря, изумленно удивлялись новым придуманным словам, которые никогда раньше не слышали. Через какое-то время чехи перестали быть нашими партнерами
Какой же сценарий сделать норм локализацию? Для больших продуктов тема непростая. Особенно, когда у вас:
— 10-15 языков, которые ручками вы устанете вбивать
— Локали и валюты
— Системы счисления (мб даже другие измерения)
— Лайаут для текста (араб, иероглифы)
Мне кажется, идеальный вариант локализации — это только ключи, с которыми работает программист. например profile_catalog_price. Программист не должен переводить (упаси господь). Переводы должны генерироваться при билде из админки или в крайнем случае из эксель файла. Иначе любой чех перестанет быть вашим другом, locale_name_curva
Ну а здесь подробное руководство.
https://medium.com/codex/localization-workflow-in-ios-9f96b7f4388c
Но а с лайаутами, локалями и валютами надо поресерчить)
Поговорим еще о теме автоматизации и о чехах.
Если приложение небольшое, то хватит пару Localizable.strings и ручками можно сидеть переводить в гугл переводчике. Есть история, когда будучи еще джуном и вебером нас заставили сидеть переводить текста в гуглпереводчике на четыре языка. Это было в одном риелторском агенстве
С русского -> на английский -> казахский -> чешский. Настоящее инженерское решение, не так ли?
Мы кстати неплохо так заработали по той сдельной системе, где были не разработчиками, а копипастерами. (отдельная тема вреда таких мотиваций)
Что получилось сложно представить, но легко предположить, как реагировали чехи. Они, мягко говоря, изумленно удивлялись новым придуманным словам, которые никогда раньше не слышали. Через какое-то время чехи перестали быть нашими партнерами
Какой же сценарий сделать норм локализацию? Для больших продуктов тема непростая. Особенно, когда у вас:
— 10-15 языков, которые ручками вы устанете вбивать
— Локали и валюты
— Системы счисления (мб даже другие измерения)
— Лайаут для текста (араб, иероглифы)
Мне кажется, идеальный вариант локализации — это только ключи, с которыми работает программист. например profile_catalog_price. Программист не должен переводить (упаси господь). Переводы должны генерироваться при билде из админки или в крайнем случае из эксель файла. Иначе любой чех перестанет быть вашим другом, locale_name_curva
Ну а здесь подробное руководство.
https://medium.com/codex/localization-workflow-in-ios-9f96b7f4388c
Но а с лайаутами, локалями и валютами надо поресерчить)
Medium
Localization workflow in iOS
Using SwiftGen and [Phrase]
😁11👍2
Увидел такую статью тут. Где спрашивают такое у сеньоров? Если на западе задают такие простые вопросы, то пора учить английский
https://tanaschita.com/20190715-ios-interview-questions-and-answers-swift
https://tanaschita.com/20190715-ios-interview-questions-and-answers-swift
Telegram
iOS Dev
iOS-интервью: вопросы и ответы для Senior-разработчика на техническом собеседовании
Непростая задача — оценить навыки и знания другого разработчика. В серии постов автор делится своей подборкой вопросов и ответов по iOS и Swift.
Вопросы сгруппированы по…
Непростая задача — оценить навыки и знания другого разработчика. В серии постов автор делится своей подборкой вопросов и ответов по iOS и Swift.
Вопросы сгруппированы по…
🐳5👍2