kamyshev.code
2.15K subscribers
40 photos
565 links
Архитектура, код, софт-скиллы и всё остальное. Вопросы, пожелания, комментарии — @igorkamyshev

https://kamyshev.me
Download Telegram
В "Идеальном программисте" дядя Боб рассказывает о концепции "ката". Упражнения для разработчиков, которые позволяют натренировать пальцы на решения простых повседневных задач.

Хороший ресурс с набором таких упражнений по JShttp://es6katas.org/

#идеальный_программист #js
Часто сталкиваюсь с тем, что свеже-обращенные разработчики считают Redux какой-то магией и отказываются понимать, как он работает. Убежден, что единственный способ понять что-то — сделать это руками.

Отличная статья по теме:

“Изучаем Redux на примере создания мини-Redux” @NTolochny https://medium.com/devschacht/jakob-lind-learn-redux-by-coding-a-mini-redux-d1a58e830514

#js
При разработке React-приложений почти всегда используют Redux.

Но писать редьюсеры — большая неприятность. Куча шаблонного кода, страдает читаемость. Недавно открыл для себя библиотеку, которая полностью решает эту проблему.

https://github.com/atomixinteractions/redux-symbiote

Симбиот — функция принимающая стейт, и пейлоад экшена, возвращающая новый стейт. На выходе получаем набор экшенов и редьюсеров, которые можно использовать как обычно. Удобно!

#js
По долгу службы, в скором времени буду строить довольно крупное приложение на NodeJS.

На этой неделе написал технический прототип и познал всю боль с Express. Неудобно, нужно много написать самому. Подумал, что нужно что-то другое. И как раз на митапе несколько дней назад добрый человек посоветовал посмотреть на Nest.js.

И оно выглядит прямо хорошо!

Особенно, меня, как большого любителя TypeScript, порадовала их дружба.

Всем, кто строит хоть сколько-нибудь большие приложения на NodeJS рекомендую посмотреть на это решение. Возможно, оно подойдёт и вам.

https://docs.nestjs.com

#js #ts
​​Исследуя GitHub

В функциональном программировании есть удобная концепция Option. Это абстракция над переменной, которой может и не быть (null, undefined, etc.). Она позволяет работать с такими значениями как с коллекцией (пустой, или из одного элемента).

Было:
const parsedInput = !!nullableVar
? parseInt(nullableVar) + 12
: 1

calculate(parsedInput)


Стало:
const parsedInput = optionInput
.map(v => parseInt(v))
.map(v => v + 12)
.getOrElse(1)

calculate(parsedInput)


Теперь представьте, что таких преобразований не одно, а много.

Надавно нашел бибилиотеку для JavaScript/TypeScript, реализующую эту Option.

https://github.com/bcherny/tsoption

#js #ts #fp
Конфигурация приложений — один из самых важных аспектов разработки. Это место, где постоянно происходят утечки секретных данных, тормозится процесс внедрения непрерывной доставки, случаются сложно отлавливаемые рантайм‑ошибки. Забота об этом — необходимость при разработке любого приложения.

Написал небольшую заметку — как правильно внедрять параметры конфигурации в приложение, управлять ими в разных окружениях и не страдать.

Конфигурация Node.js приложений

К Node.js относится только предпоследний абзац, так что читать можно и людям из других технологий.

#удобство_разработки #js
Deno

На HolyJS слушал доклад про Deno. Это был не очень хороший доклад про крутую технологию от интересного человека.

Deno — это рантайм для TypeScript (можно запускать и JavaScript), который должен стать лучшей версией Node.js.

Три ключевых приемущества:
+ распределенное хранилище пакетов — любая библиотека импортируется просто по URL;
+ безопасность — по умолчанию у приложения нет доступа до важных штук (сеть, диск, устройства) и их нужно выдавать явно;
+ поддержка TypeScript из коробки.

Технология еще совсем сырая — использовать ее в реальных приложениях не стоит. Но осенью обещают стабильный релиз.

Тематические материалы:
+ Deno on GitHub
+ Распаковываем фреймворк
+ Deno — новый Node.js?

Когда выложат запись доклада уже не будет смысла его смотреть, поэтому — просто почитайте о Deno. Мне кажется, эта штука может стать очень популярной.

#js
Опасное место

По моему опыту, больше всего ошибок появляется в местах, где значения может не быть.

Многие языки (привет, TypeScript) не очень хорошо умеют сигнализировать о возможном отсутствии значения. Решение — явно указывать это в коде.

Option — структура данных, которая хранит такие значения и позволяет работать с ними абсолютно безопасно. В некоторых языках они встроены, в других — нужно использовать сторонние библиотеки.

Стандарт Option включает в себя многое, что зачастую не нужно в реальных приложениях. А для фронтенда важен каждый байт. Поэтому я сделал минималистичную реализацию для TS/JSnanoption (220 байт).

Почитайте, как использовать Option в вашем языке и попробуйте.

#проектирование #js
Я люблю JavaScript, люблю Node.js. Но иногда возникают трудности связанные с органичениями платформы.

Недавно делал прототип приложения для изучения английского языка. Внутри нужно было обрабатывать натуральный язык: разбивать текст на слова, приводить их к нормальной форме, исправлять опечатки. В npm есть прекрасная библиотека для этой задачи — compromise.

Кейс: воркер-треды

#js
Готовлю доклад про yarn@berry, буду делится с вами некоторыми заметками-черновиками.

Этот менеджер пакетов хранит все зависимости прямо в репозитории, в виде архивов. А мир JS-зависимостей прикрасен и удивителен. Некоторые архивы весят больше 100MB, такие большие файлы нельзя грузить на GitHub (про другие сервисы не знаю) через Git. Это очень неудобно, и единственный выход, который я нашел — хранить такие файл в Git Large File Storage.

Вот так удобство прорывного инструмента разбивается о криворукость разработчиков.

#js
На прошлой неделе писал про мои заметки с быстрыми решениями, добавил туда новую напоминалку — про JS-функцию, которая типографирует русские тексты.

https://www.notion.so/kamyshev/036b55da6eb44540b941d66c07e0857b

#js