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

Scala *

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

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

Функциональный поиск событий с помощью cats-effect

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

Достижение максимальной выразительности и абстракции домена при сохранении точности протокола актора с помощью библиотеки endless4s Scala.

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

Читать далее

Физика вращения 3д тел

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

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

В статье Вас ждут математика, физика, а заодно численное моделирование и визуализация в libgdx.

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

Читать далее

Умные конструкторы для кейс-классов

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

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

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

Читать далее

Автоматический подбор параметров для Spark-приложений

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

Всем привет! Меня зовут Валерия Дымбицкая, я технический руководитель команды дата-инженеров в OneFactor. В этой статье я расскажу о том, как мы научились автоматически подбирать параметры для Spark-приложений на основе логов.

Проблема, которую мы решали, может встретиться при регулярном, предсказуемом, интенсивном использовании Hadoop-кластера. Я расскажу, как мы простыми средствами сделали рабочую автономную систему тюнинга, сэкономив в итоге 15-16% ресурсов кластера. Вас ждут детали с примерами кода.

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

Зачем нам вообще понадобился автоматический тюнинг?

Начнём с инфраструктуры. Сетап у нас "классический": ограниченный Hadoop-кластер из купленных серверов. В нём на тот момент, когда мы начали всё это делать, было около 30Тб RAM и 5к CPU. В этом кластере запускается множество разноплановых приложений на Apache Spark и в какой-то момент им стало тесновато. Всё больше приложений висели в PENDING значительное время, потребление памяти утроилось за последние 4 месяца. Сохранять такую тенденцию не хотелось.

Довольно много приложений были от продукта Лидогенерация. Базово он устроен так: есть список номеров телефонов (база) и есть Spark ML Pipeline, который каким-то образом отбирает из этой базы лидов абонентов для некоего целевого действия – например, для предложения продукта клиенту. База может меняться от раза к разу. Вот такую пару из

Читать далее

Как написать игру «Змейка» на Scala

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

Эта статья написана по приколу. В ней я за считанные минуты расскажу, как создать игру «Змейка» на Scala с использованием ScalaFX.

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

В статье я шаг за шагом разбираю всю логику игры, рассказываю, как она была продумана.
Читать дальше →

Нагрузочное тестирование Gatling

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

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

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

Читать далее

Книга «Scala. Профессиональное программирование. 5-е изд.»

Время на прочтение15 мин
Количество просмотров6.2K
image Привет, Хаброжители! Мы издали главную книгу по Scala, популярному языку для платформы Java, в котором сочетаются концепции объектно-ориентированного и функционального программирования, благодаря чему он превращается в уникальное и мощное средство разработки.

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

Пятое издание значительно обновлено, чтобы охватить многочисленные изменения, появившиеся в Scala 3.

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

Ищем боттлнеки за 30 минут с помощью Jaeger трейсов

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

Всем привет! Меня зовут Артем, я бэкенд-разработчик в команде клиентского бэкенда. Одна из важных частей моей работы — это снижение латенси нашего бэкенда. История, о которой я расскажу в статье, как раз и началась с одной из таких задач. Звучала она следующим образом:


В одном из эндпоинтов чекаута 99 перцентиль латенси пробивает SLO. Нужно это исправить.

Соответственно, возникает вопрос: как максимально быстро и точно найти причину тормозов очень низкочастотного запроса на 99 перцентиле и что делать, чтобы ее устранить? Ответом на него стала библиотека для полуавтоматического поиска узких мест в распределененных системах. Ссылка на гитхаб будет в конце статьи.

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

Написание чата с Akka

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

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

Сервис будет реализован как комбинация из простого REST API и приложения WebSocket. Чтобы было чуть интереснее, я решил по максимуму использовать связанные с Akka библиотеки и typed actors.

Весь приведённый в статье код доступен в репозитории GitHub.
Читать дальше →

«Независимо от ситуации на рынке стоит учиться на Scala»

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

О «пороге входа» для Scala-программиста, переходе с Java, востребованности таких спецов на российском рынке в 2022 году мы поговорили с Алексеем Долгим (@sinc86), ведущим инженером-программистом департамента разработки компании «Криптонит».

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

Читать далее

Эффективные шаблоны case-классов в Scala

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

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

Читать далее

О проверке захвата в Scala 3

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

Несколько дней назад в твите Мартина Одерски (Martin Odersky) была анонсирована новая экспериментальная фича под названием "проверка захвата".

Эта фича — новая глава в десятилетней борьбе за добавление чего-то похожего на систему эффектов в scala 3. Она имеет некоторое сходство с предложением линейных ограничений для Haskell и лайфтайма rust.

Читать далее

А насколько Loom реактивный?

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

Проект Loom добавит в Java 19 виртуальные треды. Что это? Новые перспективы для рынка труда нарисовались в предыдущей части заметки. В аспекте внутренностей JVM про Loom рассказывает Иван Углянский: рекомендую его доклад «Thread Wars — проект Loom наносит ответный удар».

Здесь мы оценим, как добавка повлияет на современные подходы серверной разработки. Потеснит ли новинка Scala и Kotlin с их фреймворками? Заодно ответим на вопрос «а в какой мере Loom — реактивный»?

Читать далее

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

Loom: зачем?

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

Недавно, 6 мая этого года, в OpenJDK вошёл JEP 425, который добавит к Java 19 в качестве превью-фичи Виртуальные треды.

Пожалуй, этот JEP — самое большое изменение семантики языка после появления Дженериков. Его масштабы трудно оценить. Для начала попробуем прикинуть, как оно может отразиться на нашей зарплате.

Читать далее

Scala: Гексагональная архитектура и DDD на Free Monad в функциональном программировании

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

Привет Хабр! Пятничного тру ФП хардкора с Free Monad, Таглес Финал, Монад трансформерами, Refined Types, Smart Constructors и прочим таким вам в ленту. Хардкор сам себя в ленту не принесет так что погнали.

Гексагональная архитектура делит наш код на три основные части.

1) Primary Adapters,

2) Secondary Adapter

3) Logic aka Domain.

Читать далее

Умные конструкторы для case классов

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

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

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

Читать далее

Scala: Авторизация. Защита API с помошью Bearer токена

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

В это пример я буду рассматривать только парсинг и валидацию токенов что уже пришли в мое API в Authorization хедере. Для генерации токенов, регистрации пользователей и прочего SSO есть много готовых решений которые легко установить или даже устанавливать не надо. Например, Auth0, Keyckloak, IdentityServer4. В пример е буду работать с Tapir который может использовать в качестве бекенда http4s, Akk HTTP, Netty, Finatra, Play, ZIO Http, Armeria. Я буду использовать Tapir + Http4s.

Читать далее

О проверке захвата

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

Несколько дней назад мы увидели новую экспериментальную фичу под названием “проверка захвата” (capture checking), анонсированную в твите Мартина Одерски (Martin Odersky).

Эта фича является новой главой в десятилетней борьбе за добавление какой-либо формы системы эффектов в scala 3. Она имеет некоторое сходство с предложением линейных ограничений (linear constraints) для Haskell и временами жизни (lifetimes) Rust.

Читать далее

Как обрабатывать объекты Avro с помощью датасетов Spark 3.2 & Scala 2.12

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

Привет!

В этом посте разберем, как обрабатывать объекты JVM, сгенерированные из схем Avro, в датасетах Spark. Вместе с этим рассмотрим, как организовать код при помощи шаблона функционального программирования "класс типов" (type class) на языке Scala.

Читать далее

Пулы потоков

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

Потоки (thread) в приложении можно разделить на три категории:

1. Нагружающие процессор (CPU bound).

2. Блокирующие ввод-вывод (Blocking IO).

3. Неблокирующие ввод-вывод (Non-blocking IO).

У каждой из этих категорий своя оптимальная конфигурация и применение.

Читать далее