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

Scala *

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

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

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

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

image


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


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


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


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

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


Что такое HKD


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

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

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

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

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

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


Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Просмотры 3.6K
Комментарии 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
Просмотры 3.4K
Комментарии 6

Refined типы в Scala

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

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

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

IntelliJ IDEA 2021.2

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

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

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

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 8.5K
Комментарии 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
Просмотры 1.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
Просмотры 645
Комментарии 0

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

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

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

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

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

Java/Scala программа, имитирующая анимацию капель дождя

Java *Scala *Функциональное программирование *Компьютерная анимация *Графический дизайн *

Пригодна ли Java (Scala) и ее библиотеки для задач вывода 3D и анимации? Я попробовал это выяснить на примере библиотеки org.fxyz3d и хотел бы поделиться самой программой и выводам по итогам ее запуска.

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

Инвариантный функтор в Scala Cats

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

Сегодня поговорим о еще одном функторе — инвариантном (Invariant Functor). Уже было несколько постов о ковариантных функторах (называемых просто "функторами") и контравариантных функторах. Если концепция ковариантных и контравариантных функторов вам понятна, то с инвариантным все будет просто — он сочетает в себе функциональность обоих вышеупомянутых функторов.

Как вы помните, с помощью функторов мы можем отображать один тип в другой с помощью функции f:

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

Контравариантный функтор в Scala Cats

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

В этой статье мы поговорим о функторах. О функторах из библиотеки Cats, а не о классических функторах, которые мы все знаем и любим. Рассмотрим контравариантные функторы (Contravariant Functors), представленные в Cats в виде тайпкласса Contravariant.

Некоторые из вас, возможно, не знают, что классический функтор (Functor) с операцией map, который мы ежедневно используем в наших Scala Cats-проектах, на самом деле является ковариантным функтором (Covariant Functor). Также хочу отметить, что термин "Вариантность" (Variance) применительно к функторам не имеет ничего общего с различными видами вариативности, которые мы знаем, когда речь идет о типах и параметрическом полиморфизме.

Типичный функтор в терминах функционального программирования Scala представляет собой тайпкласс, оперирующий типами высших порядков (higher-kinded type), что оказывается весьма полезным, когда мы хотим абстрагироваться и обобщить наши API.

Для полноты картины, поскольку мы не будем говорить классических функторах, давайте посмотрим на простой пример:

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

Программа в 50 строк на Java/Scala, которая сэкономит вам 50 тыс. р. при подаче декларации 3-НДФЛ

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

Вы, наверное, знаете, с любых доходов нужно платить налоги, в т.ч. с доходов от торговли ценными бумагами и производными инструментами (проще говоря, от игры на бирже). Очень удобно, когда брокер делает расчеты за вас, перед тем как вы выведите деньги со счета, выполняя функции налогового агента.

Но если брокер такой как у меня - Interactive Brokers (организация, третьего дня запрещенная на территории РФ), декларацию вам придется делать и подавать самому. Делать это всем, конечно же лень, и неплохо бы отдать подготовку на аутсорс...

Читать далее
Всего голосов 28: ↑16 и ↓12 +4
Просмотры 7.5K
Комментарии 23

Ко-вариантность и типы данных

JavaScript *Программирование *Scala *

Тема вариантов в программировании вызывает кучу сложностей в понимании, по мне это проблема в том, что в качестве объяснения берут не всегда успешные метафоры - контейнеры.

Я надеюсь что может у меня получиться объяснить эту тему с другой стороны используя метафоры “присвоения” в разрезе лямбд.

Зачем вообще эта вариантность нужна ?

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

Ко-вариантность это о типах данных и их контроле со стороны компиляторов. И ровно с этого места надо откатиться и сказать о типах данных и зачем это нам нужно.

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

Язык определения интентов NlpCraft IDL

Java *Scala *API *Apache *Natural Language Processing *

Данная статья является продолжением заметки “Проектируем интенты с Apache NlpCraft” и содержит детальное описание возможностей языка определения интентов NlpCraft IDL, созданного для использования в NLP проектах основанных на системе Apache NlpCraft. Поддержка NlpCraft IDL добавлена в систему начиная с версии 0.7.5.   

Новая версия декларативного языка определения интентов, получившая название NlpCraft IDL (NlpCraft Intents Definition Language), значительно упростила процесс работы с интентами в диалоговых и поисковых системах, построенных на базе проекта Apache NlpCraft и вместе с тем расширила возможности системы.  

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

SCALA 3

Open source *Программирование *Scala *
Перевод

После 8 лет работы 28 000 коммитов, 7 400 пул реквестов, 4 100 закрытых issues — Scala 3 наконец-то вышла. С момента первого коммита 6 декабря 2012 года более ста человек внесли свой вклад в проект. Сегодня Scala 3 включает в себя последние исследования в области теории типов, а также отраслевой опыт Scala 2. Мы увидели, что хорошо (или не очень хорошо) работает для сообщества в Scala 2. На основе этого опыта мы создали третью итерацию Scala — простую в использовании, изучении и масштабировании.
Всего голосов 14: ↑12 и ↓2 +10
Просмотры 5.1K
Комментарии 6

IntelliJ IDEA 2021.1

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

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

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

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

Scala + Selenium. Самый стремительный взлет в Лиги наций УЕФА?

Scala *Браузеры Тестирование веб-сервисов *

Какой самый стремительный взлет в Лиги наций УЕФА?

С момента запуска Лиги наций УЕФА прошло целых два розыгрыша и уже можно подвести промежуточные результаты)

Read more
Всего голосов 7: ↑4 и ↓3 +1
Просмотры 5.3K
Комментарии 1

Неявный вывод в Scala

Программирование *Scala *

Многие начинающие и не очень Scala разработчики принимают implicits как умеренно полезную возможность. Использование обычно ограничивается передачей ExecutionContext  во Future. Другие же избегают неявного и считают возможность вредной.

Но я считаю этот механизм важным преимуществом языка, давайте разберемся почему.

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

Scala + Selenium. Сколько человек в сборной имеют более одного гражданства?

Scala *Браузеры Тестирование веб-сервисов *

Рассмотрим пример использования Selenium на Scala, отвечая на вопрос "Сколько человек в каждой футбольной сборной имеют более одного гражданства?"

Read more
Всего голосов 5: ↑2 и ↓3 -1
Просмотры 2K
Комментарии 0

Основы Cat Concurrency с Ref и Deferred

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

Ref и Deferred являются основными строительными блоками в FP, используемыми параллельно, в манере concurrent. Особенно при использовании c tagless final (неразмеченной конечной) абстракцией, эти два блока, при построении бизнес-логики, могут дать нам и то, и другое: параллельный доступ (concurrent access) и ссылочную прозрачность (referential transparency), и мы можем использовать их для построения более продвинутых структур, таких как counters (счетчики) и state machines (конечные автоматы).

Перед тем, как мы углубимся в Ref и Deferred, нам полезно узнать, что concurrency в Cats строится на Java AtomicReference, и здесь мы и начнем наше путешествие.

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

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