Lil Functor – Telegram
Lil Functor
797 subscribers
57 photos
1 file
183 links
Pure functional and composable channel

Чат: https://news.1rj.ru/str/+L-xb_m_4lnY3Y2Fi
Download Telegram
Только сейчас наткнулся на пакет errors для голанга, который добавляет в язык почти эксепшены. Только с маааааленьким нюансом: стэктрэйс составляет не рантайм языка, а программист. Элегантное решение!
Давно подслушал и недавно осмыслил простое, но полезное правило использования тайпклассов в Scala.

Допустим, вы пишите полиморфное хранилище ключ-значение и хотите иметь возможность получить все значения в отсортированном виде:

abstract class KeyValueStorage[T: Order] {
def get(id: String): T
def put(entity: T): Unit
def delete(id: String): Unit
def sorted(): List[T]
}

Для того, чтобы значения типа T могли быть отсортированы, на него накладывается требование Order. Но фактически это требование нужно для реализации только одного метода из четырёх — sorted. Поэтому его можно локализовать:

trait KeyValueStorage[T] {
def get(id: String): T
def put(entity: T): Unit
def delete(id: String): Unit
def sorted()(implicit O: Order): List[T]
}

Теперь пользователи могут использовать реализации этого хранилища для объектов, которые нельзя сравнивать. Компилятор не позволит им вызвать метод sorted, но остальные методы будут доступны.

Благодаря гранулярности требований достигается универсальность интерфейса.
Градация программистов здорового человека от Basecamp:

* до 2 лет опыта — Junior Programmer
* 2-5 лет — Programmer
* 5-8 лет — Senior Programmer
* 8-12 лет — Lead Programmer
* 12+ лет — Principal Programmer

И откуда-то со дна стучит СНГ-шное айти:

«Здравствуйте))) Нам очень понравилось ваше резюме на полгода опыта, хотим предложить вам позицию сеньор биг дата архитектора 💅👨🏻‍💻 в перспективной компании...»

«Team Lead в 19 лет: невероятная история программ...»

«С нуля до старшего разработчика за 21 день. Надо всего лишь...»
Раньше я думал, что меня сложно удивить, но тут человеку, отправившему pull request с исправлением опечатки, предлагается распечатать и подписать лицензионное соглашение.

При этом библиотека открытая и опубликована под лицензией Apache-2.0.

Само собой PR висит уже больше года, а опечатка как была в исходниках, так и осталась.
Написал небольшой пост про то, как я переписал foreach на while в своей скала-либе и получил прирост производительности почти в два раза.

TL;DR это действительно так работает, но бежать переписывать прод на циклы смысла нет
В интервью Кирилла Мокевнина с Романом Павлушко (бывший CTO Avito) услышал, что у них есть слак-бот, которому можно дать описание сервиса «голанг, два редиса, постгрес», и он автоматически создаст репозиторий с шаблоном проекта, докер образ, развернёт нужную инфраструктуру и позволит задеплоить это на прод в одно нажатие кнопки.

По этому поводу могу сказать только одно слово: ХОТЕТЬ
Forwarded from Crybaby ↜( ◣∀◢)ψ
Отличная заметка от Daniel Spiewak про использование тред-пулов в jvm.

1. Если задачи грузят преимущественно CPU (например, распараллеленные числодробилки), брать пул с фиксированным количеством тредов. Тредов столько же, сколько и ядер в процессоре: newFixedThreadPool(Runtime.getRuntime.availableProcessors)

2. Для блокирующего i/o нужен пул, который умеет плодить много потоков. cachedThreadPool с этим отлично справится.

3. Для асинхронных операций брать forkJoinPool и не забивать его никакими задачами, кроме, непосредственно управления исполнением программы.

От себя добавлю, что поверх этих тред-пулов должно исполняться исключительно моднейшее ZIO с тремя дырками!
А вот простая блок-схема по выбору подходящего пула
Интересный доклад Андрея Паньгина с развенчанием мифов о «медленной» jvm в сравнении с C++. Сравниваются решения типичных для бэкендов задач: сетевое и файловое i/o, мультитрединг, числодробление. Правда замеры выглядят слегка предвзятыми 🙈

Проблема этого доклада в том, что после его просмотра возникает сильное желание читать статьи про структуру кучи в jvm, устройство HotSpot и tiered compilation.
Привет подписчикам от профункторного коллеги👽

Если кто-то до сих пор не знает, что же такое, собственно, profunctor optics, есть хорошая серия статей с объяснением (осторожно, МАТЕМАТИКА!)
Для того, чтобы убрать файл из индексации гита обычно используется .gitignore. Но есть ещё одна возможность скрыть файлы — .git/info/exclude. В отличие от .gitignore он не шарится вместе с остальным проектом, а хранится локально.

В гитигнор я обычно прописываю те файлы, которые обязательно появятся у всех, кто работает над проектом:

target/
project/target/

А в exclude то, что связано с моим личным окружением и не интересно никому, кроме меня:

.metals/
.bloop/
magic-noscript-with-benchmarks.sh
Чем прервать месячное затишье на канале? Конечно же, очередной драмой в скала-сообществе!

Позавчера без объявления войны Seth Tisue удалил из Scala Community Build несколько библиотек экосистемы scalaz (в том числе ZIO!).

Community Build — это прогон свежих версий компилятора на ключевых библиотеках для выявления наиболее критичных багов.

Официальная причина — несоответствие удалённых проектов CoC. Но на форуме контрибьюторов появилась более подробная аргументация:
1. scalaz уже не в тренде и никому не нужно
2. Мейнтейнеры этих проектов говорят слишком громко

Выглядит так, будто личная неприязнь к Дегузу покрывается CoC. Причём это делает основа разработчиков языка. К счастью, активная часть сообщества уже высказалась против.

Обилием плохо мотивированных скандалов скала больше напоминает рестлинг, чем язык программирования.
Недавняя попоболь от опенсорса заставила написать про проблематику версионирования маленьких библиотечек, которые наращиваются вокруг основной библиотеки и связывают её с другими инструментами (например, коннекторы json-либы к разным веб-фреймворкам).

Если вкратце, то, пожалуйста, никогда не пытайтесь держать версию сателлита равной версии основного проекта. Это прямая дорога к задержке релизов и праведному гневу пользователей.

Подробнее по ссылочке
Посмотреть, как смм Альфа-Банка позорится в прямом эфире, можно здесь

(Администрация канала не одобряет кибер-буллинг)
Для работы в командной строке я использую tmux — это очень удобный инструмент, который позволяет делить терминал на несколько окошек и создавать вкладки.

При взаимодействии с удалёнными серверами он бесценен, потому что сохраняет сессию при закрытии терминала. То есть я могу открыть текстовый редактор, что-то поделать, закрыть терминал, потом повторно подключиться по ssh и увидеть свой редактор в том же самом состоянии.

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

1. До этого при запуске не было сообщений, что такие-то опции deprecated
2. Релиз был минорный по семверу

Просто в один момент ИЗВИНИТЕ, ВАШ КОНФИГ БОЛЬШЕ НЕ ВАЛИДНЫЙ

Само собой на эту тему поднялся срачик, а я в полвторого ночи переписываю конфиг с лицом лягушки.

Пару лет назад, кстати, писал как заскриптовать создание терминалов в тмуксе.
Простая арифметика о том, что может пойти не так при ломающих изменениях в минорном релизе
Обнаружил библиотеку reftree, которая рисует красивые визуализации кейс-классов в скале. Кроме генерации обычных картинок с содержимым объектов, умеет делать анимации с переходами между состояниями.

Я для себя не нашёл применения, но может кому-нибудь будет полезно для презентаций/мануалов.
This media is not supported in your browser
VIEW IN TELEGRAM
На днях вышла новая версия Ammonite (это улучшенный REPL для скалы), и теперь он умеет делать автокомплит не только кода, но и подключения сторонних зависимостей!

Теперь не надо каждый раз лезть в репозиторий библиотеки, чтобы узнать, какая у неё последняя версия.

А ещё для него можно прописать файл ~/.ammonite/predef.sc с зависимостями и импортами, которые будут подключены при каждом запуске REPL.
Первый день на fpure:

«Функтор — это штука»

«Чем больше у человека PhD, тем хуже у него документация»