Как стать автором
Обновить
4.33

Scala *

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

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

Стажировка в «Ростелеком-Солар»: качаем Scala-скиллы

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

Для тех, кто мечтает стать Senior Developer и готов присоединиться к крутой команде Scala-разработчиков, с 1 по 15 декабря 2019 года мы запускаем отбор на бесплатный курс по обучению Scala. По окончании обучения пятеро лучших стажеров смогут присоединиться к самой солнечной в мире команде.

image

Подробности — под катом.
Читать дальше →

Telegram бот для персонализированной подборки статей с Хабра

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

Для вопросов в стиле "зачем?" есть более старая статья — Натуральный Geektimes — делаем пространство чище.


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


В вышеупомянутой статье предлагался подход со скриптами в браузере, но он мне не очень понравился (хоть я им и пользовался раньше) по следующим причинам:


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

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


Изначально я хотел генерировать rss ленту (или даже неколько), оставляя там только интересное. Но в итоге получилось, что чтение rss показалось не очень удобным: в любом случае для комментирования/голосования за статью/добавления её в избранное приходится заходить через браузер. Поэтому я написал бота для телеграмма, которые кидает мне в личку интересные статьи. Телеграм сам по себе делает из них красивые превьюшки, что в сочетнии с информацией об авторе/рейтинге/просмотрах выглядит довольно информативно.



Под катом подробности типа особенностей работы, процесса написания и технических решений.

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

ScalaConf 2019 — проповедник Джон, Святой Грааль и «Профессор Hаskell»

Время на прочтение14 мин
Количество просмотров1.9K
26 ноября в Инфопространстве пройдет ScalaConf 2019 — профессиональная конференция для Scala-разработчиков. Возможно, первая в России. Накануне события мы попросили Вадима Челышова (dos65), руководителя ПК ScalaConf 2019, рассказать о докладах и концепции конференции.



Вот, что мы узнали: на конференции нас ждет проповедник функционального программирования, четыре англоязычных доклада, новый инструмент, который решит проблемы дата-инженеров, доклад о том, почему Scala Plugin несовместим со Scala-компилятором, «Профессор Haskell» и много функционального программирования. Также мы поговорили о границах развития Scala-разработчика, почему среди них нет джунов, о «холиваре» между Scala и Haskell, и об информационном «пузыре» коммьюнити. Подробности под катом.
Читать дальше →

Семантика средств разрешения зависимостей

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

Средство разрешения зависимостей


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


Ограничения обычно задаются именами модулей и номерами версий. В экосистеме JVM для модулей Maven будет ещё указано наименование организации (group id). Кроме того, ограничения могут содержать диапазоны версий, исключаемые модули, переопределения версий и т.п.


Три основных категории пакетов представлены OS-пакетами (Homebrew, Debian-пакеты, и т.п.),
модулями для конкретных языков программирования (CPAN, RubyGem, Maven, etc) и расширения, специфичные для приложения (Eclipse plugins, IntelliJ plugins, VS Code extensions).

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

ZIO & Cats Effect: удачный союз

Время на прочтение18 мин
Количество просмотров11K
Cats Effect стал своего рода «Reactive Streams» для функционального Scala-мира, позволив объединить всю разнообразную экосистему библиотек вместе.

Многие отличные библиотеки: http4s, fs2, doobie — реализуются только на базе тайп классов из Cats Effect. А библиотеки типа ZIO и Monix, уже в свою очередь, предоставляют инстансы этих тайп классов для своих типов эффектов. Несмотря на некоторые проблемы, которые будут исправлены в версии 3.0, Cats Effect помогает многим опенсорс контрибьюторам органично поддерживать всю функциональную экосистему языка Scala. Разработчики, которые используют Cats Effect, сталкиваются с трудным выбором: какую реализацию эффектов использовать для своих приложений.

На сегодня есть три альтернативы:

  • Cats IO, ссылочная реализация;
  • Monix, тип данных Task и связанная с ним реактивность в коде;
  • ZIO, тип данных ZIO и его прицел на многопоточность.

В этом посте я постараюсь доказать вам, что для создания своего приложения с использованием Cats Effect, ZIO — хороший выбор с дизайн решениями и возможностями, довольно сильно отличающимися от ссылочной реализации в Cats IO.
Читать дальше →

Первая в России большая ламповая встреча Scala-комьюнити — как это было

Время на прочтение4 мин
Количество просмотров5.3K
Привет! Я Юля, DevRel в Tinkoff.ru.

28 сентября Tinkoff вместе со Scala-сообществом России провели масштабную, но очень уютную встречу разработчиков, тестировщиков и всех неравнодушных к Scala. В статье я поделюсь впечатлениями, как все прошло.

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



Мы ушли от стандартного формата конференций и собрали ламповую встречу для близких по духу людей. Мы нашли самый уютный лофт в сердце Москвы — Deworkacy в «Красном Октябре» — и пригласили по-настоящему звездный состав спикеров.

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

Небольшой видео-пруф, передающий настроение: youtu.be/ThmyLu7kOFk

Ссылки на видео докладов, фотоотчет и описание докладов под катом. Погнали!
Читать дальше →

Интеграционное тестирование микросервисов на Scala

Время на прочтение22 мин
Количество просмотров7.1K
Unit-тестирование — это замечательно, но его одного бывает недостаточно. Часто хочется дополнительно убедиться, что запущенное приложение будет работать. На помощь приходит интеграционное тестирование. Оно все чаще применяется для тестирования сервисов, а Docker позволяет удобно управлять тестовым окружением. Но, как всегда, не все так просто, когда микросервисов и зависимостей становится намного больше.

Юрий Бадальянц на РИТ++ рассказал, как в 2ГИС тестируют связку из большого числа сервисов и целого зоопарка технологий. Под катом дополненная и актуализированная под тщательным присмотром спикера версия этого доклада: какие варианты пробовали, к чему пришли, какие проблемы теперь вам не придется решать. Будет про Docker, Testcontainers, а также про Scala.

Настройка VSCode для работы с Scala

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

Статья рассчитана на новичков в программировании на Scala, каким я сам и являюсь, и просто на желающих начать писать программный код в VSCode.

Так получилось, что единственным гайдом по теме работы со Scalой в Visial Studio Сode оказалось это видео на ютуб-канале DevInsideYou. В нем очень подробно описан процесс установки и настройки среды для VS Code и Sublime Text.

Данная статья – адаптация видео с какими-то добавлениями от меня. Вы можете перейти к просмотру видео или продолжить читать эту статью (либо сделать и то, и другое), в таком случае, надеюсь, она будет вам полезна.
Читать дальше →

По следам русского Scala-движа. Часть 2

Время на прочтение17 мин
Количество просмотров3.7K
В прошлой части расследования Роман Тимушев посоветовал связаться с Владом, что я и сделал. Влад уточнил, что меня интересует, делайны и согласился написать несколько абзацев. На следующее утро я увидел уведомление в Facebook. Это Влад нашел нового свидетеля — Александра Подхалюзина. С 2008 по 2017 он работал как тимлид над Scala plugin в IDEA и лично видел все развитие Scala-движения, но, в основном, не российскую часть.

В голове «щелкнуло» — планы меняются, это новая нить в расследовании. Обозначили время и записали часовое интервью с Александром. Информации столько, что вместить его куда либо кроме отдельной части не было вариантов. Поэтому, предупреждаю — впереди много текста.



В этой части говорим с Александром Подхалюзиным и Михаилом Муцянко. Вне программы — комментарий Ильи Сергея. Scala plugin, первые Scala-мероприятия в России, уход в Kotlin, Native на обоих языках, закат Eclipse и многое другое под катом.
Читать дальше →

Безболезненный Fallback Cache на Scala

Время на прочтение19 мин
Количество просмотров6.1K
В крупных или микросервисных архитектурах самый важный сервис не всегда самый производительный и бывает не предназначен для хайлоада. Мы говорим о бэкенде. Он работает медленно — теряет время на обработке данных и ожидании ответа между ним и СУБД, и не масштабируется. Даже если само приложение масштабируется легко, это узкое место не масштабируется совсем. Как эту проблему решить и обеспечить высокую производительность? Как обеспечить ответ системы, когда важные источники информации молчат?



Если ваша архитектура полностью соответствует Reactive-манифесту, составные части приложения неограниченно масштабируются с возрастанием нагрузки независимо друг от друга, и выдерживают падение любого узла, — вы знаете ответ. Но если нет, то Олег Нижников (Odomontois) расскажет, как проблему масштабируемости решили в Тинькофф, построив свой безболезненный Fallback Cache на Scala, не переписывая приложение.

Примечание. В статье будет минимум кода на Scala и максимум общих принципов и идей.

По следам русского Scala-движа. Часть 1

Время на прочтение8 мин
Количество просмотров5.1K
Эта серия интервью приурочена к ScalaConf — к первой настоящей конференции в России, полностью посвященной Scala, которая пройдет 26 ноября. Перед этим событием я взял интервью у 6 свидетелей и «апостолов» зарождения движения Scala в России. Здесь не будет обсуждения Free, Tagless Final, Monix, IO или ZIO, и «попинывания» Future. Моя цель — обсудить Scala в историческом контексте. Я записал все бородатые байки, сгонял в прошлое на 10 лет назад и собрал неактуальные, но интересные истории о языке.



Серия задумывалась в формате «Намедни» Парфенова — события, люди, явления. Я собирался найти тех, кто когда-либо организовывал митапы в России, собрать у них информацию о всем важном и интересном, отсортировать и расставить по годам. Каждое интервью начинал с того, что просил максимально точно установить год повествования. Но, интервью получились не такими как я ожидал и резать их в формате «Намедни» рука не поднялась. Поэтому серия будет рассказывать истории в формате личного расследования. Как все было, в какой очередности, как выходил на людей, и что я о них знал до интервью. Под катом — допросы и протоколы, первые проекты на Scala, первые митапы и зарождение движения.
Читать дальше →

Выбираемся из дебрей тестов: строим короткий путь от фикстуры к проверке

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


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


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

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

Эволюционирующие торгующие системы

Время на прочтение6 мин
Количество просмотров6.4K
AI наступает, и мы этого не боимся. Предлагаю озадачить его зарабатыванием капусты на бирже. Для начала, а там посмотрим.

Термины


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

Актив агента — список счетов с наличием средств на них A = [A1,A2,..] где A1, A2,… суммы в соответствующей валюте.
Читать дальше →

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

Часть 5/2 корп. 1: Перекрёсток проспекта RocketChip и скользкой дорожки инструментации

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

В предыдущих четырёх частях велась подготовка к экспериментам с RISC-V ядром RocketChip, а именно, портирование этого ядра на «нестандартную» для него плату с ПЛИС фирмы Altera (теперь уже Intel). Наконец, в прошлой части на этой плате получилось запустить Linux. Знаете, что меня во всём этом забавляло? То, что одновременно приходилось работать с ассемблером RISC-V, C и Scala, и из всех них Scala была самым низкоуровневым языком (потому что именно на ней написан процессор).


Давайте в этой статье сделаем так, чтобы C тоже не было обидно. Более того, если связка Scala+Chisel использовалась лишь как domain-specific language для явного описания аппаратуры, то сегодня мы научимся «затягивать» простенькие функции на C в процессор в виде инструкций.


Конечная же цель — тривиальная реализация тривиальных AFL-like инструментаций по аналогии с QInst, а реализация отдельностоящих инструкций — лишь побочный продукт.

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

Сравнение форматов сериализации

Время на прочтение9 мин
Количество просмотров19K
При выборе формата сериализации сообщений, которые будут записаны в очередь, лог или куда-либо еще, часто возникает ряд вопросов, так или иначе влияющих на конечный выбор. Одними из таких ключевых вопросов являются скорость сериализации и размер полученного сообщения. Так как форматов для подобных целей немало, я решил протестировать некоторые из них и поделиться результатами.
Читать дальше →

Чего мне не хватает в Java после работы с Kotlin/Scala

Время на прочтение9 мин
Количество просмотров16K
В последнее время я часто слышу о том, что Java стала устаревшим языком, на котором сложно строить большие поддерживаемые приложения. В целом, я не согласен с этой точкой зрения. На мой взгляд, язык все еще подходит для написания быстрых и хорошо организованных приложений. Однако, признаюсь, бывает и такое, что при повседневном написании кода иногда думаешь: “как бы хорошо это решилось вот этой штукой из другого языка”. В этой статье я хотел поделиться своей болью и опытом. Мы посмотрим на некоторые проблемы Java и как они могли бы разрешиться в Kotlin/Scala. Если у вас возникает похожее чувство или вам просто интересно, что могут предложить другие языки, — прошу под кат.


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

Microsoft ML Spark: расширение Spark, делающее SparkML человечнее, и LightGBM как бонус

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

Многие, кто работал с Spark ML, знают, что некоторые вещи там сделаны "не совсем удачно"
или не сделаны вообще. Позиция разработчиков Spark в том, что SparkML — это базовая платформа, а все расширения должны быть отдельными пакетами. Но это не всегда удобно, ведь Data Scientist и аналитики хотят работать с привычными инструментами (Jupter, Zeppelin), где есть большая часть того, что нужно. Они не хотят собирать при помощи maven-assembly JAR-файлы на 500 мегабайт или руками скачивать зависимости и добавлять в параметры запуска Spark. А более тонкая работа с системами сборки JVM-проектов может потребовать от привыкшых к Jupyter/Zeppelin аналитиков и DataScientist-ов много дополнительных усилий. Просить же DevOps-ов и администраторов кластера ставить кучу пакетов на вычислительные ноды — явно плохая идея. Тот, кто писал расширения для SparkML самостоятельно, знает, сколько там скрытых трудностей с важными классами и методами (которые почему-то private[ml]), ограничениями на типы сохраняемых параметров и т.д.


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

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

Сравнение одинакового проекта в Rust, Haskell, C++, Python, Scala и OCaml

Время на прочтение16 мин
Количество просмотров45K
В последнем семестре университета я выбрал курс компиляторов CS444. Там каждая группа из 1-3 человек должна была написать компилятор из существенного подмножества Java в x86. Язык на выбор группы. Это была редкая возможность сравнить реализации больших программ одинаковой функциональности, написанных очень компетентными программистами на разных языках, и сравнить разницу в дизайне и выборе языка. Такое сравнение породило массу интересных мыслей. Редко можно встретить такое контролируемое сравнение языков. Оно не идеально, но намного лучше, чем большинство субъективных историй, на которых основано мнение людей о языках программирования.

Мы сделали наш компилятор на Rust, и сначала я сравнил его с проектом команды на Haskell. Я ожидал, что их программа будет намного короче, но она оказалась того же размера или больше. То же самое для OCaml. Затем сравнил с компилятором на C++, и там вполне ожидаемо компилятор был примерно на 30% больше, в основном, из-за заголовков, отсутствия типов sum и сопоставлений с образцом. Следующее сравнение было с моей подругой, которая сделала компилятор самостоятельно на Python и использовала менее половины кода, по сравнению с нами, из-за мощности метапрограммирования и динамических типов. У другого товарища программа на Scala тоже была меньше нашей. Больше всего меня удивило сравнение с другой командой, которая тоже использовала Rust, но у них оказалось в три раза больше кода из-за разных дизайнерских решений. В конце концов, самая большая разница в количестве кода оказалась в пределах одного языка!
Читать дальше →

Часть 2: RocketChip: подключаем оперативную память

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

В предыдущей части мы собрали микроконтроллер вообще без оперативной памяти на базе ПЛИС Altera/Intel. Однако на плате есть разъём с установленным SO-DIMM DDR2 1Gb, который, очевидно, хочется использовать. Для этого нам потребуется обернуть DDR2-контроллер с интерфейсом ALTMEMPHY в модуль, понятный для протокола работы с памятью TileLink, используемого повсюду в RocketChip. Под катом — тактильная отладка, брутфорс программирование и ГРАБЛИ.


Как известно, в Computer Science есть две главные проблемы: инвалидация кешей и именование переменных. На КДПВ вы видите редкий момент — две главные проблемы CS встретили друг друга и что-то замышляют.

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

Часть 1: RISC-V / RocketChip в неестественной среде обитания

Время на прочтение15 мин
Количество просмотров10K
Конфигурирование RocketChip

Недавно на Хабре публиковалась статья о том, как поэкспериментировать с архитектурой RISC-V без затрат на «железо». А что, если сделать подобное на отладочной плате? Помните мемы про генератор игр: штук 20 галочек в стиле «Графика не хуже Кризиса», «Можно грабить корованы» и кнопка «Сгенерировать». Приблизительно так же устроен генератор SoC-ов RocketChip, только там не окно с галочками, а Scala-код и немного ассемблера и Make-файлов. В этой статье я покажу, как просто портировать этот RocketChip с родного для него Xilinx на Altera/Intel.

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