# Понедельник 24 твита
Всем привет. Меня зовут Гафаров Назим @n_gafarov
Вы могли видеть меня в качестве докладчика на Яндексовых мероприят… twitter.com/i/web/status/1…
Короткий рассказ о себе.
В 2015 году я работал в стартапе, который делал "убийцу" Amazon Kindle для школьников. Ст… twitter.com/i/web/status/1…
8:57В Яндекс.Маркете я начал работу над "убийцей" Amazon - маркетплейсом "Беру", а точнее, над админкой для партнеров.… twitter.com/i/web/status/1…
8:58Слова благодарности друзьям за поддержку pic.twitter.com/B8kw7Hh7BG
9:40На этой неделе я планирую давать короткие полезные советы, которые можно быстро применить в своей работе. Поїхали.
9:40Как и при старте нового проекта, начнем с особенностей package.json
⬇️ Начнем
В блоке скриптов package.json не должно быть никаких платформо-зависимых команд. Например, оператор & в Windows Cmd… twitter.com/i/web/status/1…
10:31Кроме того, npm-run-all позволяет одной командой запускать несколько сценариев. Вместо:
npm run build:css && npm ru… twitter.com/i/web/status/1…
"test": "npm-run-all --parallel test:*"
"test:lint": "eslint '**/*.{ts,tsx}'"
"test:types": "tsc"
"test:unit": "rea… twitter.com/i/web/status/1…
Аудит безопасности пакетов должен стать частью CI/CD. Органично впишем в наш список команд:
"test:audit": "npm aud… twitter.com/i/web/status/1…
10:44Также имеет смысл добавить package.json свойство:
"private": true
Чтобы случайный npm publish не выкатил ваш код в… twitter.com/i/web/status/1…
14:38В старых проектах еще бывает полезно время от времени проверять package.json на неиспользуемые пакеты. В этом помог… twitter.com/i/web/status/1…
14:39package-lock.json
⬇️
Во-первых, имеет смысл приучить всех в команде пользоваться командой "npm ci" при установке зависимостей, а не "npm… twitter.com/i/web/status/1…
14:54В итоге npm install нужно использовать только при добавлении новых пакетов в проект.
Если вам надоели пул-реки с +2… twitter.com/i/web/status/1…
Чтобы npm install у всех разработчиков резолвил пакеты одинаково, нужно договориться, чтобы все сидели на одной вер… twitter.com/i/web/status/1…
14:56А так как лучше доверять машинам, а не людям, то есть смысл декларативно описать окружение с помощью… twitter.com/i/web/status/1…
14:57В package.json всегда имеет смысл указывать конкретные версии, особенно в dependencies секции. Указывая примерные ~… twitter.com/i/web/status/1…
15:17И, пожалуйста, никогда не используйте yarn в продакшене.
Yarn - это песочница, в которой тестируются самые безумные… twitter.com/i/web/status/1…
Yarn крутой, кто ж спорит. Но это не стандарт.
Возьмем например выборочное разрешение зависимостей:… twitter.com/i/web/status/1…
Во-первых, непонятно как resolutions работает для вложенных зависимостей? Никак: github.com/yarnpkg/yarn/i…
Во-вторых,… twitter.com/i/web/status/1…
Пока нормальные ребята думают над import-maps, чтобы механизм резовалва был единый для всех платформ: неважно брауз… twitter.com/i/web/status/1…
22:39Я достаточно старый, чтобы помнить времена, когда вокруг Io.js был такой же хайп, как вокруг yarn сейчас.
Io.js был… twitter.com/i/web/status/1…
Но используя yarn сегодня вы подписываетесь на то, чтобы быть вечным бета-тестером. В этом нет ничего плохого, но с… twitter.com/i/web/status/1…
22:41# Вторник 24 твита
Новый день - новая тема. Сегодня обсудим вопросы взаимодействия с бэкендом.
10:11Добрые слова поддержки от друзей на сегодня. pic.twitter.com/TcRSkTLTk9
10:12Начнем с BFF.
⬇️
4. Однако даже в этом случае вам, скорее всего, нужен будет Cloud DevOps.
10:22За 5$ вы получаете 10 млн. запр… twitter.com/i/web/status/1…
Идем дальше. Расскажу, что делать, если физрук оставлял вас после уроков и не давал пользоваться GraphQL.
⬇️
loginMethod(): Promise<L… twitter.com/i/web/status/1…
Подобная проблема описана в ишьюсе github.com/OpenAPITools/o…. Я так поним… twitter.com/i/web/status/1…
В итоге из Swagger-схемы вы получаете красивую документацию, типизированный сервисный слой для запросов к API и опц… twitter.com/i/web/status/1…
17:14GraphQL отлично зайдет если вы начинаете проект с нуля. В этом случае вы просто берете hasura.io и ув… twitter.com/i/web/status/1…
17:14# Среда 16 твитов
Прекрасный день, чтобы покинуть свой дворец и окунуться в пучину JavaScript-разработки.
9:56Сегодня обсудим управление состоянием. Если вы думали, что в предыдущие дни были неаргументированные набросы, то вы… twitter.com/i/web/status/1…
9:57Традиционные слова поддержки. На этот раз от благодарных подписчиков. pic.twitter.com/gdlSFkupsL
10:07Если серьезно, то преимущество редакса это иммутабельность. K.O.
Но вы платите огромную цену ради нее - бойлерплейт… twitter.com/i/web/status/1…
А… twitter.com/i/web/status/1…
Второе преимущество Redux - его дикая популярность. Расскажу, что делать, если в детстве трудовик оставался с вами… twitter.com/i/web/status/1…
12:01Благодаря повальной чипизации населения общий интеллектуальный уровень людей растет. Поэтому каждый год удовлетворе… twitter.com/i/web/status/1…
12:01Если же в 2021 году вы начинаете новый проект с Redux, то имеет смысл задуматься о своем предназначении в жизни. Ра… twitter.com/i/web/status/1…
12:01Ну а если вы начали новый проект с Redux-Saga, то имеет смысл сменить профессию.
12:01Так какой способ работы со слоем данных мне выбрать? Если посмотреть на stateofjs, то у вас всего два варианта:
1)… twitter.com/i/web/status/1…
С первым вариантом мы вчера определились, что GraphQL-бэкенд вам никто не даст. Поэтому остается один единственный… twitter.com/i/web/status/1…
12:18# Четверг 21 твит
Отличная вчера была аквадискотека, но во всем важна умеренность. Сегодня не будет никакой провокации. Давайте вместе определим темы:
9:30Традиционный обзор сентимента. Наблюдаем сильную поляризацию в обществе. pic.twitter.com/k0USMYIQwG
10:12Победило тестирование. Начнем с обсуждения того, из-за чего чаще всего возникают баги на фронте.
⬇️
С бэкендом определились. Идем дальше по пирамиде тестирования.
⬇️
Но… twitter.com/i/web/status/1…
Что взять для UI/E2e-тестов?
⬇️
Окей, а может лу… twitter.com/i/web/status/1…
В итоге идеальное тестирование это:
13:56# Пятница 32 твита
В продолжение вчерашней темы про тестирование. Есть вариант почти полностью отказаться от unit- и E2e-тестов, чтобы… twitter.com/i/web/status/1…
10:15Если все это использовать на максимум, то можно отказаться от кучи тестов и релизиться хоть по 20 раз в день. О люб… twitter.com/i/web/status/1…
10:15Новая тема - идеальное собеседование.
В Яндексе я был собеседующим программистом, т.е. проводил интервью и ставил о… twitter.com/i/web/status/1…
Именно в таком написании. Но мне… twitter.com/i/web/status/1…
Конечно от теоретических вопросов на собеседованиях не очень много пользы. Ведь продуктом жизнедеятельности програм… twitter.com/i/web/status/1…
13:28Это плохая задача, т.к. она проверяет знание… twitter.com/i/web/status/1…
[ {name: "a", value: 1}, {name:… twitter.com/i/web/status/1…
Ночной JS-TS-Flow срач?
17:15Чтобы понять насколько Flow превосходит TS достаточно взглянуть на этот код:
type User = string | undefined
const u… twitter.com/i/web/status/1…
i recently discovered the JSDoc comment form of TypeScript (typescriptlang.org/docs/handbook/…) and it is a goddamn revelation… twitter.com/i/web/status/1…
Даже сегодня такой подход находит сторонников среди лидеров мнений… twitter.com/i/web/status/1…
В итоге, выбира… twitter.com/i/web/status/1…
«Поддержать, надстроить и уничтожить» — фраза, которая, как было… twitter.com/i/web/status/1…
... чтобы описать их стратегию внедрения в отрасли программного обеспечения, использующего широко распространённые… twitter.com/i/web/status/1…
18:505. Заиграл ли новыми красками TypeScript-слоган «TS это всего лишь надстройка над JS»?
Поддержать, надстроить и уничтожить.
Поехали дальше. Как вы думаете, какой тип прописан в TS для аргумента val в Number.isFinite(val)?
Прежде чем ответи… twitter.com/i/web/status/1…
isFinite(val: unknown): boolean
Это для твой безопасности, сынок. Чтобы ты вмес… twitter.com/i/web/status/1…
Следующий пример чуть сложнее:
const robots = ["R2-D2", "BB-8"]
const isRobot = robots.includes(790)
TS запрещает… twitter.com/i/web/status/1…
19:55Ясно понятно. pic.twitter.com/KcgOm9XDKS
20:02string[] robots = { "R2-D2", "BB-8" };
int l… twitter.com/i/web/status/1…
Но я все равно не… twitter.com/i/web/status/1…
# Суббота 8 твитов
Идея для исследования. Обучить нейронку, которая по твоим взрослым фоткам определяет - ты это на детской фотография… twitter.com/i/web/status/1…
11:35Сложно придумать какую-нибудь тему на сегодня, помимо политики. По политике в РФ каждый может сделать собственные в… twitter.com/i/web/status/1…
14:55# Воскресенье 1 твит
Неделя подходит к концу. Надеюсь вам понравилось.
Если да, то подписывайтесь на меня тут @n_gafarov или пишите на… twitter.com/i/web/status/1…
# Ссылки
github.com
- https://github.com/yarnpkg/yarn/issues/4267
- https://github.com/OpenAPITools/openapi-generator/issues/4130
- https://github.com/puppeteer/puppeteer
- https://github.com/microsoft/playwright
- https://github.com/Microsoft/TypeScript/issues/10038#issuecomment-247676369
- https://github.com/Microsoft/TypeScript/issues/30239
other
- https://infinitered.github.io/solidarity/#/docs/options?id=cli-rules
- http://serverless.com/
- https://workers.cloudflare.com/
- https://mcs.mail.ru/
- https://openapi-generator.tech/docs/generators
- https://hasura.io/
- https://jestjs.io/docs/ru/snapshot-testing
- https://enzymejs.github.io/enzyme/docs/api/shallow.html
- https://leetcode.com/problems/powx-n/
- https://www.youtube.com/watch?v=swktXq5COtI
- https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html