Рубрика «multiplatform»

Reaktive — мультиплатформенная библиотека для реактивного Kotlin - 1

Многие сегодня любят реактивное программирование. В нём масса плюсов: и отсутствие так называемого "callback hell", и встроенный механизм обработки ошибок, и функциональный стиль программирования, который уменьшает вероятность багов. Значительно проще писать многопоточный код и легче управлять потоками данных (объединять, разделять и преобразовывать).

Для многих языков программирования существует своя реактивная библиотека: RxJava для JVM, RxJS — для JavaScript, RxSwift — для iOS, Rx.NET и т. д.

Но что мы имеем для Kotlin? Было бы логично предположить, что RxKotlin. И, действительно, такая библиотека существует, но это всего лишь набор расширений (extensions) для RxJava2, так называемый «сахар».

А в идеале хотелось бы иметь решение, соответствующее следующим критериям:

  • мультиплатформенность — чтобы иметь возможность писать мультиплатформенные библиотеки с использованием реактивного программирования и распространять их внутри компании;
  • Null safety — система типов Kotlin защищает нас от «ошибки на миллиард долларов», так что значения null должны быть допустимы (например, Observable<String?>);
  • ковариантность и контравариантность — ещё одна очень полезная особенность Kotlin, дающая возможность, например, безопасно привести тип Observable<String> к Observable<CharSequence>.

Мы в Badoo решили не ждать у моря погоды и сделали такую библиотеку. Как вы уже могли догадаться, назвали мы её Reaktive и выложили на GitHub.

В этой статье мы подробнее рассмотрим ожидания от реактивного программирования на Kotlin и увидим, насколько им соответствуют возможности Reaktive.
Читать полностью »

Ещё один dsl на Kotlin или как я печатал PDF из react - 1

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

Самое сложное, что у React свой dsl, а у html свой. Как решить эту проблему? Написать ещё один!

Чуть не забыл, всё это будет написано на Kotlin, так что, на самом деле, это статья о Kotlin dsl.
Читать полностью »

Вчера компания JetBrains выпустила релиз Kotlin 1.2. Новая версия — большой шаг на пути к тому, чтобы сделать Kotlin наиболее удобным инструментом для разработки всех компонентов современного приложения.

В версии Kotlin 1.1 мы официально выпустили поддержку JavaScript — возможность транслировать код на Kotlin в JS и выполнять его в браузере. В этой версии мы добавляем к этому возможность переиспользования кода между JVM и JavaScript. Теперь вы можете использовать одну и ту же реализацию бизнес-логики во всех компонентах вашего приложения — бэкэнде, фронтэнде в браузере и мобильном приложении под Android. Мы также работаем над библиотеками, которые в этом помогают — в частности, над кросс-платформенной библиотекой для сериализации.

Kotlin 1.2: общий код для JVM и JavaScript - 1

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

Совсем недавно я опубликовал пост о моем небольшом проекте tengine. Для меня довольно неожиданным было то, что многие проявили интерес к его идеям и наработкам. А раз есть интерес – это повод продолжить публикации.

Предлагаемая вам статься является туториалом по созданию небольшой игры. Необходимость в нем очевидна: идеологически, создать что-либо в tengine без редактора уровней (MapEditor3, далее me3) фактически невозможно. Именно с помощью него ресурсы привязываются к объектам игры, генерируются файлы с константами-идентификаторами, создается сцена, звуковые схемы и т.д. И самое главное – me3 генерирует готовые бинарные файлы уровней, необходимые для работы логики tengine: файл с общими данными (o-файл), файлы с данными по каждому уровню (l[0..n]-файлы) и файлы с текстовыми тынными (t[0..n]-файлы)

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

Приветствую всех, кому стало интересно узнать о моем небольшом проекте, которым занимаюсь в свободное от работы время, о своем долгоиграющем проекте под названием «tengine».

Какова же цель этого поста? Ответ простой — я ищу однодумцев. Я верю в то, что есть еще много людей, которым нравится славный и добрый олдскул. В этом и вся миссия — писать удовольствия ради что-то маленькое, но вполне функциональное, платформу для «приставочных» игрушек в стиле 8/16 бит.

Главная особенность, отличающая tengine от сотен подобных поделок — не совсем стандартная идеология:

  • архитектура проекта делает упор на минимизацию использования динамической памяти. Если память и выделяется, она выделяется исключительно на инициализации подсистем
  • использовать динамическую память нужно так, как будто не существует операционной системы, постоянно помнить о фрагментации. Удаление памяти происходит в строго обратном порядке создания (за этом следит простой механизм контроля удаляемых указателей)
  • использование сторонних библиотек сведено к минимуму и должно быть аргументировано, зачастую это потенциальный источник фрагментации памяти
  • игровая сцена представляет собою готовую для использования память, сгенерированная редактором уровней
  • работа с объектами сцены игры ведется исключительно через идентификаторы, динамически создать объект невозможно
  • использование fixed point вместо float
  • мультиплатформенность
  • официальный язык проекта — си

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