Давай познакомимся поближе. Мы хотим развивать канал и понимать, какой контент больше подойдёт аудитории. Пожалуйста, ответь на пару вопросов.
1. Какой у тебя грейд?
1. Какой у тебя грейд?
Anonymous Poll
49%
Trainee
27%
Junior
15%
Middle
9%
Senior
👍1
2. Какой контент тебе интересен? Можешь выбрать несколько вариантов.
Anonymous Poll
79%
Лучшие практики iOS-разработки Surf
49%
Кейсы и статьи
51%
Подборки инструментов и решений
19%
Обзоры апдейтов и новостей
32%
Ошибки и факапы
23%
Open-source решения Surf
34%
Жизнь iOS-команды Surf
👍1
Ищем стажёра в нашу команду 🏄♂️
Стажировка в Surf — крутая возможность проявить скиллы в разработке и поработать на иностранных проектах. Мы за развитие и карьерный рост — трудоустроим лучших и будем прокачивать их грейд.
Что делают в Surf для стажёров:
• Платят стипендию;
• Строят гибкий график;
• Подключают опытного наставника;
• Обеспечивают современным железом.
Смотри требования к будущим iOS-стажёрам на карточках. Если твои скиллы подходят, то отправляй заявку на стажировку — вышлем тестовое задание, которое нужно выполнить до 12.02 включительно.
Собрали материалы, которые помогут при подготовке к стажировке:
→ Список полезной инфы для iOS-разработчиков.
→ Советы новичкам в iOS-разработке.
→ Как проходят стажировки в Surf.
Стажировка в Surf — крутая возможность проявить скиллы в разработке и поработать на иностранных проектах. Мы за развитие и карьерный рост — трудоустроим лучших и будем прокачивать их грейд.
Что делают в Surf для стажёров:
• Платят стипендию;
• Строят гибкий график;
• Подключают опытного наставника;
• Обеспечивают современным железом.
Смотри требования к будущим iOS-стажёрам на карточках. Если твои скиллы подходят, то отправляй заявку на стажировку — вышлем тестовое задание, которое нужно выполнить до 12.02 включительно.
Собрали материалы, которые помогут при подготовке к стажировке:
→ Список полезной инфы для iOS-разработчиков.
→ Советы новичкам в iOS-разработке.
→ Как проходят стажировки в Surf.
🔥12🤩3🎉2👍1
Наш опенсорс: NodeKit — библиотека для работы с сетью
Большинство мобильных приложений имеют клиент-серверную архитектуру и должны как-то взаимодействовать с сервером. Для этого в приложениях обычно создают отдельный сетевой слой, в котором содержится логика обработки запросов, работы с куки, добавления токенов и так далее.
Мы в Surf решили сделать сетевой слой переиспользуемым и легко кастомизируемым. Для этого создали NodeKit — гибкую и полностью кастомизируемую open-source библиотеку для работы с сетью.
Основная идея библиотеки
Реализация дополнительной логики без дополнительных усилий с помощью внедрения в заранее заготовленную цепочку обработки запроса узла, как правило, с какой-то атомарной операцией.
Важные особенности библиотеки
✅ Возможность добавить параметры извне. Это позволяет обходить нужные узлы.
✅ Возможность реализовать нескольких цепочек обработки запроса. Например, если необходимо реализовать разную логику для авторизованного и неавторизованного пользователя, то можно создать несколько цепочек запросов и собрать их с помощью билдера.
✅ Большое количество готовых узлов, которые позволяют не тратить время на базовую реализацию сетевого слоя и использовать NodeKit прямо из коробки.
NodeKit используется в большинстве iOS-приложений в Surf: с помощью него мы можем быстро и качественно реализовывать сетевой слой.
Дефолтный сетевой слой, а также модели к нему можно реализовать с помощью SurfGen. Но об — этом в следующих постах.
🔗 NodeKit
🔗 SurfGen
Большинство мобильных приложений имеют клиент-серверную архитектуру и должны как-то взаимодействовать с сервером. Для этого в приложениях обычно создают отдельный сетевой слой, в котором содержится логика обработки запросов, работы с куки, добавления токенов и так далее.
Мы в Surf решили сделать сетевой слой переиспользуемым и легко кастомизируемым. Для этого создали NodeKit — гибкую и полностью кастомизируемую open-source библиотеку для работы с сетью.
Основная идея библиотеки
Реализация дополнительной логики без дополнительных усилий с помощью внедрения в заранее заготовленную цепочку обработки запроса узла, как правило, с какой-то атомарной операцией.
Важные особенности библиотеки
✅ Возможность добавить параметры извне. Это позволяет обходить нужные узлы.
✅ Возможность реализовать нескольких цепочек обработки запроса. Например, если необходимо реализовать разную логику для авторизованного и неавторизованного пользователя, то можно создать несколько цепочек запросов и собрать их с помощью билдера.
✅ Большое количество готовых узлов, которые позволяют не тратить время на базовую реализацию сетевого слоя и использовать NodeKit прямо из коробки.
NodeKit используется в большинстве iOS-приложений в Surf: с помощью него мы можем быстро и качественно реализовывать сетевой слой.
Дефолтный сетевой слой, а также модели к нему можно реализовать с помощью SurfGen. Но об — этом в следующих постах.
🔗 NodeKit
🔗 SurfGen
👍8🔥7👏3
Не проводите код-ревью на голодный желудок!
Или немного о том, как устроен процесс код-ревью в Surf
Процесс код-ревью в Surf есть! А если без шуток, в разных командах он проходит немного по-разному и зависит от разных факторов. О них и поговорим.
1️⃣ Размер команды
В небольшой команде из двух-трёх человек каждый разработчик проводит ревью каждого пул-реквеста.
Это:
✅ повышает качество проекта,
✅ помогает прокачать технически менее опытных разработчиков,
✅ даёт возможность познакомить участников команды с кодом друг друга,
❌ приводит к затратам ресурсов: отнимает довольно много времени.
В команде от четырёх человек и больше такое не сработает: как раз из-за временных затрат. Поэтому количество участников ревью ограничено: их может выбрать лид или создатель пул-реквеста.
2️⃣ Жизненный этап проекта
Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. В этой ситуации можно воспользоваться таким понятием, как «технический долг» 😉
Если фичу надо отдать срочно и возможности перенести дедлайн нет, нужно запомнить то, что сделано «плохо»: зафиксировать это в техническом долге, а после релиза вернуться и исправить.
3️⃣ На что обращаем внимание в процессе код-ревью
🔹 общепринятые проектные договоренности,
🔹 соблюдение архитектурных правил,
🔹 грамотное разделение ответственностей,
🔹 соблюдение принципов программирования,
🔹 соблюдение code-style.
Проверять ли код на «правильность выполнения»? Об этом много споров. Наши техлиды проверяют.
Да, это отнимает много времени, но позволяет отсечь большинство багов ещё до попадания сборки к QA: это экономит время и QA, и разработчиков. Ведь чем раньше исправлен баг, тем меньше «стоимость» его исправления.
Или немного о том, как устроен процесс код-ревью в Surf
Процесс код-ревью в Surf есть! А если без шуток, в разных командах он проходит немного по-разному и зависит от разных факторов. О них и поговорим.
1️⃣ Размер команды
В небольшой команде из двух-трёх человек каждый разработчик проводит ревью каждого пул-реквеста.
Это:
✅ повышает качество проекта,
✅ помогает прокачать технически менее опытных разработчиков,
✅ даёт возможность познакомить участников команды с кодом друг друга,
❌ приводит к затратам ресурсов: отнимает довольно много времени.
В команде от четырёх человек и больше такое не сработает: как раз из-за временных затрат. Поэтому количество участников ревью ограничено: их может выбрать лид или создатель пул-реквеста.
2️⃣ Жизненный этап проекта
Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. Иногда в жизнь вмешиваются обстоятельства в виде жёстких дедлайнов. В этой ситуации можно воспользоваться таким понятием, как «технический долг» 😉
Если фичу надо отдать срочно и возможности перенести дедлайн нет, нужно запомнить то, что сделано «плохо»: зафиксировать это в техническом долге, а после релиза вернуться и исправить.
3️⃣ На что обращаем внимание в процессе код-ревью
🔹 общепринятые проектные договоренности,
🔹 соблюдение архитектурных правил,
🔹 грамотное разделение ответственностей,
🔹 соблюдение принципов программирования,
🔹 соблюдение code-style.
Проверять ли код на «правильность выполнения»? Об этом много споров. Наши техлиды проверяют.
Да, это отнимает много времени, но позволяет отсечь большинство багов ещё до попадания сборки к QA: это экономит время и QA, и разработчиков. Ведь чем раньше исправлен баг, тем меньше «стоимость» его исправления.
👍5
Код-ревью в прямом эфире 👨💻
Наши iOS-разработчики разберут твой код 🧐
🗓 21 февраля, вторник
🕓 19:00 мск
📍 Telegram-канал Surf iOS Team
Код-ревью — это клёвая возможность прокачаться: получить критику от более опытных коллег, улучшить код и узнать неочевидные нюансы его создания.
Мы приглашаем тебя поучаствовать: в роли того, чей код будут разбирать, или в роли зрителя. Решать тебе.
🤓 Хочу, чтобы разобрали мой код
Тогда присылай отклик в эту форму: ждём от тебя ссылку на гитхаб.
Мы выберем несколько проектов и будем ревьюить их в прямом эфире.
😎 Хочу послушать, как критикуют других
Тогда приходи в наш канал 21 февраля в 19:00 и подключайся к эфиру.
До встречи!
Наши iOS-разработчики разберут твой код 🧐
🗓 21 февраля, вторник
🕓 19:00 мск
📍 Telegram-канал Surf iOS Team
Код-ревью — это клёвая возможность прокачаться: получить критику от более опытных коллег, улучшить код и узнать неочевидные нюансы его создания.
Мы приглашаем тебя поучаствовать: в роли того, чей код будут разбирать, или в роли зрителя. Решать тебе.
🤓 Хочу, чтобы разобрали мой код
Тогда присылай отклик в эту форму: ждём от тебя ссылку на гитхаб.
Мы выберем несколько проектов и будем ревьюить их в прямом эфире.
😎 Хочу послушать, как критикуют других
Тогда приходи в наш канал 21 февраля в 19:00 и подключайся к эфиру.
До встречи!
👍10🔥3👏2
Сёрф iOS-разработка
Код-ревью в прямом эфире 👨💻 Наши iOS-разработчики разберут твой код 🧐 🗓 21 февраля, вторник 🕓 19:00 мск 📍 Telegram-канал Surf iOS Team Код-ревью — это клёвая возможность прокачаться: получить критику от более опытных коллег, улучшить код и узнать неочевидные…
Прямой эфир с код-ревью начнём ровно через час! Придёшь? Ставь 👍
👍18
Media is too big
VIEW IN TELEGRAM
Выкладываем запись эфира с код-ревью для тех, кто вчера не успел 👀
Всем ещё раз спасибо, было круто! В следующий раз постараемся разобрать больше проектов и сделать эфир поактивнее.
Если вопросы остались, ждём в комментариях, ответим. Будем также рады любой обратной связи 😌
Всем ещё раз спасибо, было круто! В следующий раз постараемся разобрать больше проектов и сделать эфир поактивнее.
Если вопросы остались, ждём в комментариях, ответим. Будем также рады любой обратной связи 😌
👍14🔥6👏2
В чем проблема с выпадающим списком
В прошлый раз мы рассказывали про расширяемые ячейки в UITableView и как в этом поможет RDDM.
Рассмотрим более сложный случай расширяемых ячеек.
На первой картинке виден пример «выпадающего» списка. По нажатию на одну ячейку появляется 2 новых после неё.
Мы могли бы использовать ExpandableItem с вложенным UIStackView, но это будет плохим решением, потому что:
❌ нет переиспользования,
❌ много кода в ячейке,
❌ трудно добавлять элементы с отличающимися размерами.
Все эти пункты влияют на быстродействие работы, чистоту кода и увеличивают накладные расходы по поддержке такого элемента.
Хочешь узнать как делают в Surf❓
С помощью RDDM мы создаём абстрактное описание ячеек — генераторы, которые являются мостом между моделью и ячейкой.
Абстракция на генераторах позволяет нам даже делать вложенные списки внутри вложенных списков 🤯
Подробнее расскажем в посте ниже 👇
В прошлый раз мы рассказывали про расширяемые ячейки в UITableView и как в этом поможет RDDM.
Рассмотрим более сложный случай расширяемых ячеек.
На первой картинке виден пример «выпадающего» списка. По нажатию на одну ячейку появляется 2 новых после неё.
Мы могли бы использовать ExpandableItem с вложенным UIStackView, но это будет плохим решением, потому что:
❌ нет переиспользования,
❌ много кода в ячейке,
❌ трудно добавлять элементы с отличающимися размерами.
Все эти пункты влияют на быстродействие работы, чистоту кода и увеличивают накладные расходы по поддержке такого элемента.
Хочешь узнать как делают в Surf❓
С помощью RDDM мы создаём абстрактное описание ячеек — генераторы, которые являются мостом между моделью и ячейкой.
Абстракция на генераторах позволяет нам даже делать вложенные списки внутри вложенных списков 🤯
Подробнее расскажем в посте ниже 👇
👍7
Знакомство с генераторами на примере выпадающего списка
Мы показали примеры выпадающего списка и познакомили с концепцией, а сегодня расскажем как легко и просто реализовать эту концепцию с помощью RDDM.
Итак, каждой ячейке соответствует генератор, который отвечает на вопросы:
🔹как регистрировать ячейку,
🔹какого размера будет ячейка.
Хорошая новость в том, что в RDDM есть базовый генератор, который подходит для большинства ячеек и позволяет совсем забыть об этих вопросах.
Вернемся к выпадающим спискам из предыдущего поста. Код генератора вы можете видеть на первой картинке, а подключение плагина и инициализацию на второй.
🗣️ И это всё?
🏄♂️ Ага
RDDM делает большую часть работы за вас:
🔹вычисление позиций (IndexPath) для новых ячеек,
🔹вызов UITableView.insertRows при разворачивании списка,
🔹вызов UITableView.removeRows при сворачивании.
Таким образом можно реализовать вложенные списки нескольких уровней вложенности, которые будут переиспользовать ячейки и могут быть быстро модифицированы.
Чтобы подробнее изучить разобранный пример, переходите в репозиторий проекта: где можно посмотреть не только на код примера, но и на реализацию.
Мы показали примеры выпадающего списка и познакомили с концепцией, а сегодня расскажем как легко и просто реализовать эту концепцию с помощью RDDM.
Итак, каждой ячейке соответствует генератор, который отвечает на вопросы:
🔹как регистрировать ячейку,
🔹какого размера будет ячейка.
Хорошая новость в том, что в RDDM есть базовый генератор, который подходит для большинства ячеек и позволяет совсем забыть об этих вопросах.
Вернемся к выпадающим спискам из предыдущего поста. Код генератора вы можете видеть на первой картинке, а подключение плагина и инициализацию на второй.
🗣️ И это всё?
🏄♂️ Ага
RDDM делает большую часть работы за вас:
🔹вычисление позиций (IndexPath) для новых ячеек,
🔹вызов UITableView.insertRows при разворачивании списка,
🔹вызов UITableView.removeRows при сворачивании.
Таким образом можно реализовать вложенные списки нескольких уровней вложенности, которые будут переиспользовать ячейки и могут быть быстро модифицированы.
Чтобы подробнее изучить разобранный пример, переходите в репозиторий проекта: где можно посмотреть не только на код примера, но и на реализацию.
🔥9👍2