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

Scala *

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

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

Scala Digest. Выпуск 24

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

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

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

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

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

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

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

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

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

Читать далее

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

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

Перевод заметки Пьера Рикадата о механизме 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 мин
Количество просмотров990

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

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

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

Scala Digest. Выпуск 23

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

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

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

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

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

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

В эпоху 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 мин
Количество просмотров830

Привет, Хабр! Мы — @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, комментарии к методам и обсуждение возможных улучшений для более эффективного решения аналогичных задач.

Читать далее

Spark Essentials: Руководство по настройке и запуску проектов Spark с помощью Scala и sbt

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

В этой статье представлено подробное руководство по инициализации проекта Spark с помощью Scala Build Tool (SBT). Это руководство охватывает все этапы процесса, включая создание проектов, управление зависимостями, локальное тестирование, компиляцию и развертывание проекта Spark на кластере.

Это руководство было тщательно продумано, чтобы помочь новичкам, так что даже те, кто только начинает изучать Spark, смогут легко ему следовать. Более того, эта статья послужит ценным пособием для тех, кто хочет создавать, тестировать и развертывать пакетные задания Spark в среде JVM.

Цель этой статьи — предоставить вам подробное руководство по инициализации проекта Spark, в котором будут подробно рассмотрены все ключевые идеи. В руководстве будет рассмотрен пошаговый процесс создания проектов с помощью Scala Build Tool (SBT), а также продемонстрировано управление зависимостями, локальное тестирование, компиляция и развертывание проекта Spark на кластере.

Читать далее

Scala Digest. Выпуск 20

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

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

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

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