Pull to refresh
18
0
Кирилл@ws233

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

Send message

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

Level of difficultyEasy
Reading time6 min
Reach and readers7K

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

Хочу играть

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

Reading time15 min
Reach and readers479K
Превращаем круги в блоки

­­ 


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

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

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

Reading time5 min
Reach and readers3K

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

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

Читать далее

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

Reading time6 min
Reach and readers1.8K

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

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

Читать далее

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

Reading time14 min
Reach and readers215K

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



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

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

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

Reading time7 min
Reach and readers9.1K

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

Читать далее

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

Reading time15 min
Reach and readers23K

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

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

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

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

Читать далее

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

Reading time15 min
Reach and readers6.4K

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

Читать далее

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

Reading time5 min
Reach and readers25K

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

Что такое NavigationView?

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

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

Читать далее

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

Reading time5 min
Reach and readers13K

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

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

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

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

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

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

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

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

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

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

Читать далее

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

Reading time5 min
Reach and readers3.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: зачем она нужна и как её настроить

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

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

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

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

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

Reading time5 min
Reach and readers6.5K


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

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

Reading time11 min
Reach and readers34K


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

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

Reading time8 min
Reach and readers7.3K


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

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

Reading time3 min
Reach and readers9.7K

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

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

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

Читать далее

The Layout Engine в Swift

Reading time3 min
Reach and readers22K

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

Читать далее

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

Reading time7 min
Reach and readers12K

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

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

Читать далее

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

Reading time16 min
Reach and readers9.3K


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


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

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

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

Reading time5 min
Reach and readers17K
Всем привет, меня зовут Артём, я iOS-разработчик. Сегодня хочу рассказать о подходах к использованию UITableViewController и UICollectionViewController.

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

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

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity