В кои-то веки понадобилось распарсить XML. Думаю, напишу-ка я скриптик на питоне. Питон же отлично подходит для маленьких скриптов, да и тулинг для XML там точно хороший. В итоге: сайт библиотеки lxml вместо документации редиректит на левацкую пропаганду, автокомплит в репле бесполезный, без поиска по докам непонятно, что принимают и возвращают функции.
Провозился полчаса, потом взял ammonite, стандартный модуль scala-xml и за 5 минут накидал то, что мне надо. Репл подсказывает типы аргументов и возвращаемых значений, dsl максимально простой и интуитивный. Даже не пришлось писать, собственно, скрипт, хватило пары выражений в репле.
И вот непонятно: это я разучился писать на динамических языках или работать с XML в скале действительно удобнее, чем в питоне? 🤔
Провозился полчаса, потом взял ammonite, стандартный модуль scala-xml и за 5 минут накидал то, что мне надо. Репл подсказывает типы аргументов и возвращаемых значений, dsl максимально простой и интуитивный. Даже не пришлось писать, собственно, скрипт, хватило пары выражений в репле.
И вот непонятно: это я разучился писать на динамических языках или работать с XML в скале действительно удобнее, чем в питоне? 🤔
lxml.de
lxml - Processing XML and HTML with Python
lxml - the most feature-rich and easy-to-use library for processing XML and HTML in the Python language
Открылась регистрация на скала-конференцию 28 сентября в Москве 🎉
Пропустить такое событие просто преступно: 7 докладов, воркшопы про korolev и ZIO (второй проведёт сам John De Goes)! Когда ещё у вас будет возможность бесплатно поучаствовать в воркшопе Дегуза?
Пропустить такое событие просто преступно: 7 докладов, воркшопы про korolev и ZIO (второй проведёт сам John De Goes)! Когда ещё у вас будет возможность бесплатно поучаствовать в воркшопе Дегуза?
scala-russia.timepad.ru
Scaλa Russia 2019 / События на TimePad.ru
Первая в России большая ламповая встреча любителей и профессионалов Scala
Осознал, что инструменты для замера code coverage немножко способствуют неправильному восприятию результатов.
Выхлоп какого-нибудь codecov можно представить как прогрессбар с зелёной полоской:
[✅✅✅ХХ] (60% кода покрыто тестами).
С практической точки зрения это означает, что 40% кода не покрыто тестами, а 60% чем-то покрыты, но гарантий качества этих тестов нет. Мы узнали не то, что можем безопасно модифицировать какую-то часть кода, а то что для остального кода тестов нет вообще и менять его ещё опаснее.
Поэтому, на мой взгляд, правильнее было бы инвертировать статистику coverage:
[❌❌✓✓✓] (40% кода не покрыто тестами!).
Вроде бы мелочь, но акцент смещается на действительно ценную информацию, и исчезает иллюзия безопасности.
Выхлоп какого-нибудь codecov можно представить как прогрессбар с зелёной полоской:
[✅✅✅ХХ] (60% кода покрыто тестами).
С практической точки зрения это означает, что 40% кода не покрыто тестами, а 60% чем-то покрыты, но гарантий качества этих тестов нет. Мы узнали не то, что можем безопасно модифицировать какую-то часть кода, а то что для остального кода тестов нет вообще и менять его ещё опаснее.
Поэтому, на мой взгляд, правильнее было бы инвертировать статистику coverage:
[❌❌✓✓✓] (40% кода не покрыто тестами!).
Вроде бы мелочь, но акцент смещается на действительно ценную информацию, и исчезает иллюзия безопасности.
Искал документацию для scalastyle, а нашёл компанию Скала-Стиль, которая делает винтовые лестницы (почти как в EPFL!)
Если кто-то не знает, на логотипе скалы нарисована винтовая лестница из университета, а слово Scala в итальянском означает лестницу. Вот оригинальное объяснение из 2009 года.
Если кто-то не знает, на логотипе скалы нарисована винтовая лестница из университета, а слово Scala в итальянском означает лестницу. Вот оригинальное объяснение из 2009 года.
Дошли руки (глаза?) до прошлогоднего доклада Виктора Гамова. Замечательный обзор внутреннего устройства кафки и реализации exactly once. Наверное, тем, кто только начинает трогать кафку, будет вдвойне интересно.
YouTube
Виктор Гамов — Один раз в год сады цветут: разбор семантики «exactly once» Apache Kafka
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
. . . . Disclaimer: Если вас триггерит от слов «exactly-once delivery», то этот доклад обязателен к просмотру!
Рост популярности Apache Kafka…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
. . . . Disclaimer: Если вас триггерит от слов «exactly-once delivery», то этот доклад обязателен к просмотру!
Рост популярности Apache Kafka…
Одерски, похоже, всё-таки решил сломать скалу.
К 3-ей версии готовится альтернативный синтаксис со значащими отступами вместо фигурных скобок (как в питоне или окамле). Код на скале без скобок из примеров читается не очень хорошо. Но мне кажется гораздо большей проблемой то, что в Scala 3 может оказаться сразу два альтернативных синтаксиса: со скобками и с отступами.
Это значит, что:
1. Какие-то гении обязательно намешают разные синтаксисы в одном проекте, а кому-то (тебе) потом это поддерживать;
2. Порог вхождения взлетит в небеса, потому что новоприбывшим скалистам придётся привыкать сразу к двум синтаксисам;
3. Придётся поддерживать по две версии тулинга для форматирования, IDE и прочего.
Последнее выглядит хуже всего. Очень надеюсь, что у сообщества получится отговорить безумного профессора 🙏
К 3-ей версии готовится альтернативный синтаксис со значащими отступами вместо фигурных скобок (как в питоне или окамле). Код на скале без скобок из примеров читается не очень хорошо. Но мне кажется гораздо большей проблемой то, что в Scala 3 может оказаться сразу два альтернативных синтаксиса: со скобками и с отступами.
Это значит, что:
1. Какие-то гении обязательно намешают разные синтаксисы в одном проекте, а кому-то (тебе) потом это поддерживать;
2. Порог вхождения взлетит в небеса, потому что новоприбывшим скалистам придётся привыкать сразу к двум синтаксисам;
3. Придётся поддерживать по две версии тулинга для форматирования, IDE и прочего.
Последнее выглядит хуже всего. Очень надеюсь, что у сообщества получится отговорить безумного профессора 🙏
GitHub
Allow significant indentation syntax by odersky · Pull Request #7083 · lampepfl/dotty
As an experimental feature, allow indentation to be treated as significant.
What is supported?
To get a feel for the code, see the example below. For precise rules, see the doc page.
The old syntax...
What is supported?
To get a feel for the code, see the example below. For precise rules, see the doc page.
The old syntax...
Свершилось
В котах наконец-то исправили тайпкласс для параллельных вычислений. История забавная, даже если вы не знаете, что такое F[_].
Изначально тайпкласс был написан как
Вместо этого мейнтейнеры советовали подключить ещё отдельную маленькую либу с пофикшенным тайпклассом, а скалисты тихо ворчали. Больше года как минимум раз в месяц кто-то врывался с гиттер котов с вопросом, как вообще использовать этот тайпкласс, и ему советовали взять вторую либу.
А сегодня Travis Brown взял и всё починил. Не сломав бинарную совместимость. Потому что это было возможно всё это время.
По поводу критических изменений на уровне исходников забавно высказался Rob Norris:
the current API is so awkward to use that this is unlikely to break much code
В котах наконец-то исправили тайпкласс для параллельных вычислений. История забавная, даже если вы не знаете, что такое F[_].
Изначально тайпкласс был написан как
Parallel[F[_], G[_]], и второй тайп-параметр самым отвратительным образом мешал программировать. Задача на его удаление висела больше года, но не бралась в разработку, потому что все думали, что это нельзя сделать, не сломав бинарную совместимость со старыми версиями библиотеки.Вместо этого мейнтейнеры советовали подключить ещё отдельную маленькую либу с пофикшенным тайпклассом, а скалисты тихо ворчали. Больше года как минимум раз в месяц кто-то врывался с гиттер котов с вопросом, как вообще использовать этот тайпкласс, и ему советовали взять вторую либу.
А сегодня Travis Brown взял и всё починил. Не сломав бинарную совместимость. Потому что это было возможно всё это время.
По поводу критических изменений на уровне исходников забавно высказался Rob Norris:
the current API is so awkward to use that this is unlikely to break much code
Сегодня в маршрутке дувчушка лет 4-х спросила маму: «А если всем попросить Одерски, он закроет PR с отступами?»
С мамой плакала половина скалистов…
Одерски, выключи отступы!!!
С мамой плакала половина скалистов…
Одерски, выключи отступы!!!
Forwarded from Scala bin
На днях в комментариях на реддите опубликовали подборку видео о работе компиляторов Scala и Dotty вкупе с книгами о компиляторах вообще. Решил немного дополнить список обзорными видео, поскольку слушать полтора часа про построение деревьев в Dotty может показаться утомительным.
Scalac:
1. Scalac Survival Guide (1 час)
2. A deep dive into Scalac (47 минут)
3. Scala compiler plugins 101 (32 минуты)
4. Scalac micro-optimisation (7 минут)
Dotty:
1. Dotty Internals 1: Trees & Symbols (1.5 часа)
2. Dotty Internals 2: Types (2.3 часа)
3. Dotty Internals 3: Denotations (2.5 часа)
4. Hands-on Dotty — Dmitry Petrashko (1.6 часа)
5. What's Different In Dotty by Martin Odersky (1 час)
6. Integrating IDEs with Dotty (30 минут)
Отдельным пунктом хочу выделить презентацию How an Optimizing Compiler Works (47 минут) под авторством Li Haoyi, в которой затрагиваются основные аспекты работы оптимизирующего компилятора.
Scalac:
1. Scalac Survival Guide (1 час)
2. A deep dive into Scalac (47 минут)
3. Scala compiler plugins 101 (32 минуты)
4. Scalac micro-optimisation (7 минут)
Dotty:
1. Dotty Internals 1: Trees & Symbols (1.5 часа)
2. Dotty Internals 2: Types (2.3 часа)
3. Dotty Internals 3: Denotations (2.5 часа)
4. Hands-on Dotty — Dmitry Petrashko (1.6 часа)
5. What's Different In Dotty by Martin Odersky (1 час)
6. Integrating IDEs with Dotty (30 минут)
Отдельным пунктом хочу выделить презентацию How an Optimizing Compiler Works (47 минут) под авторством Li Haoyi, в которой затрагиваются основные аспекты работы оптимизирующего компилятора.
Reddit
From the scala community on Reddit
Explore this post and more from the scala community
Вот что раздражает в скале — так это ловля фатальных ошибок по умолчанию. Нет, я не хочу обрабатывать OutOfMemory или StackOverflow. Да, я всегда хочу чтобы они вылетели на самый верх.
Почему я должен постоянно писать
вместо того, чтобы один раз в жизни, когда мне это действительно понадобится, написать что-то вроде
?
Конечно, мы так выводим несколько эксепшенов в особый разряд на уровне синтаксиса, и это чуть-чуть усложняет язык. Но это цена за максимально дружелюбное для большинства программистов поведение по умолчанию.
Почему я должен постоянно писать
import scala.util.control.NonFatal
try { … }
catch {
case e if NonFatal(e) => …
}
вместо того, чтобы один раз в жизни, когда мне это действительно понадобится, написать что-то вроде
try { … }
catchFatals {
case e => …
}?
Конечно, мы так выводим несколько эксепшенов в особый разряд на уровне синтаксиса, и это чуть-чуть усложняет язык. Но это цена за максимально дружелюбное для большинства программистов поведение по умолчанию.
Оказывается, британская налоговая держит исходники своего софта открытыми, и пишет на скале. На гитхабе можно почитать сорцы их 500+ микросервисов и принципы разработки.
GitHub
HM Revenue & Customs
HM Revenue & Customs has 1675 repositories available. Follow their code on GitHub.
В продолжение темы открытых проектов. Софт для обсерватории Gemini пишется на скале и хостится на гитхабе. Над проектом работает Rob Norris — автор библиотеки doobie, которой его огромный вклад в сообщество, конечно, не ограничивается. Код написан в функциональным стиле c F[_].
У обсерватории два телескопа: в Чили и на Гавайях. На ютубе можно посмотреть коротенькое видео про неё.
В некотором роде, это лестница в небо
У обсерватории два телескопа: в Чили и на Гавайях. На ютубе можно посмотреть коротенькое видео про неё.
В некотором роде, это лестница в небо
Forwarded from oleg_log (Oleg Kovalov)
Я прям не удивлен результатом. Мяу
https://impurepics.com/quiz/
https://impurepics.com/quiz/
Одерски не только затащил отступы в дотти, но и теперь в релиз-ноутах новой версии все примеры кода уже только с ними 😫
Держу в курсе: джависты и скалисты второй день не могут нормально выложить релизы своих библиотек в Sonatype (хранилище артефактов, из которого пользователи могут подключиить зависимости в свой проект). Он попеременно возвращает рандомные ошибки и отваливается с таймаутами.
Вспоминается старый твит Li Haoyi
Вспоминается старый твит Li Haoyi
Есть очень крутой сайт astexplorer.net, на котором можно посмотреть синтаксическое дерево для любого куска кода на одном из поддерживаемых языков. Очень удобно выделять фрагмент кода и получать выделение соответствущих ему элементов AST (и наоборот). За парсинг скалы отвечает библиотека scalameta.
Только сегодня узнал, что в IDEA есть уберполезная фича: ставим курсор на нужную строчку, нажимаем ПКМ, и открываем этот файл в браузере на гитхабе! При этом будет выделена строчка, на которой стоит курсор. В этот момент у меня перед глазами пролетели все моменты, когда я искал нужный файл на гитхабе руками.