• Swift-фреймворк в Objective-C-приложении

    Хоть Apple и написали, казалось бы, подробную документацию о том, как можно использовать Swift-код внутри Objective-C-приложения (и наоборот), но когда доходит до дела, этого почему-то окаывается недостаточно. Когда в проекте, в котором я задействован, появилась необходимость обеспечить совместимость Swift-библиотеки одного из продуктов компании с Objective-C-приложением одного из клиентов, документация Apple породила больше вопросов, чем дала ответов (ну или по крайней мере оставила множество пробелов). Интенсивное использование поисковых систем показало, что данная тема освещена в Сети довольно скудно: парочка вопросов на StackOverflow, пара-тройка вводных статей (на англоязычных ресурсах, конечно) – вот и все, что удалось найти.

    Данная статья является обощением найденной информации, а также полученного опыта. Подчеркну, она не претендует на то, чтобы называться, как говорится, хорошей практикой, а лишь предлагает возможные действия в описанных обстоятельствах или является неким академическим экспериментом.
    Читать дальше →
  • В поисках идеальной архитектуры

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

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

      Главная проблема, которая возникает при долгосрочном развитии приложения – масштабируемость. Решить ее может переход на новую архитектуру или рефакторинг кодовой базы и добавление новых сущностей, которые разгружают объекты с большим количеством обязанностей.
      Читать дальше →
      • +10
      • 5,9k
      • 7
    • Зачем я купил Mac Mini (Late 2012) накануне 2018 года?


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


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

        Читать дальше →
      • Туториал: создаём простое приложение для watchOS 4

        • Перевод
        image

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

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

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

        What do we have?


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


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


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

        What is the problem with this?


        We need to use code for special cases


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

        Читать дальше →
        • –1
        • 1,9k
        • 5
      • Визуализация процесса обучения нейронной сети средствами TensorFlowKit

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

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

          image

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

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

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

          Читать дальше →
        • AdBlock похитил этот баннер, но баннеры не зубы — отрастут

          Подробнее
          Реклама
        • Swift не нужен?

          • Перевод
          Не перестаю задаваться вопросом — какие у Apple планы на Swift и Objective-C? Когда в 2014 году появился Swift, его создатель Крис Латтнер утверждал, что эти два языка смогут сосуществовать бесконечно долго. Из почтовой рассылки пользователям Xcode:
          3 Июня 2014
          McLaughlin, Michael P.
          Кто-нибудь знает, действительно ли Apple собирается прекратить поддержку С и С++? Fortran уже не поддерживается, хотя осталось еще много кода на Fortran, и сравнительно нового, как в MultiNest.
          Пожалуйста, скажите, что это не так. Не все считают, что «опытные пользователи» — это те, кто просто создает полнометражные мультики. Многие из них ученые и инженеры.

          Здравствуйте, Michael,
          Мы не строили планы на что-либо подобное. Swift — это просто новый вариант разработки под платформу. Мы не собираемся прекращать поддержку ни C, ни C++, ни Objective-C. Если вы разрабатываете на одном из этих языков, можете свободно продолжать его использовать.

          — Крис.
          Оригинальный текст письма
          > On Jun 3, 2014, at 5:45 AM, McLaughlin, Michael P. <mpm...@mitre.org> wrote:
          > Does anyone know, for real, if Apple intends to stop supporting C and C++?
          > That’s what it sounded like. They already do not support Fortran even though
          > there is a *lot* of Fortran code out there, even fairly new code like MultiNest.
          >
          > Please say it isn’t so. Not all of us consider “power users” to be just those
          > who create feature-length cartoons. Many are scientists and engineers.

          Hi Michael,

          We have no plans to do anything like that. Swift is a new option for developing
          on the platform. We have no plans to drop C, C++ or Objective-C. If you’re
          happy with them, please feel free to keep using them.

          -Chris


          Дело в том, что в это никто не верит. Крис Латтнер уже давно покинул Apple, и если его утверждение окажется ложным, он не сможет принять критику от лица компании. В целом разработчики согласились на том, что Apple в конечном итоге откажется от Objective-C, и Swift станет единственным языком «первого класса» для разработки Cocoa-приложений.
          Читать дальше →
        • Swift и TensorFlow

            Я не люблю читать статьи, сразу иду на 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. На мой взгляд очень нагромождено и сложно.
            Читать дальше →
            • +10
            • 5,3k
            • 7
          • Делаем хорошо со Swift 4, Perfect, Protobuf и MySQL на Linux-сервере

            Можно долго смотреть на три вещи: как течет вода, как имплементируется CoreFoundation в Linux Swift, и как не обновляется документация Perfect


            Сначала кратко для тех, кто не в курсе:Perfect — это один из самых стабильных серверных фреймворков на Swift. (benchmark)


            Задача:


            Сервер Perfect на Linux c MySQL и Protocol Buffers для общения с приложением-клиентом


            Важное требование:


            Мы прогрессивные хипстеры со свифтом (sarcasm), поэтому дайте самую последнюю версию Swift 4.0.2

            Читать дальше →
          • SILVER: как я проектирую приложения для iOS

              Еще одна архитектура?


              В последние годы заметно набрала обороты тема альтернативных архитектур для создания приложений под платформу iOS. На доске особого почета уже закрепились некоторые силачи, известные как MVP, MVVM, VIPER. А кроме них есть еще множество других, не столь распространенных.


              Среди силачей, на мой взгляд, ни одна не является универсальной таблеткой для всех случаев:


              • если нужно сделать пару маленьких экранов со статическим набором данных, то вводить полноценный VIPER довольно затратно;
              • если не нравится реактивный подход, то MVVM с большой долей вероятности пройдет мимо;
              • если столкнулся с проблемой Massive в большом проекте, то MVC наверняка уже не подходит.

              Есть вариант использовать несколько архитектур, ибо многие позволяют в той или иной степени сочетать себя с другими, но это тоже не слишком удобно как минимум по трем причинам:


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

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


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

              Читать дальше →
            Самое читаемое