Как стать автором
Обновить
0
0
Иван @ruman

Пользователь

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

Инверсии зависимостей управления впрыском

Время на прочтение6 мин
Количество просмотров124K
image

Вступление


Наверняка первый вопрос, который возник у вас при взгляде на заголовок, был "Шта?". На самом деле я просто перевел фразу "Инверсия управления, внедрение зависимости" в Google Translate на китайский, а затем обратно. Зачем? Затем, что на мой взгляд, это хорошая иллюстрация того, что происходит на самом деле. Люди вокруг путают, коверкают и извращают эти понятия. По долгу службы я провожу много интервью, и 90% того, что я слышу, когда задаю вопрос про DI — честно говоря, откровенный бред. Я сделал поиск по Хабру и нашел несколько статей, которые пытаются раскрыть эту тему, но не могу сказать, что они мне сильно понравились (ладно, ладно, я проглядел только три первых страницы, каюсь). Здесь же на Хабре я встречал в комментариях такую расшифровку IoC, как Injection of Container. Кто-то всерьез предполагает, что есть некий механизм инъекции контейнеров, который сосуществует где-то рядом с DI, и, видимо, даже делает нечто похожее. Только с контейнерами. Мда. На самом деле понять внедрение зависимости очень просто, надо всего лишь…
Читать дальше →
Всего голосов 48: ↑41 и ↓7+34
Комментарии51

RxSwift шпаргалка по операторам (+ PDF)

Время на прочтение41 мин
Количество просмотров137K


Заинтересовавшись темой функционального программирования я встал на распутье, — какой фреймворк выбрать для ознакомления. ReactiveCocoa — ветеран в iOS кругах, по нему вдоволь информации. Но он вырос с Objective-C, и хотя это не является проблемой, но все же в данный момент я в основном пишу именно на Swift, — хотелось бы взять решение изначально спроектированное с учетом всех плюшек языка. RxSwift же порт Reactive Extensions, имеющего долгую историю, но сам порт свежий и написанный именно под Swift. На нем я и решил остановиться.
Но специфика документации по RxSwift в том, что описание всех команд ведет на reactivex.io, а там в основном дается общая информация, руки у разработчиков не дошли еще сделать документацию именно для RxSwift, что не всегда удобно. Некоторые команды имеют тонкости в реализации, есть те, о которых в общей документации нет ничего кроме упоминания.
Прочитав все главы вики с RxSwift гитхаба, я сразу решил поразбираться с официальными примерами, тут то и стало ясно, что с RX такое не пройдет, нужно хорошо понимать основы, иначе будешь как мартышка с копипастом гранатой. Я начал разбирать самые сложные для понимания команды, потом те, что вроде понятны, но задав себе вопросы по ним я понял, что лишь догадываюсь на то как верно ответить, но не уверен.
В общем ничтоже сумняшеся я решил проработать все операторы RxSwift. Лучший способ что то понять в программировании — запустить код и посмотреть как он отработает. Затем учитывая специфику реактивного программирования — очень полезны схемы, ну и краткое описание на русском. Закончив сегодня работу, я подумал, что грех не поделиться результатами с тем, кто лишь присматривается к теме реактивного программирования.
Много картинок и текста под катом, очень много!
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии21

iOS: работа с галереей (Photos framework)

Время на прочтение3 мин
Количество просмотров16K
Привет, Хабр! В данной статье решил написать о том, как работать с галереей с помощью фреймворка Photos. В этой статье рассмотрим базовые возможности фреймворка: создание альбома, сохранение, удаление и загрузку фото. Если будут положительные отзывы, то в следующих частях напишу про работу с live фото, видео, наложение фильтров, кэш и прочие функции.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии3

Разгоняем сборку Swift проекта в Xcode

Время на прочтение6 мин
Количество просмотров16K

image
Статья о том как починить инкрементальную компиляцию в Xcode для Swift проектов и ускорить build phases для Cocoapods и Carthage, ничего не поломав.


Небольшой спойлер: на трех разных проектах получилось сократить время инкрементальной сборки в 9 раз!


Туториал несет сугубо практический характер с минимумом воды. Обязательно к прочтению для действующих iOS разработчиков.


Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии21

Тюнинг Swift компилятора. Часть 1

Время на прочтение5 мин
Количество просмотров12K

image


Обзор Swift 3 компилятора и способы его ускорить. Часть 1.
Развенчание существующих мифов. Мнение о проблемах autocompletion в Xcode.


Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии44

Тюнинг Swift компилятора. Часть 2

Время на прочтение6 мин
Количество просмотров13K

image


Продолжение исследования способов ускорить компиляцию Swift. Издевательство над семантическим анализатором и неожиданные настройки проекта.


Ссылка на первую часть для тех, кто пропустил.


Всего голосов 23: ↑20 и ↓3+17
Комментарии4

Нейронные сети на Javascript

Время на прочтение7 мин
Количество просмотров166K
image
Идея для написания этой статьи возникла прошлым летом, когда я слушал доклад на конференции BigData по нейронным сетям. Лектор «посыпал» слушателей непривычными словечками «нейрон», «обучающая выборка», «тренировать модель»… «Ничего не понял — пора в менеджеры», — подумал я. Но недавно тема нейронных сетей все же коснулась моей работы и я решил на простом примере показать, как использовать этот инструмент на языке JavaScript.

Мы создадим нейронную сеть, с помощью которой будем распознавать ручное написание цифры от 0 до 9. Рабочий пример займет несколько строк. Код будет понятен даже тем программистам, которые не имели дело с нейронными сетями ранее. Как это все работает, можно будет посмотреть прямо в браузере.
Читать дальше →
Всего голосов 58: ↑54 и ↓4+50
Комментарии79

iOS Localization: XLIFF

Время на прочтение7 мин
Количество просмотров18K


В интернете легко найти статьи по локализации iOS, где описываются все основные этапы. Проблема в том, что чаще нам на глаза попадается вариант ручного заполнения файла *.strings. Это довольно муторный подход и даже небольшая автоматизация в этом нам бы пригодилась. Ещё в iOS 8 Apple добавила возможность частичной автоматизации перевода приложения посредством экспорта и импорта локализованных строк через XLIFF-документ.

Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии23

Mikrotik. Failover. Load Balancing

Время на прочтение12 мин
Количество просмотров288K
Когда у меня встала необходимость разобраться, как сделать failover или load balancing, имея два и более каналов в мир, я нашел множество статей и инструкций, в которых описывались рабочие конфигурации. Но почти нигде не нашел разъяснения, как все работает, и описания отличий разных вариантов. Хочу исправить эту несправедливость и собрать простейшие варианты построения failover и load balancing конфигураций в одной статье.

Итак, у нас есть роутер, который соединяет нашу локальную сеть и два канала в интернет (основной ISP1 и резервный ISP2).

Давайте рассмотрим что же мы можем сделать:

Сразу предупрежу: несмотря на то, что в этой статье буду все описывать для mikrotik, не буду касаться темы скриптов
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии45

Интернет. Теперь на даче

Время на прочтение4 мин
Количество просмотров43K
Заметка ни на что не претендует, просто еще один опыт.

image

Так замечательно оторваться от городских будней и насладиться единением с природой. Но даже в такие счастливые минуты, когда гаджеты и интернет вещей уходят на второй и третий план, приходится иметь план «Б», если позвонят и попросят куда-нибудь подключиться и что-нибудь посмотреть. Естественно, через интернет. Хорошо, если мобильный оператор развернул в твоем населенном пункте современную сеть передачи данных, которая удовлетворяет по качеству и по скорости.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии91

Встраиваем pre-built dylib в приложение

Время на прочтение4 мин
Количество просмотров8.8K

Перед началом майских праздников я провел 5 плотных дней за написанием приложения под iOS и Mac для конкурса. Разработка шла планомерно, к последнему дню работа приложения меня начала более-менее удовлетворять. Я решил отложить отправление на утро самого последнего дня, чтобы сделать это со свежой головой (там нужно было еще приложить текстовое описание). Утром, за несколько часов до поезда в отпуск, я сел и со спокойной душой сделал финальную обкатку основного функционала. И тут мне показалось хорошей идеей потестить, как будет вести себя приложение на абсолютно другой машине, на которой не велась разработка. Я архивирую свое приложение, перекидываю его на другой Mac и… оно не запускается. С супер-информативной ошибкой "Image not found" и путём явно указывающим на проблему с dylib. Итак: 3 часа до поезда и не запускающиеся по непонятным причинам приложение. Почему это произошло, как этого можно было бы избежать и как я справился с этой проблемой — обо всём этом под катом.

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии6

Интерполяция: рисуем плавные графики с помощью кривых Безье

Время на прочтение4 мин
Количество просмотров42K
Доброго времени суток, харбачитатель.

В этой статье мне хотелось бы рассказать об одном придуманном когда-то алгоритме (или скорее всего — переизобретённом велосипеде) построения плавного графика по заданным точкам, используя кривые Безье. Статья была написана под влиянием вот этой статьи и очень полезного комментария товарища lany, за что им отдельное спасибо.

Постановка задачи
Есть массив Y-ков точек, расположенных равномерно по оси X. Нужно получить плавный график, который проходит через все заданные точки. Пример на рисунке ниже:



Всех, кому интересно, прошу под кат.
Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии54

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

Время на прочтение14 мин
Количество просмотров202K

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



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

В этой статье я кратко рассмотрю некоторые популярные архитектурные паттерны в среде iOS и сравню их в теории и на практике. Больше информации вы найдете при переходе по ссылкам, указанным в тексте.
Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии18

Как подружить iOS-приложение с типографикой

Время на прочтение4 мин
Количество просмотров13K


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

Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии3

По итогам Rambler.iOS V

Время на прочтение2 мин
Количество просмотров11K


Во вторник состоялся Rambler.iOS V, который мы анонсировали на Хабре ранее. Эксперимент с разбитием одной очень крупной темы на восемь связанных между собой докладов отлично состоялся — благодаря такой гранулированности докладчики смогли сосредоточиться именно на своем аспекте VIPER и подготовить действительно мощные выступления.
Читать дальше →
Всего голосов 21: ↑16 и ↓5+11
Комментарии2

Реализация MVVM в iOS с помощью RxSwift

Время на прочтение5 мин
Количество просмотров45K
Существует бесчисленное множество статей относительно шаблона MVVM в iOS, но немного о RxSwift, и мало кто акцентирует внимание на том, как выглядит паттерн MVVM на практике и как его реализовать.

ReactiveX

ReactiveX — библиотека для создания асинхронных и основанных на событии программ при помощи наблюдаемой последовательности.  — reactivex.io

RxSwift — относительно молодой фреймворк, который позволяет "реактивно программировать". Если Вы ничего о нем не знаете, тогда наведите справки, потому что функциональное реактивное программирование (FRP) набирает обороты, и не собирается останавливаться.
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии9

Работа iOS App в фоновом режиме

Время на прочтение4 мин
Количество просмотров44K
Стояла задача, чтобы программа отправляла через web socket текущие координаты по заданному пользователем интервалу. К тому же, программа должна работать в фоне и если пользователь или iOS по какой то причине её выгрузит из памяти, то желательно чтобы она перезапустилась и продолжила работу в фоне.
Поставленную задачу надо решить только средствами iOS без изменения серверной части (никаких Push Notifications).

Отправлять координаты по таймеру когда программа свернута в фон не составляет проблемы, для этого можно использовать background location mode для получения координат и long-running tasks для таймеров.

Но так как в iOS нет такой прелести как Android Background Services, то если вручную завершить программу, код перестает выполняться. Потому основная сложность заключается в том, как максимально быстро запустить программу в фоне, чтобы она продолжила выполнять свою задачу дальше, если её по каким то причинам выгрузила из памяти iOS, или если пользователь перезагрузил устройство, или если он вручную «убил» программу.

Теперь о том, что помогло решить данную задачу в приемлемом варианте:
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии28

Использование gitlab continuous integration для деплоя

Время на прочтение4 мин
Количество просмотров48K
Совсем недавно гитлаб героически выкатил версию 8.0 своего конкурента гитхабу. Из интересного — движок continuous integration теперь встроен в платформу, а значит доступен в качестве бесплатного сервиса для всех желающих на gitlab.com. Совместно с бесплатными приватными репозиториями это делает облачный сервис гитлаб не только удобным местом для хранения кода, но также тестирования и деплоя. О последнем я и расскажу под катом.
Осторожно, под катом - много англицизмов!
Всего голосов 24: ↑23 и ↓1+22
Комментарии23

«Что нового в Swift 2?» на примерах

Время на прочтение16 мин
Количество просмотров37K


Swift 2 сфокусировался на улучшении самого языка, взаимодействия с Objective-C и повышении производительности компилируемых приложений. Новые возможности Swift 2 представлены в 6 различных областях:

  • фундаментальные конструкции языка, такие, как enum , scoping (область действия), синтаксис аргументов и т.д.
  • сопоставление с образцом (pattern matching)
  • проверка доступности (availability checking)
  • расширения (extensions) протокола
  • управление ошибками (error handling)
  • взаимодействие с Objective-C

Я буду рассматривать новые возможности Swift 2, сопровождая их примерами, код которых находится на Github.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии36

Charles: незаменимый тул в арсенале QA-инженера

Время на прочтение5 мин
Количество просмотров226K

Для тестирования мобильных приложений, работающих с удаленными серверами, QA-инженеру приходится держать под рукой множество разных тестовых аккаунтов, логов, запросов и ответов. Реальность такова, что не всегда удается договориться о предоставлении нужных тестовых данных в срок. Чаще всего серверные разработчики будут незнакомыми вам людьми по ту сторону Скайпа. В таких ситуациях приходится своими руками подменять ответ сервера перед его передачей в приложение.

Чтобы редактировать выдачу сервера и воспроизводить сложные тестовые сценарии в QA Redmadrobot, мы используем Charles.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии15

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность