Обновить
18
0
Кирилл@ws233

Руководитель мобильной разработки

Отправить сообщение

Игра для проведения киберучений

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели7K

Мы сделали игру для проведения штабных киберучений по информационной безопасности. Чтобы не только потренировать навыки реагирования на инциденты ИБ, но и отлично провести время. Хотим с вами ей поделиться. В статье описание и материалы для игры, выводы по результатам проведенных игр и еще больше котеек.

Хочу играть

Заблуждения Clean Architecture

Время на прочтение15 мин
Охват и читатели478K
Превращаем круги в блоки

­­ 


На первый взгляд, Clean Architecture – довольно простой набор рекомендаций к построению приложений. Но и я, и многие мои коллеги, сильные разработчики, осознали эту архитектуру не сразу. А в последнее время в чатах и интернете я вижу всё больше ошибочных представлений, связанных с ней. Этой статьёй я хочу помочь сообществу лучше понять Clean Architecture и избавиться от распространенных заблуждений.

Читать дальше →

Как Android-разработчику избавиться от комплекса доменной неполноценности

Время на прочтение5 мин
Охват и читатели3K

Комплекс доменной неполноценности — это когда веришь, что доменный слой приложения должен быть самым большим и самым важным, и винишь себя в том, что в твоём коде это не так. Это происходит, если воспринимать «Чистую архитектуру» как единственно верный способ писать код.

Привет, меня зовут Саша, я Head of mobile в компании «Метр квадратный». Под катом — почему появился этот комплекс и как с ним бороться. Сразу оговорюсь, в статье много моего личного мнения, и будет круто, если в комментах вы поделитесь своим.

Читать далее

Безопасная отладка вашего приложения в продакшене

Время на прочтение6 мин
Охват и читатели1.8K

Безопасная отладка вашего приложения в продакшене

Production (продакшен, прод) - версия продукта, прошедшая все стадии тестирования и выложена онлайн / установлена клиенту.

Читать далее

Архитектурные паттерны в iOS

Время на прочтение14 мин
Охват и читатели215K

Введение в MVP, MVC, MVVM и VIPER. Что между ними общего и в чем разница.



Делаете все по MVC, а получается некрасиво? Сомневаетесь, переходить ли на MVVM? Слышали о VIPER, но не уверены, стоит ли оно того?

В этой статье я кратко рассмотрю некоторые популярные архитектурные паттерны в среде iOS и сравню их в теории и на практике. Больше информации вы найдете при переходе по ссылкам, указанным в тексте.
Читать дальше →

Правильно подключаем тяжелые зависимости к Xcode проекту через Swift Package Manager

Время на прочтение7 мин
Охват и читатели9.1K

В этой статье я расскажу о проблемах с которыми я столкнулся при подключении тяжелых зависимостей к iOS проекту с помощью Swift Package Manager и о способе их решения.

Читать далее

Неидеальный руководитель: 8 причин почему так

Время на прочтение15 мин
Охват и читатели23K

В мире огромное количество людей, которые стали руководителями, а потом перехотели ими быть — в чем дело?

Когда мы молодые и амбициозные, то готовы брать все, что дают и радуемся любому повышению: «Вау, челлендж! Сейчас всем докажу! Я хочу быть руководителем, хочу власти и успеха!». На самом деле, мы не всегда понимаем, куда нас несет течение, что нас ждет на следующей ступени, на которую мы шагаем.

Я сделала короткий опрос в сообществе менторов по этой проблеме. Оказалось, что 16 из 22 менторов сталкивались с запросом «Как мне вернуться в специалисты?».

Меня зовут, Марина Перескокова, я уже 15 лет в IT, 10 из них проработала в Яндексе. У меня и моих знакомых тоже случались подобные проблемы. Давайте разберем 8 самых распространенных причин, почему руководитель больше не хочет быть руководителем.

Читать далее

Обзор решений для навигации в iOS

Время на прочтение15 мин
Охват и читатели6.4K

Всем привет! Меня зовут Тимур, я – iOS разработчик в hh.ru. В этой статье поговорим о фреймворкинге навигации в iOS. Я расскажу кулстори о популярных и не очень решениях и их преимуществах, а еще о том, как мы искали фреймворк мечты среди этой смертной любви. Поехали!

Читать далее

Навигация в SwiftUI или NavigationView и его особенности

Время на прочтение5 мин
Охват и читатели25K

Первое с чем вы сталкиваетесь при написании мобильного приложения, это переходы с одного экрана на другой и обратно (в случае простого приложения), а так же многоуровневые переходы и моментальный возврат на первый экран (back to root view). Всё это мы разберём на примерах в данной статье, ну а для начала немного углубимся в теорию.

Что такое NavigationView?

Представьте, что перед вами коробка (NavigationView) в которой много мячиков (View) и эти мячики могут соприкасаться друг с другом (переход с View на View) только в рамках этой коробки. 

Но есть так же и случаи, когда внутри коробки, помимо шариков, есть ещё одна коробка поменьше, которая содержит другие маленькие шарики (история про .sheet и .fullScreenCover - модальные окна). Это так же разберём ниже в статье.

Читать далее

Я толерантен. Извините

Время на прочтение5 мин
Охват и читатели13K

Я восхищаюсь людьми, которые знают, как надо делать. Искренне завидую тем, кто без колебаний называет правильное решение. Очень хочу быть похожим на менеджеров, знающих лучшую систему мотивации. Не говоря уже о нормальных системах управления, принятых во всём мире подходах к разработке, и очевидно лучших методах управления проектами.

Но предел моих мечтаний, конечно – менеджер, который Всё Унифицировал. Тот, у которого Единый Процесс. Самый Лучший, разумеется. Или даже Единственно Верный.

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

Не прав именно я, не дорос ещё. Рано мне уверенно утверждать, что правильно, а что нет. Я должен пройти Путь, который, наверняка, прошли программисты, тимлиды, проджекты и менеджеры моей мечты.

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

Ключевая проблема конкуренции – сравнение результатов в сопоставимых системах координат. Бывает ведь смотришь на людей – ну прям молодцы. Но стоит их выдернуть из привычного контекста, как вся «молодцеватость» куда-то исчезает. Программист, который был звездой на одном проекте, оказывается худшим звеном на другом. Тимлид, получивший престижную премию «Проект года», садится в лужу на следующем проекте. Контекст разный.

Думал-думал я, и придумал. Не надо притягивать за уши контекст. Надо устроить конкуренцию внутри одного контекста. Внутри одной компании. Даже – внутри одного отдела. Благо, у меня есть отдел.

Так я решил, что у меня будет Толерантность. Я хочу увидеть в максимально достоверном сравнении, какие методы, подходы, системы, мотивация, отношение дают наилучший результат.

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

Поэтому я стал эволюцию подпинывать. Как? Ну, как учёные в лабораториях с крысами. Проактивно, по собственному желанию.

Читать далее

Адаптируем существующее бизнес-решение под SwiftUI. Часть 4. Навигация и конфигурация

Время на прочтение5 мин
Охват и читатели3.1K
Доброго всем времени суток! С вами я, Анна Жаркова, ведущий мобильный разработчик компании «Usetech»
Теперь поговорим об еще одном интересном моменте в SwiftUI, о навигации.

Если вы пропустили предыдущие статьи цикла, то можете ознакомиться с ними по ссылке:

часть 1
часть 2
часть 3

С изменением описания визуальной части и переходом к декларативному синтаксису изменилось и управление навигацией в приложении SwiftUI. Использование UIViewContoller напрямую отрицается, UINavigationController напрямую не используется. На смену ему приходит NavigationView.

@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
@available(watchOS, unavailable)
public struct NavigationView<Content> : View where Content : View {

    public init(@ViewBuilder content: () -> Content)

    //....
}

По сути обертка над UINavigationController и его функционалом.
Читать дальше →

Кодогенерация DTO: зачем она нужна и как её настроить

Время на прочтение12 мин
Охват и читатели39K
Data Transfer Object — модель данных, которые мы передаём из одного слоя приложения в другой. В Яндекс Go мы активно используем DTO. Предположим, нужно отобразить в UI приложения для вызова такси экспериментальную кнопку с двумя свойствами — надписью на кнопке и ориентировочным временем ожидания такси. Тогда в сетевом слое надо написать примерно такую DTO-модель:

struct OrderButtonExperimentDTO: Decodable {
   let buttonTitle: String
   let estimationMinute: Int
}

Правильно написанная модель позволяет разрабатывать разные слои приложения независимо — но нужно следить за актуальностью самой модели на каждом слое. Например, если в коде выше ожидалось не estimationMinute, а estimationMinutes, то клиент не сможет декодировать полученные из сети данные и пользователь не увидит время ожидания. Такую ошибку легко совершить, в n-й раз перепечатывая названия переменных под каждый слой — а разработчики и правда должны рутинно это делать при любом изменении (или расширении) исходного формата данных. Ещё сложнее заметить ошибку на код-ревью.

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

Async/await для существующих iOS-приложений

Время на прочтение5 мин
Охват и читатели6.5K


Ранее я писал статью о работе оффлайн с веб-контентом. С того времени команда Apple выпустила Xcode 13.2 и Swift 5.5. Прочитав книгу о современной модели многопоточности в Swift, я понял, что это лучшее время для обновления моих примеров с async/await!
Перед прочтением моей статьи очень рекомендую прочитать материал о многопоточности в Swift Language Guide.
Читать дальше →

FigmaExport: как автоматизировать экспорт UI-Kit из Figma в Xcode и Android Studio проекты

Время на прочтение11 мин
Охват и читатели34K


Если вы iOS- или Android-разработчик и дизайн вашего проекта разрабатывается в Figma, то скорее всего вы сталкиваетесь с проблемами при экспорте ресурсов: цвета выгрузить нельзя, а иконки и картинки экспортировать неудобно. В этой статье я расскажу, как можно облегчить себе жизнь и автоматизировать экспорт UI-Kit из Figma напрямую в Xcode и Android Studio.
Читать дальше →

Как построить самовоспроизводящуюся практику

Время на прочтение8 мин
Охват и читатели7.3K


Сегодня расскажем, как организовать устойчивое развитие команды, которая не подвержена кадровым кризисам. Где руководитель не тонет в оперативке, сотрудники не скучают годами на одинаковых задачах, старшие специалисты не «бронзовеют», а привлечение новых сотрудников не стоит как крыло самолёта. Если не найдёте в тексте ничего нового для себя, поздравляем! А мы наступили на все приведённые грабли. Может быть, кого-то наш опыт убережёт от ошибок. Или подскажет решение.
Читать дальше →

Linked List: Когда нужно писать свой Copy-on-write в iOS?

Время на прочтение3 мин
Охват и читатели9.7K

Я всегда думал: "А зачем нужно писать свой copy-on-write? Ведь круто, когда есть структуры и они такие быстрые, что всё делают за тебя."

Но все это не нужно, пока не начинаешь писать свои типы и не подсаживаешься на LinkedList'ы.

Что такое этот связанный список и какие у него преимущества?

Читать далее

The Layout Engine в Swift

Время на прочтение3 мин
Охват и читатели22K

Многие iOS разработчики не задумываются как работает механизм отрисовки элементов, установки и обновлении constraints в Auto Layout'e. В этой статье я пробую подробно заглянуть внутрь работы the Layout Engine

Читать далее

Код ревью с учётом человеческих слабостей

Время на прочтение7 мин
Охват и читатели12K

Проверка кода (code review) — отличный инструмент для повышения качества кода, но он не учитывает один факт: отправляют и просматривают код люди, а они устают, теряют сосредоточенность, ленятся, да и просто испытывают эмоции в самые неожиданные моменты.

Поэтому хочу представить свое видение хороших и плохих практик код ревью с учётом человеческих особенностей.

Читать далее

Nivelir: Удобный DSL для навигации

Время на прочтение16 мин
Охват и читатели9.3K


Год назад мы пересмотрели свою реализацию роутинга в iOS-приложениях hh.ru. Тогда она больше походила на простой слой сборки экранов, чем на роутинг как таковой. Смирившись с этим печальным фактом, мы принялись исследовать тему навигации: пересмотрели много подходов в iOS, примерили каждое в песочнице нашего проекта и даже дошли до Cicerone из мира Android.


Взяв лучшее из всех изученных решений, мы переработали всё это дело в собственную реализацию, которая теперь идеально подходит под наши требования к навигации. Недавно мы начали выносить свои наработки в отдельный open-source проект — Nivelir. Эта статья поможет в нём разобраться и покажет, как устроен роутинг в наших проектах.

Читать дальше →

Зачем нужны UITableViewController и UICollectionViewController

Время на прочтение5 мин
Охват и читатели17K
Всем привет, меня зовут Артём, я iOS-разработчик. Сегодня хочу рассказать о подходах к использованию UITableViewController и UICollectionViewController.

Едва ли можно найти мобильное приложение, в котором не используется списочное представление данных. Существенную часть времени мы (iOS-разработчики) проводим с TableView или CollectionView. Именно поэтому критически важным является выбор подходов к использованию этих базовых элементов из соображений скорости разработки и стоимости дальнейшей поддержки создаваемых решений. Хочу поделиться выводами, к которым мы пришли с коллегами в Touch Instinct.

Статья рассчитана на разработчиков, которые работают с TableView (CollectionView), но почему-то не работают с TableViewController (CollectionViewController). Далее будет упоминаться только TableView(Controller), но все написанное касается и CollectionView(Controller) тоже.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Зарегистрирован
Активность