василий
ефимов
авто.ру
яндекс
вертикали
Мета-программирование и Scala
12:00
Обзорный доклад о метапрограммировании
и его реализации в Scala.
Всё с самого начала — что такое метапрограммирование, какие задачи оно решает. Основной фокус на макросах в Scala. Также рассмотрим различия между Scala 2 и Scala 3.
Разберем кейсы, когда можно обойтись без макросов — magnolia, shapeless, кодогенерация. И нужны ли макросы в эпоху LLМ?
Евгений
веретенников
ЯНДЕКС ВЕРТИКАЛИ
ZIO Mock НЕ МОЖЕТ — SCALAMOCK ПОМОЖЕТ
13:00
Тесты на ZIO Mock — это боль: загадочные ошибки компиляции, чувство, что библиотека вас не понимает.
У нас было 260 таких тестов в 10+ командах. Библиотека не развивается, отправлена в архив — пришлось искать выход.
Classic scalamock даёт понятные ошибки и удобный синтаксис, но с ZIO Test из коробки не работал. Мы залезли под капот и подружили scalamock с ZIO.
Расскажу, как совместить ленивые и не-ленивые решения, и превратить техническую боль в удобный инструмент для всей компании.
Всеволод
никитин
Т-Банк
Деградация паттернов отказоустойчи-востиотказоустойчивости и деградация
13:00
#Resilience, #Fallback, #Cassandra, #Scala, #Troubleshooting
Олег Нижников и коллеги мощно и быстро писали Т-Банк на Scala: монолит, сервисы, тулзы и сделали полезный паттерн отказоустойчивости — fallback cache. Например, если не удается получить баланс счета (или сотни других атрибутов) — то из persistence на основе cassandra берется последнее успешно полученное значение. И всё работало.
Но время идет. Олег Нижников ушел в гемблинг, а вместо него понабрали скалистов с улицы по объявлению. Например, Всеволода Никитина.
И fallback'и в легендарном Scala-монолите почему-то начали деградировать.
никита
глущенко
spendit ag
Полиморфные λ-функции
и их вклад в безопасную деривацию тайпклассов
14:00
Мы разберём практический кейс использования полиморфных λ-функций в библиотеке Wisteria для деривации тайпклассов. Покажу, как такой подход усиливает безопасность типов и делает API более надёжным и простым по сравнению с Magnolia.
Иван
шукшин
Health Samurai
SQL как структуры данных: генерация запросов в runtime
14:00
jOOQ генерирует код из схемы БД. Doobie проверяет типы в compile-time. Но что делать, когда структура запроса зависит от runtime данных?
Покажу DSQL — Clojure-библиотеку, где SQL представлен, как композируемые структуры данных. Разберём, как ML-модель для поиска дубликатов пациентов превращается в сложный SQL в runtime.
Увидите примеры полноценной работы с JSONB операторами PostgreSQL, динамические CTE, параметризацию операторов и имён таблиц. Обсудим архитектуру библиотеки и SQL-first подход через нативный парсер PostgreSQL.
анна
кривицкая
сбер
BIG DATA ПО ПОЛОЧКАМ: DATA LINEAGE НА ZIO И POSTGRES
15:45
Как написать собственный Data Lineage для визуализации связей между данными Hadoop кластера и потоками их трансформации на стеке Spark, ZIO, Postgres? В докладе я поделюсь нашим опытом: расскажу, как мы подключали SparkListener, использовали Postgres для обработки графа, находили memory leak в ZIO библиотеке, а также о других вызовах, с которыми столкнулись в процессе.
Алексей
троицкий
Т-банк
воркшоп
Tuple, еще tuplee и метапрограм-мирование
15:45
Так, 3.7.0, угу, NamedTuple... Опять эти академики какую-то ненужную вещь в язык засунули? Так, это что, еще один способ написать case class, что ли? А под капотом-то там что? В свободном формате лекции-семинара распакуем одну из новых фичей в Scala 3 — именованные кортежи. При этом сделаем отдельный акцент на их использовании в метапрограммировании.
иван
башкаров
Т-банк
Как сбрасывать кэш с минимальными усилиями, используя логирование
16:30
Говорят, в программировании две проблемы: инвалидация кэша и именование переменных. Со второй проблемой нам не доводилось сталкиваться, а вот с первой в свое время пришлось. В докладе я расскажу про замечательную и малоизвестную библиотеку Fetch для композиционного описания вычислений и сборки данных, про её внутреннее устройство, и про то, как нам удалось надёжно и элегантно решить проблему сброса кэша источников данных, используя логирование в библиотеке Fetch.
андрей листопадов
Health Samurai
clojure.core.
async - deep dive
17:30
Разбор реализации асинхронной модели в Clojure: устройство каналов, очередей, таймеров и event‑loop; разберём, во что компилируются «виртуальные треды»; рассмотрим архитектурные последствия реализации через систему макросов.
Будет интересно разработчикам языков программирования, рассматривающим добавление в язык поддержки асинхронного исполнения. После доклада вы поймете различия между асинхронностью и параллелизмом, внутренние механизмы clojure.core.async, сможете оценить применимость подхода в своих проектах и получите более глубокое понимание работы асинхронных тредов и каналов сообщений.
павел
шапкин
т-банк
Антон
бровкин
т-банк
арсений
жижелев
т-банк
Круглый стол
Спецификация программ: от тестов до теории типов
17:30
Типы или тесты? Кто кого победит в битве за надёжность кода?
Scala-разработчики клянутся в верности типам, но почему-то всё ещё пишут тесты… Может, зря?
За круглым столом — жаркие дебаты: можно ли надежно доставлять бизнес-вэлью, доверившись только типам и компилятору, как Scala 3 помогает писать меньше тестов, не снижая качества кода, и почему даже идеально типизированный код всё-таки падает в проде.
Говорим про property-based тесты, абстрактные спецификации, их интерпретации, и как не утонуть в мире, где String всё ещё может быть null (что мы, конечно же, осуждаем).
даниил
соболь
зоопт
Биржевые системы и теория относительности
18:15
Когда мы думаем о биржах, кажется, что всё просто: ордер пришёл — положили в стакан. Но в реальности разработчики сталкиваются с «относительностью» распределённых систем: как определить «одновременно», почему события меняются местами и можно ли вообще избежать распределённости?
На примере создания криптобиржи на эрланге расскажу, с какими сетевыми и архитектурными трудностями мы столкнулись и почему классическая параллелизация не всегда помогает. Также обсудим парадоксы реального времени и как случайности становятся частью бизнес-модели.