Telegram Web Link
В продолжение темы открытых проектов. Софт для обсерватории Gemini пишется на скале и хостится на гитхабе. Над проектом работает Rob Norris — автор библиотеки doobie, которой его огромный вклад в сообщество, конечно, не ограничивается. Код написан в функциональным стиле c F[_].

У обсерватории два телескопа: в Чили и на Гавайях. На ютубе можно посмотреть коротенькое видео про неё.

В некотором роде, это лестница в небо
Forwarded from oleg_log (Oleg Kovalov)
Я прям не удивлен результатом. Мяу
https://impurepics.com/quiz/
Одерски не только затащил отступы в дотти, но и теперь в релиз-ноутах новой версии все примеры кода уже только с ними 😫
Держу в курсе: джависты и скалисты второй день не могут нормально выложить релизы своих библиотек в Sonatype (хранилище артефактов, из которого пользователи могут подключиить зависимости в свой проект). Он попеременно возвращает рандомные ошибки и отваливается с таймаутами.

Вспоминается старый твит Li Haoyi
Есть очень крутой сайт astexplorer.net, на котором можно посмотреть синтаксическое дерево для любого куска кода на одном из поддерживаемых языков. Очень удобно выделять фрагмент кода и получать выделение соответствущих ему элементов AST (и наоборот). За парсинг скалы отвечает библиотека scalameta.
Только сегодня узнал, что в IDEA есть уберполезная фича: ставим курсор на нужную строчку, нажимаем ПКМ, и открываем этот файл в браузере на гитхабе! При этом будет выделена строчка, на которой стоит курсор. В этот момент у меня перед глазами пролетели все моменты, когда я искал нужный файл на гитхабе руками.
Daniel Spiewak опубликовал пост со своим видением трейсинга в котоэффектах. Планируется накапливать информацию о структуре цепочек вычислений и при вылете исключения распечатывать не только его стектрейс, но и информацию о графе выполнения асинхронного кода. Аналогичную фичу обсуждают и в мониксе.

А всё началось с того, что асинхронный трейсинг сделали в ZIO. Радует, как под влиянием ZIO сообщество шевелится и улучшает свой инструментарий.
Бесконечно можно делать три вещи:

1. Смотреть, как горит огонь
2. Смотреть, как течёт вода
3. Обновлять проект на скалу 2.13
Я, конечно, всё понимаю, но это календарь в виме

Устанавливается как обычный плагин, и через него можно смотреть и создавать задачи в гугл-календаре🙃

https://github.com/itchyny/calendar.vim
В блоге Фигмы (это гугл-документы от мира графического дизайна) вышла отличная статья (https://clck.ru/JsUmz) о том, как они делали многопользовательский редактор макетов.

Там почти нет программистских подробностей, интересно скорее то, как они максимально упрощали решение очень сложной на первой взгляд задачи. Заявленный принцип «no more complex than necessary to get the job done» применялся и к технической реализации, и к продуктовым требованиям.

Ещё в статье есть про то, почему они не стали применять Operational Transformation и честный CRDT, как они реализовали многопользовательский undo-redo и совместное редактирование древовидных документов. Всё написано простым языком и с наглядной анимацией.

А вот ещё одна статья (https://clck.ru/JsUnC) из их блога про то, как они решали проблему совместного редактирования упорядоченных последовательностей.
This media is not supported in your browser
VIEW IN TELEGRAM
Тут один хороший человек сделал плагин для IDEA с набором инспекций кода на ZIO: github.com/hmemcpy/zio-intellij/

Настоятельно рекомендую установить его, если уже используете bleeding-edge технологии от Дегуза. Один подбор лучшего тайпалиаса для всех ваших дырок чего стоит!
Вручную писать тесты для сериализации наших моделек во всякие джсоны — долго, неприятно, и всем лень это делать. При этом баги из-за поломанной сериализации тяжело отлавливать, и обычно они всплывают очень поздно, уже на этапе интеграции с внешними апи.

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

А тут умные люди придумали golden testing — простенький паттерн, с которым тестировать сериализацию сильно проще.

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

1. Перед запуском теста проверяем, есть ли файл. Если нет, создаём новый с текущим выхлопом сериализации. Ответственность программиста — проверить этот выхлоп глазами.
2. При незапланированном изменении выхлопа тест покраснеет.
3. При осознанном изменении удаляем из ресурсов старый эталонный файлик. При запуске тестов автоматически будет создан новый, а мы провалидируем корректность изменений при помощи git diff

Оригинальная статья про golden testing: https://ro-che.info/articles/2017-12-04-golden-tests
Либа для скалы: https://github.com/circe/circe-golden
И для хаскеля: https://github.com/feuerbach/tasty-golden
Подъехал очередной билд-тул для скалы: https://github.com/tindzk/seed

Вдохновлялись cargo, внутри используют ZIO. Для сборки проектов подключаются к bloop (это инструмент для инкрементальной компиляции скала-проектов с кешированием компиляции и прочими плюшками), зависимости выгружают с помощью coursier.

В итоге получилась очень тонкая надстройка для управления зависимостями и разбиением проекта на модули: остальную работу делают уже готовые кирпичики. Этот проект показателен тем, насколько просто сейчас сделать свой собственный билд-тул на скале (но зачем?).

Пожно поглазеть и продолжить сидеть на sbt
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё одна мега-полезная функция в IDEA — это возможность в два клика поменять местами аргументы

1. Ставим курсор на запятую
2. Нажимаем alt+enter, чтобы вызвать меню с доступными действиями
3. Выбираем Flip ‘,’ (обычно выбрано по дефолту)
4. Нажимаем enter
Какое-то время назад я начал билдилить консольный клиент scalafmt в native-image Грааля. Всё было очень круто, бинарник стартовал мгновенно (как будто не на скале написан). Потом в скалафмт обновили версию языка, пару зависимостей, чуть-чуть поменяли код, и билды под Грааль сломались.

По его ошибкам было мало что понятно, как чинить, никто не знал. Ничего полезного на этот счёт, кроме таких же поломанных билдов в других проектах, найти не удалось. Так как билд нативного бинарника не является обязательным требованием ко всем версиям скалафмт, на него подзабили. А на днях вышел новый релиз Грааля, и проект опять начал билдиться. Но чувство, что шаг влево, шаг вправо, и твой кот перестанет собираться Граалем, никуда не делось.

1. Круто, что в Граале чинят баги
2. Круто, что у меня нет ни одного проекта, где билд под Грааль является обязательным условием
По твиттеру гуляет хештэг #ScalaThankYou, с которым разработчики благодарят друг друга за вклад в сообщество.

А Chris Birchall напарсил граф упоминаний, по которому можно отследить, кто получает больше респектов: https://raw.githubusercontent.com/cb372/scala-thank-you/master/scala-thank-you.svg?sanitize=true
Илья Бирман рассказал, как правильно произносить английские слова, часто использующиеся программистами. После просмотра стал ещё чаще ловить себя на колхозном произношении :с

https://youtu.be/jXJFuqHnF2Q
Одерски вмёрджил в дотти PR c явным указанием null на уровне типов

Теперь в третьей скале появится флаг компилятора -Yexplicit-nulls, который заставит все null описывать через объединение типов. Звучит сложновато, но на практике всё очень просто:

val x: String = null // no longer compiles

val x: String | Null = null // ok


При этом явная проверка на null «убирает» Null из типа переменной:

val x: String|Null = ???
if (x != null) {
// x has type String here
}


Это сделано не для описания опциональных значений: для них по-прежнему удобен Option. Мотивация к явным нуллам — повышение безопасности при взаимодействии с апи, уже отдающими нуллы.

PR: https://github.com/lampepfl/dotty/pull/7546
Описание: https://github.com/abeln/dotty/wiki/scala-with-explicit-nulls
Дизайн-док: https://gist.github.com/abeln/9f79774bac111d99b3ae2cb9016a33e6
Почти полгода пользуюсь макбуком, но до сих пор не смог привыкнуть к его родной раскладке. Наконец-то нашёл простой способ починить — https://github.com/epsimatic/mefodica-birmana. Близкая к PC русскоязычная раскладка, типографские символы с раскладки Бирмана и переключение по капс-локу из коробки (причём светодиод на капс-локе теперь означает, что активен русский язык)
2025/07/11 22:01:45
Back to Top
HTML Embed Code: