Рубрика «swift»

image
За 9 лет работы фич в проектах роботов становилось все больше, запутаться в коде становилось все проще.

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

Главная проблема, которая возникает при долгосрочном развитии приложения – масштабируемость. Решить ее может переход на новую архитектуру или рефакторинг кодовой базы и добавление новых сущностей, которые разгружают объекты с большим количеством обязанностей.
Читать полностью »

Привет! Я Богдан, работаю в мобильной команде Badoo iOS-разработчиком.

В этой статье мы рассмотрим использование паттернов «Синглтон» и «Локатор сервисов» (service locator) в iOS и обсудим, почему их часто называют антипаттернами. Я расскажу, как и где их стоит применять, сохраняя код пригодным для тестирования.

Синглтон, локатор сервисов и тесты в iOS - 1
Читать полностью »

Распознавание лиц. Создаем и примеряем маски - 1

Пока сообщество iOS-разработчиков спорит, как писать проекты, пока пытается решить, использовать ли MVVM или VIPER, пока пытается подSOLIDить проект или добавить туда реактивную турбину, я попытаюсь оторваться от этого и рассмотреть, как работает под капотом еще одна технология с графика Hype-Driven-Development.

В 2017 году на вершине графика хайпа — машинное обучение. И понятно почему:

  • Появилось больше открытых наборов данных.
  • Появились соответствующее аппаратные средства. В том числе облачные решения.
  • Технологии из этой области стали применяться в production-проектах.

Машинное обучение — широкая тема, остановлюсь на распознавании лиц и попытаюсь разобраться, какие технологии были до рождества христова CoreML, и что появилось после релиза фреймворка Apple.

Читать полностью »

Зачем я купил Mac Mini (Late 2012) накануне 2018 года? - 1

~ Продать MacBook Pro, которому уже перевалило за 3 года
~ Сменить 13'' экран на парочку 22'' и повысить комфорт разработки
~ Получить мощную машину для быстрой компиляции проектов на Swift

Это основные причины, повлиявшие на покупку Mac Mini. Первые два пункта достаточно очевидны, но вот к последнему пункту явно нужны комментарии...Читать полностью »

image

В этом туториале мы создадим простое, но полнофункциональное приложение под watchOS 4. А конкретнее, мы будем работать над приложением придуманной авиакомпании Air Aber для Apple Watch.

Из этого туториала вы узнаете:

  • Как добавлять целевую сборку watchOS 4 в приложение iOS.
  • Как обмениваться данными между двумя целевыми сборками.
  • Как добавить в Storyboard контроллер интерфейса watchOS и расположить объекты интерфейса.
  • Как создать подкласс WKInterfaceController и соединить всё вместе.
  • Как добавить новый контроллер интерфейса, добавить к нему таблицу и создать прототип из строк.
  • Как создать подкласс класса WKInterfaceController, чтобы заполнить таблицу, настроить строки и обрабатывать выбор.
  • Как сделать контроллер интерфейса модальным и передавать ему данные для отображения.
  • Как создавать анимации на основе изображений.
  • Как использовать API анимации watchOS 4.

Читать полностью »

What we have?

UI можно определить как набор вьюх, которые отображают данные, реагируют на события и при этом каким-то определенным образом расположены на экране.

Как мы размещаем элементы на экране?

  • Qt предлагает использовать контейнеры, умеющие внутри себя располагать элементы определенным образом. Вкладывая эти контейнеры друг в друга, можно получить необходимую расстановку.
  • WPF/XAML предлагает аналогичные контейнеры.
  • Android предлагает аналогичные контейнеры + систему констреинтов.
  • iOS предлагает Autolayout. Нужно описать набор ограничений (уравнений), непротиворечиво и однозначно описывающих расположение элементов. Решив систему уравнений с этими ограничениями, движок получит координаты и размеры элементов.
  • У Delphi есть anchors: прибивание краев к контейнеру. Очень похоже на resizing masks в iOS.
  • В web на сколько я понимаю используется вкладывание друг в друга контейнеров, поведение которых описывается стилями.

What problem with this?

We need to use code for special cases

Описанные инструменты заточены под типовые случаи, зачастую мы не можем (или можем, но это сильно неудобно) описать расположение какого-то элемента с помощью этих инструментов. Приходится делать это в коде. Логика описания layout'а размазывается по нескольким местам.

Должен быть способ лучше.

Читать полностью »

В новом дайджесте мы собрали истории про A/B-тестирование в Яндексе, про Google и Swift, про закрытие проектов, про новых тамагочи, про автоматизацию всего сущего и многое другое.

Дайджест интересных материалов для мобильного разработчика #231 (20 ноября — 26 ноября) - 1Читать полностью »

Hint

Перед прочтением этой статьи советую ознакомиться с предыдущей статьей о TensorFlowKit и поставить star репозиторию.

Я не люблю читать статьи, сразу иду на GitHub

GitHub: TensorFlowKit
GitHub: Example
GitHub: Другое
TensorFlowKit API
Посeтив репозиторий, добавьте его в «Stars» это поможет мне написать больше статей на эту тему.

image

Начиная работать в сфере машинного обучения, мне было тяжело переходить от объектов и их поведений к векторам и пространствам. Сперва все это достаточно тяжело укладывалось в голове и далеко не все процессы казались прозрачными и понятными с первого взгляда. По этой причине все, что происходило внутри моих наработок, я пробовал визуализировать: строил 3D модели, графики, диаграммы, изображения и тд.

Говоря об эффективной разработке систем машинного обучения, всегда поднимается вопрос контроля скорости обучения, анализа процесса обучения, сбора различных метрик обучения и тд. Особая сложность заключается в том, что мы (люди) привыкли оперировать 2х и 3х мерными пространствами, описывая различные процессы вокруг нас. Процессы внутри нейронных сетей происходят в многомерных пространствах, что серьезно усложняет их понимание. Осознавая это, инженеры по всему миру стараются разработать различные подходы к визуализации или трансформации многомерных данных в более простые и понятные формы.

Существуют целые сообщества, решающие такого рода задачи, например Distill, Welch Labs, 3Blue1Brown.
Читать полностью »

Microsoft выпустила несколько интересных инструментов для мобильных и ML разработчиков, Apple написала как определяет лица, Google как работает смешанная стабилизация в новых Pixel, а разработчики Shadow Fight 3 о том, как они делали новую версию игры. Все это и многое-многое другое в нашей еженедельной подборке.

Дайджест интересных материалов для мобильного разработчика #230 (13 ноября — 19 ноября) - 1Читать полностью »

Я не люблю читать статьи, сразу иду на GitHub

Заранее прошу прощения за это неудобство.

Все, что будет описано в данной статье тем или иным образом затронет несколько сфер computer science, но погрузиться в каждую отдельную сферу не представляется возможным. Заранее прошу прощения за это неудобство.

Рассказывать о том, что такое машинное обучение и искусственный интеллект, в 2017 году наверное нет необходимости. На эту тему уже написано большое количество как публицистических статей, так и серьезных научных работ. Поэтому предполагается, что читатель уже знает, что это такое. Говоря о машинном обучении, сообщество data scientist и software engineers, как правило подразумевает глубокие нейронные сети, которые приобрели большую популярность по причине своей производительности. На сегодняшний день в мире существует большое количество различных программных решений и комплексов для решения задачи искусственных нейронных сетей: Caffe, TensorFlow, Torch, Theano(rip), cuDNN etc.

Swift

Swift — инновационный, protocol — oriented, open source язык программирования, выращенный в стенах компании Apple Крисом Латнером (недавно покинувшим компанию Apple, после SpaceX и обосновавшимся в Google).
В Apple’s OSs уже были различные библиотеки для работы с матрицами и векторной алгеброй: BLAS, BNNS, DSP, впоследствии объединенные под крышей одной библиотеки Accelerate.
В 2015 появились небольшие решения для реализации математики на основе графической технологии Metal.
В 2016 появился CoreML:
image
CoreML способен импортировать готовую, натренированную модель (CaffeV1, Keras, scikit-learn) и далее предоставить разработчику возможность экспортировать ее в приложение.
То есть, вам необходимо: Собрать модель на другой платформе, на языке Python или C++, используя сторонние фреймворки. Далее обучить ее на стороннем аппаратном решении.
И только после этого вы можете импортировать и работать на языке Swift. На мой взгляд очень нагромождено и сложно.
Читать полностью »