Реализовал сегодня на работе Tagless Final на TypeScript для работы с браузерным стораджем. А потом выкинул нахуй. Расскажу немного о контексте такого решения.
Сейчас на работе я пишу SDK, с помощью которого будут писать переиспользуемые модули — блоки бизнес-функциональности, которые можно подключать к любому (в теории) приложению как некие черные ящики, тем самым экономя бизнесу деньги на повторную разработку. В рамках этого SDK нужно реализовать слой персистенса, абстрагирующегося от некоего хранилища. Это может быть session storage, local storage, IndexedDB, WebSQL или вообще персист на сервер через REST. Я спроектировал это так, что модуль получает на вход абстрактную алгебру
Но есть нюанс. В рамках продвигаемой архитектуры приложений я требую, чтобы все работы с хранилищем и сетевыми запросами происходили в рамках
Мораль: нельзя позволять себе терять виденье общей картины, углубляясь в столь приятные (но порой ненужные) технические детали.
Такие дела.
Сейчас на работе я пишу SDK, с помощью которого будут писать переиспользуемые модули — блоки бизнес-функциональности, которые можно подключать к любому (в теории) приложению как некие черные ящики, тем самым экономя бизнесу деньги на повторную разработку. В рамках этого SDK нужно реализовать слой персистенса, абстрагирующегося от некоего хранилища. Это может быть session storage, local storage, IndexedDB, WebSQL или вообще персист на сервер через REST. Я спроектировал это так, что модуль получает на вход абстрактную алгебру
StorageAlgebra, у которой эффект синхронного или асинхронного вычисления вынесен в некую монаду M, о которой модуль знать ничего не знает до тех пор, пока его не запустят с конкретным инстансом нужного стораджа. По сути, мне пришлось реализовать паттерн Tagless Final для этого стораджа. В тайпскрипте, как в языке, где нет типов с дырками, это отдельная боль. И вот, вроде бы, счастье — тесты зелёные, можно подсовывать как синхронные, так и асинхронные алгебры, и всё будет работать…Но есть нюанс. В рамках продвигаемой архитектуры приложений я требую, чтобы все работы с хранилищем и сетевыми запросами происходили в рамках
redux-saga. Которые сами по себе асинхронные. И этот факт наглухо перечёркивает всю предполагаемую гибкость. Мы уже живём в асинхронном контексте, нет пути назад. Поэтому я выкинул весь код с TF, попутно избавив себя от необходимости объяснять его коллегам из вверенных мне команд, оставив в качестве единого для всех интерфейса пакет localForage.Мораль: нельзя позволять себе терять виденье общей картины, углубляясь в столь приятные (но порой ненужные) технические детали.
Такие дела.
Было бы интересно увидеть детали реализации предыдущего поста (абстрагированные от бизнес-контекста)?
Вы сказали, что девопс и прочее современное айти стоит на трёх китах — докер, кубернетис, опеншифт, — заметил президент. — Из всего этого, конечно, больше всего беспокоят контейнеры, это путь к деградации нации.
Forwarded from Токсичность и Гомотопия
Волшебная @tlasol выполнила мой заказ — формулу комбинатора неподвижной точки. Артефакт! :)
Пришло СМС от налоговой, что с января ежемесячный платёж за патент на работу для иностранных граждан составит 5000 рублей. Было 4500. Это +11%. А теперь немного цифр.
Согласно данным МВД РФ, за январь-ноябрь было выдано 1.5 млн трудовых патентов. Путём нехитрой математики получаем, что в налоговую ежегодно будет поступать на 750 млн. руб. больше на ровном месте. И это если полагаться на официальные данные; реальные цифры, по оценкам независимых экспертов, раза в два-три выше. Выводы делайте сами.
Согласно данным МВД РФ, за январь-ноябрь было выдано 1.5 млн трудовых патентов. Путём нехитрой математики получаем, что в налоговую ежегодно будет поступать на 750 млн. руб. больше на ровном месте. И это если полагаться на официальные данные; реальные цифры, по оценкам независимых экспертов, раза в два-три выше. Выводы делайте сами.
Tweag I/O - Asterius GHC WebAssembly backendreaches TodoMVC
https://www.tweag.io/posts/2018-12-20-asterius-todomvc.html
https://www.tweag.io/posts/2018-12-20-asterius-todomvc.html
Ну что ж, я описал то, что происходило на скриншоте выше, в Телеграфе. Про сам тайплевел в TypeScript сказать могу немного — всё-таки это достаточно ограниченный язык с точки зрения теории типов. Но кое-что в нём всё-таки можно сделать, и я стараюсь выжать из него все соки.
P.S. За последнюю неделю игр с типами мне трижды удавалось заставлять компилятор tsc вылетать с Out Of Memory exception :)
P.S. За последнюю неделю игр с типами мне трижды удавалось заставлять компилятор tsc вылетать с Out Of Memory exception :)
Telegraph
Мой подход к модульной системе React+Redux приложений
Итак, немного про ту типизированную магию в TypeScript, которой я дразнился постом выше. Сейчас по работе для заказчика я пишу SDK, позволяющий создавать и подключать некие модули — части React+Redux приложения, которые могут как-либо между собой взаимодействовать.…
Всех с наступающим (а кое-кто и с наступившим) Новым Годом! Пусть код будет чистым, тесты зелёные, а пользователи счастливые! И отдельное спасибо тем, кто в эту ночь дежурит, поддерживает, деплоит (бррр). Всем хороших праздников! 🎉
Я давно отстаиваю убеждения, что для программиста крайне важно заниматься чем-либо помимо работы. Постоянное зацикливание на работе (даже если вы пытаетесь убедить себя, что для вас кодинг — это хобби, а не работа) быстро приводит к выгоранию. По крайней мере, к таким выводам я прихожу, наблюдая за собой, друзьями, коллегами, техническими лидерами разных сообществ.
Важно давать мозгу новые задачи, которые будут переключать контекст. Особенно круто получается, когда эти задачи из какой-либо творческой области — рисование, масштабная миниатюра, скульптура, пение, музыка. Профит, на самом деле, огромный — вы и отвлекаетесь от основных рабочих задач, переводя их обработку в более эффективный (зачастую инсайтный) фоновый режим, и познаёте новое, расширяя свой кругозор, и даёте новую точку выхода своему творческому началу.
Я вчера стоял в «Леонардо», выбирая карандаши для графики. Ко мне внезапно обратилась девчушка лет 16-18, спросив совета по выбору типа красок для начинающих — она не могла выбрать из акварели, гуаши и акрила. Я в итоге ей рассказал еще и о темпере, и о техниках работы всеми этими красками, и дал советы по выбору конкретных палитр разных производителей. При этом я не являюсь хоть сколь-нибудь умелым рисовальщиком (слово «художник» по отношению к себе мне даже стыдно употреблять), но обширный багаж знаний выручил. В итоге я получил заряд положительных эмоций от общения с благодарным слушателем и собеседником, а девушка смогла сделать выбор.
К чему я это всё. Расскажите, есть ли у вас какое-либо хобби, помимо программирования?
Важно давать мозгу новые задачи, которые будут переключать контекст. Особенно круто получается, когда эти задачи из какой-либо творческой области — рисование, масштабная миниатюра, скульптура, пение, музыка. Профит, на самом деле, огромный — вы и отвлекаетесь от основных рабочих задач, переводя их обработку в более эффективный (зачастую инсайтный) фоновый режим, и познаёте новое, расширяя свой кругозор, и даёте новую точку выхода своему творческому началу.
Я вчера стоял в «Леонардо», выбирая карандаши для графики. Ко мне внезапно обратилась девчушка лет 16-18, спросив совета по выбору типа красок для начинающих — она не могла выбрать из акварели, гуаши и акрила. Я в итоге ей рассказал еще и о темпере, и о техниках работы всеми этими красками, и дал советы по выбору конкретных палитр разных производителей. При этом я не являюсь хоть сколь-нибудь умелым рисовальщиком (слово «художник» по отношению к себе мне даже стыдно употреблять), но обширный багаж знаний выручил. В итоге я получил заряд положительных эмоций от общения с благодарным слушателем и собеседником, а девушка смогла сделать выбор.
К чему я это всё. Расскажите, есть ли у вас какое-либо хобби, помимо программирования?
Есть ли у вас творческое хобби, помимо программирования?
Anonymous Poll
18%
Рисование
46%
Игра на музыкальных инструментах
1%
Лепка: посуда, скульптура
3%
Оригами, бумажное моделирование, бумажная скульптура
2%
Масштабный стендовый моделизм
5%
Пение, читка
7%
Писательское ремесло
10%
Ручной труд: ковка, работа с кожей, тканью, деревом
4%
Танцы
3%
Театр и актёрское ремесло
Скрафтил прототип подставки под маркеры/линеры. В рабочем режиме обеспечивает наклон в 12° для удобства доставания, а в режиме хранения стекается с другими такими же и становится строго горизонтальной. Как бы это обкатать на живучесть идеи для бизнеса?..