Lil Functor
795 subscribers
57 photos
1 file
183 links
Pure functional and composable channel

Чат: https://t.iss.one/+L-xb_m_4lnY3Y2Fi
Download Telegram
Написал небольшой пост про то, как я переписал 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-script-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, тем хуже у него документация»
А я-то думал, что это просто чистые функции 😢
Forwarded from oleg_log (Oleg Kovalov)
Таки я дополз до гитхаба и собрал часть ответов. Не идеально, но есть начало. За ошибки и опечатки ответственности не несу, лол.

Надо будет немного цели интервью описать и чуть примеров докинуть (без наносекундной точноти ток).

Фил фри ту контрибют 🙌

https://github.com/cristaloleg/interview-manifesto
Тут Daniel Spiewak открыл PR с заменой основного тред-пула в котоэффектах с Fork Join на Fixed Size. В обсуждении пулл-реквеста, issue и гиттере идёт очень интересная дискуссия, из которой можно выцепить много информации о разных тред-пулах в jvm, их назначении, недостатках и краевых случаях.
Многие знают, что использование runtime reflection в jvm чревато ухудшением производительности.

Это происходит потому что, рефлексируя, виртуальная машина осмысляет весь говнокод, который засунул в неё программист. Постепенно приходит к мыслям вроде «а ведь я могла рассчитывать траектории полёта космических кораблей...». Фрустрация от обработки бесконечных CRUD-запросов приводит к депрессии и неминуемой потере трудоспособности.

Каждое использование TypeTag ставит под угрозу ментальное здоровье вашего рантайма.