dd if=/dev/stuff of=/dev/tg – Telegram
dd if=/dev/stuff of=/dev/tg
2.59K subscribers
348 photos
5 videos
7 files
563 links
Музыка: @randommusicilike

18+. По всем вопросам, кроме рекламы: @rsil_feedback_bot

По вопросам рекламы (внимательно читайте приветственное сообщение): @rsil_ads_bot
Download Telegram
Официальная реклама American Express, между прочим
Вышел TypeScript 3.2. Среди интересного — наконец-то починили типизацию для spread, добавили возможность подключать конфиг компилятора из node_modules и включили поддержку BigInt.
когда фронтендер считает иконки пидорскими, но стесняется об этом сказать
Реализовал сегодня на работе Tagless Final на TypeScript для работы с браузерным стораджем. А потом выкинул нахуй. Расскажу немного о контексте такого решения.

Сейчас на работе я пишу SDK, с помощью которого будут писать переиспользуемые модули — блоки бизнес-функциональности, которые можно подключать к любому (в теории) приложению как некие черные ящики, тем самым экономя бизнесу деньги на повторную разработку. В рамках этого SDK нужно реализовать слой персистенса, абстрагирующегося от некоего хранилища. Это может быть session storage, local storage, IndexedDB, WebSQL или вообще персист на сервер через REST. Я спроектировал это так, что модуль получает на вход абстрактную алгебру StorageAlgebra, у которой эффект синхронного или асинхронного вычисления вынесен в некую монаду M, о которой модуль знать ничего не знает до тех пор, пока его не запустят с конкретным инстансом нужного стораджа. По сути, мне пришлось реализовать паттерн Tagless Final для этого стораджа. В тайпскрипте, как в языке, где нет типов с дырками, это отдельная боль. И вот, вроде бы, счастье — тесты зелёные, можно подсовывать как синхронные, так и асинхронные алгебры, и всё будет работать…

Но есть нюанс. В рамках продвигаемой архитектуры приложений я требую, чтобы все работы с хранилищем и сетевыми запросами происходили в рамках redux-saga. Которые сами по себе асинхронные. И этот факт наглухо перечёркивает всю предполагаемую гибкость. Мы уже живём в асинхронном контексте, нет пути назад. Поэтому я выкинул весь код с TF, попутно избавив себя от необходимости объяснять его коллегам из вверенных мне команд, оставив в качестве единого для всех интерфейса пакет localForage.

Мораль: нельзя позволять себе терять виденье общей картины, углубляясь в столь приятные (но порой ненужные) технические детали.

Такие дела.
Было бы интересно увидеть детали реализации предыдущего поста (абстрагированные от бизнес-контекста)?
Подарок от замечательной @tlasol из @datstuff. Кто не в курсе — «магическая» константа, использующаяся в алгоритме быстрого извлечения обратного квадратного корня.
Москва с высоты необычайно красива, всё-таки.
Вы сказали, что девопс и прочее современное айти стоит на трёх китах — докер, кубернетис, опеншифт, — заметил президент. — Из всего этого, конечно, больше всего беспокоят контейнеры, это путь к деградации нации.
Forwarded from Токсичность и Гомотопия
Волшебная @tlasol выполнила мой заказ — формулу комбинатора неподвижной точки. Артефакт! :)
Снова рисую презентацию
Пришло СМС от налоговой, что с января ежемесячный платёж за патент на работу для иностранных граждан составит 5000 рублей. Было 4500. Это +11%. А теперь немного цифр.

Согласно данным МВД РФ, за январь-ноябрь было выдано 1.5 млн трудовых патентов. Путём нехитрой математики получаем, что в налоговую ежегодно будет поступать на 750 млн. руб. больше на ровном месте. И это если полагаться на официальные данные; реальные цифры, по оценкам независимых экспертов, раза в два-три выше. Выводы делайте сами.
Tweag I/O - Asterius GHC WebAssembly backendreaches TodoMVC
https://www.tweag.io/posts/2018-12-20-asterius-todomvc.html
Немного тайплевельной наркомании на TypeScript. Было бы интересно почитать, зачем это всё?