Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и стараемся его популяризировать.

Мы собрали свежий выпуск новостей из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавили дополнительные новости и свои комментарии. Наша мотивация — в желании развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ

Релизы

Последние обновления популярных и полезных библиотек за пару месяцев:

From Tinkoff with ????

Рубрика для митапов и релизов библиотек и фреймворков, рожденных в недрах scala-комьюнити Тинькофф:

  • Mockingbird 3.6.0, 3.7.0, 3.7.1 — добавили поддержку вложенных protobuf-структур и другие небольшие изменения.

  • Иван Лягаев — О дивный контекстный мир Scala. Наш коллега презентовал доклад на Joker о работе с контекстом в Scala. От простой хеш-мапы и MDC до навороченных функциональных подходов с ReaderT-монадой и тайп-классами из tofu.

Статьи

Раздел со свежими статьями, репозиториями и исследованиями, которые нам показались интересными. В отдельный блок вынесли ресурсы, где авторы используют Scala 3. Enjoy:

  • Cancelling HTTP requests on the JVM — что будет при отмене http-вызова? Этим вопросом задается Adam Warski и проводит эксперимент с разными http-клиентами. Спойлер: сервер все равно закончит вычисления и отправит первый фрейм, но клиент не будет лишний раз сохранять и парсить ответ. А некоторые клиенты вовсе не умеют отменять вызов, например akka-http или встроенный java-client версии меньше JDK16.

  • Functional messaging in Scala with pass4s — небольшой, но емкий туториал по работе с pass4s, библиотекой-клиентом к AWS SQS/SNS и ActiveMQ. В этой части показаны базовые принципы использования: пару десятков строчек, как создать консьюмер/продюсер для простых строковых сообщений в AWS SQS/SNS. Из интересностей: используется scala-cli для работы с проектом.

  • JSON and XML messaging with pass4s — на одних неструктурированных строках далеко не уедешь! Добавляем в гайд выше интеграции с circe/phobos для кодирования и декодирования наших сообщений в структурированный формат в виде JSON/XML.

  • Proxy large messages via S3 with pass4s — продолжаем неловкие шаги в постижении pass4s. «Сообщения больше 256 КБ? Не беда!» — демонстрация встроенной схемы работы с прокси-S3 хранилищем для отправки сообщений любого размера.

  • fs2-kafka introduction: lib for ADT-events, idempotent writes and batches of offsets — продолжение туториала по fs2-kafka от Anton Kovalevsky. Работаем с несколькими типами сообщений в топике, десереализуя в разные case-классы, и добиваемся идемпотентности при at-least-once семантике.

  • Comparing case class instances using DiffX — вы никогда не слышали о библиотеке diffx, которая помогает гибко настроить сравнение экземпляров нетривиальных case-классов? Эта статья для вас! Простые и наглядные примеры прилагаются.

  • Web Scraping With Scala — первые шаги по information retrieval в туториале по веб-скрейпингу. Работаем с парсингом статических страниц при помощи Jsoup и Scala Scraper и динамических через Selenium.

  • Functional Programming anti-patterns in Scala — напоминание о том, что не стоит забывать использовать IO.pure и IO.blocking, а также что в Scala мы умеем больше, чем просто проставлять примитивные типы.

Когда придет час Белого Хлада и Волчьей Пурги, не ешьте желтый снег.

  • Functional Data Modeling in Scala — выражение доменной области через алгебраические типы данных, попутно затрагивается тема smart constructors.

  • Demystifying Variance magic in Scala — озадачивают странные плюсики и минусики и знаки сравнения в квадратных скобках? Просто, наглядно и понятно про (in/co/contra)-вариантность.

  • Typeclassery — A sure way of making generic programs context aware — о видах полиморфизма и о том, как достичь ad-hoc полиморфизма с помощью паттерна тайп-классов. Тут же небольшое обсуждение понятия алгебр и их связи с этим подходом.

  • Experimenting with actors in ZIO — большая статья с рефлексией о написании игрушечной акторной модели на базе zio. Не стоит воспринимать как hands-on туториал по проектированию собственной библиотеки: автор честно сознается, что до этой статьи с акторами не работал и Scala в энтерпрайзе не использовал. Но стоит отдать должное кропотливой работе и анализу результатов.

  • Pragmatic DDD in Scala with ZIO — «Я учил DDD на протяжении 10 лет и понял, что делал это неправильно». Denis Mikhailov — о правильном подходе к DDD в контексте функционального программирования и экосистемы zio. Пока написаны только первые главы, но анонсированные темы внушают оптимизм.

  • Useful Automation Tools for Scala Development — мастхэв-набор автоматизации рутины в проекте для новичка.

  • Revisiting Scala Native performance — бенчмарки сравнения Scala Native, Open JDK и Graal Native Image. Понравилось подробное описание подготовки среды запуска и наличие конфигурации локальной машины, на которой совершались прогоны. Интересно читать про подводные камни, с которыми столкнулись при разворачивании среды тестирования для Graal Native Image.

  • Why use Scala for building backend applications? — продаем Scala с его экосистемой бизнесу.

Статьи по Scala 3

  • Enum serialization in Scala — женим enum’ы из Scala 3 с circe, руководство к действию. Смотри сюда вместо stackoverflow (>ᴗ•)

Видео и доклады

Свежая подборка как известных, так и на ноунейм-каналов и видео про Scala:

  • Compile-Time Time! — Data Transmogrification Macro From Scratch. Kit Langton радует livecoding-сессиями по созданию своего аналога chimney и ducktape. Scala 3 и куча макросов, все как мы любим! К слову, множество выпусков о метапрограммировании не прошли даром — Кит анонсировал гримуар-руководство по этой черной магии. Первые главы доступны на macros.scala.school. 

  • Rock the JVM. Type-Level Programming in Scala: A Hardcore Tic-Tac-Toe — адепты TypeScript бросили вызов системе типов в Scala, на что Daniel Ciocîrlan не устоял и ответил крестиками-ноликами, вычисляемыми в compile-time без макросов. Концептуально подход к реализации схож с серией Type-Level Programming in Scala. Кодируем конфигурацию поля на уровне типов и валидируем ее: если код компилируется — один из игроков выиграл, иначе нет. Вся магия работает с помощью механизма подстановки имплиситов.

  • 10+ Scala Concepts you Need to Know — когда объясняешь маме значения слов краш, флекс, кринж весь technobabble функционального языка, или 16 минут комплиментов Scala.

  • Ziverge — заключительные записи докладов с конференции Functional Scala. Один из последних рассказов — битва могучего ZIO против нового JDK, в качестве судьи — сам John A De Goes. Фабрика Zymposium все так же поставляет любопытные выпуски о Scala-инжиниринге: работаем с OpenAI и ChatGPT, клепаем свою magnolia с mirror’ами и compile-time операциями.

  • Lagom Framework in Scala Series — многосерийный туториал по разработке с нуля проекта на lagom, фреймворке для построения реактивной архитектуры сервисов. Сам фреймворк — хитрое переплетение play framework, akka и guice. Советуем заглянуть, так как помимо документации материалов по lagom не так уж и много.

Highlights

В этом блоке не всегда свежие, но зацепившие нас ресурсы под флагом «очумелые ручки». Авторы творят что-то интересное, необычное, но не обязательно полезное:

  • airframe — огромная, но тем не менее не самая известная экосистема.

    Содержит модули на все случаи жизни:
    • airframe-di — dependency-injection библиотека, схожая с distage;

    • airframe-rpc — абстрагированный от REST фреймворк для клиент-серверной связи с поддержкой Scala.js для frontend кода. Из фичей: поддержка HTTP/1 (finagle), HTTP/2 с имплементацией GRPC и генерация OpenAPI документации;

    • airframe-http — если все-таки без REST никуда, то здесь же доступен finagle-based веб-сервер;

    • airframe-rx — модуль для реактивного программирования. Примеры сценариев использования: рендер DOM-объектов и стриминг с помощью GRPC;

    • airspec — куда же без своего фреймворка для тестирования! Мотивацию создания можно глянуть здесь. Работа с ресурсами, nested тесткейсы, поддержка асинхронности с Future и мокирование зависимостей.

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

  • Tasty-query SQL — утилита для анализа TASTy-файлов через базу H2 и язык запросов SQL. Смотреть код в редакторе? — No. Смотреть код через запросы в базу данных? — Yeah ▓▒░(°◡°)░▒▓

  • quotidian — в Scala 3 нет автоматической генерации typeclass ToExpr и FromExpr, но Kit Langton спешит на помощь со своей hand-made библиотекой.

  • Lightning Memory Database (LMDB) for ZIO — клиент embedded key-value базы данных LMDB для zio и Scala 3.

  • uPickle 3.0.0 и FastParse 3.0.0 — широкоизвестный lihaoyi зарелизил мажорные версии библиотек для сереализации/десереализации json и парсинга текста с поддержкой Scala 3.

  • sbt-nosbt — sbt files as a Scala code ヾ(  ̄O ̄)ツ

  • scautable — генерилка html-страниц с таблицами из кода.

Tooling

Кусочек дайджеста, где мы рассказываем о новых и улучшении уже существующих инструментов для разработки:

  • sbt 2.0 ideas — make sbt simple again или Eugene Yokota продолжает совершенствовать инструмент sbt. Основанная на его работах о sudori, в Maven Central уже доступна тестовая версия 2.0.0-alpha7. Разработка и брейншторминг идей все еще в процессе как на уровне обсуждений в Tooling Summit, так и на уровне комьюнити. Присоединяйтесь („• ֊ •„)

    Кстати, по ссылкам RFC-1, RFC-2 и RFC-3 отдельные мысли на тему кешей, организации процесса обсуждения RFC и удаления кастомных осей конфигурации.

  • Kubernetes and the JVM — рассказ от команды Xebia о том, как подружить k8s и JVM так, чтобы не словить java.lang.OutOfMemoryError на тернистом пути в облако. Немного теории о requests/limits в kubernetes, а также как с ними связаны регионы памяти и флаги их настройки в JVM.

  • Exploring Scala CLI – the new scala runner — о том, что такое scala-cli, какая невиданная мощь кроется в этом инструменте и почему заменяет scala-repl, берет на себя часть функций sbt, scalafmt и так далее.

  • A solid checklist for configuring new Scala projects — вы написали HelloWorld.scala, а что дальше? Ловите полезный starter-pack конфигураций вашего проекта для первого коммита.

  • Nix Home Manager Tutorial — DevInsideYou продолжает рассказывать об экосистеме Nix. В этой части пошаговая иллюстрация установки Nix Home Manager с указанием возможных проблем и подводных камней.

  • VS Code Profile for Scala

Комьюнити-движ

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

  • Contribution Equals Impact — Towards a Responsible, Sustainable, and Resilient Open Source Ecosystem for Scala. Небольшой анонс серии интервью с активными держателями разных секторов Scala open-source. В конце — призыв поделиться своими историями успеха.

  • Lately 02 — Chris Kipp продолжает делиться личными переживаниями и ощущениями от прошедшего месяца. Пост больше личный и к Scala относится только часть о работе в Scala Center. Но написано душевно и почитать приятно.

  • Scala Center’s five-year impact report — воды много, но красиво.

До встречи через месяц! ♡\( ̄▽ ̄)/♡

Над дайджестом работали @Melkaya_150cm, @Ivoya, @tcarina. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>

Комментарии (0)