• Определяем породу собаки: полный цикл разработки, от нейросети на Питоне до приложения на Google Play

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

      Однако, все еще есть многочисленные детали, делающие задачу не столько неразрешимой, сколько… нудной, я бы сказал. Отнимающей слишком много времени, особенно если вы — новичок, которому нужно руководство, step-by-step, проект, выполненный прямо на ваших глазах, и выполненный от начала и до конца. Без обычных в таких случаях «пропустим эту очевидную часть» отговорок.

      В этой статье мы рассмотрим задачу создания определителя пород собак (Dog Breed Identifier): создадим и обучим нейросеть, а затем портируем ее на Java для Android и опубликуем на Google Play.

      Если вы хотите посмотреть на готовый результат, вот он: NeuroDog App на Google Play.

      Веб сайт с моей робототехникой (в процессе): robotics.snowcron.com.
      Веб сайт с самой программой, включая руководство: NeuroDog User Guide.

      А вот скриншот программы:

      image

      Читать дальше →
    • Принципы построения REST JSON API

      • Tutorial

      Эта памятка писалась для внутренних нужд (открыть глаза менее опытным в вебе коллегам). Но, т.к. я насмотрелся велосипедов от довольно уважаемых, казалось бы, контор, — выкладываю на хабр. Мне кажется, многим будет полезно.


      Зачем


      Надеюсь, читающий уже понимает, зачем ему вообще нужен именно REST api, а не какой-нибудь монстр типа SOAP. Вопрос в том, зачем соблюдать какие-то стандарты и практики, если браузеры вроде бы позволяют делать что хочешь.


      • Стандарт HTTP это стандарт. Его несоблюдение вредно для кармы и ведёт к постоянным проблемам с безопасностью, кэшированием и прочими "закидонами" браузеров, которые совсем не закидоны, а просто следование стандарту.
      • Велосипеды со всякими {error: "message","result":...} невозможно нормально тестировать и отлаживать
      • Поддержка большим количеством готовых клиентских библиотек на все случаи жизни. Те, кто будет вашим api пользоваться, скажут большое человеческое спасибо.
      • Поддержка автоматизированного интеграционного тестирования. Когда сервер на любые запросы отдаёт 200 ОК — ну, это такое себе развлечение.
      Читать дальше →
    • Нейронные сети для начинающих. Часть 2



        Добро пожаловать во вторую часть руководства по нейронным сетям. Сразу хочу принести извинения всем кто ждал вторую часть намного раньше. По определенным причинам мне пришлось отложить ее написание. На самом деле я не ожидал, что у первой статьи будет такой спрос и что так много людей заинтересует данная тема. Взяв во внимание ваши комментарии, я постараюсь предоставить вам как можно больше информации и в то же время сохранить максимально понятный способ ее изложения. В данной статье, я буду рассказывать о способах обучения/тренировки нейросетей (в частности метод обратного распространения) и если вы, по каким-либо причинам, еще не прочитали первую часть, настоятельно рекомендую начать с нее. В процессе написания этой статьи, я хотел также рассказать о других видах нейросетей и методах тренировки, однако, начав писать про них, я понял что это пойдет вразрез с моим методом изложения. Я понимаю, что вам не терпится получить как можно больше информации, однако эти темы очень обширны и требуют детального анализа, а моей основной задачей является не написать очередную статью с поверхностным объяснением, а донести до вас каждый аспект затронутой темы и сделать статью максимально легкой в освоении. Спешу расстроить любителей “покодить”, так как я все еще не буду прибегать к использованию языка программирования и буду объяснять все “на пальцах”. Достаточно вступления, давайте теперь продолжим изучение нейросетей.
        Читать дальше →
      • Создание бота для участия в AI mini cup 2018 на основе рекуррентной нейронной сети (часть 2)

        • Tutorial


        Это продолжение первой части статьи


        В первой части статьи автор рассказал об условиях конкурса по игре Агарио на mail.ru, структуре игрового мира и частично об устройстве бота. Частично, потому что затронули только устройство входных сенсоров и команд на выходе из нейронной сети (далее в картинках и тексте будет сокращение NN). Так попробуем приоткрыть черный ящик и понять как же там все устроено.

        Читать дальше →
      • Создание персонажей в Blender и Unity

        • Translation

        Визуально персонажи 3D-игр имитируются с помощью использования моделей, текстур и анимаций.

        В прошлом для применения одинаковых анимаций персонажи должны были иметь полностью идентичные скелеты. Это ограничивало разнообразие персонажей, потому что их рост и пропорции тоже должны были быть одинаковыми. Например, в старых играх FIFA все игроки имели одинаковые размеры, потому что создание отдельного скелета и набора анимаций превратилось бы в настоящий кошмар.

        К счастью для разработчиков игр, сегодня большинство движков имеет систему, позволяющую многократно использовать анимации при условии совместимости скелетной иерархии. Такая система позволяет использовать одинаковые анимации для персонажей всех форм и размеров. В Unity эта система называется Mecanim. Она обеспечивает удобную настройку анимаций, смешивание между ними и перенос гуманоидных анимаций между моделями.

        Возможность многократного применения анимаций позволяет использовать анимации из Asset store и с таких вебсайтов, как mixamo.com, для ваших собственных персонажей. Это экономит кучу времени!

        В этом туториале вы узнаете, как подготовить гуманоидную модель в Blender и как перенести её в Unity. В частности, вы научитесь следующему:

        • Создавать арматуру (скелет) персонажа и выполнять её риггинг (привязку скелета к мешу)
        • Модифицировать персонаж добавлением аксессуаров и объектов
        • Экспортировать модель в FBX
        • Импортировать модели Blender
        • Создавать и настраивать гуманоидный аватар
        • Прикреплять к персонажу объекты
        • Анимировать гуманоида в Unity
        Читать дальше →
        • +40
        • 67.9k
        • 7
      • Плюс один процент автоматизации



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

          Раньше общее потребление контролировал однофазный счетчик с Modbus-интерфейсом. Следить за текущими показаниями потребления полезно, чтобы не превышать разумные лимиты и не дожидаться отключения групповых автоматов. С этой задачей он справлялся на «ура». Но гораздо интереснее следить за каждым потребителем в отдельности. Для чего и как это сделать попробую рассказать в этой статье.
          Читать дальше →
        • Как я автоматизировал дачу на 90%



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

            Когда мы с женой начинали строить новую дачу вместо старой (где электрика прокладывалась многими поколениями и представляла собой жуткую мешанину из проводов и распаячных коробок), то прежде всего решили, что электрика будет грамотной, а дача – умной.
            Читать дальше →
          • 5 приемов работы с CSS, о которых вам следует знать


              Наблюдая за потоком вопросов по CSS на Тостере уже давно заметил, что многие из них повторяются много-много раз. Да, есть совсем глупые вопросы, на которые так и тянет ответить RTFM! Но есть и более занятные. Они связаны с не совсем стандартной версткой. Не такой, чтобы глаза на лоб лезли, но и заметно выходящей за рамки условного бутстрапа и традиционных туториалов для новичков. Похожие вопросы довольно сложно загуглить — обычно вся суть в картинке, но и отвечать каждый раз надоедает. В этой статье мы постараемся посмотреть некоторые приемы, охватывающие довольно широкий круг подобных вопросов. Информация в первую очередь адресуется начинающим верстальщикам, но возможно и опытным будет, чем вдохновиться.

              Читать дальше →
            • Эффективный расчёт области видимости и линии взгляда в играх

              • Translation
              image

              В стратегических играх обычно требуется знать область видимости NPC, чтобы игрок мог продумывать стратегию и делать следующий ход. Мы рассмотрим математику и реализацию рациональной модели, не просаживающей скорость игры при большом количестве NPC на карте. Если вы хотите увидеть готовое интерактивное демо модели, перейдите сюда и играйте прямо в браузере! Вот скриншот демонстрации:

              image

              Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
              Читать дальше →
            • Лучший игровой движок по версии пользователей хабра


                В этом обзоре мы рассмотрим популярные в 2016 году игровые движки и проголосуем за лучшие из них.

                Игровые движки предоставляют средства разработки, которые могут быть использованы программистами, чтобы упростить их работу. Короче говоря, предоставляют инструменты и функциональные возможности для разработки игры.
                Читать дальше →
              • Стилизация изображений с помощью нейронных сетей: никакой мистики, просто матан

                  Приветствую тебя, Хабр! Наверняка вы заметили, что тема стилизации фотографий под различные художественные стили активно обсуждается в этих ваших интернетах. Читая все эти популярные статьи, вы можете подумать, что под капотом этих приложений творится магия, и нейронная сеть действительно фантазирует и перерисовывает изображение с нуля. Так уж получилось, что наша команда столкнулась с подобной задачей: в рамках внутрикорпоративного хакатона мы сделали стилизацию видео, т.к. приложение для фоточек уже было. В этом посте мы с вами разберемся, как это сеть "перерисовывает" изображения, и разберем статьи, благодаря которым это стало возможно. Рекомендую ознакомиться с прошлым постом перед прочтением этого материала и вообще с основами сверточных нейронных сетей. Вас ждет немного формул, немного кода (примеры я буду приводить на Theano и Lasagne), а также много картинок. Этот пост построен в хронологическом порядке появления статей и, соответственно, самих идей. Иногда я буду его разбавлять нашим недавним опытом. Вот вам мальчик из ада для привлечения внимания.


                  Читать дальше →
                • Какие технологии компьютерных игр перетекают в реальность – и обзор технологий на играх живого действия



                    Вполне логично, что почти всё то, что было в компьютерных играх, добралось до реальных.

                    Теперь у вас есть броня и пушки, которые позволяют точно считать хиты (инфракрасные и лазерные с реалистичной перезарядкой); детекторы аномалий из Сталкера, создающие вообще новую реальность вокруг на полигонах; RFID-замки для квестов; разные ардуино-навороченные штуки и ещё куча странных вещей. В целом — повышающих уровень реалистичности реального мира и внутриигровую связность сюжета.

                    В общем, давайте посмотрим, какой технический антураж сейчас используется в играх живого действия, и что перекочевало в реал из шутеров и RPG.
                    Читать дальше →
                  • Сборник песен под гитару ко дню системного администратора (с аккордами!)

                      Доброго времени суток, товарищи!


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


                      Кусочек кода отправлять кому-то

                      Оригинал: "Философы в тринадцать с половиной"


                      Em                      Am
                      Перелистав известные тома,
                             D                  G   E
                      Мы научились понимать английский.
                               Am          H         C
                      Но разве это не свинцовая тюрьма -  
                                   Am                H
                      Плутать всю жизнь меж строчек манов к циске?
                      
                            E                  Am
                      И каждый час, и каждую минуту,
                                D                 G   E
                      О чьём-то софте вечная забота.
                                Am    H          C
                      Кусочек кода отправлять кому-то – 
                               Am     H          Em (E) 
                      Такая, брат, у нас с тобой работа.
                      
                      Они порою знают больше нас - 
                      Мэйнтэйнеры в тринадцать с половиной.
                      И в спорах забываются подчас,
                      Пуская в ход банхаммеры админа.
                      
                      И каждый час, и каждую минуту,
                      О чьём-то софте вечная забота.
                      Коммиты патчем направлять кому-то -  
                      Слова ничто, когда они без кода.
                      
                      А если не справляешься один -  
                      Бредёшь на форум в поисках подмоги.
                      Часами в ожидании сидишь,
                      Под спойлер заворачивая логи.
                      
                      И каждый час, и каждую минуту,
                      О чьём-то софте вечная забота.
                      Скупой багрепорт отсылать кому-то -  
                      Такая, брат, у нас с тобой работа.
                      
                      С трудом по клаве мечется рука -  
                      Луна на стол сквозь окна блики стелит,
                      Да плещется в измученных зрачках
                      Счастливый сон о выспавшемся теле.
                      
                      И каждый час, и каждую минуту,
                      Об общем софте вечная забота.
                      Лицом на клаве засыпать под утро -  
                      Такая, брат, сейчас цена свободы.
                      
                      Который год врезаются в лицо
                      Сквозняк из окон, град прогнивших яблок.
                      Плечом к плечу - не дав сомкнуть кольцо -  
                      Лиса, пингвин и с жёлтой вилкой дьявол.
                      
                      И каждый час, и каждую минуту,
                      Об общем софте вечная забота.
                      Держать для сна одну шестую суток -  
                      Такая, брат, сейчас цена свободы.
                      Читать дальше →
                    • Режиссер потратил 7 лет на создание собственной версии Star Trek

                        Видео продолжительностью почти в час выложено на YouTube



                        22 июля выходит Star Trek Beyond. В мире насчитывается несколько миллионов поклонников вселенной Star Trek, которые именуют себя Trekkies (или Trekkers). Все они вместе с любителями научной фантастики ждут выхода фильма на экраны. Кинокритики предрекают картине успех.

                        До похода в кинотеатр есть еще одна возможность насладиться миром Star Trek. 35-летний режиссер из Баварии по имени Юрген Кайзер (Jürgen Kaiser) потратил семь лет жизни на создание своей версии фильма. Его версия называется Star Trek Enterprise II: The Beginning of the End. Идея создать свой фильм по вселенной Star Trek пришла к режиссеру после завершения третьего сезона Star Trek: Enterprise. В этом сериале зрителю показывали самое начало освоения человечеством космических просторов Вселенной — в 2151 год, за 100 лет до событий основной сюжетной линии. В своем фильме режиссер показывает побочную сюжетную линию.
                        Читать дальше →
                      • Веб авторизация доменного пользователя через nginx и HTTP Negotiate

                              Намедни встала задача — обеспечить прозрачную авторизацию пользователей домена в CRM, собственно Microsoft давным давно разработал для этих целей метод аутентификации HTTP Negotiate, это все замечательно работает на IIS и Windows Server, а у нас за плечами Samba4 в роли Primary Domain Controller и проксирующий веб сервер nginx. Как быть?

                              В сети куча информации по организации подобной схемы для Apache2 & AD на базе Windows, а вот пользователям nginx приходится собирать все по крупицам, информации кот наплакал. В базовой поставке Nginx нет подобного функционала. Благо люди не пали духом и история началась в мейл рассылках nginx в 2009 году, где один американский товарищ из Огайо нанял разработчика на RentACoder для запиливания модуля с подобным функционалом. Ребята форкнули подобный модуль для апача, прикрутили его к nginx и результаты работы выложили на github, где модуль время от времени допиливался разными людьми и в итоге принял роботоспособный вид. Последнюю версию можно получить на гитхабе.


                          В данном руководстве я расскажу как заставить работать nginx с SPNEGO модулем и samba4.

                          Читать дальше →
                        • Laravel. Установка, настройка, создание и деплой приложения

                          Итак, у вас есть желание попробовать или узнать о фреймворке Laravel.

                          Если вы хорошо знакомы с другими PHP фреймворками — для вас это не составит особого труда, если же нет — это отличный выбор для первого фреймворка.

                          Laravel - PHP framework for artisans!

                          Статья очень большая. Рекомендую читать ее полностью во время выходных.

                          Для ленивых:
                          GitHub
                          Приложение

                          Начнем!
                        • Мультиплеер в быстрых играх (Часть IV: Хэдшот! Путешествуем во времени)

                          • Translation

                          1. Части I, II (синглплеер с авторитарным сервером)
                          2. Часть III (Появление врага)
                          3. Часть IV (Хэдшот!)

                          Как повесить идеальный хэдшот если у тебя пинг 2 секунды? Вы узнаете в этой статье.

                          Текущий алгоритм работы мультиплеера


                          • Сервер получает команды с клиентов и времена их отправления
                          • Сервер обновляет состояние мира
                          • Сервер с некоторой частотой отправляет свое состояние всем клиентам
                          • Клиент отправляет команды и локально воспроизводит их результат
                          • Клиент получает обновленные состояния мира и:
                            • Применяет состояние от сервера
                            • Заново применяет все свои команды, которые сервер не успел применить.
                            • Интерполирует предыдущие состояния других игроков
                          • С точки зрения игрока, есть два серьезных последствия:
                            • Игрок видит себя в настоящем
                            • Игрок видит других в прошлом.

                          Обычно это отлично работает, но это становится большой проблемой для событий, которым нужна высокая пространственно-временная точность. Например если хочется разнести врагу башку!
                          Читать дальше →
                        • Мультиплеер в быстрых играх (Часть III: появление врага)

                          • Translation


                          1. Части I, II (синглплеер с авторитарным сервером)
                          2. Часть III (Появление врага)
                          3. Часть IV (Хэдшот!)

                          Введение


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

                          В этой статье мы рассмотрим последствия одновременного подключения нескольких игроков к одному серверу.
                          Читать дальше →
                        • Автоматизируем проверку кода или еще немного о pre-commit hook'ах

                          • Tutorial
                          Думаю, нет нужды рассказывать хабрапользователю что такое Git / GitHub, pre-commit и как наносить ему hook справа. Перейдем сразу к делу.

                          В сети много примеров хуков, большинство из них на shell'ах, но ни один автор не уделил внимание одному важному моменту — хук приходится таскать из проекта в проект. На первый взгляд — ничего страшного. Но вдруг появляется необходимость внести изменения в хук, который уже живет в 20 проектах… Или внезапно нужно переносить разработку с Windows на Linux, а хук на PowerShell'е… Что делать? ??????? PROFIT

                          «Лучше так: 8 пирогов и одна свечка!»


                          Примеры, конечно, сильно утрированы, но с их помощью выявлены неудобства, которых хотелось бы избежать. Хочется, чтобы хук не требовалось таскать по всем проектам, не приходилось часто «допиливать», но чтобы при этом он умел:
                          • выполнять проверку отправляемого в репозиторий кода на валидность (например: соответствие требованиям PEP8, наличие документации итд);
                          • выполнять комплексную проверку проекта (юнит-тесты итд);
                          • прерывать операцию commit'а в случае обнаружения ошибок и отображать подробный журнал для разбора полетов.

                          И выглядел приблизительно так:
                          python pre-commit.py --check pep8.py --test tests.py
                          

                          Понятно, что сам хук — всего лишь стартер, а всю особую уличную магию выполняет запускаемый им скрипт. Попробуем написать такой скрипт. Заинтересовавшимся — добро пожаловать под кат.
                          Читать дальше →
                        • Продвижение инди-игры на Steam Greenlight

                            Всем, привет! Наша команда сейчас проходит важный этап становления любого разработчика игр — первый запуск игры на Steam Greenlight. Пока я готовил материал для этой статьи, наша игра вошла в ТОП-100 проектов на Greenlight, набрала почти 2000 голосов «ЗА» и через 12 дней получила зелёный свет.

                            В этой статье хочу поделиться информацией, которую «нарыл» в процессе подготовки к Greenlight'у, а также попробовать проанализировать, какие гипотезы по продвижению сработали, а какие пути оказались тупиковыми. Надеемся, эта информация окажется полезной и кому-то попадёт в избранное.

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