Channel: Scala bin
На правах рекламы хочу напомнить про добротный канал с вакансиями @profunctor_jobs, который может быть особо полезен ищущим удалённую работу.
Периодически попадаются вакансии для Scala и даже Haskell (!) программистов.
Периодически попадаются вакансии для Scala и даже Haskell (!) программистов.
В этом году начал выходить приятный подкаст Scala logs со сравнительно небольшими интервью с выдающимися членами Scala-сообщества - на подходе интервью с Робом Норрисом, наиболее известным в качестве автора библиотеки для работы с БД Doobie.
По случаю релиза в России прикладываю ссылку на Spotify-плейлист подкаста, но найти его несложно и на других сервисах.
По случаю релиза в России прикладываю ссылку на Spotify-плейлист подкаста, но найти его несложно и на других сервисах.
Twitter
The Scala Logs (@TheScalaLogs) | Twitter
The latest Tweets from The Scala Logs (@TheScalaLogs). The Scala Logs podcast
Inquiries: theScalaLogs 'at' gmail 'dot' com'
Like what you're hearing? Buy us a coffee: https://t.co/AY7Jk5M6Pg
Inquiries: theScalaLogs 'at' gmail 'dot' com'
Like what you're hearing? Buy us a coffee: https://t.co/AY7Jk5M6Pg
Решил опубликовать основные выдержки из одной из моих любимых книг - Functional Programming for Mortals. Когда только начинал осваиваться со Scala, книга стала большим подспорьем в изучении наряду с Functional Programming in Scala и Scala with Cats - все книги однозначно рекомендуются к прочтению.
Medium
Functioning Programming for Mortals — excerpts
A list of key excerpts from one of the most celebrated books in the Scala community.
В этом году начал выписывать занятный IT-журнал Increment. Люди, работающие над журналом, ответственно подошли к своей работе - каждый выпуск включает в себя подборку качественных статей, соответствующих определённой теме, от обработки ЧП до архитектуры ПО.
Само главное, что для ознакомления с журналом не обязательно приобретать печатное издание, все выпуски опубликованы на сайте в свободном доступе.
Всячески рекомендую к прочтению.
Само главное, что для ознакомления с журналом не обязательно приобретать печатное издание, все выпуски опубликованы на сайте в свободном доступе.
Всячески рекомендую к прочтению.
Increment
Increment: Planning
This issue examines the ever-evolving practices of software planning—and how we can craft plans that enrich communication, alignment, and impact on engineering teams.
Не за горами долгожданный релиз Scala 3, и уже начинают появляться первые материалы - рассчитанный как на начинающих, так и "уже умеющих", 7-часовой курс позволит слушателям познакомиться как с синтаксисом новой версии языка, так и с особенностями JVM-рантайма.
Наконец-то смог вырваться из плотного рабочего графика, вернуться к каналу и вместе с тем попробовать изучить что-то новое, а именно - формальную верификацию. В связи с этим очень кстати оказался грядущий курс Антона Трунова, который будет проходить в ближайший четверг.
Давно являюсь поклонником тестирования свойств (e.g. scalacheck), но теперь надеюсь получить более фундаментальные знания в этой и смежных областях.
Давно являюсь поклонником тестирования свойств (e.g. scalacheck), но теперь надеюсь получить более фундаментальные знания в этой и смежных областях.
Узнал, что Тинькофф, оказывается, организует оплачиваемую летнюю/осеннюю стажировку с работой на реальных проектах. Как человек, попавший в индустрию именно через стажировку, очень рекомендую попробовать программу в качестве начального этапа в карьере Scala-разработчика.
Т‑Банк Образование
Т‑Банк Образование – образовательные программы для школьников, студентов и выпускников
Обучающие курсы, стажировки и мероприятия для ИТ-специалистов
Три года назад товарищ Вера Перез с коллегами опубликовали подробное исследование на тему покрытия кода тестами, где во внеочередной раз показали, что даже участие метода в тестах не означает, что он был полноценно протестирован. Исследование указывает на недостатки в традиционном подходе к тестированию и предлагает дополнять его мутационными тестами для отлова "покрытых" методов, поведение которых на самом деле не проверяется.
Альтернатива проекту Descartes, использованному в работе для мутационного тестирования, имеется и для Scala - плагин stryker4s. Хотя экстремальные мутации (замена тела метода на константу) им не поддерживаются, плагин всё равно позволяет эффективно находить "псевдопротестированные" методы.
Альтернатива проекту Descartes, использованному в работе для мутационного тестирования, имеется и для Scala - плагин stryker4s. Хотя экстремальные мутации (замена тела метода на константу) им не поддерживаются, плагин всё равно позволяет эффективно находить "псевдопротестированные" методы.
GitHub
GitHub - STAMP-project/pitest-descartes: Descartes supports developers to improve their test suites by reporting weak spots in…
Descartes supports developers to improve their test suites by reporting weak spots in covered code - GitHub - STAMP-project/pitest-descartes: Descartes supports developers to improve their test sui...
Недавно на работе обсудили структурирование классов моделей предметной области в Scala, и стало интересно мнение подписчиков канала. Как вы предпочитаете объявлять классы, единственная роль которых - содержать в себе данные? Речь идёт как о случаях Алгебраических Типов Данных (ADT), так и всех остальных.
Объявление классов с данными
Anonymous Poll
3%
class
56%
case class
46%
final case class
7%
sealed abstract case class
6%
Что-то другое
Пару недель назад возникла необходимость загрузить новую версию внутренней зависимости в legacy проект. Выяснилось, что пропала бинарная совместимость в библиотеке
Главный вывод - не пренебрегайте инструментами вроде Scala Steward и explicit-dependencies и регулярным аудитом зависимостей через команду
json4s
(с ошибками в рантайме), и попытки вручную выправить версии зависимостей приводят только к бо'льшим конфликтам. Как результат, уже некоторое время активно удаляем старые ненужные зависимости, параллельно поэтапно обновляя необходимые. Главный вывод - не пренебрегайте инструментами вроде Scala Steward и explicit-dependencies и регулярным аудитом зависимостей через команду
sbt evicted
, даже в старых проектах. Времени (а, следовательно, и денег) на регулярные обновления уходит гораздо меньше.GitHub
GitHub - scala-steward-org/scala-steward: :robot: A bot that helps you keep your projects up-to-date
:robot: A bot that helps you keep your projects up-to-date - scala-steward-org/scala-steward
Недавно опубликованный доклад "Threads at Scale" вновь поднял извечный вопрос идеального количества потоков в приложении и как этот параметр влияет на производительность. При использовании высокоуровневых языков программирования легко забыть, что каждое переключение процессора между потоками исполнения - одна из самых "дорогих" операций для процессора.
Как докладчик, так и авторы исходной статьи сходятся во мнении, что нужно стремиться к ситуации, когда одному потоку приложения (связанному с потоком ОС) соответствует одно ядро процессора (без учёта мультитрединга). Однако, поскольку строить всё приложение вокруг количества потоков в ОС часто архитектурно проблематично, а в реальных приложениях часто присутствуют системные вызовы, блокирующие поток исполнения, оптимальной на текущий момент является абстракция над реальными потоками исполнения в виде системы эффектов. Например, cats-effect предлагает оперировать логическими потоками в виде Fiber, не привязанными к потокам ОС, а для блокирующих операций выделять отдельный Executor, работа с которым тоже осуществляется через абстракцию.
Отдельно рекомендую прочитать исходную научную работу - авторы очень подробно рассматривают факторы, влияющие на производительность при переключении потоков исполнения, и текущие ограничения аппаратного обеспечения.
Как докладчик, так и авторы исходной статьи сходятся во мнении, что нужно стремиться к ситуации, когда одному потоку приложения (связанному с потоком ОС) соответствует одно ядро процессора (без учёта мультитрединга). Однако, поскольку строить всё приложение вокруг количества потоков в ОС часто архитектурно проблематично, а в реальных приложениях часто присутствуют системные вызовы, блокирующие поток исполнения, оптимальной на текущий момент является абстракция над реальными потоками исполнения в виде системы эффектов. Например, cats-effect предлагает оперировать логическими потоками в виде Fiber, не привязанными к потокам ОС, а для блокирующих операций выделять отдельный Executor, работа с которым тоже осуществляется через абстракцию.
Отдельно рекомендую прочитать исходную научную работу - авторы очень подробно рассматривают факторы, влияющие на производительность при переключении потоков исполнения, и текущие ограничения аппаратного обеспечения.
Sphere.it
Threads at Scale - Sphere.it
Multi-threaded concurrency has been a strength of the JVM since Java 1.2, and its implementation in that runtime has been a major driver behind the JVM’s pervasive adoption in modern, highly distributed, high-RPS backend services. Just about everyone who…
Помню, как когда только-только начинал работать с языком Java, был жутко обрадован наличию метода
Однако, чем дольше работаю с JVM-экосистемой, тем больше убеждаюсь, что, как и null-указатели,
Разумеется, можно и нужно определять сторонние методы в зависимости от задачи, но когда сама экосистема языка даёт такой метод в качестве одного из основных инструментов, то волей-неволей приходится иметь дело с проектами и библиотеками, которые используют его некорректно.
В ФП-сообществе уже достаточно давно придумали альтернативу
toString
у каждого объекта - "как же удобно будет теперь отлаживать программы", подумал я.Однако, чем дольше работаю с JVM-экосистемой, тем больше убеждаюсь, что, как и null-указатели,
toString
при кажущемся удобстве на самом деле несёт больше проблем, чем пользы. Поскольку метод имеет реализацию по умолчанию, очень сложно следить за тем, где он был явно переопределён, а где - нет. Более того, этот метод не имеет чётко определённой семантики, в результате чего нередко можно встретить проекты, где toString
имеет разный смысл в зависимости от класса: где-то он трансформирует объект в строку для логирования, где-то - в строку для использования в интерпретаторе и так далее.Разумеется, можно и нужно определять сторонние методы в зависимости от задачи, но когда сама экосистема языка даёт такой метод в качестве одного из основных инструментов, то волей-неволей приходится иметь дело с проектами и библиотеками, которые используют его некорректно.
В ФП-сообществе уже достаточно давно придумали альтернативу
toString
в виде тайпкласса Show
(ссылка), который сигнализирует о наличии у класса возможности превращения в строку. В нашей команде для логирования объектов и их полей можно использовать исключительно Show
, чтобы не допустить ненарочного попадания чувствительных данных в логи.typelevel.org
Show
docs
Наконец-то вышла статья за моим авторством о переходе с Java на Scala. Как мне кажется, получился неплохой сборник ресурсов и обзор "по верхам", с которого можно начинать знакомство с языком.
Full Disclosure: статья была написана на заказ, но как-либо продвигать её меня не просили.
https://tproger.ru/articles/kak-perejti-s-java-na-scala/
Full Disclosure: статья была написана на заказ, но как-либо продвигать её меня не просили.
https://tproger.ru/articles/kak-perejti-s-java-na-scala/
Tproger
Как перейти с Java на Scala / Tproger
Вместе с разработчиками компании «Криптонит» составили дорожную карту по изучению Scala для Java-разработчиков.
Впервые с 2019 года Scala Matsuri провели оффлайн и наконец довелось посетить мероприятие вживую.
Это единственное хоть сколь-нибудь крупное Scala-событие в Японии, но даже с учётом этого присутствующих было не так много - бо'льшая часть смотрела конференцию онлайн.
Был приятно удивлён разнообразием презентаций: от краткого экскурса в тип
Конференция оставила сугубо положительные впечатления и, скрестя пальцы, надеюсь в следующем году посетить её уже в качестве докладчика.
Это единственное хоть сколь-нибудь крупное Scala-событие в Японии, но даже с учётом этого присутствующих было не так много - бо'льшая часть смотрела конференцию онлайн.
Был приятно удивлён разнообразием презентаций: от краткого экскурса в тип
Option
и до написания собственного генератора видео с виртуальными ютуберами. Также, несмотря на относительное локальное распространение Scala, компании в Японии уже не боятся использовать Scala 3 и даже кросс-компилировать проекты для разных версий Scala.Конференция оставила сугубо положительные впечатления и, скрестя пальцы, надеюсь в следующем году посетить её уже в качестве докладчика.
Чуть больше года спустя впервые с начала эпидемии Scala Matsuri наконец прошла в штатном режиме, когда большинство спикеров присутствовали лично. Впервые удалось вживую увидеться с коллегами из SoftwareMill, поговорить с Джейми Томпсоном, который работает над компилятором Scala 3 и просто посмотреть на более "живую" Scala-тусовку в Токио за пределами родной компании.
В этом году впечатления остались смешанные - с одной стороны было немало качественных докладов для зрителей разных уровней, а вокруг них - множество заинтересованных людей и компаний-рекрутеров. С другой стороны, увы, приходится признать, что для крупнейшей международной конференции в Азии по Scala мероприятие относительно локальное, даже со скидкой на остаточную боязнь пандемии и трудности с авиаперелётами.
Неутешительно также, что с прошлого года как минимум одна крупная компания из числа спонсоров мероприятия решила отказаться от использования Scala, что ещё больше подчеркнуло локальность мероприятия - раньше компания занималась предоставлением Wi-Fi связи в павильоне, а заменить её оказалось попросту некому, в связи с чем в лекционном зале, где проходили доклады, интернета не было (совсем, даже мобильного).
Несмотря на сказанное, хочется уповать, что "маленькое, но гордое" сообщество Scala-программистов в Японии выстоит и сохранит свою небольшую, но важную нишу в экосистеме.
P.S. Поход на конференцию окупил себя как минимум из-за уникального маскота-тапира одноимённой библиотеки от Адама Варски 😁
В этом году впечатления остались смешанные - с одной стороны было немало качественных докладов для зрителей разных уровней, а вокруг них - множество заинтересованных людей и компаний-рекрутеров. С другой стороны, увы, приходится признать, что для крупнейшей международной конференции в Азии по Scala мероприятие относительно локальное, даже со скидкой на остаточную боязнь пандемии и трудности с авиаперелётами.
Неутешительно также, что с прошлого года как минимум одна крупная компания из числа спонсоров мероприятия решила отказаться от использования Scala, что ещё больше подчеркнуло локальность мероприятия - раньше компания занималась предоставлением Wi-Fi связи в павильоне, а заменить её оказалось попросту некому, в связи с чем в лекционном зале, где проходили доклады, интернета не было (совсем, даже мобильного).
Несмотря на сказанное, хочется уповать, что "маленькое, но гордое" сообщество Scala-программистов в Японии выстоит и сохранит свою небольшую, но важную нишу в экосистеме.
P.S. Поход на конференцию окупил себя как минимум из-за уникального маскота-тапира одноимённой библиотеки от Адама Варски 😁
HTML Embed Code: