• Открыта регистрация на Unblock Hackathon 6-8 апреля



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

      Мы открыли регистрацию на 48-часовой блокчейн-хакатон Unblock и с удовольствием приглашаем участвовать разработчиков и аналитиков. Уровень квалификации не важен, хакатон – открытый, участие – бесплатное. Желание с головой окунуться в блокчейн-разработку приветствуется.

      Читать дальше →
    • Java 9 — Вы уже перешли? Нет? И не надо ...!?

        Недели две назад InfoQ напомнил, что официальная поддержка Java 9 заканчивается… в Марте 2018г. (т.е. через 20 дней :)


        Вот cсылка на официальный EOL от Oracle, в которой в разделе "Java SE Public Updates" черным по английскому говорится, что Java 9 будет поддерживаться до Марта 2018, а Java 8до Января 2019 (или позже) и Декабря 2020 (или позже).

        Читать дальше →
      • Eclipse Scala IDE — от мертвого осла уши…

        Scala — это изумительный язык программирования, которым я наслаждался года 4 назад. Я, наверное, был его фанатом: покупал книги и курсы на Coursera, использовал в pet- и продуктивных проектах et cetera, et cetera, et cetera.

        Scala открыл для меня увлекательный мир функционального программирования, вернул во времена студенчества со «сферическими задачами в вакууме» от Martin'a Odersky…

        Но вот он уже года два как Scala для меня мертва. Виной этому…
        Читать дальше →
      • Измеряем скорость кода Java правильно (используя JMH)

        • Tutorial

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


        Это вводная статья про то, как следует делать тесты производительности на JVM языках (java, kotlin, scala и тд.). Она полезна для случая, когда требуется в цифрах показать изменение производительности от использования определенного алгоритма.


        Все примеры приведены на языке kotlin и для системы сборки gradle. Исходный код проекта доступен на github.


        КДВП

        Читать дальше →
        • +10
        • 8,9k
        • 8
      • Регулярные выражения: никакой магии

        • Перевод
        image

        Код этого поста, как и сам пост, выложен на github.

        До недавнего времени регулярные выражения казались мне какой-то магией. Я никак не мог понять, как можно определить, соответствует ли строка заданному регулярному выражению. А теперь я это понял! Ниже представлена реализация простого движка регулярных выражений менее чем в 200 строках кода.

        Часть 1: Парсинг


        Спецификация


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

        • . — соответствие любому символу
        • | — соответствие abc или cde
        • + — соответствие одному или более предыдущего паттерна
        • * — соответствие 0 или более предыдущего паттерна
        • ( и ) — для группировки

        Хотя набор опций невелик, с его помощью можно создать интересные regex-ы, например, m (t|n| ) | b позволяющий найти субтитры к Star Wars без субтитров к Star Trek, или (..)* для нахождения множества всех строк чётной длины.

        План атаки


        Мы будем анализировать регулярные выражения в три этапа:

        1. Парсинг (синтаксический анализ) регулярного выражения в синтаксическое дерево
        2. Преобразование синтаксического дерева в конечный автомат
        3. Анализ конечного автомата для нашей строки

        Для анализа регулярных выражений (подробнее об этом ниже) мы будем использовать конечный автомат под названием NFA. На высоком уровне NFA будет представлять наш regex. При получении входных данных мы будем перемещаться в NFA от состояния к состоянию. Если мы придём в точку, из которой невозможно совершить допустимого перехода, то регулярное выражение не соответствует строке.
        Читать дальше →
        • +27
        • 16,8k
        • 4
      • Книга «Реактивные шаблоны проектирования»

          image Эта книга задумывалась как исчерпывающее руководство по реактивным системам, которое поможет понимать и проектировать их. Поэтому в ней обсуждаются не только сам манифест реактивного программирования, но и причины, которые привели к его появлению. Основная часть книги представляет собой собрание шаблонов проектирования, которые олицетворяют множество аспектов реактивной архитектуры. При этом даются отсылки на углубленный материал для дальнейшего изучения. И хотя представленные шаблоны составляют единое целое, их перечень не полон — он и не может быт быть таковым. Однако общие сведения, содержащиеся в книге, позволят читателю определять, вычленять и развивать новые шаблоны, если это потребуется.
          Читать дальше →
          • +11
          • 7,8k
          • 2
        • Отчёт c St. Petersburg Scala MeetUp 2017.3

            Пятого декабря в Санкт-Петербурге прошёл третий митап Scala разработчиков. Юзер-группа встречается раз в 2-3 месяца, в гостях у какой-либо из компаний — активных участников сообщества, использующих язык Scala или смежные ему технологии. На этот раз, площадкой проведения был выбран офис компании JetBrains на Васильевском острове. В нём ведёт свою деятельность команда разработчиков Scala plugin для сред IntelliJ IDEA и Android Studio.

            imageВ программе митапа были три выступления наших коллег:

            1. Андрей Сугак (JetBrains) рассказал о результатах своей дипломной работы: инструменте Мутационного тестирования проектов на языке Scala;
            2. Илья Кириллов (СПБГУ) представил недавно появившийся build tool CBT;
            3. Сергей Рублев (eLama) дал ряд практических примеров использования библиотеки Slick.

            Подробности выступлений и видеоматериалы под катом…
            Читать дальше →
          • DevDay на функционале. Запись докладов



              Возможно, вы уже знаете, что раз в месяц 2ГИС проводит DevDay — открытые встречи для общительных разработчиков. Так, 15 декабря мы собрали 140 человек, чтобы потолковать про функциональное программирование.

              Делимся с вами записью двух выступлений. Первое видео будет полезно для входа в тему ФП, второе — расскажет о подводных камнях Akka Streams.
              Давайте посмотрим
            • Больше чем Java?

              Закончив очередной проект на Java, я попытался разобраться в причинах накопившегося раздражения. Да я люблю Яву и все такое, но… Есть несколько «но», которые досаждают. Приходится писать довольно много шаблонного кода, с генерацией которого вполне может справиться сам компилятор, IDE, конечно, выручает, но это не решение проблемы, а скорее костыль: если что-то изменилось, нужно перегенерить и вычистить и т.д. Проверки на null! Это зубная боль, по-хорошему, нужно делать их всегда дабы не нарваться на «нежданчик» в виде NullPointerException в самый неподходящий момент. Короче говоря, появилось желание посмотреть, что еще появилось в природе и сможет ли это нечто заменить мне Java. Дальше имеет смысл описать участников данного сравнения. Сразу скажу, что не претендую на полноту анализа, к сожалению, у меня было слишком мало времени, чтобы как следует познакомиться с каждым языком.

              Обязательные требования к претендентам, которые у меня были:

              • Язык общего назначения
              • Кроссплатформенность (хотя бы Windows/Linux)
              • Стабильность
              • Статическая типизация
              • Автоматическая уборка памяти
              • Поддержка полноценной объектно-ориентированной парадигмы
              • Хорошая поддержка в IDE (Eclipse, IDEA или на худой конец NetBeans)
              • Безгемморойный доступ к существующим фреймворкам/библиотекам
              • Производительность на уровне Java
              Читать дальше →
            • Naive Spellchecking, или поиск ближайших слов из словаря по метрике Левенштейна на Scala

              • Tutorial
              Приветствую! В этой статье будет показан алгоритм поиска ближайших к заданному слов из корпуса в терминах метрики Левенштейна. Наивным spellchecking-ом назван потому, что не учитывает ни морфологии, ни контекста, ни вероятности появления скорректированного слова в предложении, однако в качестве первого приближения сойдет вполне. Также алгоритм может быть расширен на поиск ближайших последовательностей из любых других сравнимых объектов, нежели простой алфавит из Char-ов, и, после допиливания напильником, его можно приспособить и для учета вероятностей появления скорректированных слов. Но в данной статье сосредоточимся на базовом алгоритме для слов определенного алфавита, скажем, английского.

              Код в статье будет на Scala.

              Всех заинтересовавшихся прошу под кат.
              Читать дальше →

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