• Scala + MXNet = Микросервис с нейронкой в проде


      В интернете есть огромное количество руководств и примеров, на основе которых вы, дорогие читатели, сможете «без особого труда» и с «минимальными» временными затратами написать код, способный на фото отличать кошечек от собачек. И зачем тогда тратить время на эту статью?

      Основной, на мой взгляд, недостаток всех этих примеров — ограниченность возможностей. Вы взяли пример, — пусть даже с базовой нейронной сетью, которую предлагает автор, — запустили его, возможно, он даже заработал, а что дальше? Как сделать так, чтобы этот незамысловатый код начал работать на production-сервере? Как его обновлять и поддерживать? Вот тут и начинается самое интересное. Мне не удалось найти полного описания процесса от момента «ну вот, ML-инженер обучил нейронную сеть» до «наконец-то мы выкатили это в production». И я решил закрыть этот пробел.
      Читать дальше →
      • +40
      • 4,3k
      • 9
    • Делаем прототип бота для боев в Clash Royale

        У вас бывало, что вы залипаете в какую-то простенькую игру, думая, что с ней вполне бы мог справиться искусственный интеллект? У меня бывало, и я решил попробовать создать такого бота-игрока. Тем более, сейчас много инструментов для компьютерного зрения и машинного обучения, которые позволяют строить модели без глубокого понимания подробностей реализации. «Простые смертные» могут сделать прототип, не строя нейронные сети месяцами с нуля.



        Под катом вы найдете процесс создания proof-of-concept бота для игры Clash Royale, в котором я использовал Scala, Python и CV-библиотеки. Используя компьютерное зрение и машинное обучение я попытался создать бота для игры, который взаимодействует как живой игрок.
        Читать дальше →
        • +10
        • 4,1k
        • 8
      • Почему вы должны думать о функциональном программировании

        Привет, Хабр! Представляю вашему вниманию перевод своей статьи «Why you should think about functional programming», посвященной функциональному программированию.

        image

        Почему вы должны думать о функциональном программировании? Давайте ответим на следующие вопросы:

        • всегда ли ваши проекты выполняются в определенные сроки?
        • Были ли у пользователей какие-либо жалобы?
        • Поддержка проекта никогда не занимала много времени?
        • Новый функционал всегда удачно вписывается в существующую архитектуру?

        Если ответы на все вышеупомянутые вопросы положительные, вам не нужно ничего менять, ваша команда — редкий пример гармоничного персонала, методологии и инструментов. В противном случае вы должны быть открыты для новых подходов к решению ваших проблем, включая критический взгляд на используемые технические средства и языки программирования.
        Читать дальше →
      • Как обрабатывать ошибки на JVM быстрее

          Существуют различные способы обработки ошибок в языках программирования:


          • стандартные для многих языков исключения (Java, Scala и прочий JVM, python и многие другие)
          • коды статуса или флаги (Go, bash)
          • различные алгебраические структуры данных, значениями которых могут быть как успешные результаты так и описания ошибок (Scala, haskell и другие функциональные языки)

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


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


          Сразу отбросим использование кодов и флагов, так как этот подход не принят в JVM языках и по моему мнению слишком подвержен ошибкам (прошу прощения за каламбур). Поэтому будем сравнивать исключения и разные виды АТД. Кроме того АТД можно рассматривать как использование кодов ошибок в функциональном стиле.


          UPDATE: к сравнению добавлены исключения без стек-трейсов

          Читать дальше →
        • Приглашаем на Waves Blockchain Hackathon

            Waves Platform — одна из крупнейших в мире блокчейн-платформ, она входит в первую двадцатку блокчейн-компаний мира. В декабре Waves проводит хакатон для разработчиков: приглашаем познакомиться с экосистемой продуктов, командой проекта и присоединиться к блокчейн-сообществу.


            Читать дальше →
          • Читаете ли вы Scaladoc для «очевидных» методов коллекций? Или почему лениться не всегда хорошо

              Если вы не знаете, чем отличаются


              someMap.map{ case (k, v) => k -> foo(v)}

              и


              someMap.mapValues(foo)

              кроме синтаксиса или сомневаетесь/не знаете, к каким плохим последствиям это отличие может привести и причем тут identity, то это статья для вас.


              В противном случае — поучаствуйте в опросе, расположенном в конце статьи.

              Я заинтригован
              • +22
              • 1,7k
              • 6
            • Тестирование белого ящика

                Разработка программ высокого качества подразумевает, что программа и её части подвергаются тестированию. Классическое модульное (unit) тестирование подразумевает разбиение большой программы на маленькие блоки, удобные для тестов. Либо, если разработка тестов происходит параллельно с разработкой кода или тесты разрабатываются до программы (TDD — test driven development), то программа изначально разрабатыватся небольшими блоками, подходящими под требования тестов.


                Одной из разновидностей модульного тестирования можно считать propery-based testing (такой подход реализован, например, в библиотеках QuickCheck, ScalaCheck). Этот подход основан на нахождении универсальных свойств, которые должны быть справедливы для любых входных данных. Например, сериализация с последующей десериализацией должна давать такой же объект. Или, повторная сортировка не должна менять порядок элементов в списке. Для проверки таких универсальных свойств в вышеупомянутых библиотеках поддерживается механизм генерации случайных входных данных. Особенно хорошо такой подход работает для программ, основанных на математических законах, которые служат универсальными свойствами, справедливыми для широкого класса программ. Есть даже библиотека готовых математических свойств — discipline — позволяющая проверить выполнение этих свойств в новых программах (хороший пример повторного использования тестов).


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


                Под катом описаны несколько подходов к тестированию сложных программ с одним входом с разной степенью сложности (вовлеченности) и разной степенью покрытия.

                Читать дальше →
              • ShadowCloud — универсальный облачный клиент

                В настоящее время многие компании предоставляют сервис облачного хранилища, но каждая имеет свой проприетарный клиент и их функционал, как правило, оставляет желать лучшего.
                Существующие альтернативы мне не подошли в силу многих причин, поэтому я решил сделать собственный универсальный клиент — shadowcloud


                Как-то так он выглядит:


                image


                Что умеет


                • Прямая загрузка (без использования локального диска) в Google Drive, Яндекс Диск (WebDAV), Облако Mail.Ru, Dropbox
                • Полное шифрование по умолчанию, большой выбор алгоритмов и настроек
                • Защищённая паролем база данных
                • Чексуммы и дедупликация
                • Убирает ограничение на размер файла
                • Репликация или разбиение файлов по разным хранилищам
                • Стриминг медиа без ограничений
                • Создаёт превью и извлекает метаданные и текст документов
                • Версионирование файлов и всей структуры директорий
                • Markdown заметки, подсветка кода
                • Быстрое сохранение веб-страниц со встроенными ресурсами
                • Кэширование файлов в памяти
                • Использование в виде локального диска с помощью FUSE (требуется winfsp)
                • Открытый исходный код, почти каждый аспект настраивается через shadowcloud.conf
                Читать дальше →
              • Apache Ignite + Apache Spark Data Frames: вместе веселее

                  Привет, Хабр! Меня зовут Николай Ижиков, я работаю в компании «Сбербанк Технологии» в команде развития Open Source решений. За плечами 15 лет коммерческой разработки на Java. Я коммитер Apache Ignite и контрибьютор Apache Kafka.

                  Под катом вас ожидает видео и текстовая версия моего доклада на Apache Ignite Meetup о том, как использовать Apache Ignite вместе с Apache Spark и какие возможности мы для этого реализовали.


                  Читать дальше →
                  • +19
                  • 3,2k
                  • 3
                • Cassandra Sink для Spark Structured Streaming

                  Пару месяцев назад я начала изучать Spark, и в какой-то момент столкнулась с проблемой сохранения вычислений Structured Streaming в базе данных Cassandra.

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

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

                Самое читаемое