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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Advanced Core Image

Пока лучший материал за неделю. Автор статьи погружает вглубь работы CImage и учит как делать прикольные фильтры для изображений.

В этой статье хорошо структурировано:
🟣как работают цветовые фильтры
🟣деформации
🟣текстуры

Одним из моих рабочих проектов был видеоредактор. Сейчас он уже умер как проект, но его исходники ядра, которое управляет видео и аудио, я иногда изучаю и освежаю знания, чтобы глубже разобрать работу с низкоуровневой графикой. Это отличная статья для рефреша знаний

Ставь лайк, если устал от алгосов и проектирования, и хочешь чего-то с краской кнопок
Please open Telegram to view this post
VIEW IN TELEGRAM
1543
Как переоценивают важность архитектурных паттернов UI

На одном собесе мне задали такой вопрос, ответ на который я так и не успел спросить что от меня ожидали, но я часто встречаю его в финтехах. Вопрос звучал как-то так:

"Вы приходите на новый проект где будете один. Нужно в быстрые сроки сделать МВП. Где по итогам запуска будет принято решение: либо проект выстреливает и понадобится расширение команды с быстрым Т2М, либо проект не выстреливает и закрывается. Какую архитектуру вы выберете и почему"


Мой первый вопрос был "Что скрывается под словом архитектура?". Ведь странно было, если бы на сроки влиял такой вопрос как MVP или VIPER. За годы моего опыта в аутсорсах и запусков мвп в бигтехах, вопрос каким паттерном разделять UI слой никогда не стоял остро. Сроки срывали другие проблемы. Архитектура это все же гораздо более сложный вопрос чем разница VIPER vs MVC, SOLID и в чем отличия между фреймворками DI. О нем основательно задумываются на гораздо более зрелой стадии.

Но интервьюер все же сказал про MVP или VIPER. Честно, я не считаю, что это главная проблема в вопросах инвестиций проекта. Мой ответ был, что архитектура это чуть другое, а не выбор на какие слои я буду делить экран. Есть и другие слои, которые уходят в сторону нетворка, кэширования, пушей, стейт менеджмента, управление зависимостями и других модулей. В каком файле лежат мои кнопки — не самый сложный и острый вопрос.

Самым верным и дешевым решением, которое нужно для проверки гипотез, это сокращение сроков. А на сроки влияет релиз. Поэтому я бы сделал максимально простое приложение на MVC и со сторибордами. Или вообще бы ограничился webview. Потому что оно помогает нам обойти сложный процесс релизов и апрувов AppStore. Например, корни BDUI идут оттуда. А недавно Озон Банк рассказал почему сделали на вебвью. Такое решение точно бы помогло нам решить проблему раскатки быстрых гипотез и посмотреть как быстро мы получаем рост и адопшен наших фич.

Как в этом во всем нам помогают такие вопросы выбора MVP или MVC я, честно, не понимаю. Я много раз задумывался над этим вопросом и наблюдал разницу, как ребята из iOS на VIPER быстрее делали простые фичи и релизы, чем ребята из андроида на MVC, который более подходил к такому проекту. Повлияло ли кол-во абстракций на скорость? Отчасти может повлиять, VIPER я бы точно не рисковал тащить в МВП проект. Но является ли этот вопрос ключевым? Нет

Делитесь своими ответами на такой вопрос
2
Доброе утро. У нас упал прод. Подозрение на этот участок кода. Что выведется в консоли?
Продвинутый разбор как работает Git

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

Но гит — мощнее, чем нам кажется.
82
🌄 Разбор задач из реальной практики: управление памятью

Новый формат разборов разных задач из реальной практики. Здесь я решил не делать всякие сборники, которые имеют минимальную усваемость. А детально разбирать какую-то одну задачу, иттеративно усложняя.

В этом примере разберем задачу с двумя классами:
🟣escaping клоужера
🟣циклами сильных ссылок
🟣delayed deallocation

💎 Получить доступ можно по телеграм-боту со скидкой или через бусти
Please open Telegram to view this post
VIEW IN TELEGRAM
6
🌿 Техники решения алгоритмов: Prefix Sum

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

Так, прежде чем взяться за решение задачи, я сначала хочу определить ее паттерн. Какую технику лучше применить?

Их не очень много, но достаточно, чтобы потратить время. Одна из таких техник — это prefix sum.

🟣 Когда она используется?
Когда нужно работать с суммами элементов подмассивов.

Основная идея — создать массив prefix, где prefix[i] равно сумме всех элементов до i индекса включительно.

Статьи для изучения
🟣Prefix Sums and Applications
🟣Algo & DS(1) — Prefix Sum Series in Swift

Задачи для закрепления:
🔴Product of Array Except Self
🔴Subarray Sum Equals K
Please open Telegram to view this post
VIEW IN TELEGRAM
75
Что сложнее бэкэнд или фронт?

Я не делю людей по платформам, языкам программирования или количество синтаксиса в коде.

Все задачи сложные и требуют своих скиллсетов.

Бэкенд требует аналитического мышления и чаще работает с данными. Где нагрузка может положить сервак.

Фронтенд требует уметь видеть результат на многих устройствах, окружениях. Сверстать кнопку без потери качества на разных ОС, браузерах. Выжить среди кол-ва новых технологий.

Здесь нет единой метрики сложности. У всех задачи просто разные.

Хороший тред про frontend и backend
95
📺 Вопросы для подготовки и проведения собесов: Core Data

Сделал сборник вопросов для самопроверки.

В нем затронул:
🟣Что такое Entity?
🟣Как работать с Context'ом?
🟣Чем отличаются реляционные базы от нереляционных?
🟣Как Core Data работает с многопоточностью?
🟣Как работают миграции?
🟣И другие вопросы

💎 Получить доступ можно по телеграм-боту со скидкой или через бусти
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Premium Book Club

Раньше я очень много читал. Книги, по сути, можно сказать, были моим главным источником образования. В 2018 году я прочитал около 100 книг. Тогда я назвал этот период "книжный запой".

Сейчас я грущу, что не могу заставить себя читать много. Либо занят работой, либо чем-то еще.

Книга — это лучший инструмент по сохранению нашей дофаминовой стабильности. Поэтому я хочу вернуть эту привычку и вытеснить все бесполезные просмотры рилсов и видосов полезной активностью.

Книга — это оружие, униформа и еда. Они дают нам связи как нейронные, так и социальные.

Я запускаю вторую версию книжного клуба. В нем мы будем по-новому внедрять эту привычку в жизнь и разбирать только самую важную и полезную литературу.

Первой книгой будет "Принципы". Очень популярная книга, которая является базой для ролевой моделью лидеров и великих людей. Недавно узнал, что это переосмысление другой великой книги "Тысячеликий герой", которая интегрирована в жизни.

Вступайте. Проведем эту жизнь с пользой. Все бесплатно и без подписок)
20
🌿 Детальный разбор SOLID: Что такое Dependency Inversion?

Я понял, что всякие подборки вопросов для закрепления, почти бесполезны без большого и структурированного материала. Ничего на долго не сохраняется на вопросы и ответы. Поэтому решил писать большие и вдумчивые статьи, которые требуют глубокого погружения.

Первую статью я решил посвятить одному из самых труднопонимаемых принципов SOLID, на котором многие пробуксовывают.

В ней я постарался разобраться:
🟣Что такое DIP?
🟣Что такое модули верхних модулей и нижних уровней?
🟣Что такое зависимость в Swift?
🟣Где происходит инверсия зависимостей?
🟣Чем отличается Inversion of Control от Dependency Injection?
🟣Почему все покрывается абстракциями?
🟣Как найти нарушение в Swift Коде и многое другое

Много кода и примеров.

💎 Получить доступ можно по телеграм-боту со скидкой или через бусти
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Hashable vs AnyHashable

Мы уже хорошо погружены в работу протокола Hashable. Но часто приходится слышать в чем же отличия Hashable от AnyHashable?

Можно легко разобраться, если мы знаем что такое приставка Any. В статье Type Erasure в Swift мы также детально разбирали как сделать свои контейнеры для протоколов.

🟣 Когда пригодится AnyHashable?

Представим кейс, когда нужно использовать Set с любыми типами, которые будут хэшебл.

Первое, что приходит в голову, написать код вот так:


let collection = Set<Hashable>()


Но мы получим ошибку компиляции. Поэтому на помощь приходит наш Type Erasure AnyHashable:


let collection = Set<AnyHashable>()


Так мы избавимся от ошибки компиляции и решим нашу задачу
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Forwarded from Воробей
Сорри, одинаковые фотки скинули: разбираем новинки с презентации Galaxy Unpacked

🎧 Наушники у Samsung лучше — они двухдрайверные и Lossless поддерживают
Часы ярче и громче, чем Apple Watch. Это лайк

А вот систему One UI почти всю стыбзили у Apple. Дизлайк
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
43