• Проверка внедрения зависимостей на Swift

      image


      Проект с Dependency Injection похож на елочную гирлянду — он красив, радует детей и взрослых. Но если где-то не внедрить зависимость, отключится целый сегмент приложения. И, чтобы найти источник проблем, придется проверять все зависимости в этом сегменте.


      В этой статье описаны несколько вариантов поиска пустых зависимостей. А в нашем репозитории есть небольшая библиотека, которая поможет в этом: TinkoffCreditSystems/InjectionsCheck

      Читать дальше →
      • +12
      • 4,5k
      • 3
    • Эффективная DI библиотека на Swift в 200 строк кода

        Библиотека EasyDi содержит контейнер зависимостей для Swift. Синтаксис этой библиотеки был специально разработан для быстрого освоения и эффективного использования. Она умещается в 200 строк, при этом умеет все, что нужно взрослой Di библиотеке:

        — Создание объектов и внедрение зависимостей в существующие
        — Разделение на контейнеры — Assemblies
        — Типы разрешения зависимостей: граф объектов, синглетон, прототип
        — Разрешение циклических зависимостей
        — Подмена объектов и конктесты зависимостей для тестов

        В EasyDi нет разделения на register/resolve. Вместо этого зависимости описываются вот так:

        var apiClient: IAPIClient {
          return define(init: APIClient()) {
            $0.baseURl = self.baseURL
          }
        }
        

        Cocoapods / EasyDi
        Github / EasyDi

        Под катом очень краткое описание «Зачем DI и что это», также примеры использования библиотеки:

        • Как использовать и типы зависимостей
        • Как тестировать c подменой объектов
        • Как можно это использовать для A/B тестов
        • Как собрать VIPER-модуль
        Читать дальше →
      • Аппроксимация кривой в траекторию стрелы для игры St.Val

          В этом посте я расскажу, как создать в мобильном приложении управление c помощью рисования траектории. Такое управление используется в Harbor Master и FlightControl: игрок пальцем рисует линию, по которой движутся корабли и самолеты. Для моей игры St.Val потребовалась аналогичная механика. Как я её делал и с чем пришлось столкнуться — читайте ниже.



          Пара слов об игре. В St.Val основная цель соединять сердца по цвету с помощью стрел. Задача игрока: построить траекторию полета стрелы так, чтобы она соединяла сердца в полете. Игра создавалась на базе Cocos2D 2.1 под iOS, ниже видео игровой механики.



          Основные задачи


          Для создания управления нужно решить три задачи:
          1. Считать координаты
          2. Сгладить и аппроксимировать их
          3. Запустить по ним стрелу


          Плюс отдельно я опишу алгоритм обнаружения петель в траекториях, который мне понадобился для расширения механики игры.

          Под катом решение этих задач и ссылка на демонстрационный проект.

          Читать дальше →
          • +16
          • 13,4k
          • 3
        • Психоэргономика

            :-)

            В войне с лишними кликами и тормозящими приложениями мы часто забываем о восприятии глазами конечного пользователя. Поясню, что это значит на простом примере: MacOS скрывала консоль с протоколом загрузки, а Windows — нет. В результате MacOS казалась проще людям, далеким от IT.

            Опыт работы с восприятием конечного потребителя накоплен в разных областях – от производства роботов до памперсов. Я подобрал несколько показательных примеров.

            Читать дальше →
          • Twitter + динамический IP

              Сегодня при обсуждении с другом проблемы динамических IP адресов и домашнего сервера решили, что для определения IP-адреса можно использовать не только динамические DNS, но и Twitter. API у него открытый, можно не только записывать статус(т.е. IP), но и считывать. Несколько часов работы руками и можно получить легкий автоматический динамический DNS, поставив код отправки на крона. Или написать демон/службу, чтобы следило за изменением внешнего IP. А можно расширить функционал и передавать какую-нибудь полезную информацию или статус сервера.