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

Scala *

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

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

5 уроков, которые я извлек для себя, продолжая осваивать ZIO

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

Всем привет. В преддверии старта курса "Scala-разработчик" подготовили для вас полезный перевод.

Еще в январе 2020 года я написал два поста (I, II) о подводных камнях, с которыми могут столкнуться новички в начале работы с ZIO. Прошло 9 месяцев. На этот период пришелся релиз ZIO 1.0, и среда ZIO значительно улучшилась с внедрением ZLayer.

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

Читать далее

Scala как первый язык

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

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

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

И вот почему

Big Data Tools EAP 11: Zeppelin в DataGrip и spark-submit во всех поддерживаемых IDE

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

Только что вышло очередное обновление EAP 11 для плагина под названием Big Data Tools, доступного для установки в IntelliJ IDEA Ultimate, PyCharm, and DataGrip. Можно установить его через страницу плагина на сайте или внутри IDE.


Big Data Tools — это плагин, позволяющий соединяться с кластерами Hadoop и Spark. Он предоставляет мониторинг узлов, приложений и отдельных задач. Кроме того, в IDEA и DataGrip можно создавать, запускать и редактировать ноутбуки Zeppelin. Можно не переключаться на веб-интерфейс Zeppelin и спокойно работать, не выходя из любимого IDE. Плагин позволяет удобно перемещаться по коду, делать умное автодополнение, рефакторинги и квик-фиксы прямо внутри ноутбука.


Читать дальше →

ZTools для Apache Zeppelin

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

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


Проект недавно добрался до версии 0.9.0-preview2 и активно развивается, но, тем не менее, множество вещей всё ещё не реализованы и ждут своего часа.


Одна из таких вещей — API для получения дополнительной информации о том, что происходит внутри блокнота. С одной стороны, там имеется API, который полностью решает задачи по высокоуровневому управлению ноутбуками. Но если вам нужно что-то нетривиальное — плохие новости.


Читать дальше →

Теория категорий для программистов. На пальцах

Время на прочтение7 мин
Количество просмотров49K
Здравствуйте, коллеги.



Развивая наш неослабевающий интерес к серьезной, можно сказать, академической литературе, мы добрались и до теории категорий. Эта тема в знаменитом изложении Бартоша Милевского уже фигурировала на Хабре и к настоящему времени может похвастаться такими показателями:



Тем более приятно, что нам удалось обнаружить сравнительно свежий материал (январь 2020), служащий отличным и при этом максимально кратким введением в теорию категорий. Надеемся, что нам удастся заинтересовать вас этой темой
Читать дальше →

Scala мертва?

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

Предыстория:
мой основной бэкграунд - Java бэкенд. В какой-то момент стала интересна Scala. Я поработал около года в маленьком стартапе, где мы переписывали бэкенд с Python на Scala. Затем через некоторое время я начал искать варианты с переездом в цивилизованные страны и получил 4-5 офферов на Scala в нескольких Европейских странах и 1 оффер на Java… Так я оказался в Австралии. И без Scala. 

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

В общем, открыл я ЛинкедИн в надежде посмотреть и повыбирать вакансии, и был просто шокирован...

Читать далее

Как построить надежное приложение на базе Event sourcing

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

Привет! В этой статье я хочу рассказать, как из модного микросервисного приложения можно сделать рабочую, управляемую систему с помощью трех проверенных годами методик: на примере проекта внутренней performance-based рекламы Joom.


Читать дальше →

Big Data Tools EAP 10: SSH-туннели, фильтрация приложений, пользовательские модули и многое другое

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

Только что вышла очередная версия плагина Big Data Tools — плагина для IntelliJ IDEA Ultimate, DataGrip и PyCharm, который обеспечивает интеграцию с Hadoop и Spark, позволяет редактировать и запускать интерактивные блокноты в Zeppelin.


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


  • соединяться с Hadoop и Spark теперь можно через SSH-туннели, создающиеся парой щелчков мыши;
  • мониторинг Hadoop может ограничивать объем данных, загружаемых при просмотре списка приложений.

Читать дальше →

Изучаю Scala: Часть 4 — WebSocket

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

Привет, Хабр! На этот раз я по пробовал сделать простенький чат через ВебСокеты. За подробностями добро пожаловать под кат.
Читать дальше →

Изучаю Scala: Часть 3 — Юнит Тесты

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


Привет, Хабр! Мало написать хороший код. Нужно еще покрыть его хорошими Юнит Тестами. В прошлой статье я сделал простой веб сервер. Теперь попробую написать насколько тестов. Обычных, Property-based и с моками. За подробностями добро пожаловать под кат.
Читать дальше →

Fetch — библиотека для доступа к данным

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

Fetch — это библиотека Scala для организации доступа к данным из файловых систем, БД, веб-сервисов и любых других источников, данные из которых можно получить по уникальному идентификатору. Библиотека написана в функциональном стиле и основана на Cats и Cats Effect. Предназначена для композиции и оптимизации выполнения запросов к разным источникам данных. Она позволяет:


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

Для этого в библиотеке предоставляются средства, которые позволяют писать чистый бизнес-код без низкоуровневых конструкций для осуществления перечисленных оптимизаций.
В примерах используется последняя на момент написания версия Fetch — 1.3.0.

Читать дальше →

Определение серверной логики для конечной точки: три подхода

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

Перевод статьи подготовлен в преддверии старта курса «Scala-разработчик»





Теа, Ральф и Джесси используют tapir для описания своих конечных точек HTTP. Им нравится его удобный для программиста API, способ описания конечных точек, возможность использовать одно и то же описание для генерации сервера, клиента или документации, а также его возможности абстракции.


Однако, когда дело доходит до определения серверной логики для конечных точек (то есть, что должно произойти, когда их конечные точки интерпретируются как сервер и подвергаются воздействию внешнего мира), приоритеты у них разнятся. К нашей великой удаче, все три подхода теперь покрыты tapir!

Читать дальше →

Применение ZIO ZLayer

Время на прочтение9 мин
Количество просмотров4.1K
В июле OTUS запускает новый курс «Scala-разработчик», в связи с чем мы подготовили для вас перевод полезного материала.




Новая функция ZLayer в ZIO 1.0.0-RC18+ является значительным улучшением старого паттерна модулей, что делает добавление новых сервисов намного быстрее и легче. Однако при использовании на практике я обнаружил, что может потребоваться какое-то время, чтобы освоить эту идиому.

Ниже приведен аннотированный пример финальной версии моего тестового кода, в котором я рассматриваю ряд вариантов использования. Большое спасибо Адаму Фрейзеру за помощь в оптимизации и облагораживании моей работы. Сервисы преднамеренно упрощены, так что, надеюсь, они будут достаточно понятны для быстрого чтения.
Читать дальше →

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

Изучаю Scala: Часть 2 — Todo лист с возможностью загрузки картинок

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

Привет, Хабр! Следующий этап изучения нового языка это старый добрый todo list c картинками. Чтобы научится работе с базой данных и файловой системой. Работе со стримами. За подробностями добро пожаловать под кат.
Читать дальше →

Аккуратно и системно облегчаем понимание кода

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

Читаемость кода упрощает как процесс написания программ, так и последующие действия – от отладки и оптимизации до тестирования и сопровождения.


image


Один из эффективных способов для понимания кода – применение функциональной парадигмы программирования. Основная идея функционального программирования состоит в представлении процесса вычислений как последовательного изменения состояний без хранения где-либо самих состояний. В качестве примера системы, в которой хорошо реализован функциональный подход, часто приводят Haskell, а также Erlang или Scala. Внедряя такой подход в распространенные языки, такие как JS или Swift, можно добиться как улучшения читаемости, так и тестируемости.


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

Читать дальше →

Functional FizzBuzz на Scala

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

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


Предлагаю вашему вниманию еще один вариант, не совсем пятничный, а скорее субботний: FizzBuzz на Scala, functional style.

Читать дальше →

Почему функциональное программирование такое сложное

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

Я несколько раз начинал читать статьи из серии «Введение в функциональное программирование», «Введение в Теорию Категорий» и даже «Введение в Лямбда Исчисление». Причем и на русском, и на английском. Каждый раз впечатление было очень сходным: во-первых, много новых непонятных слов; во-вторых, много новых определений, которые возникают из ниоткуда; в-третьих, совершенно непонятно, как это использовать.


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


Попытки использовать как-то в работе изученные концепции разбивались о полное непонимание, как применить полученное глубокое знание. Ведь, напомню, что парадигму ФП (где-то удобнее, где-то не очень, но) можно использовать практически в любом ЯП, совсем необязательно для этого изучать условный Хаскель.

Читать дальше →

Игра с открытым API: Swagger Play

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

В данной статье я хочу рассказать, как использовать Swagger модуль для Play Framework, с примерами из реальной жизни. Я расскажу:

  1. Как прикрутить последнюю версию Swagger-Play (модуль Play, позволяющий использовать аннотации swagger-api и генерировать на их основе документацию в соответствии со спецификацией OpenAPI) и как настроить swagger-ui (библиотеку javascript, служащую для визуализации сгенерированной документации)
  2. Опишу основные аннотации Swagger-Core и расскажу об особенностях их использования для Scala
  3. Расскажу, как правильно работать с классами моделей данных
  4. Как обойти проблему обобщенных типов в Swagger, который не умеет работать с дженериками
  5. Как научить Swagger понимать ADT (алгебраические типы данных)
  6. Как описывать коллекции

Статья будет интересна всем, кто использует Play Framework на Scala и собирается автоматизировать документирование API.
Читать дальше →

Изучаю Scala: Часть 1 — Игра змейка

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

Привет Хабр! Когда я изучаю новый язык я обычно делаю на нем змейку. Может какому-нибудь новичку который тоже изучает Scala будет интересен код другого новичка в этом ЯП. У опытных скалистов скорее всего мой первый код на Scala вызовет грусть. За подробностями добро пожаловать под кат.
Читать дальше →

Исследование Курса по Реактивной Архитектуре: Открытия и Впечатления

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

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



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


Особо интересны два кейса из курса:


  • В первом случае рассматривается управление персоналом в ресторане, что демонстрирует принцип эластичности — один из ключевых аспектов реактивных систем.
Читать дальше →