• Анализ данных на Scala. Считаем корреляцию 21-го века


      Очень важно выбрать правильный инструмент для анализа данных. На форумах Kaggle.com, где проводятся международные соревнования по Data Science, часто спрашивают, какой инструмент лучше. Первые строчки популярноcти занимают R и Python. В статье мы расскажем про альтернативный стек технологий анализа данных, сделанный на основе языка программирования Scala и платформы распределенных вычислений Spark.

      Как мы пришли к этому? В Retail Rocket мы много занимаемся машинным обучением на очень больших массивах данных. Раньше для разработки прототипов мы использовали связку IPython + Pyhs2 (hive драйвер для Python) + Pandas + Sklearn. В конце лета 2014 года приняли принципиальное решение перейти на Spark, так как эксперименты показали, что мы получим 3-4 кратное повышение производительности на том же парке серверов.
      Подробности
    • Реактивный мессенджер, или CQRS и ES вместе с Akka и Scala

      В последнее время мы часто слышим о реактивном программировании и видим различные баззворды: message-driven архитектура, event-sourcing, CQRS. К сожалению, на Хабре об этом пишут довольно мало, поэтому я решил исправить ситуацию и поделиться своими знаниями со всеми желающими.

      В этой статье мы узнаем об основных особенностях реактивных приложений, рассмотрим, как паттерны CQRS и EventSourcing помогут нам в их создании, а чтобы не было скучно, мы с вами шаг за шагом сделаем свой мессенджер с вебсокетом и акторами, соответствующий всем канонам реактивного программирования. Для реализации всего этого добра, мы будем использовать замечательный язык Scala вместе с не менее превосходной библиотекой Akkа, реализующей модель акторов. Еще, мы будем использовать Play Framework для написания веб-составляющей нашего приложения. Итак, приступим.

      Статья предназначена для тех, кто уже знаком со Scala и слышал о модели акторов. Все остальные тоже приглашаются к прочтению, принципы реактивного программирования можно применять вне зависимости от языка и фреймворка.
      Читать дальше →
    • Открыто видео курса «Multicore programming in Java» на русском (30+30 часов)

        Добрый день.

        Я занимаюсь IT-преподаванием. Читал Java Core (материалы тут).
        Сейчас написал и продаю курс «Scala for Java Developers»

        В этом посте решил открыть видео двух курсов (проходивших в режиме вебинаров) по многопоточности под JVM (это 16 + 16 двухчасовых лекций).

        Больше о материалах (программа, полезные ссылки) можно прочитать в постах-объявлениях о вебинарах (Программа курса «Multicore programming in Java» (25 марта 2014), Программа и материалы курса «Multicore programming in Java» (31 июля)).

        Курс рассчитан на слушателей, которые начинают изучать многопоточность с нуля (после крепкого курса Java Core, Middle Developer из чистого web-а или перешедшим из скриптовых/интерпретируемых языков программирования). Он не будет подходить тем, кто перешел из «суровых» С/С++ или ищет «академической высоты».

        Детально рассматриваются темы Hardware, New Java memory Model, java.util.concurrent (atomics, blocking queues, thread pool, locks, synchronizers), message passing alternative, software transactional memory alternative, Java 7 Fork/Join, Java 8 Parallel Streams (+Lambdas, +Stream API), CSP/JCSP alternative

        Читать дальше →
        • +20
        • 52,1k
        • 1
      • 93 видео-лекции по Scala

        • Tutorial
        В ходе подготовки спецкурса «Scala for Java Developers» под платформу онлайн-обучения UDEMY, я анализирую другие «лекционные» видео. В библиотеке накопилось какое-то количество ссылок на дельных учебные материалы по Scala (видео на английском).

        Для большинства видео указано количество просмотров. Надо сделать несколько замечаний:
        1. Количество просмотров не является главным критерием качества и полезности видео, но этот может служить каким-то указателем на ценность.
        2. Здесь не все популярное видео, что я встречал, а лишь то, что ценно по моему личному мнению.
        3. Если кто-то знает еще хорошее видео — пишите, добавлю в списки.


        Читать дальше →
        • +17
        • 34,1k
        • 5
      • SQL доступ к РСУБД посредством ScalikeJDBC

        imageЕсть библиотека, облегчающая использование SQL в Scala-программах, упоминания о которой на хабре я не нашел. Эту несправедливость я и хотел бы исправить. Речь пойдет о ScalikeJDBC.

        Главным конкурентом SkalikeJDBC является Anorm – библиотека от Play, решающая ровно те же задачи удобного общения с РСУБД посредством чистого (без примесей ORM) SQL. Однако Anorm глубоко погряз в Play, и использование его в проектах не связанных с Play может быть затруднительным. Ждать, когда оно окажется затруднительным и для меня, я не стал. Услышав о SkalikeJDBC я, практически сразу, решил его опробовать. Результатами этой аппробации в виде небольшого демо приложения я и буду делиться в этой статье, чуть ниже.

        Перед тем, как перейти к примеру использования библиотеки, стоит заметить, что поддерживается и протестированна работа со следующими СУБД:
        • PostgreSQL
        • MySQL
        • H2 Database Engine
        • HSQLDB

        А оставшиеся (Oracle, MS SQL Server, DB2, Informix, SQLite, тыщи их) также должны работать, ибо все общение c СУБД идет через стандартный JDBC. Однако их тестирование не производитстя, что может навлечь уныние на корпоративного заказчика.

        Пример приложения


        Впрочем оставим корпоративного заказчика наедине с его невеселыми думами, и лучше займемся тем, ради чего и писалась эта статья. Осуществим короткое погружение в возможности библиотеки.
        Читать дальше →
        • +11
        • 5,3k
        • 7
      • «Перегрузка операторов» в Scala

        • Tutorial
        Некоторое время назад я анонсировал курс по Scala. Он стартовал и выкладывается на MOOC-платформу UDEMY — «Scala for Java Developers». Больше о курсе вы можете прочитать в конце статьи.

        Сейчас я бы хотел представить материал по одной из тем курса — перегрузке операторов в Scala.



        Читать дальше →
      • Прощальная записка языку программирования

        В данной статье я бы хотел поделиться с сообществом «Хабрахабр» стихом «Письмо Онегина к Татьяне» переводом статьи от Matthias Nehlsen“«A farewell note to a programming language». Автор рассказывает о своем опыте разработки на Scala в стиле «Я к вам пишу – чего же боле?»


        Читать дальше →
      • 16 месяцев функционального программирования

        Предлагаю читателям «Хабрахабра» перевод статьи «16 Months of Functional Programming». Все мои замечания будут выделены курсивом.

        В этой статье я хочу поделиться с вами моим опытом в функциональном программировании. Я чувствую, что в целом за прошедшие 16 месяцев стал лучше разбираться в информатике и компьютерах, чем за предыдущие 10 лет и всё это благодаря моему погружению в Scala и мир функционального программирования. Причина по которой функциональное программирование побуждает вас к постоянному развитию заключается в том, что каждую задачу необходимо переосмысливать заново. Порой невозможно поверить в то, что большинство стандартных задач могут быть решены иным путём и — бум! — функциональный подход предлагает лучшее решение и это шокирует.
        Читать дальше →
      • Программа курса и материалы по Scala

        • Tutorial
        Добрый день.

        Меня зовут Головач Иван, я практикующий Java Tech Lead с опытом в программировании 10+ лет (Java EE, J2ME, C, C++, M-language, Delphi), который перешел на Scala.

        Я подготовил и прочитал как обычные курсы по программированию (Java Core + Junior Java Developer), так и спецкурсы (Multicore Programming for JVM (раз и два)).

        В данный момент я стартую спецкурс по Scala и в этом топике хочу поделиться материалами, которые я нашел наиболее интересными/информативными (курс готовился более года).
        Читать дальше →
      • Паттерн для cоздания DSL на Scala для оперирования единицами измерения

        Вашему вниманию будет представлен паттерн для создания «мини-DSL» на Scala для оперирования единицами измерения. Одну из реализаций этого паттерна можно увидеть в стандартной библиотеке Scala, а именно — в scala.concurrent.duration._. Пример из документации по Akka[1]:

        implicit val timeout = Timeout(5 seconds)
        

        В данном случае Int неявно конвертируется в объект с методом «seconds», который затем возвращает требуемый функции тип.

        Далее будет рассмотрено пошаговое создание «мини-DSL» для оперирования частотой. В конечном итоге планируется получить возможность задавать частоту естественным образом, например, 5 kHz.
        Читать дальше →
      • Чисто-функциональный REST API на Finagle/Finch

          Finch


          История библиотеки Finch началась около года назад «в подвалах» Конфеттина, где мы пытались сделать REST API на Finagle. Не смотря на то, что finagle-http сам по себе очень хороший инструмент, мы стали ощущать острую нехватку более богатых абстракциий. Кроме того, у нас были особые требования к этим самым абстракциям. Они должны были быть неизменяемыми (immutable), легко композируемыми (composable) и в тоже время очень простыми. Простыми как функции. Так появилась библиотека Finch, которая представляет собой очень тонкий слой функций и типов поверх finagle-http, который делает разработку HTTP (micro|nano)-сервисов на finagle-http более приятной и простой.

          Шесть месяцев назад вышла первая стабильная версия библиотеки, а буквально на днях вышла версия 0.5.0, которую я лично считаю pre-alpha 1.0.0. За это время 6 компаний (три из них еще не в официальном списке: Mesosphere, Shponic и Globo.com) начали использовать Finch в production, а некоторые из них даже стали активными контрибьюторами.

          Этот пост рассказывает о трех китах на которых построен Finch: Router, RequestReader и ResponseBuilder.
          Читать дальше →
        • Разработка микросервисов с использованием Scala, Spray, MongoDB, Docker и Ansible

          • Перевод
          • Tutorial
          Цель данной статьи — показать возможный подход для построения микросервисов с использованием Scala, RESTful JSON, Spray и Akka. В качестве базы данных мы будем использовать MongoDB. В результате нашей работы мы упакуем наш проект в Docker-контейнер, а Vagrant и Ansible позволит нам управлять конфигурацией приложения.

          В этой статье вы не найдете подробностей о языке Scala и других технологиях, которые будут использоваться в проекте. В ней вы не найдете руководства, которое ответит на все ваши вопросы. Цель статьи — показать технику, которую можно использовать при разработке микросервисов. На самом деле, большая часть этой статьи не завязана на конкретной технологии. Docker имеет более широкую сферу использования, нежели только микросервисы. Ansible позволяют быстро развернуть любое требуемое окружение, а Vagrant — отличный инструмент для создания виртуальных машин.
          Читать дальше →
          • +29
          • 28,3k
          • 8
        • Строго типизированные комбинаторы для построения парсера и синтезатора естественного языка

            Известные ParserCombinator'ы и Parboiled предназначены исключительно для разбора формальных языков. Мы же решаем задачу разбора естественного языка и при этом хотим, чтобы с помощью той же грамматики можно было осуществлять синтез фраз на естественном языке, отражающих требуемую нам семантику. Было бы удобно иметь возможность описывать языковые конструкции вместе с правилами абстрагирования/конкретизации.

            Например,

            1. Преобразование числительных в число («десять» -> 10:Int)
            2. и обратно (10:Int -> «десять» («десятый», «десяток» ...))
            3. Преобразование числительных вместе с единицей измерения («десять рублей» <-> NumberWithMeasurement(10, RUB))
            4. Неполный адрес («ул. Яблочная» <-> Address(street=«Яблочная»))
            5. Адрес в пределах города («улица Яблочная дом сто двадцать три квартира сорок пять» <-> Address(street=«Яблочная», building=123, flat=45))
            6. Телефон (256-00-21 («двести пятьдесят шесть ноль ноль двадцать один») <-> NumericalSequence(256,0,0,21))

            Причём хотелось бы иметь следующие системные свойства:

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

            Под катом — описание подхода, реализованного в библиотеке synapse-typed-expressions. Рассмотрены только числительные, но подход естественным образом распространяется на другие вышеупомянутые формальные языковые конструкции.
            Читать дальше →
            • +12
            • 6,5k
            • 2
          • Анонс третьей встречи Java User Group EKB

              Привет, Хабр!

              JUG.EKB — Java User Group Екатеринбурга, на встречах JUG.EKB мы обсуждаем различные технологий из мира Java, делимся опытом и пьем кофе во имя Java!
              Мы регулярно проводим встречи JUG.EKB с лекциями Java экспертов на самые интересные темы.
              Наш сайт jugekb.ru, сообщество в ВК — vk.com/jugekb.

              Приглашаем всех java разработчиков на третью встречу JUG.EKB.
              Подробности внутри
            • WebJars + RequireJS

                День добрый, читатели Хабра!
                В этой статье спешу вам рассказать (хоть и с опозданием) о том, что такое WebJars на примере приложения в Play Framework.

                image В практически любом веб-приложении нельзя обойтись без сторонних javascript-библиотек. Самый простой способ добавить их: скачать и добавить в проект, а также добавить файл в git-репозиторий. Решение годное, но лично для меня наличие в проекте какой-либо статики малость раздражает. Есть другой метод: указывать ссылку на внешний хостинг js-библиотек такой как google, yandex. В принципе вариант, но в моей практике были случаи, когда необходимо было продолжить разработку а доступ в интернет оставлял желать лучшего либо его вообще не было, в итоге клиентская часть не функционировала. Наиболее годным решением мне видится добавления js библиотеки в качестве зависимости в проект, с подобным подходом вы могли сталкивать в Ruby on Rails.
                Читать дальше →
              • Как мы разработали свою систему рассылки push-уведомлений (и почему)

                  Без пуш-уведомлений сегодня, наверное, не может обойтись ни одно мобильное приложение. На рынке уже есть немало готовых решений этой важнейшей задачи. Но, как это обычно и бывает, если хочешь сделать что-то хорошо, приходится делать это самому. В этой статье мы попросили разработчика UBANK Дениса Боровикова рассказать о своем опыте создания системы мобильных пуш-уведомлений для UBANK и поделиться советами для тех, кто захочет решить ту же задачу.

                  ПОЛУФАБРИКАТЫ НЕ ДЛЯ НАС


                  Среди существующих облачных систем пуш-рассылок можно отметить такие сервисы, как Infobip, Jeapie, Pushwoosh, Urban Airship. У них много общего: все они не кроссплатформенны, позволяют отправлять пуши с учетом временной зоны, делать рассылки по расписанию, а также дают статистику.

                  Звучит неплохо, но когда вникаешь в детали, понимаешь: это как готовые обеды. Купил замороженный полуфабрикат, сунул в микроволновку — получил на выходе съедобное блюдо. Живот набил, но без удовольствия.


                  Carl Lender

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

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

                  Читать дальше →
                • Убить всех человеков с помощью кота, или конечные автоматы на Akka.FSM

                  • Tutorial
                  Как я уже писал в своей первой статье, не так давно я перешел c С++ на Scala. И вместе с этим я начал изучать модель акторов в исполнении Akka. Наиболее яркое впечатление на меня произвела лекгость реализации и тестирования конечных автоматов (finite-state machines, FSM), которую предоставляет эта библиотека. Уж не знаю, почему именно так получилось, учитывая изобилие остальных прекрасных и полезных вещей в Akka. Но теперь в моем первом проекте на Scala я использую конечные автоматы при каждой выпадающей возможности, подкрепленной целесообразностью (как я искренне надеюсь). И вот я решил, что готов поделиться с сообществом теми знаниями об Akka.FSM, а также некоторыми хитростями и личными наработками, которые я успел накопить. Подобной темы на хабре я не нашел (да и вообще со статьями про Scala и Akka здесь как-то не густо), и решил, не затягивая, исправить положение и выговориться, пока кто-то не сказал всего раньше меня. А чтобы было не скучно — предлагаю вместе реализовать поведение самого настоящего электронного кота. Хотелось бы верить, что какая-то одинокая романтическая душа, вдохновившись моей статьей, доработает предлагаемый в ней функционал до полноценного «Тамакотчи», в качестве домашнего задания. Главное, чтобы такая душа не забыла после поделиться своими результатами с сообществом в комментариях. В идеальном варианте можно было бы создать проект на гитхабе с общим доступом, чтобы каждый желающий смог привнести свой личный вклад в развитие идей трансгуманизма. А теперь — в сторону шутки и фантазии, закатываем рукава. Начинать мы будем с самого нуля, а я для пущего 7D и эффекта присутствия я буду проделывать каждый шаг вместе с вами. TDD прилагается: с неоттестированным робокотом уж точно будет не до шуток.

                  Информация в статье предназначена для тех, кто уже хотя бы немного заком со Scala, и имеет хотя бы поверхностное представление о модели акторов. Для тех же, кто хотел бы познакомиться, но не знает, с чего начать, в качестве бонуса я написал небольшую стартовую инструкцию и скрыл ее под спойлер, чтоб остальным не мешала. В ней говорится о том, как без лишних усилий создать чистый проект на Scala со всеми нужными библиотеками.
                  Поехали!
                • О тонкостях «шифрованного трубопровода» в процессе разработки IMAP-клиента на Scala+Akka+Spray

                  Совсем недавно я перешел с горячо любимого мной объектно-ориентированного C++ на новый для меня и еще не совсем понятный функциональный Scala. Причины перехода — совершенно отдельная история. Но одной из них было наличие достаточно хорошей, судя по отзывам, поддержки модели акторов — с помощью библиотеки Akka. Я давно мечтал опробовать на собственном опыте все описываемые преимущества этой технологии, а существующие реализации на C++ (CAF_C++ и Theron), которые я немного повертел в небольших тестах, оказались достаточно сырыми для моих нужд. Наиболее каноническое же (по моему мнению) решение модели акторов — Erlang, — я отмел, так как посчитал, что для его освоения мне понадобится слишком много времени, да и не факт, что я смогу найти необходимые мне сторонние библиотеки для этого далеко не универсального языка. Поэтому в результате выбор мой пал именно на Scala в связке с Akka, тем более что Scala я когда-то давно уже начинал изучать, но забросил за нецелесообразностью. Однако, как оказалось, на этот раз время для своего эксперимента я выбрал не самое удачное, в чем я убедился только после того, как достаточно солидная часть проекта была уже завершена.
                  Читать дальше →
                • Back to the Scala Future


                    Добрый вечер господа читатели. Сегодня мне хотелось бы пролить немного света на такую замечательную часть scala core под названием Future. Собственно существует документация на официальном сайте, но там идет объяснение как работать с ним при помощи event driven подхода. Но при это Future является также и монадой. И в данной статье я хотел привести примеры и немного растолковать как их надо использовать в этом ключе (а точнее свое видение этого вопроса). Всех желающим ознакомится с вопросом прошу под кат.
                    Читать дальше →
                  • Введение в sbt

                      Этим постом, я попробую начать серию переводов официальной документации, об инструменте, который при текущем росте языка Scala становится все более востребованным, но о котором тем не менее очень мало информации на русском языке.
                      Речь пойдет о sbt — системе сборки проектов для языка Scala (хотя, важно упомянуть, что Java проекты (и вообще любые другие) им так же могут собираться).
                      Статья является началом перевода документации с сайта проекта scala-sbt.org и так как это мой первый опыт перевода — буду рад любым замечаниям и правкам.
                      Так же, из-за того, что пока перевод оформлен в виде статьи, я буду пропускать моменты, которые смотрелись бы не совсем корректно, в контексте отдельной части руководства.
                      Читать дальше →
                    Самое читаемое