В работе с форками на гитхабе меня всегда раздражало вливание свежего мастера с оригинального проекта в свой форк.
В первый раз надо сделать
Иногда казалось, что проще снести старый форк и сделать новый вместо того, чтобы вспоминать команды.
А сегодня я обновил проект одной командой
В первый раз надо сделать
git remote add upstream git://github.com/USERNAME/REPONAME.gitПотом каждый раз вспоминать, что вместо
git fetch upstream
git pull надо выполнить git pull upstream master... Который обязательно не сработает, потому что для вот именно этого проекта, с которым я сейчас работаю, пока ещё не указан upstream, так что goto 1Иногда казалось, что проще снести старый форк и сделать новый вместо того, чтобы вспоминать команды.
А сегодня я обновил проект одной командой
hub sync консольный утилиты hub от команды гитхаба, и всё просто заработало как надо 🙏ВЫШЕЛ ВЫШЕЛ ВЫШЕЛ
Релиз Scala 2.13
Улучшенные коллекции, улучшенные
Дружно тащим в прод!
Релиз Scala 2.13
Улучшенные коллекции, улучшенные
Future, partial unification по дефолту, literal types и ещё куча вкусностейДружно тащим в прод!
GitHub
Release Scala 2.13.0 · scala/scala
We are delighted to announce the availability of Scala 2.13.0!
Release summary
2.13 improves Scala in the following areas:
Collections: Standard library collections have been overhauled for simpli...
Release summary
2.13 improves Scala in the following areas:
Collections: Standard library collections have been overhauled for simpli...
Начал перетаскивать свои проектики на Scala 2.13 и сразу же обнаружил не самое приятное нововведение. Теперь в стандартной библиотеке есть по два инстанса
IeeeOrdering работает в соответствии со спецификацией IEEE, а TotalOrdering считает, что
При этом ни один из них не выбран по умолчанию. Поэтому больше нельзя написать просто
Ordering для Double и Float, отличающихся отношением к NaN.IeeeOrdering работает в соответствии со спецификацией IEEE, а TotalOrdering считает, что
NaN больше всех остальных чисел (даже Double.PositiveInfinity).При этом ни один из них не выбран по умолчанию. Поэтому больше нельзя написать просто
List(1.0, 3.0, 2.0).sorted, надо обязательно указать, как именно будут сравниваться числа:List(1.0, 3.0, 2.0).sorted(Ordering.Double.TotalOrdering)Вот issue, с которого всё началось, а тут накодякана разница между ними. Как это объяснять тем, кто только начинает программировать на скале, я вообще без понятия 😔
// или
import Ordering.Double.TotalOrdering
List(1.0, 3.0, 2.0).sorted
Stephen Samuel, автор scrimage, elastic4s и ещё многих классных библиотек, сделал публичным свой список вопросов для собеседований скалистов. Он пока не завершён, но выглядит очень даже неплохо, можно растаскивать для своих собесов.
А ещё там есть файлик с заданием на system design.
А ещё там есть файлик с заданием на system design.
Нашёл ещё один статический анализатор кода на скале — scapegoat.
Более популярный wartremover скорее ограничивает возможности языка (запрещает null, имплиситные преобразования и аргументы, и прочее). При этом он не даёт скомпилировать проект с нарушениями правил.
А scapegoat имеет больше встроенных инспекций, например:
- сравнение чисел с плавающей точкой через
- не идиоматичное или не эффективное использование методов коллекций
- использование
При этом он автоматически не подвязывается к компиляции, а генерирует отчёт в html по команде.
Получается такой более мягкий и подробный анализатор, который можно запросто использовать вместе с вартремувером.
Более популярный wartremover скорее ограничивает возможности языка (запрещает null, имплиситные преобразования и аргументы, и прочее). При этом он не даёт скомпилировать проект с нарушениями правил.
А scapegoat имеет больше встроенных инспекций, например:
- сравнение чисел с плавающей точкой через
==- не идиоматичное или не эффективное использование методов коллекций
- использование
contains с потенциально неверным типом аргумента и сравнение заведомо разных типовПри этом он автоматически не подвязывается к компиляции, а генерирует отчёт в html по команде.
Получается такой более мягкий и подробный анализатор, который можно запросто использовать вместе с вартремувером.
Пишу на своей скале, только типы в голове. То ли дело динамические языки: с ними можно концентрироваться на бизнес-логике и делать гораздо больше вэлью.
Вот Илья Бирман написал заметку о том, как проверить строку на пустоту в php. Ему в комментариях накидали ещё семь (!) вариантов кода, из которых работает правильно только один. А всё потому что мы не знаем, какой тип на самом деле лежит в переменной и как он приведётся к строке. Например, любой массив превратится в строку "Array".
Вот Илья Бирман написал заметку о том, как проверить строку на пустоту в php. Ему в комментариях накидали ещё семь (!) вариантов кода, из которых работает правильно только один. А всё потому что мы не знаем, какой тип на самом деле лежит в переменной и как он приведётся к строке. Например, любой массив превратится в строку "Array".
На этой неделе вышла новая версия metals (это language server для скалы, совместимый с LSP), и им, в принципе, можно пользоваться.
Работает go to definition, find references, поиск по имени класса или метода, дерево пакетов, автоматический импорт, автодополнение. Все зависимости проекта индексируются.
Перемещение по исходникам работает пока не так хорошо, как в IDEA, хотя ситуаций, когда у metals не получается найти определение метода, с каждой новой версией всё меньше и меньше. Раздражает разве что очень долгий запуск при открытии проекта.
Для больших проектов у Intellij IDEA всё ещё нет альтернатив, а маленькие либы я уже давно редактирую в VS Code с металлами. Но это история не про личную производительность, а про эстетическое удовольствие: мне просто больше нравится, как ощущается, выглядит и рендерит текст VS Code. А когда надо сделать вэлью, приходится расчехлять Intellij 🐗
Если ещё не пробовали металлы, почитайте релизный блогпост, там много интересного.
Работает go to definition, find references, поиск по имени класса или метода, дерево пакетов, автоматический импорт, автодополнение. Все зависимости проекта индексируются.
Перемещение по исходникам работает пока не так хорошо, как в IDEA, хотя ситуаций, когда у metals не получается найти определение метода, с каждой новой версией всё меньше и меньше. Раздражает разве что очень долгий запуск при открытии проекта.
Для больших проектов у Intellij IDEA всё ещё нет альтернатив, а маленькие либы я уже давно редактирую в VS Code с металлами. Но это история не про личную производительность, а про эстетическое удовольствие: мне просто больше нравится, как ощущается, выглядит и рендерит текст VS Code. А когда надо сделать вэлью, приходится расчехлять Intellij 🐗
Если ещё не пробовали металлы, почитайте релизный блогпост, там много интересного.
scalameta.org
Metals v0.7.0 - Thorium | Metals
We are excited to announce the release of Metals v0.7.0 - codename "Thorium" 🎉
Lil Functor
Нашёл ещё один статический анализатор кода на скале — scapegoat. Более популярный wartremover скорее ограничивает возможности языка (запрещает null, имплиситные преобразования и аргументы, и прочее). При этом он не даёт скомпилировать проект с нарушениями…
Раньше рассказывал про линтер scapegoat, а сегодня он смог меня удивить.
Проект после подключения линтера начал падать с фатальным
Так я узнал две вещи:
1. Транзитивные зависимости в итоговый артефакт могут просочиться даже из sbt-плагинов 😔
2. Линтер может положить прод 💪🤟
Кто на скале программировал, тот в цирке не смеётся
Проект после подключения линтера начал падать с фатальным
NoSuchMethodError. Продолжительное следствие установило, что scapegoat и библиотека scalikejdbc, тоже использующая в проекте, зависят от несовместимых версий либы scala-collection-compat. При сборке в jar попадает версия от линтера, и на вызове определённого метода все взрывается.Так я узнал две вещи:
1. Транзитивные зависимости в итоговый артефакт могут просочиться даже из sbt-плагинов 😔
2. Линтер может положить прод 💪🤟
Кто на скале программировал, тот в цирке не смеётся
Forwarded from Oleg ℕižnik
28 сентября в Москве мы проведем первую крупномасштабную встречу Scala Russia.
Специальный гость — John De Goes. Джон выступит с докладом и проведет воркшоп.
Нас ждет:
🔹 2 потока,
🔹 7 докладов,
🔹 2 воркшопа.
Комфортная атмосфера нетворкинга. Еда. Бомбическое афтерпати
Участие — бесплатное.
Регистрация откроется чуть позже.
Открываем прием заявок на доклады.
Программный комитет: @odomontois, @oli_kitty, @eld0727, @fomkin, @nikitamelnikov (пополняется...)
Идеи докладов смело кидайте в личку @eld0727.
Следите за обновлениями!
Специальный гость — John De Goes. Джон выступит с докладом и проведет воркшоп.
Нас ждет:
🔹 2 потока,
🔹 7 докладов,
🔹 2 воркшопа.
Комфортная атмосфера нетворкинга. Еда. Бомбическое афтерпати
Участие — бесплатное.
Регистрация откроется чуть позже.
Открываем прием заявок на доклады.
Программный комитет: @odomontois, @oli_kitty, @eld0727, @fomkin, @nikitamelnikov (пополняется...)
Идеи докладов смело кидайте в личку @eld0727.
Следите за обновлениями!
Сама либа. Скала собрала, наверное, все известные человечеству подходы к работе с асинхронностью: акторы, монадки, промисы, асинк/авэйт... Оказалось, что ещё и гошные каналы 😏
Forwarded from PONV Daily (Igal Tabachnik)
YouTube
Keynote: Some Mistakes We Made When Designing Implicits – Martin Odersky
We will talk about the history how Scala's implicits evolved, and about some of the mistakes we could have avoided in hindsight, but also about things that I believe we got right. I'll conclude with a presentation of revised implicits in Scala 3 which fixes…
Одерски, похоже, окончательно определился с судьбой имплиситов в третьей скале. Ну и заодно рассказал историю их появления во второй.
TL;DR: вместо имплиситов введут делегаты, новый механизм будет совместим со старым, имплиситы будут потихоньку депрекейтить
Мне в целом нравятся изменения, но хочется более строгих ограничений на использование всей этой радости. Особенно порадовал импорт делегатов с возможностью указать тип, для которого подтянется инстанс.
TL;DR: вместо имплиситов введут делегаты, новый механизм будет совместим со старым, имплиситы будут потихоньку депрекейтить
Мне в целом нравятся изменения, но хочется более строгих ограничений на использование всей этой радости. Особенно порадовал импорт делегатов с возможностью указать тип, для которого подтянется инстанс.
Мониксовский минитест готовятся вмёрджить в стандартную библиотеку скалы. Теперь у скалистов будет минималистичный фреймворк для тестирования из коробки.
В этом ишью можно почитать дискуссию по выбору проекта для форка. Что характерно, создатель библиотеки Александр Недельку даже не появился в комментариях.
Новость прямо очень крутая, потому что дефолтных тестов и правда не хватало, а тут ещё и очень удобный и действительно легковесный минитест🎉
В этом ишью можно почитать дискуссию по выбору проекта для форка. Что характерно, создатель библиотеки Александр Недельку даже не появился в комментариях.
Новость прямо очень крутая, потому что дефолтных тестов и правда не хватало, а тут ещё и очень удобный и действительно легковесный минитест🎉
Чуть-чуть поработал с проектом без scalafmt и понял, насколько сильно успел привыкнуть к хорошему.
Уже очень давно не приходилось перед каждым коммитом вспоминать о расстановке скобочек, вместо того, чтобы просто написать код всрато и скормить форматировщику.
Вообще, я считаю повсеместное распространение scalafmt одной из самых позитивных тенденций в скала-сообществе (и немного завидую гошникам в этом плане).
.scalafmt.conf в репозитории и ✅ Format On Save в редакторе — обязательные условия комфортного программирования 💁🏻♂
Уже очень давно не приходилось перед каждым коммитом вспоминать о расстановке скобочек, вместо того, чтобы просто написать код всрато и скормить форматировщику.
Вообще, я считаю повсеместное распространение scalafmt одной из самых позитивных тенденций в скала-сообществе (и немного завидую гошникам в этом плане).
.scalafmt.conf в репозитории и ✅ Format On Save в редакторе — обязательные условия комфортного программирования 💁🏻♂
В кои-то веки понадобилось распарсить 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…