Многие недовольны тем что в 17 реакте нет новых фич, но для меня этот релиз очень важный, и вот почему
У нас на проекте есть оптимизация размера бандла — мы минифицируем всякое sed-ом (то что terser сам не умеет), но главным образом
Речь конечно идет только про продакшен билд, но тут, как в анекдоте, нюанс — у нас одни и те же артефакты используются как на проде так и на стейджингах (чтобы быть максимально похожим на прод). Получалось что дебажить ни на проде (что тоже бывает полезно) ни на стейджингах нормально нельзя. Не смертельно, но очень неприятно
Но теперь jsx-runtime фактически сам делает эту оптимизацию и наша больше не нужна. Победа!
https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
Пытливые могут ради интереса ознакомиться со спекой сормапов версии 3 (мне в свое время сильно помогла в понимании)
https://sourcemaps.info/spec.html
У нас на проекте есть оптимизация размера бандла — мы минифицируем всякое sed-ом (то что terser сам не умеет), но главным образом
React.createElement. И всё бы ничего, но из-за того что это просто find-replace по сути, это ломает sourcemaps (а разбираться как бы их переправить для такого кейса не было ни времени ни сил). Но выкидывать минификацию не хотелось ибо разбрасываться килобайтами — к низким индикаторам производительности. В итоге была патовая ситуацияРечь конечно идет только про продакшен билд, но тут, как в анекдоте, нюанс — у нас одни и те же артефакты используются как на проде так и на стейджингах (чтобы быть максимально похожим на прод). Получалось что дебажить ни на проде (что тоже бывает полезно) ни на стейджингах нормально нельзя. Не смертельно, но очень неприятно
Но теперь jsx-runtime фактически сам делает эту оптимизацию и наша больше не нужна. Победа!
https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
Пытливые могут ради интереса ознакомиться со спекой сормапов версии 3 (мне в свое время сильно помогла в понимании)
https://sourcemaps.info/spec.html
legacy.reactjs.org
Introducing the New JSX Transform – React Blog
This blog site has been archived. Go to react.dev/blog to see the recent posts. Although React 17 doesn’t contain new features, it will provide support for a new version of the JSX transform. In this post, we will describe what it is and how to try it. What’s…
Иногда, казалось бы, простой PR порождает интересные предложения, дискуссии и выявляет подводные камни. Однажды после code and learn я решил добавить в issue template ноды повершельную команду чтобы достать нужную инфу об ОСи. Звучит просто, да?
И вот прошло чуть больше года и PR наконец-то смерджили! (три дня назад)
https://github.com/nodejs/node/pull/30289
Конечно большее время заняло ожидание (когда я внесу правки по ревью, само ревью, обуждение и т.д.). Но там ^ 35 сообщений, порой немаленьких и довольно содержательных.
К примеру
Или например было предложение сделать вот так
Ну и конечно всякие мысли от мейнтейнеров на тему того какого характера большинство багов с которыми они сталкиваются и насколько полезна та или иная информация (к примеру https://github.com/nodejs/node/pull/30289#issuecomment-650772698)
В итоге я даже рад что это заняло столько времени ибо я многое узнал 🙂 (и потратил кучу времени других людей)
И вот прошло чуть больше года и PR наконец-то смерджили! (три дня назад)
https://github.com/nodejs/node/pull/30289
Конечно большее время заняло ожидание (когда я внесу правки по ревью, само ревью, обуждение и т.д.). Но там ^ 35 сообщений, порой немаленьких и довольно содержательных.
К примеру
cmd /c ver гораздо короче "$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })", но в нем нет битности системыИли например было предложение сделать вот так
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type". Не так коротко, но все еще лучше чем PowerShell-версия. Да вот только выяснилось что вывод systeminfo зависит от локали системы и findstr на не англоязычных виндах не найдет нужные строкиНу и конечно всякие мысли от мейнтейнеров на тему того какого характера большинство багов с которыми они сталкиваются и насколько полезна та или иная информация (к примеру https://github.com/nodejs/node/pull/30289#issuecomment-650772698)
В итоге я даже рад что это заняло столько времени ибо я многое узнал 🙂 (и потратил кучу времени других людей)
GitHub
doc: add Powershell oneliner to get Windows version by saitonakamura · Pull Request #30289 · nodejs/node
Checklist
documentation is changed or added
commit message follows commit guidelines
documentation is changed or added
commit message follows commit guidelines
Вторая часть advent of code 2020 прямо очень интересная! Чтобы не спойлерить тем кто еще решает, я напишу решение в комменте
Но если не собираетесь решать, прошу под кат (ах, извините тут не хабр)
Но если не собираетесь решать, прошу под кат (ах, извините тут не хабр)
Forwarded from Brodetskyi. Tech, VC, Startups
Давно присматривался к этому репо, но времени не было начать. И вот кто-то собрался решать
P.S. Это репост с другого канала, но я планирую как минимум отметиться там в коментах, а может что-то запостить и сюда
P.S. Это репост с другого канала, но я планирую как минимум отметиться там в коментах, а может что-то запостить и сюда
Forwarded from Wild Wild Web
Я тут наткнулся недавно на очень интересную подборку задач по TypeScript. Особенность этих задач в том, что их нужно решать используя только систему типов TypeScript.
То есть, все задачки, которые там есть, их решение должно происходить в compile-time, никакого кода на TypeScript или JavaScript, кроме, собственно, типов.
И я призадумался. А не сделать ли мне «марафон» постов, где я буду идти по порядку от легкого уровня к сложному и рассказывать о решении, как оно работает, почему и так далее. Как вы на это смотрите? Не будет ли часто по одному посту в день на одну задачу из этой подборки?
Я лично уже прошел почти половину, очень интересно. Можно это всё завернуть в формат более продвинутого изучения типов. Не писать же только интерфейсы, правда? 🙃
В общем, я думаю это отличная идея и с завтрашнего дня, я буду выкладывать сюда решения задач и рассказывать почему решение работает (если, конечно, мы не придём к обратному решению в комментариях). А пока, вы можете поиграться и сами 😎
https://github.com/type-challenges/type-challenges
То есть, все задачки, которые там есть, их решение должно происходить в compile-time, никакого кода на TypeScript или JavaScript, кроме, собственно, типов.
И я призадумался. А не сделать ли мне «марафон» постов, где я буду идти по порядку от легкого уровня к сложному и рассказывать о решении, как оно работает, почему и так далее. Как вы на это смотрите? Не будет ли часто по одному посту в день на одну задачу из этой подборки?
Я лично уже прошел почти половину, очень интересно. Можно это всё завернуть в формат более продвинутого изучения типов. Не писать же только интерфейсы, правда? 🙃
В общем, я думаю это отличная идея и с завтрашнего дня, я буду выкладывать сюда решения задач и рассказывать почему решение работает (если, конечно, мы не придём к обратному решению в комментариях). А пока, вы можете поиграться и сами 😎
https://github.com/type-challenges/type-challenges
GitHub
GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge
Collection of TypeScript type challenges with online judge - type-challenges/type-challenges
Давно не писал ибо деливерили огромный проект на работе, но вот наконец-то он в проде!
И TIL (today i learned, сегодня я узнал) что двойное подчеркивание это конвешн для тайпскриптовых тайпингов для scoped packages.
То есть тайпинги для
Не самый крутой конвеншн, по моему мнению, но с поиском понятнее https://www.typescriptlang.org/dt/search?search=babel
П.С. На самом деле это было вчера
И TIL (today i learned, сегодня я узнал) что двойное подчеркивание это конвешн для тайпскриптовых тайпингов для scoped packages.
То есть тайпинги для
babel-core будут @types/babel-core, а для @babel/core — @types/babel__coreНе самый крутой конвеншн, по моему мнению, но с поиском понятнее https://www.typescriptlang.org/dt/search?search=babel
П.С. На самом деле это было вчера
www.typescriptlang.org
Search for typed packages
Find npm packages that have type declarations, either bundled or on Definitely Typed.
Совершенно потрясающая история о том почему алгоритмическая сложность — это важно
https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/
Парсить 10мб жсона по 6 минут это надо уметь. Я ни виню здесь разрабов которые скорее всего кранчили это на 15-й чашке кофе с урывками на сон
А вот к Rockstar вопросы есть ибо воз и ныне там
Не представляю сколько CPU-часов было потрачено и сколько клавиатур сломано когда после этих 6 минут соединение падало
https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times-by-70/
Парсить 10мб жсона по 6 минут это надо уметь. Я ни виню здесь разрабов которые скорее всего кранчили это на 15-й чашке кофе с урывками на сон
А вот к Rockstar вопросы есть ибо воз и ныне там
Не представляю сколько CPU-часов было потрачено и сколько клавиатур сломано когда после этих 6 минут соединение падало
meh.
How I cut GTA Online loading times by 70%
GTA Online. Infamous for its slow loading times. Having picked up the game again to finish some of the newer heists I was shocked (/s) to discover that it still loads just as slow as the day it was re
Вчера начал эксперименты по монорепе с композитными проектами. Взял на примере либы для презентаций (спасибо @molefrog за https://github.com/molefrog/presa), которую я когда-то форкнул и смигрировал на TS
Получилось в целом нормально, но столкнулся с несколькими проблемами
1. Если использовать config inheritance (как кстати советуют в документации) то parcel не видит jsx настройку из tsconfig (а это критично для react 17)
Полагаю что parcel в принципе не резолвит базовый конфиг
Кстати parcel 2 пока не поддерживает новые tsconfig.jsx настройки (react-jsx и react-jsxdev), а жаль, я хотел попробовать react-fast-refresh
2. Ошибки в vscode расходятся с результатами tsc build --watch и вообще отзывчивость ошибок в редакторе страдает — меняются только после сохранения.
Вероятней всего это из-за инкрементальных билдов (а они обязательны для композитных проектов), но я пока не понял нормально ли это, или это баг или я что-то не так настроил
Если сталкивались с подобным — напишите в коментах плиз
3. Я не нашел способа включить d.ts в эмит. Не генерацию тайпингов, а именно d.ts файлы которые расширяют существующие тайпинги
Например именно таким способом типизируется тема в styled-components
То есть либа для презентаций имеет готовую тему которую можно расширить, но как сделать так чтобы вместе с тайпингами для самой либы еще приехала глобальная d.ts про тему — непонятно
4. Фиксить ошибки вообще сложно ибо самые базовые будут сверху, а их надо фиксить в первую очередь (ведь они влияют на ошибки в зависимых проектах)
В итоге занимался увлекательным скроллингом
Итого - работает, и довольно прикольно! Следующий шаг будет интегрировать пакеты из этой монорепы в другую чтобы сделать аналог npm link
Получилось в целом нормально, но столкнулся с несколькими проблемами
1. Если использовать config inheritance (как кстати советуют в документации) то parcel не видит jsx настройку из tsconfig (а это критично для react 17)
Полагаю что parcel в принципе не резолвит базовый конфиг
Кстати parcel 2 пока не поддерживает новые tsconfig.jsx настройки (react-jsx и react-jsxdev), а жаль, я хотел попробовать react-fast-refresh
2. Ошибки в vscode расходятся с результатами tsc build --watch и вообще отзывчивость ошибок в редакторе страдает — меняются только после сохранения.
Вероятней всего это из-за инкрементальных билдов (а они обязательны для композитных проектов), но я пока не понял нормально ли это, или это баг или я что-то не так настроил
Если сталкивались с подобным — напишите в коментах плиз
3. Я не нашел способа включить d.ts в эмит. Не генерацию тайпингов, а именно d.ts файлы которые расширяют существующие тайпинги
Например именно таким способом типизируется тема в styled-components
То есть либа для презентаций имеет готовую тему которую можно расширить, но как сделать так чтобы вместе с тайпингами для самой либы еще приехала глобальная d.ts про тему — непонятно
4. Фиксить ошибки вообще сложно ибо самые базовые будут сверху, а их надо фиксить в первую очередь (ведь они влияют на ошибки в зависимых проектах)
В итоге занимался увлекательным скроллингом
Итого - работает, и довольно прикольно! Следующий шаг будет интегрировать пакеты из этой монорепы в другую чтобы сделать аналог npm link
www.typescriptlang.org
Documentation - Project References
How to split up a large TypeScript project
В IT, нанимаемость для компании часто путают с нанимаемостью для разработчика (тестера/дизайнера/etc.). Это особенно явно проявляется для не мейнстримных технологий.
Скажем вот ты фронт, любишь ФП и выразительные системы типов и хочешь писать на ReasonML (ReScript) или Elm
И ты думаешь : "А как работу то искать? Заходишь на ХХ и там один JS да TS.". Все одновременно так и не так: да, js/ts занимает львиную долю рынка, но рынок на самом деле ОГРОМНЫЙ.
И даже если какая-то технология имеет 1% или даже меньше, это все равно дофига компаний.
А еще стоит помнить что разрабы (и большинство других IT спецов) все еще в дефиците и это еще сильнее проявляется для немейнстрима: компаниям тяжелее нанимать разрабов на Ризоне потому что их мало на рынке!
И получается что для компании это риск (найм тяжелее), но для разраба не особо (помните прошлогоднюю историю про COBOL?).
Также мой собственный опыт показывает что компании которые используют нишевые технологии в среднем лучше по условиям чем типичное те что на стеке react-redux-ts
Лучше в плане, скажем, продукта, команды, задач, зп и т.д. Конечно не сразу во всем и не все до единой, но всё равно.
Так что смена технологии на более нишевую может дать более приятный опыт найма (чем искать серебренную иголку в стоге сена)
Но да, это субъективно
Скажем вот ты фронт, любишь ФП и выразительные системы типов и хочешь писать на ReasonML (ReScript) или Elm
И ты думаешь : "А как работу то искать? Заходишь на ХХ и там один JS да TS.". Все одновременно так и не так: да, js/ts занимает львиную долю рынка, но рынок на самом деле ОГРОМНЫЙ.
И даже если какая-то технология имеет 1% или даже меньше, это все равно дофига компаний.
А еще стоит помнить что разрабы (и большинство других IT спецов) все еще в дефиците и это еще сильнее проявляется для немейнстрима: компаниям тяжелее нанимать разрабов на Ризоне потому что их мало на рынке!
И получается что для компании это риск (найм тяжелее), но для разраба не особо (помните прошлогоднюю историю про COBOL?).
Также мой собственный опыт показывает что компании которые используют нишевые технологии в среднем лучше по условиям чем типичное те что на стеке react-redux-ts
Лучше в плане, скажем, продукта, команды, задач, зп и т.д. Конечно не сразу во всем и не все до единой, но всё равно.
Так что смена технологии на более нишевую может дать более приятный опыт найма (чем искать серебренную иголку в стоге сена)
Но да, это субъективно
Несмотря на что кода там кот наплакал, у меня ушло часа 4 на то чтобы найти место где надо было что-то поменять
Вынес одну важную мысль:
Скорость с которой вы можете экспериментировать максимально критична для дебага кода, с которым вы еще не знакомы.
И важнее чем качество дебага как такого.
Дебаг как в IDE может прям реально помогать, но если от F5 до брейкпоинта проходит секунд 15, а увидеть что выведет console.log я могу за одну, я почти всегда выберу console.log
Залогирую то и сё, пойму что уже слишком далеко по стеку (данные уже неправильные) и просто запущу заново (с другими логами)
Вместо того чтобы гадать куда же поставить брейкпоинт, а потом проваливаться в имплементацию все глубже, потому что не хочется пропустить место где есть баг, а перезапускать долго
Вынес одну важную мысль:
Скорость с которой вы можете экспериментировать максимально критична для дебага кода, с которым вы еще не знакомы.
И важнее чем качество дебага как такого.
Дебаг как в IDE может прям реально помогать, но если от F5 до брейкпоинта проходит секунд 15, а увидеть что выведет console.log я могу за одну, я почти всегда выберу console.log
Залогирую то и сё, пойму что уже слишком далеко по стеку (данные уже неправильные) и просто запущу заново (с другими логами)
Вместо того чтобы гадать куда же поставить брейкпоинт, а потом проваливаться в имплементацию все глубже, потому что не хочется пропустить место где есть баг, а перезапускать долго
Внезапно вещаю на proconf http://youtube.com/watch?v=X8sioTxbYJM&ab_channel=ProConf
YouTube
#95 HollyJS Moscow 2020
Подписывайтесь на гостя: https://xn--r1a.website/typesafesound
Доклады по порядку:
Илья Лесик — Как создать мультиплатформенную дизайн-систему на React (https://youtu.be/sK0zDRaeDXE)
Михаил Башуров — Преломление реальности: Динамическая валидация статическими типами…
Доклады по порядку:
Илья Лесик — Как создать мультиплатформенную дизайн-систему на React (https://youtu.be/sK0zDRaeDXE)
Михаил Башуров — Преломление реальности: Динамическая валидация статическими типами…
Всякое с доклада про технический долг на secon
Офисная политика - https://podlodka.io/202
Переговоры - https://podlodka.io/166
Про кодмоды (англ) - https://youtu.be/PqeX2ElQOlQ
Офисная политика - https://podlodka.io/202
Переговоры - https://podlodka.io/166
Про кодмоды (англ) - https://youtu.be/PqeX2ElQOlQ
Я на юбилейном выпуске проконф https://www.youtube.com/watch?v=zYh4gkIaJ9E
YouTube
#100 [SPECIAL]
Доклады от гостей:
Аня - React fwdays'21 • Елена Жукова • Опасный React ( https://youtu.be/ze4Qve1azA0 )
Сергей - One Hacker Way Rational alternative of Agile - Erik Meijer ( https://youtu.be/2u0sNRO-QKQ )
Кирилл - Declarative UI Patterns ( https://you…
Аня - React fwdays'21 • Елена Жукова • Опасный React ( https://youtu.be/ze4Qve1azA0 )
Сергей - One Hacker Way Rational alternative of Agile - Erik Meijer ( https://youtu.be/2u0sNRO-QKQ )
Кирилл - Declarative UI Patterns ( https://you…
Недавно заглягнул в роадмапу тс и обнаружил совершенно пострясающую вещь которая уже в бете 4.4
https://devblogs.microsoft.com/typescript/announcing-typescript-4-4-beta/#cfa-aliased-conditions
Теперь информация о проверках который влияют на control flow (самое банальное — проверить на null), не теряются при выделении булевой переменной
То есть теперь можно писать
и все будет правильно работать
до этого я видел что у многих это вызывало недоумение когда они работали с type guards
теперь страданий стало на чуточку меньше
https://devblogs.microsoft.com/typescript/announcing-typescript-4-4-beta/#cfa-aliased-conditions
Теперь информация о проверках который влияют на control flow (самое банальное — проверить на null), не теряются при выделении булевой переменной
То есть теперь можно писать
const notEmpty = x != null
if (notEmpty) {
x.toString()
}
и все будет правильно работать
до этого я видел что у многих это вызывало недоумение когда они работали с type guards
теперь страданий стало на чуточку меньше
Microsoft News
Announcing TypeScript 4.4 Beta
Today we are excited to announce the beta release of TypeScript 4.4! To get started using the beta, you can get it through NuGet, or use npm with the following command: npm install typescript@beta You can also get editor support by Downloading for Visual…
В 15:00 (по Москве) собираемся сделать экспериментальный стрим с @andreypopp — решаем задачки на Coq из Software Foundations
https://softwarefoundations.cis.upenn.edu/
https://softwarefoundations.cis.upenn.edu/
Еще вчера переустановил винду (переезжал на NVMe SSD) и решил попробовать winget в качестве пакетного менеджера (до этого пользовался chocolatey)
Он меня прям очень приятно порадовал, там были почти все пакеты что были нужны, свежих версий и тд
Ставить правда его сейчас не больно удобно — надо либо переключаться на Insiders Preview, либо просто инсталлер запускать из релизов гитхаба (но тогда обновления точно также придется ставить)
Но в остальном очень достойно, меня прям радуют девтулы микрософта — новый терминал, каскадиа код, power toys
https://github.com/microsoft/winget-cli
Он меня прям очень приятно порадовал, там были почти все пакеты что были нужны, свежих версий и тд
Ставить правда его сейчас не больно удобно — надо либо переключаться на Insiders Preview, либо просто инсталлер запускать из релизов гитхаба (но тогда обновления точно также придется ставить)
Но в остальном очень достойно, меня прям радуют девтулы микрософта — новый терминал, каскадиа код, power toys
https://github.com/microsoft/winget-cli
GitHub
GitHub - microsoft/winget-cli: WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell…
WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell modules, and a COM (Component Object Model) API (Application Programming Interface). - micros...
В прошлый раз изучали Coq, в эту субботу в 17 по мск (да, через 15 минут, я не умею в анонсы) будем решать задачки на литкоде с @andreypopp
https://youtu.be/_GmnQTtKJqo
P.S. Если задачки не привлекают то знакомые c ufostation делают стрим в 17:30, будут писать сортируемый драг н дроп список на реакте
https://xn--r1a.website/ufostation/637
https://youtu.be/_GmnQTtKJqo
P.S. Если задачки не привлекают то знакомые c ufostation делают стрим в 17:30, будут писать сортируемый драг н дроп список на реакте
https://xn--r1a.website/ufostation/637
YouTube
Мы бы не прошли в гугл: решаем leetcode с @andreypopp