Обновить
25
0
Янчишин Руслан@r_ii

Разработчик

Отправить сообщение

Панорамки на StereoPi

Время на прочтение4 мин
Охват и читатели5.6K
image

Продолжаем эксперименты с Raspberry Pi, оснащенной двумя камерами одновременно. Напомню, что все игрища происходят вокруг Raspberry Pi Compute Module 3 Lite, вставленном в «кроватку» StereoPi.

В прошлых обзорах мы устанавливали камеры параллельно и работали со стереоэффектом. Здесь же подход ровно обратный: камеры смотрят в разные стороны, но оснащены широкоугольными объективами (200 градусов). И мы будем склеивать сферическую панораму 360 градусов!
Читать дальше →

MQTT, умный дом, ESP-8266 и Plug&Play

Время на прочтение4 мин
Охват и читатели22K
Создание умного дома подразумевает массу разных датчиков, контролирующих обстановку в доме — датчики движения, освещения, температурные и прочие. Если «умный дом» небольшой, то все выглядит просто даже с самодельными системами на базе открытых решений (MQTT, OpenHAB и т.д.) — подключили датчик, прописали его в программе OpenHAB или HomeAssistant и начали работать. Но если датчиков много, то появляется много рутинной и неблагодарной работы по прописыванию каждого из них в системе управления.

Предлагаемое решение («костыль») позволяет обойтись минимум ручных операций именно на этом этапе. Контроллер датчиков подключается к MQTT-брокеру и сам рассказывает про свои датчики и устройства в определенном формате в специальных топиках, затем небольшой скрипт на сервере умного дома создает соответствующие этим датчикам файлы конфигурации, после чего нужно только вручную определить их в специфичные для дома группы и можно приступать к созданию сценариев управления.

Конкретно эта прошивка работает на модулях с ESP-8266 (в том числе и на Sonoff Basic Switch и Sonoff Touch Wallswitch) с P&P скриптами для OpenHAB и HomeAssistant, но сам способ выдачи plug&play информации можно использовать и в других проектах.
Читать дальше →

Реализация алгоритма Левенберга-Марквардта для оптимизации нейронных сетей на TensorFlow

Время на прочтение23 мин
Охват и читатели32K

Это tutorial по библиотеке TensorFlow. Рассмотрим её немного глубже, чем в статьях про распознавание рукописных цифр. Это tutorial по методам оптимизации. Совсем без математики здесь не обойтись. Ничего страшного, если вы её совершенно забыли. Вспомним. Не будет никаких формальных доказательств и сложных выводов, только необходимый минимум для интуитивного понимания. Для начала небольшая предыстория о том, чем этот алгоритм может быть полезен при оптимизации нейронной сети.




Полгода назад друг попросил показать, как на Python сделать нейросеть. Его компания выпускает приборы для геофизических измерений. Несколько различных зондов в процессе бурения измеряют набор сигналов, связаных с параметрами окружающей скважину среды. В некоторых сложных случаях точно вычислить параметры среды по сигналам долго даже на мощном компьютере, а необходимо интерпретировать результаты измерений в полевых условиях. Возникла идея посчитать на кластере несколько сот тысяч случаев, и на них натренировать нейронную сеть. Так как нейросеть работает очень быстро, её можно использовать для определения параметров, согласующихся с измеренными сигналами, прямо в процессе бурения. Детали есть в статье:


Kushnir, D., Velker, N., Bondarenko, A., Dyatlov, G., & Dashevsky, Y. (2018, October 29). Real-Time Simulation of Deep Azimuthal Resistivity Tool in 2D Fault Model Using Neural Networks (Russian). Society of Petroleum Engineers. doi:10.2118/192573-RU


Одним вечером я показал, как keras реализовать простую нейронную сеть, и друг на работе запустил обучение на насчитанных данных. Через пару дней обсудили результат. С моей точки зрения он выглядел перспективно, но друг сказал, что нужны вычисления с точностью прибора. И если средняя квадратичная ошибка (mean squared error) получилась в районе 1, то нужна была 1е-3. На 3 порядка меньше. В тысячу раз.

Читать дальше →

10 библиотек, о которых должен знать каждый Android-разработчик

Время на прочтение7 мин
Охват и читатели28K

10 библиотек, о которых должен знать каждый Android-разработчик


В 2015 году мы уже публиковали статью о пяти лучших библиотеках, которые мы использовали в то время. Однако платформа Android значительно выросла с тех пор. Как вы знаете, в такой быстро развивающейся области, как разработка программного обеспечения, всё меняется и развивается с молниеносной скоростью. Именно поэтому мы решили, что пришло время обновить список наиболее эффективных Android-библиотек.

Читать дальше →

Беспроводные метки NFC

Время на прочтение4 мин
Охват и читатели18K


Технический прогресс не стоит на месте, появляющиеся новые технологии со временем дешевеют и становятся доступны практически всем желающим. Как пример можно привести мобильные телефоны. Середина 80-ых — начало 90-ых были переносные таксофоны с ручками или кирпичи стоимостью несколько тысяч $, конец 90-ых — большого размера трубки, с торчащими антеннами со стоимостью от 100$ Такую же аналогию можно провести с NFC метками, используемыми в учетных целях.

  • Уникальный идентификатор nfc метки можно занести в типовой регистр штрих кодов(или доп.свойств) и использовать со смартфона при заполнении, например, инвентаризации административно хозяйственного отдела.
  • В более сложном варианте можно записывать uid номенклатуры и часть названия прямо в метку NFC, при таком варианте связь метки и номенклатуры можно хранить только в метках.
  • Также в случае использования билетов, возможно дешифровать напечатанный номер на билете или же записывать номер заново на карту в открытом формате. Это позволит иметь механизм ручного ввода при повреждении метки, аналогично штрихкодам. Универсальное приложение чтения NFC читает и печатный номер билета и срок действия.

В идеальном варианте и оборудование и расходники (метки) могут ничего не стоить при условии, что у работника имеется смартфон с поддержкой NFC и сам работник не против его использования. Ну и, конечно же, удалось раздобыть необходимое количество использованных билетов. На Ali стоимость от 6 рублей с лишним за метку.
Читать дальше →

Drag и Swipe в RecyclerView. Часть 2: контроллеры перетаскивания, сетки и пользовательские анимации

Время на прочтение7 мин
Охват и читатели18K

Drag и Swipe в RecyclerView. Часть 2: контроллеры перетаскивания, сетки и пользовательские анимации


В первой части мы рассмотрели ItemTouchHelper и реализацию ItemTouchHelper.Callback, которая добавляет базовые функции drag & drop и swipe-to-dismiss в RecyclerView. В этой статье мы продолжим то, что было сделано в предыдущей, добавив поддержку расположения элементов в виде сетки, контроллеры перетаскивания, выделение элемента списка и пользовательские анимации смахивания (англ. swipe).

Читать дальше →

Давайте уберём кватернионы из всех 3D-движков

Время на прочтение13 мин
Охват и читатели34K
image

Для записи трёхмерных поворотов программисты графики используют кватернионы. Однако в кватернионах сложно разобраться, потому что изучают их поверхностно. Мы просто принимаем на веру странные таблицы умножения и другие загадочные определения, и используем их как «чёрные ящики», поворачивающие векторы так, как нам нужно. Почему $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$ и $\mathbf{i} \mathbf{j} = \mathbf{k}$? Почему мы берём вектор и превращаем его в «мнимый» вектор, чтобы преобразовать его, например $\mathbf{q} (x\mathbf{i} + y\mathbf{j} + z \mathbf{k}) \mathbf{q}^{*}$? Да кому это интересно, если всё работает, правда?

Существует способ описания поворотов под названием ротор, который относится к области и комплексных чисел (в 2D), и кватернионов (в 3D), и даже обобщается до любого количества измерений.

Мы можем создавать роторы практически полностью с нуля, вместо того, чтобы определять из ничего кватернионы и пытаться объяснить, как они работают задним числом. Это занимает больше времени, но мне кажется, что это стоит того, потому что их гораздо легче понять!

Кроме того, для визуализации и понимания трёхмерных роторов не нужно использовать четвёртое пространственное измерение.

Было бы здорово, если бы начали вытеснять использование и изучение кватернионов, заменяя их роторами. Заменить их очень просто, а код останется почти таким же. Всё, что можно делать с кватернионами, например, интерполяцию и устранение блокировки осей (Gimbal lock), можно сделать и с роторами. Но понимать мы начинаем гораздо больше.
Читать дальше →

Современная MVI-архитектура на базе Kotlin

Время на прочтение8 мин
Охват и читатели58K


За последние два года Android-разработчики в Badoo прошли длинный тернистый путь от MVP к совершенно иному подходу к архитектуре приложений. Мы с ANublo хотим поделиться переводом статьи нашего коллеги Zsolt Kocsi, описывающую проблемы, с которыми мы столкнулись, и их решение.

Это первая из нескольких статей, посвящённых разработке современной MVI-архитектуры на Kotlin.
Читать дальше →

Создание собственной цветовой палитры

Время на прочтение4 мин
Охват и читатели45K
Адаптировано из нашей будущей книги «Рефакторинг UI»

Видели эти модные генераторы цветовой палитры? Когда выбираешь цвет, настраиваешь несколько параметров с музыкальными словечками типа «триада» или «четвёртый мажор» — и получаете пять идеальных цветов для своего веб-сайта?



Такой вычислительный и научный подход к выбору идеальной цветовой гаммы крайне соблазнителен, но не очень полезен.
Читать дальше →

Компоненты электровелосипеда: мотор

Время на прочтение6 мин
Охват и читатели58K
Приветствую снова!

Поскольку предыдущее моё малое эссе было воспринято в целом позитивно, хочу поделиться некоторыми накопленными в процессе чтения форумов, знаниями, касательно электровелосипедов.



В сией статье хочу поделится тем, какие виды приводов используются в электровело, их плюсы, минусы, и особенности.

Надеюсь, это кому то покажется интересным. Обозревать буду только трехфазные двигатели постоянного тока — ибо остальные не исследовал, да и относительно редки эти остальные
в наше время.
Читать дальше →

Котики vs нейросеть 2. Или запускаем SqueezeNet v.1.1 на Raspberry Zero в realtime (почти)

Время на прочтение6 мин
Охват и читатели12K
Всем привет!

После написания не совсем серьезной и не особо полезной в практическом ключе первой части меня слегка заглодала совесть. И я решил довести начатое до конца. То есть выбрать-таки реализацию нейросети для запуска на Rasperry Pi Zero W в реальном времени (конечно, насколько это возможно на таком железе). Прогнать её на данных из реальной жизни и осветить на Хабре полученные результаты.

Осторожно! Под катом работоспособный код и немного больше котиков, чем в первой части. На картинке коТ и коД соответственно.

image
Читать дальше →

Список здорового IT'шника, или как не угробить свою жизнь

Время на прочтение5 мин
Охват и читатели72K
Дело было вечером, делать было нечего, а спина все болела. И написал я на Хабре. И разверзлись хабровчане в комментариях и поведали мне, что у кого болит и как с этим справляться.

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

image

Тема современного здоровья стоит как никогда остро. Мы калечим себя сидячей работой за компьютером.

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

Эми Кадди провела двухминутный эксперимент — Оказалось, даже за это короткое время уровень тестостерона у тех, кто был в правильной позе, повысился на 20 %, а у тех, кто нет — снизился на 20 %. Уровень кортизола тоже существенно отличался: у первых упал на 25 %, а у вторых вырос на 15 %.

Под катом я рассказываю и показываю и навожу ясности в этой теме. И главное вы сможете ответить себе на вопрос: «Что делать-то, конкретно?»
Читать дальше →

Как создать игровой ИИ: гайд для начинающих

Время на прочтение31 мин
Охват и читатели109K


Наткнулся на интересный материал об искусственном интеллекте в играх. С объяснением базовых вещей про ИИ на простых примерах, а еще внутри много полезных инструментов и методов для его удобной разработки и проектирования. Как, где и когда их использовать — тоже есть.

Большинство примеров написаны в псевдокоде, поэтому глубокие знания программирования не потребуются. Под катом 35 листов текста с картинками и гифками, так что приготовьтесь.

UPD. Извиняюсь, но собственный перевод этой статьи на Хабре уже делал PatientZero. Прочитать его вариант можно здесь, но почему-то статья прошла мимо меня (поиском пользовался, но что-то пошло не так). А так как пишу в блог, посвященный геймдеву, решил оставить свой вариант перевода для подписчиков (некоторые моменты у меня оформлены по-другому, некоторые — намеренно пропущены по совету разработчиков).
Читать дальше →

Использование Retrofit 2.x в качестве REST клиента — Tutorial

Время на прочтение45 мин
Охват и читатели104K

1. Retrofit


1.1. Что такое Retrofit


Retrofit — это REST клиент для Java и Android. Он позволяет легко получить и загрузить JSON (или другие структурированные данные) через веб-сервис на основе REST. В Retrofit вы настраиваете, какой конвертер используется для сериализации данных. Обычно для JSON используется GSon, но вы можете добавлять собственные конвертеры для обработки XML или других протоколов. В Retrofit используется библиотека OkHttp для HTTP-запросов.
Читать дальше →

Transfer Learning: как быстро обучить нейросеть на своих данных

Время на прочтение11 мин
Охват и читатели65K
Машинное обучение становится доступнее, появляется больше возможностей применять эту технологию, используя «готовые компоненты». Например, Transfer Learning позволяет использовать накопленный при решении одной задачи опыт для решения другой, аналогичной проблемы. Нейросеть сначала обучается на большом объеме данных, затем — на целевом наборе.

Food recognition

В этой статье я расскажу, как использовать метод Transfer Learning на примере распознавания изображений с едой. Про другие инструменты машинного обучения я расскажу на воркшопе «Machine Learning и нейросети для разработчиков».
Читать дальше →

Drag и Swipe в RecyclerView. Часть 1: ItemTouchHelper

Время на прочтение6 мин
Охват и читатели38K

Drag и Swipe в RecyclerView. Часть 1: ItemTouchHelper


Существует множество обучающих материалов, библиотек и примеров реализации drag & drop и swipe-to-dismiss в Android c использованием RecyclerView. В большинстве из них по-прежнему используются устаревший View.OnDragListener и подход SwipeToDismiss, разработанный Романом Нуриком. Хотя уже доступны новые и более эффективные методы. Совсем немногие используют новейшие API, зачастую полагаясь на GestureDetectors и onInterceptTouchEvent или же на другие более сложные имплементации. На самом деле существует очень простой способ добавить эти функции в RecyclerView. Для этого требуется всего лишь один класс, который к тому же является частью Android Support Library.

Читать дальше →

Котики против нейросети. Или выбираем и запускаем нейросеть для распознавания объектов на Raspberry Zero

Время на прочтение5 мин
Охват и читатели20K
Добрый день всем.

Крохотный компьютер Raspberry — замечательная вещь. Я использовал Raspberry Zero W в паре проектов в течение последнего полугода. Подкупила простота протипирования и откатки различных идей. А теперь вот факультативно заинтересовал вопрос, потянет ли сей девайс полноценную сверточную сетку? [Спойлер — потянет, но есть забавые нюансы]. Кому интересна тема — добро пожаловать под кат. Осторожно, будет много котиков!

image
Читать дальше →

Как работает Android, часть 4

Время на прочтение26 мин
Охват и читатели110K


Всем привет! Мы нашли время продолжить серию статей про внутреннее устройство Android. В этой статье я расскажу о процессе загрузки Android, о содержимом файловой системы, о том, как хранятся данные пользователя и приложений, о root-доступе, о переносимости сборок Android и о проблеме фрагментации.

Читать дальше →

Доступно о кватернионах и их преимуществах

Время на прочтение13 мин
Охват и читатели284K

От переводчика: ровно 175 лет и 3 дня назад были изобретены кватернионы. В честь этой круглой даты я решил подобрать материал, объясняющий эту концепцию понятным языком.

Концепция кватернионов была придумана ирландским математиком сэром Уильямом Роуэном Гамильтоном в понедельник 16 октября 1843 года в Дублине, Ирландия. Гамильтон со своей женой шёл в Ирландскую королевскую академию, и переходя через Королевский канал по мосту Брум Бридж, он сделал потрясающее открытие, которое сразу же нацарапал на камне моста.

$i^2=j^2=k^2=ijk=-1$




Памятная табличка на мосту Брум Бридж через Королевский канал в честь открытия фундаментальной формулы умножения кватернионов.

В этой статье я постараюсь объяснить концепцию кватернионов простым для понимания образом. Я объясню, как можно визуализировать кватернион, а также расскажу о разных операциях, которые можно выполнять с кватернионами. Кроме того, я сравню использование матриц, углов Эйлера и кватернионов, а затем попытаюсь объяснить, когда стоит использовать кватернионы вместо углов Эйлера или матриц, а когда этого делать не нужно.
Читать дальше →

На поводу у трендов, или движение навстречу RxJava и LiveData

Время на прочтение6 мин
Охват и читатели8.8K


На дворе 2018 год. Всё чаще встречаются слова RxJava и LiveData. Но если вдруг так случилось, что в вашем приложении до сих пор балом правят старомодные решения вроде библиотеки android-priority-jobqueue или AsyncTask (да, бывает и так), то эта статья специально для вас. Я разделяю эти подходы, исходя из заложенной в них философии. Первый предполагает некоторую зависимость выполнения работы от отображения, второй — выполнение задачи, при котором View слушает её и она не прерывается в зависимости от событий жизненного цикла (например, при повороте экрана). Под катом я предлагаю рассмотреть миграцию на связку RxJava и LiveData для обоих подходов.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Украина
Дата рождения
Зарегистрирован
Активность