Обновить
13.83

Scala *

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

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

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

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

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

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

Королев. Лекарство для веба

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

Около года назад вышла статья-манифест Никиты Прокопова о разочаровании в программном обеспечении. Судя по положительным откликам, разработчикам небезразлично качество производимых продуктов. Может быть пора начать действовать?


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

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

Что нужно знать перед переходом на Akka toolkit для реализации Event Sourcing и CQRS

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

Здравствуйте, уважаемые читатели Хабра. Меня зовут Рустем и я главный разработчик в казахстанской ИТ-компании DAR. В этой статье я расскажу, что нужно знать перед тем, как переходить на шаблоны Event Sourcing и CQRS с помощью Akka toolkit.


Примерно с 2015 года мы начали проектировать свою экосистему. После анализа и опираясь на опыт работы со Scala и Akka, решили остановиться на Akka toolkit. У нас были и удачные реализации шаблонов Event Sourcing c CQRS и не очень. Накопилась экспертиза в этой области, которой я хочу поделиться с читателями. Мы рассмотрим, как Akka реализует эти паттерны, а также какие инструменты доступны и поговорим о подводных камнях Akka. Надеюсь, что после прочтения этой статьи, у вас будет больше понимания рисков перехода на Akka toolkit.

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

ML на Scala с улыбкой, для тех, кто не боится экспериментов

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


Всем привет! Сегодня будем говорить о реализации машинного обучения на Scala. Начну с объяснения, как мы докатились до такой жизни. Итак, наша команда долгое время использовала все возможности машинного обучения на Python. Это удобно, есть много полезных библиотек для подготовки данных, хорошая инфраструктура для разработки, я имею в виду Jupyter Notebook. Всё бы ничего, но столкнулись с проблемой распараллеливания вычислений в production, и решили использовать в проде Scala. Почему бы и нет, подумали мы, там есть куча библиотек, даже Apache Spark написан на Scala! При этом, сегодня модели мы разрабатываем на Python, а затем повторяем обучение на Scala для дальнейшей сериализации и использования в production. Но, как говорится, дьявол кроется в деталях.

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

Кросс-компиляция Scala в Gradle проекте

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

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


Для одного из своих Java проектов я решил создать Scala фасад. Исторически весь проект собирается с помощью Gradle, и фасад было решено добавить в этот же самый проект в качестве сабмодуля. Gradle в целом может компилировать Scala модули с той лишь оговоркой что никакой кросс компиляции в поддержке не заявлено. Есть открытый тикет 2017 года и пара плагинов (1, 2), которые обещают добавить эту возможность в ваш проект, но с ними есть проблемы, как правило связанные с публикацией артефактов. И больше в целом ничего нет. Я решил проверить, как сложно на самом деле сконфирурировать билд для кросс компиляции без специальных плагинов и СМС.

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

Неявные (implicit) параметры и преобразования в Scala

Время на прочтение2 мин
Количество просмотров5.6K
Пробежавшись по предыдущим статьям на Хабре, тыц и тыц так и не удалось в быстром режиме понять, что делает неявность (implicit) в Scala. Попробуем разобраться вместе.


Итак, implicit в Scala позволяют избежать вызывания методов или явных ссылок на переменные, и взамен этого позволяют компилятору самому найти нужные неявные данные.

Например, мы могли бы написать функцию для преобразования из Float в Int(FloatToInt) и, вместо того, чтобы вызвать эту функцию явно, компилятор бы сделал это вместо нас неявно:

def double(value: Int) = value * 2
implicit def FloatToInt(value: Float):Int = value.toInt
println(double(2.5F))

Запутанно? Давайте обо всём по порядку.
Читать дальше →

Приглашаем на второй Camunda BPM Meetup Raiffeisenbank UPD Трансляция

Время на прочтение2 мин
Количество просмотров3.5K
Приглашаем вас на второй в России открытый митап Camunda BPM, который пройдет 30 мая 2019 года на площадке Райффайзенбанка в Нагатино.

Как прошел первый митап сообщества Camunda BPM можно посмотреть в этом посте.

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

Сильное сообщество – крутая площадка для развития, поэтому мы не только приглашаем вас на митап, но и активно зовем всех присоединяться к чату Camunda BPM User Group. С поддержкой комьюнити жить проще и веселее, ведь тогда появляется возможность что-то быстро спросить у коллег или просто скинуть интересную статью или мем.

Хотите в чат? Тогда вам сюда


Не в силах объяснить монаду

Время на прочтение4 мин
Количество просмотров11K
Нет, это не очередная попытка объяснить монады. Я не знаю, как это сделать и не могу представить, как бы я, например, из настоящего мог бы объяснить это себе из прошлого.

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

Я даже не знаю, как ответить на более простые вопросы. Несмотря на то, что пишу на Scala больше 3 лет, я не могу на пальцах объяснить преимущества языка для человека извне. Например, пару месяцев назад мне довелось провести не лучшую дискуссию.
Читать дальше →

9 советов по использованию библиотеки Cats в Scala

Время на прочтение8 мин
Количество просмотров17K
Функциональное программирование в Scala может быть нелегко освоить из-за некоторых синтаксических и семантических особенностей языка. В частности, некоторые средства языка и способы реализации задуманного с помощью основных библиотек кажутся очевидными, когда ты с ними знаком — но в самом начале изучения, особенно самостоятельного, узнать их не так просто.

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


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

Учимся писать Waves смарт-контракты на RIDE и RIDE4DAPPS. Часть 2 (DAO — Decentralized Autonomous Organization)

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


Всем привет!


В первой части мы подробно рассмотрели как создавать и работать с dApp (децентрализованным приложением) в Waves RIDE IDE.


Давайте сейчас немного потестируем разобраный пример.


Этап 3. Тестирование dApp аккаунта

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

Учимся писать Waves смарт-контракты на RIDE и RIDE4DAPPS. Часть 1 (Многопользовательский кошелек)

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


Всем привет!


Совсем недавно Waves Labs анонсировал конкурс для разработчиков приуроченный к релизу в тестовую сеть расширения языка смарт-контрактов RIDE для децентрализованных приложений Ride4Dapps!


Мы выбрали кейс DAO, так как Ventuary планирует заниматься разработкой dApp с социальными функциями: голосованием, фандрейзингом, доверительным управлением и пр.


Мы начали работу с простого примера в Q&A-сессии и в RIDE IDE — примере с общим кошельком.

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

Компилируемая конфигурация распределённой системы

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

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


Жизненный цикл конфигурации


(english)

Читать дальше →
В марте 2017 года в поддержку Тинькофф Банка позвонил клиент. Он только что продал со смартфона акции Apple, стоял в магазине и хотел расплатиться вырученными деньгами. Но вывод денег на карту занимает 20 минут. Тут мы поняли — чтобы обходить продуктовые ограничения, нужна собственная брокерская платформа. Разработчики и продуктологи Тинькофф Банка рассказывают, как создавали своего брокера.
Подробности – под катом

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

Как я Scala учил

Время на прочтение5 мин
Количество просмотров19K
Месяца назад я получил свою первую работу и стал стажер-разработчиком, наша команда использует язык Scala. Мне кажется, все начинающие разработчики в первый день потерянные. одновременно наваливается куча новых имен, технологий, каких-то правил, да и мало ли что еще, абсолютно все для тебя ново, это же первая работа. В моем же случае я еще и не знал языка, на котором буду программировать, до момента собеседования я даже никогда о нем не слышал. Итог: в первый день я был в полном ауте. Спросите как тогда я вообще получил эту работу? Я знал Java, на собеседовании мне сказали что джависту перейти на скалу будет достаточно легко и можно не переживать. Но видимо чуть-чуть попереживать все же стоило, потому что первое время перед собой я видел просто экраны, заполненные текстом, в которых сходу была ясна едва ли половина.

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

final String str = "abc"; //Java

val str = "abc" // Scala
Читать дальше →

Сказ о полукольцах

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

Привет, Хабр! Предлагаю вашему вниманию перевод статьи "A tale on Semirings" автора Luka Jacobowitz.


Когда-нибудь задумывались, почему сумма типов называется суммой типов. Или, может, вы всегда хотели узнать, почему оператор <*> записывается именно так? И что это имеет общего с полукольцами? Заинтересовавшихся прошу под кат!

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

IT Global Meetup #14 Петербург

Время на прочтение2 мин
Количество просмотров3.2K
23 марта 2019 года пройдет четырнадцатый слет IT-сообществ Санкт-Петербурга IT Global Meetup 2019.

Весенний слет петербургских IT-сообществ стартует в субботу! На островках сообществ можно будет ознакомиться с их деятельностью и принять участие в активностях. ITGM — не форум, не конференция. ITGM — встреча, созданная самими сообществами со свободой действий, докладов и активностей.

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

«Не вижу ни одного резона использовать Python для работы со Spark, кроме лени»

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

На днях мы решили пообщаться c Дмитрием Бугайченко (dmitrybugaychenko), одним из наших преподавателей программы "Анализ данных на Scala", и обсудить с ним актуальные вопросы использования Scala в задачах Data Science и Data Engineering. Дмитрий является инженером-аналитиком в "Одноклассниках".


image

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

Scala + MXNet = Микросервис с нейронкой в проде

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

В интернете есть огромное количество руководств и примеров, на основе которых вы, дорогие читатели, сможете «без особого труда» и с «минимальными» временными затратами написать код, способный на фото отличать кошечек от собачек. И зачем тогда тратить время на эту статью?

Основной, на мой взгляд, недостаток всех этих примеров — ограниченность возможностей. Вы взяли пример, — пусть даже с базовой нейронной сетью, которую предлагает автор, — запустили его, возможно, он даже заработал, а что дальше? Как сделать так, чтобы этот незамысловатый код начал работать на production-сервере? Как его обновлять и поддерживать? Вот тут и начинается самое интересное. Мне не удалось найти полного описания процесса от момента «ну вот, ML-инженер обучил нейронную сеть» до «наконец-то мы выкатили это в production». И я решил закрыть этот пробел.
Читать дальше →

Делаем прототип бота для боев в Clash Royale

Время на прочтение10 мин
Количество просмотров17K
У вас бывало, что вы залипаете в какую-то простенькую игру, думая, что с ней вполне бы мог справиться искусственный интеллект? У меня бывало, и я решил попробовать создать такого бота-игрока. Тем более, сейчас много инструментов для компьютерного зрения и машинного обучения, которые позволяют строить модели без глубокого понимания подробностей реализации. «Простые смертные» могут сделать прототип, не строя нейронные сети месяцами с нуля.



Под катом вы найдете процесс создания proof-of-concept бота для игры Clash Royale, в котором я использовал Scala, Python и CV-библиотеки. Используя компьютерное зрение и машинное обучение я попытался создать бота для игры, который взаимодействует как живой игрок.
Читать дальше →

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

Время на прочтение7 мин
Количество просмотров20K
Привет, Хабр! Представляю вашему вниманию перевод своей статьи «Why you should think about functional programming», посвященной функциональному программированию.

image

Почему вы должны думать о функциональном программировании? Давайте ответим на следующие вопросы:

  • всегда ли ваши проекты выполняются в определенные сроки?
  • Были ли у пользователей какие-либо жалобы?
  • Поддержка проекта никогда не занимала много времени?
  • Новый функционал всегда удачно вписывается в существующую архитектуру?

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