Pull to refresh
21
0
Vasyl Liutikov @pingwinator

ios dev

Send message

Concurrency в Swift 3 и 4. Operation и OperationQueue

Reading time31 min
Views82K



Если вы хотите добиться UI отзывчивости вашего iOS приложения, выполняя такие затратные по времени куски кода, как загрузка данных из сети или обработка изображений, то вам нужно использовать продвинутые паттерны, связанные с многопоточностью (сoncurrency), иначе работа вашего пользовательского интерфейса (UI) начнет сильно замедляться и даже может привести к полной его «заморозке». Вам нужно убрать ресурсо-затратные задачи с main thread (главного потока), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI).

В текущей версии Swift 3 и ближайшей Swift 4 (осень 2017) это можно сделать двумя способами, которые пока не связаны с встроенными языковыми конструкциями Swift, начало реализации которых будет только в Swift 5 (конец 2018).

Один из них использует GCD (Grand Central Dispatch) и ему посвящена предыдущая статья. В этой статье мы покажем, как достичь отзывчивости UI в iOS приложениях с помощью таких абстрактных понятий, как операция Operation и очередь операций OperationQueue. Мы также покажем в чем различие этих двух подходов и какой из них в каких ситуациях лучше использовать.

Код для этой статьи можно посмотреть на Github.
Читать дальше →

Kotlin: опыт боевого применения

Reading time9 min
Views21K
Александр Карягин, член Ассоциации ISDEF, возглавляет маркетинг в компании Devexperts. Мы отдали ему и его коллегам трибуну для рассказа о достаточно свежем опыте разработки. Мы всё-таки Independent Developers :)

В последнее время рост интереса к языку программирования Kotlin приблизительно такой же, как рост курса Bitcoin. Повышенное внимание обусловлено еще и тем фактом, что в мае 2017 года Kotlin был объявлен официальным языком разработки под Android. Конечно же, мы не могли не приобщиться к изучению этой темы, и решили поэкспериментировать с Kotlin, применив его в одном из новых проектов под Android.

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

Мьютексы и захват замыканиями в Swift

Reading time11 min
Views18K


Перевод статьи Мэтта Галлагера.

В этой статье речь пойдёт об отсутствии потокового выполнения (threading) и инструментов синхронизации потоков в Swift. Мы обсудим предложение о внедрении «многопоточности» (concurrency) в Swift и то, как до появления этой возможности потоковое выполнение в Swift будет подразумевать использование традиционных мьютексов и общего изменяемого состояния (shared mutable state).

Использовать мьютекс в Swift не особенно сложно, но на этом фоне хотелось бы выделить тонкие нюансы производительности в Swift — динамическое выделение памяти во время захвата замыканиями. Мы хотим, чтобы наш мьютекс был быстрым, но передача замыкания для исполнения внутри мьютекса может снизить производительность в 10 раз из-за дополнительных расходов памяти. Давайте рассмотрим несколько способов решения данной проблемы.
Читать дальше →

Применение MVP+TDD в разработке iOS приложений

Reading time12 min
Views12K
— Слава TDD!
— Юнит-тестам слава!


В этой статье мы разберемся с принципами применения MVP+TDD в разработке iOS приложений. Разбираться будем на примере создания небольшой обучалки для пользователя, которая показывается при первом запуске.


Требования от бизнеса


Итак, ваш заказчик хочет, чтоб в его приложение добавили обучалку, которая покажется пользователю один раз при первом запуске. Обучалка состоит из нескольких изображений, которые должны быть показаны в определенной последовательности. Переключаться изображения должны по нажатию на кнопку "Продолжить". Также при показе последнего изображения — на кнопке нужно написать "Старт" (как бы намекая пользователю, что приложение будет сейчас запущено).

Шаг 1. Продумываем логику.

Четыре типажа программистов

Reading time17 min
Views217K

Привет.


Я впервые пишу в поток об управлении и найме персонала. Речь пойдет об одном из способов классифицировать ваших будущих или действующих программистов. Мой основной тезис: все разработчики, грубо говоря, делятся на 4 больших типажа и каждому из этих типажей есть своя область применения. Попытка направить неправильный типаж на решение неподходящих для него задач ведет к провалу (неэффективная работа, или сотрудник покидает команду). Хотите знать почему так — добро пожаловать под кат. Приготовьтесь, текста много.

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

Как мы боремся c динамическими библиотеками в Swift. Опыт Яндекса

Reading time12 min
Views22K
Честно говоря, когда мы приступили к работе над перезапуском Яндекс.Карт, я и представить себе не мог, сколько проблем нам в итоге доставит Swift. Если вы начали писать на Swift совсем недавно, то, поверьте, вы пропустили все самое интересное. Каких-то два года назад не было инкрементной компиляции в принципе (даже пробел в любом файле приводил к полной пересборке), сам компилятор постоянно вылетал с Segmentation Fault на вполне безобидных вещах вроде тройной вложенности типов или наследования от Generic, индексация проекта длилась невообразимо долго, автодополнение работало через раз и так далее и тому подобное, всех бед не счесть. Подобные моменты несомненно усложняют жизнь программистам, но постепенно решаются с каждым обновлением Xcode. Однако есть более существенные проблемы, влияющие не только на разработку, но и на качество приложения: запрет компиляции статических библиотек из свифтового кода, а также отсутствие поддержки Swift на уровне iOS.


Изначально не было очевидно, что использование Swift и динамических библиотек приводит к росту времени запуска. Мы не сравнивали время запуска с предыдущей версией и воспринимали долгую загрузку как данность. Да и средств диагностики того, что же на самом деле происходит на этапе загрузки приложения, в общем-то не было. Но в один прекрасный день разработчики Apple добавили возможность профилирования работы системного загрузчика. Оказалось, что загрузка динамических библиотек занимает очень много времени по сравнению с другими этапами. Конечно, с нашим кодом тоже не все было идеально, но, пожалуй, это частные особенности отдельного приложения и не всем будет интересно о них читать. А вот борьба с динамическими библиотеками — общая тема для всех разработчиков, использующих Swift. Именно об этой проблеме и пойдет речь.

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

Visual Studio Mobile Center: Деплоим мобильный софт с помощью devops-конвейера Microsoft

Reading time5 min
Views5K

В прошлой статье мы рассмотрели автоматизацию сборки мобильных приложений с помощью Bitrise, разобрались со сборкой Android- (и iOS-) приложения, подключили Xamarin Test Cloud, провели автоматическое UI-тестирование и внедрили HockeyApp для получения обратной связи. Сегодня мы продолжим погружение в мир инструментов Mobile DevOps, которые не просто ускоряют, но еще и заметно упрощают разработку мобильных приложений. На этот раз мы рассмотрим интегрированное решение Visual Studio Mobile Center.


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

Как мы суслика яблоками кормили или эффективный backend на Go для iOS

Reading time18 min
Views19K


Как и обещал, рассказываю о том, как мы мигрировали свой бэкенд на Go и смогли уменьшить объем бизнес логики на клиенте более, чем на треть.


Для кого: небольшим компаниям, Go и мобильным разработчикам, а также всем, кто в тренде или просто интересуется данной тематикой.
О чем: причины перехода на Go, с какими сложностями столкнулись, а также инструкции и советы по улучшению архитектуры мобильного приложения и его бэкенда.
Уровень: junior и middle.


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

С/С++ на Linux в Visual Studio Code для начинающих

Reading time4 min
Views201K
Давайте начистоту, мало кто использует отладчик GDB на Linux в консольном варианте. Но что, если добавить в него красивый интерфейс? Под катом вы найдёте пошаговую инструкцию отладки кода С/С++ на Linux в Visual Studio Code.


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

Магия SSH

Reading time11 min
Views534K
С SSH многие знакомы давно, но, как и я, не все подозревают о том, какие возможности таятся за этими магическими тремя буквами. Хотел бы поделиться своим небольшим опытом использования SSH для решения различных административных задач.

Оглавление:

1) Local TCP forwarding
2) Remote TCP forwarding
3) TCP forwarding chain через несколько узлов
4) TCP forwarding ssh-соединения
5) SSH VPN Tunnel
6) Коротко о беспарольном доступе
7) Спасибо (ссылки)
Читать дальше →

Mikrotik. QoS для дома

Reading time5 min
Views79K
Сегодня я хотел бы немного рассказать о приоритетах.
image

Статья не претендует на охват всей информации по QoS на Mikrotik. Это демонстрация набора правил, позволяющих настроить несложную схему приоритезации трафика и пополнять её по мере необходимости.

Надеюсь, коллеги помогут советами в комментариях.
Читать дальше →

VoiceOver на iOS. Как сделать приложение удобнее для людей с нарушением зрения

Reading time10 min
Views8.5K


Доброго времени суток! Меня зовут Иван Смолин. Я iOS разработчик в Touch Instinct.


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

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

Использование NSProxy класса на простом примере

Reading time6 min
Views9.2K
Всем привет. Сегодня поговорим о практическом использовании NSProxy класса, пост будет небольшим, думаю многим новичкам будет интересно почитать.

Немного оффтопа.

В общем, по распределению в компании я попал на легаси проект на Objc, где massive view controller считался эталом архитектуры. Конечно же без нормальной спеки и тестов. За недолгую карьеру разработчика у меня выработалось пару правил для таких вот проектов, первое — никакого рефакторинга с моей стороны без указания сверху, второе — трогать существующий код только в крайней необходимости. Всё это на почве того, что в таких проектах очень сложно отловить регрессию (а может я просто ленивый?).
Читать дальше →

Как разделить окружение для сборки и запуска сервиса в Docker сегодня и как это cделать завтра

Reading time4 min
Views37K

image


Большинство из нас уже давно научилось готовить Docker и используют его на локальных машинах, на тестовых стендах и на боевых серверах. Docker, который недавно превратился в Moby, прочно вошел в процессы доставки кода до пользователя. Но best practice работы с контейнерной виртуализацией и, в частности, с Docker вырабатываются до сих пор.


Как это было


В начале становления Docker как основного инструмента изоляции процессов, многие использовали его аналогично использованию виртуальных машин. Подход был максимально прост: устанавливаем все необходимые зависимости в образ (Docker Image), там же билдим всё, что должно билдиться а что не должно двигаем и билдим, получаем артефакт сборки и запекаем всё это в итоговый образ.

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

Какие игры запустятся на системнике за 3000 рублей? Покупаем и тестируем с Playkey

Reading time6 min
Views15K
Три тысячи рублей. Ужин на двоих в не слишком дорогом ресторане или потрёпанный системник?

Выбор очевиден — решили мы. А заодно на нём можно провести уникальные плейтесты самых разных игр. И рассказать об этом в этой публикации!

Системники-претенденты для этой статьи мы искали на Avito. И быстро нашли вот такого красавца:



Хо-хо! Выглядит прекрасно, и начинка за 3000 рублей вполне достойная. Две планки памяти 2x1Gb DDR2-800, встроенная видеокарта Intel GMA X4500, жесткий диск на 320Gb и двухъядерный камень Core2Duo E7400 2800MHz.

Один звонок, и мы уже выдвигаемся забирать этот прекрасный системный блок, чтобы протестировать на нем самые разные игрушки в спектре от TES: Skyrim до Wolf Among Us и Mass Effect. Плюс пару горячих новинок: DOOM и Quantum Break. Готов, системник?

Поехали!
Читать дальше →

OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%

Reading time11 min
Views95K


Много где написано о том, как получить 100% и A+ по тесту от Qualys. При всём при том практически везде директивы ssl_ciphers и подобные даются как эдакие магические строки, которые нужно просто вставить, и надеяться, что автор не подводит вас под монастырь. Эта статья призвана исправить это недоразумение. По прочтению этой статьи директива ssl_ciphers потеряет для вас всякую магию, а ECDHE и AES будут как друзья да братья.


Также вы узнаете почему 100% по тестам — не всегда хорошо в реальности.

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

Исследование виртуальных серверов с SSD дисками

Reading time5 min
Views34K


В последнее время SSD накопители стали заметно дешеветь и все чаще их можно увидеть как преимущество того или иного виртуального сервера. Например, тарифов с SSD дисками сейчас — 370 штук от 65 хостеров. Естественно, SSD диски намного дороже, чем диски других типов, поэтому для сохранения низкой стоимости услуги хостеры предлагают меньшее количество места за аналогичную цену по сравнению с SATA или SAS тарифами.

Я и мой друг amoskvin из https://theideahosting.com решили провести небольшое исследование дешевых тарифов на виртуальные серверы с SSD дисками. Хотелось бы поблагодарить всех хостеров, которые бесплатно предоставили виртуальные серверы для тестирования.

Для проведения тестирования была выбрана максимальная планка цены — 5 долларов за месяц. Единственное, сразу хочу заметить, что тестирование производилось в неспешном порядке и из-за колебаний курса валюты на момент публикации этой статьи планка в 5 долларов может быть немного сдвинутой, но общая идея осталась прежней: – протестировать хостеров и дешевые тарифы с SSD дисками.
Читать дальше →

NSUserDefaults на практике

Reading time11 min
Views20K
Данный текст представляет собой перевод статьи NSUserDefaults In Practice. Автором оригинала является Дэвид Смит (David Smith). Перевод выполнен с любезного разрешения автора.

Что такое NSUserDefaults?


Комментарий с которого начинается заголовочный файл «NSUserDefaults.h» вполне хорошо описывает класс. Этим комментарием я и воспользуюсь, чтобы начать:
NSUserDefaults являются:

1) иерархическим
2) постоянным (персистентным)
3) межпроцессным
4) и в некоторых случаях распределенным
хранилищем вида ключ-значение. NSUserDefaults оптимизированы для хранения пользовательских настроек.

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

Непрерывная интеграция с помощью Drone CI, Docker и Ansible

Reading time13 min
Views54K

image


Можете представить, что Вам больше никогда не придется устанавливать зависимости и настраивать конфигурации вручную на вашем сервере непрерывной интеграции? А вы верите в то, что каждый шаг вашего билда может быть по-настоящему изолированным и работать исключительно в Docker контейнерах? В конце концов, хотели бы вы попробовать инструмент, который входит в топ 20 всех открытых проектов, написанных на Golang, и имеет 9k+ звездочек на Github?


В этой статье мы хотели бы рассказать о великолепном Drone CI, который уже помог нам упростить и сделать лучше нашу непрерывную интеграцию. Мы поделимся деталями установки Drone CI и покажем на примере небольшого проекта все детали использования. Если вы не любите много читать и хотите сразу попробовать, в конце статьи есть ссылки на Github репозитории, которые помогут с быстрым стартом.


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

Козел отпущения или MVC в iOS

Reading time7 min
Views22K
В последние несколько лет я встретил множество проектов, разработчиков и статей, которые обвиняют Model-ViewController архитектуру во многих, если не во всех бедах, которые происходят в iOS-сообществе.

Сегодня вашему вниманию я предлагаю некоторые альтернативные взгляды и подходы, а также приемы, которые могут помочь переосмыслить MVC и ведение проектов в целом. Всем кому интересно — добро пожаловать под кат.
Читать дальше →

Information

Rating
Does not participate
Location
Stuttgart, Baden-Württemberg, Германия
Registered
Activity