Как стать автором
Обновить
-0.8
Рейтинг

Scala *

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

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

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

Высокая производительность *Java *Scala *Kotlin *

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

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

Читать далее
Всего голосов 11: ↑5 и ↓6 -1
Просмотры 1.4K
Комментарии 5

Новости

Loom: зачем?

Блог компании Usetech Высокая производительность *Java *Scala *Kotlin *
Из песочницы

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

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

Читать далее
Всего голосов 26: ↑11 и ↓15 -4
Просмотры 6.5K
Комментарии 41

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

Совершенный код *Проектирование и рефакторинг *Scala *Функциональное программирование *

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

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

1) Primary Adapters,

2) Secondary Adapter

3) Logic aka Domain.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 2.6K
Комментарии 1

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

Блог компании OTUS Программирование *Scala *
Перевод

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

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

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 1.2K
Комментарии 1

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

Информационная безопасность *Scala *API *Функциональное программирование *

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

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Просмотры 1.6K
Комментарии 0

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

Блог компании OTUS Программирование *Scala *
Перевод

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

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

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 2.7K
Комментарии 2

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

Блог компании OTUS Scala *Big Data *Data Engineering *
Tutorial

Привет!

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

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 844
Комментарии 0

Пулы потоков

Блог компании OTUS Программирование *Scala *
Перевод

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

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

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

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

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

Читать далее
Всего голосов 11: ↑6 и ↓5 +1
Просмотры 2.6K
Комментарии 0

DINS SCALA EVENING

Блог компании DINS Scala *

Андрей Обухов из DINS расскажет, что такое Software Transactional Memory. Ахтям Сакаев из компании «Метр квадратный» поделится, как исключить баги на этапе моделирования с использованием ADT. Участие бесплатное, но необходимо зарегистрироваться. Подробности под катом.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 433
Комментарии 0

«Выстрелить и забыть» в Cats Effect

Блог компании OTUS Программирование *Scala *
Перевод

Последнее время меня часто спрашивают о паттерне "fire-and-forget": как его применить в Cats Effect и какие потенциальные проблемы могут возникнуть. Поэтому я решил написать небольшой пост. Надеюсь, вам понравится!

Подробнее о Cats Effect и конкурентности читайте в моей книге Essential Effects.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Просмотры 1.2K
Комментарии 0

Стриминговые микросервисы с ZIO и Kafka

Блог компании OTUS Программирование *Scala *
Перевод

В Scalac мы ежедневно разрабатываем и внедряем распределенные приложения с высокой степенью параллелизма. Распределенные системы в настоящее время активно развиваются и не собираются в этом останавливаться. В архитектуре подобных систем, помимо Kubernetes, важное место занимает Apache Kafka.

Мы используем Apache Kafka как основу для асинхронного взаимодействия микросервисов. Простота масштабирования, устойчивость к потере и повреждению данных, репликация и легко достижимый параллелизм через консьюмер-группы (consumer groups) — вот только некоторые из причин, почему Kafka является одним из основных инструментов построения распределенных систем.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 3K
Комментарии 1

Lightbend Cloudflow. Разработка конвейеров потоковой обработки данных

Блог компании Neoflex Scala *Big Data *Data Engineering *

Lightbend Cloudflow - open-source фреймворк для построения конвейеров потоковой обработки данных, объединивший в себе тройку популярных сред: Akka, Flink и Spark.

Под катом: demo-проект и обзор фреймворка с точки зрения общей концепции и разработки.

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 1.4K
Комментарии 0

Higher-Kinded Data, или ещё один способ работать с сущностями базы данных (и не только)

Haskell *Scala *Функциональное программирование *

image


Важный дисклеймер


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


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


«Не думайте, что я сейчас буду развивать эту концепцию, а затем разочаруюсь в ней. Такой драматургии не будет. Я изначально уже в ней разочарован.»
Роман Михайлов

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


Что такое HKD


Конечно, прежде, чем писать этот раздел, я полез в интернет, чтобы посмотреть, как этот термин определяют другие люди. Чёткого определения я не нашёл.
Грубо говоря, HKD — это то, что предоставляет возможность держать в одном типе данных сразу несколько представлений. Давайте посмотрим на примеры.

Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 3.4K
Комментарии 3

Как нанять трех разработчиков Scala в штат за три месяца

Блог компании Ростелеком-Солар Информационная безопасность *Scala *Управление персоналом *Софт
Безработица, замена человека роботами, сокращения, невозможность найти стабильную и регулярно и хорошо оплачиваемую работу – о чем это они? Что за фантастика? Или эта статья родом из советского прошлого – о том, как тяжело жить при капитализме?

Сегодня ИТ-компании страдают от нехватки ИТ-специалистов, HR-ы придумывают все новые «плюшки» и организуют максимально дружелюбную и комфортную среду для работы ИТ-специалистов, разработчиков, DevOps-ов, аналитиков, которые диктуют правила рынку труда. Во всех соцсетях слышны стенания рекрутеров и HR-ов – где искать ИТ-специалистов, как их заманить на вакансию, а потом удержать и не повышать зарплату каждый квартал? Каждый ищет свои пути выполнения плана по найму. Расскажу про наш опыт – как мы решили вопрос с наймом Scala-разработчиков в 2020 году.

Началось все, когда мы поняли, что нанять трех Scala-разработчиков с рынка быстрее, чем за полгода, а в реальности и за все три квартала, мы не сможем. Поэтому решили пойти по пути «сделай сам» и задумались о внутреннем бесплатном курсе для студентов, а также для желающих переквалифицироваться в Scаla-разработчиков. Вы ведь тоже мечтаете стать Scаla-разработчиком? Нет??? Странно…


Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Просмотры 4.4K
Комментарии 5

Что может предложить Neovim разработчику на Scala?

Блог компании DINS VIM *Scala *
Tutorial

image


В сообществе фанатов текстового редактора Neovim произошло знаменательное событие — вышла версия 0.5, в которой появилось большое количество нововведений:


  • встроенная поддержка языка Lua;
  • экспериментальная поддержка treesitter;
  • и, наконец, встроенный LSP клиент, позволяющий сделать из простого текстового редактора достойного соперника IDE!

Neovim — это модальный редактор, форк редактора Vim, который ставит своей целью улучшение пользовательского опыта при работе с Vim: «Neovim is built for users who want the good parts of Vim, and more».


Мне нравится Neovim своей гибкостью, благодаря которой его можно превратить в очень мощный инструмент редактирования не только текста, но и кода. Как scala-разработчику мне интересно испытать новый встроенный LSP клиент в применении к любимому языку программирования. В отличие от VSCode и даже Vim + CoC настройка LSP клиента в Neovim несколько более сложная, но при этом крайне гибкая. Данная статья — краткое руководство по настройке Neovim для работы со Scala и краткий обзор возможностей, которые дает связка Neovim + Metals.

Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Просмотры 5.3K
Комментарии 6

Refined типы в Scala

Scala *Функциональное программирование *

В процессе написания программ мы часто сталкиваемся с данными, для которых возможен только ограниченный набор значений. Например, возраст, который не может быть отрицательным или email, который может иметь только определенный формат строки.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 3.3K
Комментарии 33

IntelliJ IDEA 2021.2

Блог компании JetBrains JavaScript *Java *Scala *Kotlin *
Перевод

Привет, Хабр!

Вышел наш летний релиз — IntelliJ IDEA 2021.2! Обновление можно скачать с нашего сайта или в Toolbox App. Кроме того, можно обновиться из самой IDE или с помощью snap-пакета, если вы являетесь пользователем Ubuntu.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 11K
Комментарии 34

Построение потоковой stateful обработки данных на Akka

Блог компании Neoflex Scala *Big Data *Data Engineering *

В одном из исследовательских проектов нам с коллегами пришла идея совместить Akka Stream, Akka event sourcing (typed persistence) и Akka cluster sharding для реализации stateful stream processing. На мой взгляд, получилось достаточно интересное и лаконично решение, которым я бы и хотел с вами поделиться.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 2.2K
Комментарии 2

Spark Structured Streaming graceful shutdown — Что в этом сложного и как это правильно делать?

Scala *Big Data *Data Engineering *
Из песочницы

И почему shutdown требует отдельной статьи, а не вызова метода stop

Ну начну с того, что за метод stop такой.

Из документации, существует 2 метода которые собственно отвечают за остановку Structured stream.
query.stop() // Остановить запрос(stream)query.awaitTermination() // заблокировать пока запрос(stream) не прекратиться по причине вызова stop() или ошибки

Уже только по наличие 2ух методов мы может догадаться что метод stop() асинхронный. Что лично меня навело на мысль, что ни какой проблемы нет и graceful shutdown иметься из коробки.

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

Останавливает выполнение этого запроса если он активен. Вызов блокируется до того как прекратиться выполнение query execution threads или по timeout(время не не выйдет, время задается в конфигурации).

И вот тут опытный Java/Scala разработчик по идее должен был напрячься.

Какой то Thread, уж больно напоминающий java thread по названию, прекратиться по сигналу. Да и в добавок к этому еще один, дополнительный, метод который ждет завершения. Это же thread.interupt() скажите вы, и будете правы - так что ни про какой graceful вообще речь идти не может.

Что же делать?
Рейтинг 0
Просмотры 1.3K
Комментарии 0

Java/Scala: самая лаконичная трехзвенная архитектура в моем моднейшем To-Do List

Java *Анализ и проектирование систем *SQL *Scala * *

Когда-то давно, в 2015 году, я опубликовал на Хабре статью, если вкратце "Как я на коленке сделал свое 1С:Предприятие, с блек-джеком и шлюхами".

Но это была, во-первых, двухзвенка, а во-вторых, потребовала от меня столько лапшекода, что после кодирования я надолго погрузился в депрессию. Теперь е я готов представить вам вариант производственного процесса, который не отпугнет перебежчика с 1С на Java.

Читать далее
Всего голосов 2: ↑0 и ↓2 -2
Просмотры 5.8K
Комментарии 3

Вклад авторов

Работа

Scala разработчик
17 вакансий