Все потоки
Поиск
Написать публикацию
Обновить
8.33

Scala *

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

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

Scala Digest. Выпуск 25

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.1K

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

Читать двадцать пятый выпуск

Документация приложения — дело рук самого приложения

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров4.2K

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

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

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

Читать далее

Scala Digest. Выпуск 24

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.5K

Привет, Хабр! Мы — Настя и Эвелина — приветствуем свежую кровь в нашей небольшой, но уютной команде! Миша присоединился к нам месяц назад с горящими глазами и желанием раскопать и вывести на свет каждую драгоценную унцию информации и новостей из Scala-мира.

Мы рады видеть нового бойца в наших рядах и уверены, что сможем делать дайджест еще лучше. А вы можете поделиться собственными материалами — мы опубликуем их и скажем вам спасибо (づ ◕‿◕ )づ

Читать двадцать четвертый выпуск

Использование ZLayer без «сервисов»

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров450

В заметке "Идиоматическое внедрение зависимостей в ZIO 2" Пьер Рикадат описывает типичную структуру Scala-приложения на основе ZIO. Элементами этой структуры являются использование интерфейсов, классов с зависимостями и dependency injection.

Известен также подход, описанный в заметке "От внедрения зависимостей к отказу от зависимостей" Марка Симана. Автор прежде был апологетом внедрения зависимостей и написал об этом книжку. Но в функциональном подходе можно строить системы без зависимостей, что требует отказа сразу от интерфейсов, классов с зависимостями и от понятия dependency injection.

Хотелось бы посмотреть, как те же примеры, что приводит Пьер Рикадат, будут выглядеть без классов и интерфейсов. А также понять, можно ли использовать ZLayer'ы при разработке программ в функциональном стиле.

Читать далее

Идиоматическое внедрение зависимостей в ZIO 2

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров563

Перевод заметки Пьера Рикадата о механизме ZLayer в ZIO2 ("Idiomatic dependency injection for ZIO applications in Scala", Pierre Ricadat).

---

Я (автор оригинальной заметки) часто слышу в Интернете в Scala-обсуждениях, что ZLayer "слишком сложный" или "лишний". Эти совершенно противоречит моему опыту: я считаю, что ZLayer - невероятно крутая технология! В предыдущих версиях ZIO действительно были проблемы (те, кто помнит тип данных Has[_], знают, о чем я говорю!), но с тех пор всё поменялось. В этой статье я покажу идиоматическое использование ZLayer для DI (dependency injection, внедрение зависимостей) и надеюсь продемонстрировать, как это позволяет делать сложные вещи очень простым способом.

Примечание: Я много лет работал с приложениями ZIO (ещё даже до выхода версии 1.0!), и в настоящее время я работаю над серверной частью большой многопользовательской онлайн-игры, полностью написанной на Scala и использующей ZIO. Примеры в этой статье основаны на этой кодовой базе.

Читать далее

Ox: Императивный подход к параллельной потоковой обработке данных

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров998

Ox, библиотека Scala для безопасного параллелизма и отказоустойчивости в императивном стиле (direct‑style) на JVM, получила новую реализацию параллельной потоковой обработки данных. Она позволяет определять конвейеры обработки данных с помощью функционального API, императивного API или сразу обоих вариантов одновременно.

Потоковая обработка данных в Ox была и раньше: предыдущая реализация была основана исключительно на каналах. Хоть она и работала, но все‑таки имела свои недостатки: каждый этап преобразования вводил асинхронную границу. В некоторых ситуациях это может быть неэффективно: если вы оперируете всего лишь несколькими неблокирующими и не требующими больших затрат CPU этапами, такими как .filter, .mapStateful или .interleave, асинхронные границы просто не нужны. Следовательно, такой подход приводил к избыточному параллелизму.

Читать далее

Выжимаем максимум из Scalafix

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров997

Обнаружил, что на Хабре нет статьи про Scalafix. Это мощный инструмент для анализа и рефакторинга Scala кода. В статье расскажу о его возможностях и как он может упростить работу с кодом.

Читать статью

Рекурсивные типы. Часть 5/5. Занимательный матан

Уровень сложностиСложный
Время на прочтение18 мин
Количество просмотров1.8K

Содержание пятой части:

Натуральные числа
Разложение в ряд
Производные от типов
Производные от экспоненциалов
Производные от рекурсивных типов

Читать далее

Рекурсивные типы. Часть 4/5. Схемы рекурсии

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.3K

Содержание четвёртой части:

Обобщение свёрток/развёрток
Параморфизм и другие схемы рекурсии
Хистоморфизм
Футуморфизм

Читать далее

Рекурсивные типы. Часть 3/5. Свободные контейнеры

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров890

Сравнительно небольшая часть обзора, посвящённая свободным контейнерам. Содержание:

Свободный контейнер
Более свободный контейнер
Батуты
Ко-свободный контейнер
Промежуточный итог

Читать далее

Рекурсивные типы. Часть 2/5. Неподвижные точки конструкторов типов

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров1.5K

Содержание второй части:

Неподвижные точки конструкторов типов
Начальная F-алгебра
Наибольшая неподвижная точка
Классы типов неподвижных точек

Читать далее

Рекурсивные типы. Часть 1/5. Рекурсия

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.6K

Слово «рекурсия» происходит от латинского «recursio» – «круговорот, возврат». Применительно к вычислениям этот термин относится к алгоритмам, повторяющих какие-либо действия. Этот обзор посвящён типам, которые обслуживают рекурсивные алгоритмы.

Это вводная часть и собственно про типы здесь будет мало что сказано. Содержание:

Вычислимые функции
Циклы и рекурсия
Cтек и хвостовая рекурсия
Ссылки вперёд
Y-комбинатор в λ-исчислении
Реализация комбинатора неподвижной точки

Читать далее

Scala Digest. Выпуск 23

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров943

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

Читать двадцать третий выпуск

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

Асинхронная обработка Stripe событий с помощью Scala

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров843

Каждый стартап рано или поздно сталкивается с необходимостью обработки платежей онлайн.

В эпоху SaaS, PaaS, IaaS и других «As a Service» инициатив (их число постоянно растет), многие полагаются на бизнес модель платных подписок, так как она обеспечивает возможность регулярно в автоматическом режиме собирать платежи с пользователей и дает лучшую прогнозируемость финансовых потоков.

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

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

Читать далее

Scala Digest. Выпуск 22

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.6K

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

Теперь вы можете поделиться собственными материалами!

Читать двадцать второй выпуск

Уйти из айти – бросаем разработку ради психологии и смотрим, что получится

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

(спойлер: возвращение обратно на апгрейде)

Анна Пономарева руководит группой серверной разработки в компании «Криптонит». Она прошла путь от художественной школы через психологию в разработку платформенных сервисов. Помогает ли знание психологии лучше управлять командой? Есть ли взаимосвязь между темпераментом человека и парадигмой программирования, которую он выбирает? Правда ли, что все айтишники — необщительные интроверты? Читайте в интервью. 

Читать далее

Scala Digest. Выпуск 21

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров838

Привет, Хабр! Мы — @Ivoya, @Melkaya_150cm, @tcarina и @EvieLynn — бэкенд-разработчики Т-Банка, пишем код на Scala и горим желанием его популяризировать. Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем дополнительные новости и собственные комментарии. Мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ 

Теперь вы можете поделиться собственными материалами!

Читать двадцать первый выпуск

Создание data lineage в Apache Atlas из логических планов Spark (не без «костылей»)

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров1.1K

В статье обсуждается процесс интеграции Apache Spark с Apache Atlas для визуализации выполнения ETL-процессов на основе построения связей между операциями в Spark. Автор описывает создание пользовательских сущностей в Apache Atlas, таких как Process и DataSet, которые необходимы для отражения трансформаций данных.

Основной фокус статьи заключается в построении графа lineage (происхождения данных) для операций в Spark. Автор выделяет ограничения архитектуры Apache Atlas, например, необходимость наследования от стандартных типов Process и DataSet для корректного отображения lineage. Также описывается создание и отправка новых типов сущностей в Apache Atlas с использованием REST API, а также проблемы, возникающие при попытках обновления сущностей.

Читать далее

Жизнь, смерть и ̶р̶о̶б̶о̶т̶ы̶ управление ресурсами в Scala

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров1K

Вы когда-нибудь задумывались о том, как выделяется память для переменных, и в какой конкретно момент она очищается? Как сборщик мусора «решает», что переменная уже не нужна и можно ли как-то повлиять на его решение?

В новой статье директор департамента разработки компании «Криптонит» Алексей Шуксто рассказал об интересных особенностях управления жизненным циклом объектов в Scala и Java разных версий. С необходимостью вникать в эту внутреннюю кухню сталкиваются все, кто использует в своих программах потоки, подключения к БД и другим сторонним сервисам, анализирует метрики, обрабатывает исключения… все, кто пишет что-то сложнее «Hello World!» и хочет добиться предсказуемого результата.

Читать далее

Поиск всех последовательностей чисел от 1 до n, где сумма соседних чисел является квадратом

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров8.3K

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

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

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

Читать далее