Как стать автором
Поиск
Написать публикацию
Обновить
15.03

Scala *

Мультипарадигмальный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Как найти что-то в тексте

Время на прочтение8 мин
Количество просмотров8K
Найти объект или распознать понятие в тексте — с этого начинается решение большинства NLP задач. Если вы проектируете поисковую систему, создаете голосового помощника или классифицируете пользовательские запросы, прежде всего вы должны разобрать входной текст и попытаться найти в нем именованные сущности, которые могут быть универсальными, такими как даты, страны и города, или специфичными для конкретной модели. Обратите внимание, мы сейчас говорим лишь о тех видах задач, для которых заранее известно, что именно вы ищете или что может встретиться в тексте.

image

NER (named entity recognition) компонент, то есть программный компонент для поиска именованных сущностей, должен найти в тексте объект и по возможности получить из него какую-то информацию. Пример — “Дайте мне двадцать две маски”. Числовой NER компонент находит в приведенном тексте словосочетание “двадцать две” и извлекает из этих слов числовое нормализованное значение — “22”, теперь это значение можно использовать.

NER компоненты могут базироваться на нейронных сетях или работать на основе правил и каких-либо внутренних моделях. Универсальные NER компоненты часто используют второй способ.

Рассмотрим несколько готовых решений по поиску стандартных сущностей в тексте. В данной заметке мы остановимся на бесплатных или бесплатных с ограничениями библиотеках, а также расскажем о том, что сделано в проекте Apache NlpCraft в рамках данной проблематики. Представленный ниже список не является подробным и обстоятельным обзором, которых и так достаточное количество в сети, а скорее кратким описанием основных особенностей, плюсов и минусов использования этих библиотек.
Читать дальше →

Spark 3.0: новые возможности и примеры их использования – часть 1

Время на прочтение6 мин
Количество просмотров8.4K

К нашей новой программе "Apache Spark на Scala для дата-инженеров" и вебинару о курсе, который пройдет 2 декабря, мы подготовили перевод обзорной статьи о Spark 3.0.

Spark 3.0 вышел с целым набором важных улучшений, среди которых: повышение производительности с помощью ADQ, чтение бинарных файлов, улучшенная поддержка SQL и Python, Python 3.0, интеграция с Hadoop 3, поддержка ACID. 

В этой статье автор постарался привести примеры использования этих новых функций. Это первый первый материал о функциональности Spark 3.0 и у этой серии статей планируется продолжение.

Читать далее

Java 15 глазами программиста Scala

Время на прочтение10 мин
Количество просмотров6.7K

Время летит. Не успеваешь моргнуть глазом, а уже вышел очередной релиз Java. В соответствии с графиком (по релизу каждые полгода) комьюнити получило в свое распоряжение Java 15, судьба которой — стать фундаментом для Java 17 LTS (выйдет через год).

В Java постоянно вносятся улучшения, многие из которых были реализованы под влиянием других языков JVM и функционального программирования. Сюда можно отнести такие возможности, как лямбды, ограниченный вывод типов локальных переменных (тип var) и switch-выражения. Scala — особенно богатый источник идей, благодаря инновационному сочетанию в ней объектно-ориентированного и функционального программирования.

Предлагаю рассмотреть, как представленные в новом релизе Java 15 (пока в статусе превью финальной версии) возможности соотносятся с конструкциями в Scala. Мы сосредоточимся на особенностях языка, пропустим улучшения в JVM и доработку стандартной библиотеки. Кроме того, нужно отметить, что некоторые из описанных компонентов уже были доступны в более ранних версиях Java (в виде предварительной или бета-версии).

Читать далее

Apache Kafka как основа для велосипедостроения. Николай Сивко (okmeter.io)

Время на прочтение22 мин
Количество просмотров9.6K


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


В своем докладе я расскажу о нашем опыте разработки и эксплуатации специализированной timeseries БД, в основе которой лежит Apache Kafka.

Глубже в дебри ФП

Время на прочтение23 мин
Количество просмотров11K

Прежде чем начать, зацените эту красоту! Это — игра "жизнь" на языке APL:



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


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


Расчехляйте свои абстрагаторы ...

5 уроков, которые я извлек для себя, продолжая осваивать ZIO

Время на прочтение8 мин
Количество просмотров3.7K

Всем привет. В преддверии старта курса "Scala-разработчик" подготовили для вас полезный перевод.

Еще в январе 2020 года я написал два поста (I, II) о подводных камнях, с которыми могут столкнуться новички в начале работы с ZIO. Прошло 9 месяцев. На этот период пришелся релиз ZIO 1.0, и среда ZIO значительно улучшилась с внедрением ZLayer.

Как показал мой опыт, писать код с использованием ZIO — одно удовольствие. Особенно в тех случаях, когда приходится иметь дело со сложными требованиями в отношении одновременности/асинхронности, которые гораздо проще реализовать с помощью возможностей, предоставляемых этой библиотекой.

Читать далее

Scala как первый язык

Время на прочтение12 мин
Количество просмотров59K

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

Если коротко, то Scala — это сочетание лаконичности и понятности, которые есть у скриптовых языков, с надежностью и защищенностью от ошибок. Это безопасный язык, который во многом повлиял на другие и сформировал общепринятые сейчас подходы. У скалы по-прежнему большое будущее. Если честно, я думаю, что оно именно именно за такими языками.

И вот почему

Big Data Tools EAP 11: Zeppelin в DataGrip и spark-submit во всех поддерживаемых IDE

Время на прочтение4 мин
Количество просмотров1.7K

Только что вышло очередное обновление EAP 11 для плагина под названием Big Data Tools, доступного для установки в IntelliJ IDEA Ultimate, PyCharm, and DataGrip. Можно установить его через страницу плагина на сайте или внутри IDE.


Big Data Tools — это плагин, позволяющий соединяться с кластерами Hadoop и Spark. Он предоставляет мониторинг узлов, приложений и отдельных задач. Кроме того, в IDEA и DataGrip можно создавать, запускать и редактировать ноутбуки Zeppelin. Можно не переключаться на веб-интерфейс Zeppelin и спокойно работать, не выходя из любимого IDE. Плагин позволяет удобно перемещаться по коду, делать умное автодополнение, рефакторинги и квик-фиксы прямо внутри ноутбука.


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

ZTools для Apache Zeppelin

Время на прочтение9 мин
Количество просмотров2.6K

Zeppelin — это интерактивный блокнот, очень полюбившийся дата-инженерам. Он умеет работать со Spark и отлично подходит для интерактивного анализа данных.


Проект недавно добрался до версии 0.9.0-preview2 и активно развивается, но, тем не менее, множество вещей всё ещё не реализованы и ждут своего часа.


Одна из таких вещей — API для получения дополнительной информации о том, что происходит внутри блокнота. С одной стороны, там имеется API, который полностью решает задачи по высокоуровневому управлению ноутбуками. Но если вам нужно что-то нетривиальное — плохие новости.


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

Теория категорий для программистов. На пальцах

Время на прочтение7 мин
Количество просмотров50K
Здравствуйте, коллеги.



Развивая наш неослабевающий интерес к серьезной, можно сказать, академической литературе, мы добрались и до теории категорий. Эта тема в знаменитом изложении Бартоша Милевского уже фигурировала на Хабре и к настоящему времени может похвастаться такими показателями:



Тем более приятно, что нам удалось обнаружить сравнительно свежий материал (январь 2020), служащий отличным и при этом максимально кратким введением в теорию категорий. Надеемся, что нам удастся заинтересовать вас этой темой
Читать дальше →

Scala мертва?

Время на прочтение4 мин
Количество просмотров17K

Предыстория:
мой основной бэкграунд - Java бэкенд. В какой-то момент стала интересна Scala. Я поработал около года в маленьком стартапе, где мы переписывали бэкенд с Python на Scala. Затем через некоторое время я начал искать варианты с переездом в цивилизованные страны и получил 4-5 офферов на Scala в нескольких Европейских странах и 1 оффер на Java… Так я оказался в Австралии. И без Scala. 

Сложно сказать, почему я сделал такой выбор, но естественно через некоторое время я задумался, а не стоит ли попытаться воплотить свою мечту и все же найти компанию, которая бы использовала Scala не только для Data-Science, но и для разработки бэкенда.

В общем, открыл я ЛинкедИн в надежде посмотреть и повыбирать вакансии, и был просто шокирован...

Читать далее

Как построить надежное приложение на базе Event sourcing

Время на прочтение8 мин
Количество просмотров6.5K

Привет! В этой статье я хочу рассказать, как из модного микросервисного приложения можно сделать рабочую, управляемую систему с помощью трех проверенных годами методик: на примере проекта внутренней performance-based рекламы Joom.


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

Big Data Tools EAP 10: SSH-туннели, фильтрация приложений, пользовательские модули и многое другое

Время на прочтение6 мин
Количество просмотров2K

Только что вышла очередная версия плагина Big Data Tools — плагина для IntelliJ IDEA Ultimate, DataGrip и PyCharm, который обеспечивает интеграцию с Hadoop и Spark, позволяет редактировать и запускать интерактивные блокноты в Zeppelin.


Основная задача этого релиза — поправить как можно больше проблем и улучшить плагин изнутри, но два важных улучшения видно невооруженным глазом:


  • соединяться с Hadoop и Spark теперь можно через SSH-туннели, создающиеся парой щелчков мыши;
  • мониторинг Hadoop может ограничивать объем данных, загружаемых при просмотре списка приложений.

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

Ближайшие события

Изучаю Scala: Часть 4 — WebSocket

Время на прочтение5 мин
Количество просмотров4.9K

Привет, Хабр! На этот раз я по пробовал сделать простенький чат через ВебСокеты. За подробностями добро пожаловать под кат.
Читать дальше →

Изучаю Scala: Часть 3 — Юнит Тесты

Время на прочтение4 мин
Количество просмотров4K


Привет, Хабр! Мало написать хороший код. Нужно еще покрыть его хорошими Юнит Тестами. В прошлой статье я сделал простой веб сервер. Теперь попробую написать насколько тестов. Обычных, Property-based и с моками. За подробностями добро пожаловать под кат.
Читать дальше →

Fetch — библиотека для доступа к данным

Время на прочтение22 мин
Количество просмотров2.7K

Fetch — это библиотека Scala для организации доступа к данным из файловых систем, БД, веб-сервисов и любых других источников, данные из которых можно получить по уникальному идентификатору. Библиотека написана в функциональном стиле и основана на Cats и Cats Effect. Предназначена для композиции и оптимизации выполнения запросов к разным источникам данных. Она позволяет:


  • запрашивать данные из нескольких источников параллельно;
  • запрашивать данные из одного источника параллельно;
  • объединять запросы к одному источнику в один запрос;
  • производить дедупликацию запросов в каждой из перечисленных ситуаций;
  • кэшировать результаты запросов.

Для этого в библиотеке предоставляются средства, которые позволяют писать чистый бизнес-код без низкоуровневых конструкций для осуществления перечисленных оптимизаций.
В примерах используется последняя на момент написания версия Fetch — 1.3.0.

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

Определение серверной логики для конечной точки: три подхода

Время на прочтение9 мин
Количество просмотров4.1K

Перевод статьи подготовлен в преддверии старта курса «Scala-разработчик»





Теа, Ральф и Джесси используют tapir для описания своих конечных точек HTTP. Им нравится его удобный для программиста API, способ описания конечных точек, возможность использовать одно и то же описание для генерации сервера, клиента или документации, а также его возможности абстракции.


Однако, когда дело доходит до определения серверной логики для конечных точек (то есть, что должно произойти, когда их конечные точки интерпретируются как сервер и подвергаются воздействию внешнего мира), приоритеты у них разнятся. К нашей великой удаче, все три подхода теперь покрыты tapir!

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

Применение ZIO ZLayer

Время на прочтение9 мин
Количество просмотров4.1K
В июле OTUS запускает новый курс «Scala-разработчик», в связи с чем мы подготовили для вас перевод полезного материала.




Новая функция ZLayer в ZIO 1.0.0-RC18+ является значительным улучшением старого паттерна модулей, что делает добавление новых сервисов намного быстрее и легче. Однако при использовании на практике я обнаружил, что может потребоваться какое-то время, чтобы освоить эту идиому.

Ниже приведен аннотированный пример финальной версии моего тестового кода, в котором я рассматриваю ряд вариантов использования. Большое спасибо Адаму Фрейзеру за помощь в оптимизации и облагораживании моей работы. Сервисы преднамеренно упрощены, так что, надеюсь, они будут достаточно понятны для быстрого чтения.
Читать дальше →

Изучаю Scala: Часть 2 — Todo лист с возможностью загрузки картинок

Время на прочтение4 мин
Количество просмотров4.4K

Привет, Хабр! Следующий этап изучения нового языка это старый добрый todo list c картинками. Чтобы научится работе с базой данных и файловой системой. Работе со стримами. За подробностями добро пожаловать под кат.
Читать дальше →

Аккуратно и системно облегчаем понимание кода

Время на прочтение5 мин
Количество просмотров2.7K

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


image


Один из эффективных способов для понимания кода – применение функциональной парадигмы программирования. Основная идея функционального программирования состоит в представлении процесса вычислений как последовательного изменения состояний без хранения где-либо самих состояний. В качестве примера системы, в которой хорошо реализован функциональный подход, часто приводят Haskell, а также Erlang или Scala. Внедряя такой подход в распространенные языки, такие как JS или Swift, можно добиться как улучшения читаемости, так и тестируемости.


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

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