Привет, любители Habr! По счастливой случайности в августе 2018 года мне посчастливилось вместе с моим товарищем(kirillskiy) начать работать над потрясающим по своей интересности проектом. И вот, днем мы были обычными программистами, а ночью с̶у̶п̶е̶р̶г̶е̶р̶о̶я̶м̶и̶ снова программистами, которые бьются над вопросами распознавания движений для людей имеющих ограничения функциональности своих конечностей, естественно этим могли бы пользоваться и здоровые люди, используя подобную технологию самыми разными способами.
Читать полностью »
Рубрика «kotlin» - 23
Android, Rx и Kotlin или как заставить сжиматься клешню из Lego. Часть 1
2019-01-29 в 16:24, admin, рубрики: android, android development, kotlin, mvp, neural networks, rxandroid, rxkotlin, машинное обучение, Носимая электроника, разработка мобильных приложений, Разработка под androidДайджест интересных материалов для мобильного разработчика #283 (21 — 27 января)
2019-01-27 в 11:45, admin, рубрики: andorid studio, android, App Store, kotlin, swift, unity, windows phone, Блог компании Everyday Tools, маркетинг мобильных приложений, машинное обучение, монетизация, разработка игр, разработка мобильных приложений, Разработка под android, разработка под iOSНаш новый выпуск рассказывает про юбилейный Android 10, окончание Windows Phone и Windows Mobile, мгновенные приложения, лучшие приложения, киберспортивный фарминг и новые рекорды.
Игра (не) для дураков. Пишем AI для «Дурака» (часть 1)
2019-01-24 в 9:25, admin, рубрики: kotlin, искусственный интеллект, искусственный интеллект в играх, карточные игры, логические игрыДумаю, ни для кого не секрет, что "Дурак" (далее это слово будет написано с маленькой буквы и без кавычек) — это самая популярная карточная игра в России и странах бывшего СССР (хотя и почти неизвестная за его пределами). Несмотря на свое название и довольно несложные правила, выигрыш в ней все-таки зависит больше от мастерства игрока, чем от случайного расклада карт (в английской терминологии игры того и другого типов называются соответственно game of skill и game of chance. Так вот — дурак в большей степени game of skill).
Целью статьи является написание простого ИИ для игры. Под словом "простого" подразумевается следующее:
- интуитивно понятный алгоритм принятия решений (то есть, как следствие, никакого машинного обучения, в котором этот алгоритм скрыт глубоко "под капотом");
- отсутствие состояния (то есть, алгоритм руководствуется только данными на текущий момент времени, проще говоря, ничего не запоминает (например, не "считает" вышедшие из игры карты).
Дайджест интересных материалов для мобильного разработчика #282 (14 — 20 января)
2019-01-20 в 9:34, admin, рубрики: android studio, App Store, Google, kotlin, swift, unity3d, ux дизайн, Блог компании Everyday Tools, интерфейсы, искусственный интеллект, маркетинг мобильных приложений, разработка игр, разработка мобильных приложений, Разработка под android, разработка под iOSВ нашем новом дайджесте карта доверия к мобильным SDK, реки пользовательских данных, интерфейсы и юзабилити, определяющий отчет App Annie об экономике мобильных приложений и многое другое!
Субъективное видение идеального языка программирования
2019-01-07 в 14:51, admin, рубрики: c++, cortege, functional programming, kotlin, python, scala, union type, дизайн языков программирования, ненормальное программирование, ПрограммированиеДальнейший текст — моя точка зрения. Возможно, она позволит кому-то по-новому взглянуть на дизайн языков программирования или увидеть какие-то преимущества и недостатки конкретных фич. Я не буду лезть в частные подробности типа "в языке должна быть конструкция while", а просто опишу общие подходы. P.S. У меня когда-то была идея создать свой язык программирования, но это оказалось довольно сложным процессом, который я пока не осилил.
Влияние предыдущего опыта
На написание статьи меня вдохновила вот эта статья. Автор придумал свой язык программирования, и этот язык своим синтаксисом и особенностями оказался подозрительно похожим на Free Pascal, на котором и была написана реализация ВМ для языка. И это не совпадение. Языки программирования, на которых мы раньше писали, загоняют мышление в рамки языка. Мы сами можем не замечать этого, но сторонний наблюдатель с иным опытом может посоветовать что-то неожиданное или сам научиться чему-то новому.
Рамки мышления немного раздвигаются после освоения нескольких языков. Тогда в языке А вам может захотеться иметь фичу из Б и наоборот, а ещё появится осознание сильных и слабых стороны каждого языка.
Например, когда я пробовал придумать и создать свой язык, мои размышления кардинально отличались от тех, что были описаны в статье выше. Я думал о совершенно иных вещах в рамках совершенно иных терминов. Ниже я опишу фичи языка, которые я хотел бы видеть в "идеальном" языке программирования.
Мой опыт: когда-то я начинал с паскаля, впоследствии познакомился с Java, Kotlin, C++, Python, Scheme, а основными языком считаю Scala. Как и в вышеописанном случае, мой "идеальный" язык имеет много общего со Scala. По крайней мере, я отдаю себе отчёт в этом сходстве)
Подписываемся на Kafka по HTTP или как упростить себе Веб-хуки
2019-01-07 в 13:35, admin, рубрики: http, kotlin, ПрограммированиеСуществует множество способов обработки сообщений из Pub-Sub систем: использование отдельного сервиса, выделение изолированного процесса, оркестрация пулом процессов/потоков, сложные IPC, Poll-over-Http и многие другие. Сегодня я хочу рассказать о том, как использовать Pub-Sub по HTTP и про свой сервис, написанный специально для этого.
Использование готового HTTP -бэкенда сервисов в некоторых случаях является идеальным решением для обработки очереди сообщений:
- Балансировка из коробки. Обычно, бэкенд и так стоит за балансировщиком и имеет готовую к нагрузкам инфраструктуру, что сильно упрощает работу с сообщениями.
- Использование обычного REST-контроллера (любой HTTP-ресурс). Потребление сообщений по HTTP сводит к минимуму затраты на реализацию консюмеров под разные языки, если бэкенд разношерстный.
- Упрощение использования Веб-хуков других сервисов. Сейчас почти каждый сервис (Jira, Gitlab, Mattermost, Slack…) так или иначе поддерживает Веб-хуки для взаимодействия с внешним миром. Можно облегчить жизнь, если научить очередь выполнять функции HTTP-диспатчера.
Этот подход имеет и минусы:
- Можно забыть о легковесности решения. HTTP тяжёлый протокол, а использование фреймворков на стороне консюмера мгновенно приведёт к увеличению задержки (latency) и нагрузки.
- Лишаемся сильных сторон Poll-подхода, получая слабые стороны Push.
- Обработка сообщений теми же инстансами сервиса, которые обрабатывают клиентов, может сказаться на отзывчивости. Это несущественно, так как лечится балансировкой и изоляцией.
Я реализовал идею в виде сервиса Queue-Over-Http, о котором и пойдёт речь далее. Проект написан на Kotlin с использованием Spring Boot 2.1. В качестве брокера сейчас доступна только Apache Kafka.
Читать полностью »
Функциональная обработка ошибок в Kotlin с помощью Arrow
2019-01-06 в 12:20, admin, рубрики: arrow, kotlin, функциональное программированиеПривет!
Все любят runtime exceptions. Нет лучшего способа узнать о том, что что-то не было учтено при написании кода. Особенно — если исключения обваливают приложение у миллионов пользователей, и эта новость приходит паническим email'ом с портала аналитики. В субботу утром. Когда ты в загородной поездке.
После подобного всерьез задумываешься о обработке ошибок — и какие же возможности предоставляет нам Kotlin?
Первым на ум приходит try-catch. По мне — отличный вариант, но у него есть две проблемы:
- Это как-никак лишний код (вынужденная обертка вокруг кода, не лучшим образом сказывается на читаемости).
- Не всегда (особенно при использовании сторонних библиотек) из блока catch возможно получить информативное сообщение о том, что конкретно вызвало ошибку.
Давайте посмотрим во что try-catch превращает код при попытке решения вышеозвученных проблем.
Читать полностью »
Kotlin Native: следите за файлами
2019-01-05 в 20:41, admin, рубрики: C, Go, kotlin, Kotlin Native, Программирование, СиКогда вы пишите command line утилиту, последнее, на что вам хочется полагаться, так это на то, что на компьютере где она будет запущена установлен JVM, Ruby или Python. Так же хотелось бы на выходе иметь один бинарный файл, который будет легко запустить. И не возиться слишком много с memory management'ом.
По вышеозначенным причинам, в последние годы всегда, когда мне нужно было писать подобные утилиты, я использовал Go.
У Go относительно простой синтаксис, неплохая стандартная библиотека, есть garbage collection, и на выходе мы получаем один бинарник. Казалось бы, что еще нужно?
Не так давно Kotlin так же стал пробовать себя на схожем поприще в форме Kotlin Native. Предложение звучало многообещающе — GC, единый бинарник, знакомый и удобный синтаксис. Но все ли так хорошо, как хотелось бы?
Читать полностью »
Основы внедрения зависимостей
2019-01-03 в 9:34, admin, рубрики: android, android development, dependency injection, devcolibri, di, kotlin, testing, внедрение зависимостей, никто не читает теги, перевод с английского, Программирование, разработка, разработка мобильных приложений, Разработка под android, тестирование, Тестирование мобильных приложенийВ этой статье я расскажу об основах внедрения зависимостей (англ. Dependency Injection, DI) простым языком, а также расскажу о причинах использования этого подхода. Эта статья предназначена для тех, кто не знает, что такое внедрение зависимостей, или сомневается в необходимости использования этого приёма. Итак, начнём.