Давно не писал ибо деливерили огромный проект на работе, но вот наконец-то он в проде!
И 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://www.tg-me.com/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://www.tg-me.com/ufostation/637
https://youtu.be/_GmnQTtKJqo
P.S. Если задачки не привлекают то знакомые c ufostation делают стрим в 17:30, будут писать сортируемый драг н дроп список на реакте
https://www.tg-me.com/ufostation/637
YouTube
Мы бы не прошли в гугл: решаем leetcode с @andreypopp
Не могу сказать что удовлетворен стримом — кое как решили медиум, а хард и вовсе бросили под конец
Если вам было бы интересно что увидеть что-то конкретно, например стрим по реакту (как на @ufostation) или например по rescript — напишите в коментах
Если вам было бы интересно что увидеть что-то конкретно, например стрим по реакту (как на @ufostation) или например по rescript — напишите в коментах
Сегодня в 19 по мск опять приду на ProConf (видеокаст где обозревают конференции), будем обсуждать Frontend Conf 2020
https://www.youtube.com/watch?v=Vh_WkUzno3k
https://www.youtube.com/watch?v=Vh_WkUzno3k
YouTube
#104 Frontend Conf 2020
Доклады:
Core Web Vitals - what are they and why do they matter / Martin Splitt ( https://youtu.be/6wBUPnnXsDI )
Frontend Security 2020: о чем вы хотели бы забыть, но не можете / Татьяна Новикова ( https://youtu.be/zbEArk98crU )
Icon. Оверинжиниринг или…
Core Web Vitals - what are they and why do they matter / Martin Splitt ( https://youtu.be/6wBUPnnXsDI )
Frontend Security 2020: о чем вы хотели бы забыть, но не можете / Татьяна Новикова ( https://youtu.be/zbEArk98crU )
Icon. Оверинжиниринг или…
выкатили ТС 4.4, про который я недавно писал https://www.tg-me.com/typesafesound/34
Telegram
Typesafe & Sound
Недавно заглягнул в роадмапу тс и обнаружил совершенно пострясающую вещь которая уже в бете 4.4
https://devblogs.microsoft.com/typescript/announcing-typescript-4-4-beta/#cfa-aliased-conditions
Теперь информация о проверках который влияют на control flow (самое…
https://devblogs.microsoft.com/typescript/announcing-typescript-4-4-beta/#cfa-aliased-conditions
Теперь информация о проверках который влияют на control flow (самое…
Forwarded from Wild Wild Web
🎉 Релиз TypeScript 4.4 🎉
Вы можете подумать, а чего я тут фейерверки устраиваю? А потому что они таки улучшили то, с чем я уже довольно долго воюю. Надеюсь, они и дальше будут улучшать эти моменты. А какие именно, давайте обсудим в комментариях позже 🙂
Вчера команда TypeScript выпустила новую версию компилятора, в которой есть несколько интересных мест. Давайте подчеркнём самые интересные, по моему мнению:
- Улучшили Control Flow Analysis. Теперь, так называемые type guards, можно выносить в отдельные переменные и TypeScript не потеряет эту информацию по пути. Например, вы хотите проверить что что-то строка const isString = typeof someParam === 'string' и дальше вы можете писать просто if(isString) {}, TypeScript такое скушает (раньше это было ошибкой компиляции). И таких примеров побольше, можете почитать у них в посте.
- Все catch блоки по умолчанию приводятся к unknown типу (за флагом strict). Unknown тип это более безопасный вариант неизвестного типа, по сравнению с any. Я об этих типах, как раз, недавно писал. С этим релизом, TypeScript будет ошибки в catch блоках неявно приводить к unknown. И вам, собственно, нужно будет проверить что ошибка это та ошибка, которую вы ожидаете или нет.
- С этим релизом добавилась возможность иметь "inlay hints". Я с таким часто встречаюсь при разработке на Rust и, если честно, меня это немного бесит. Но, знаю людей, которым это очень даже заходит. Речь идёт о том, что в IDE у вас будут добавляться имена параметров к вашим аргументам или выведенный тип возврата функции будет добавлен как "inlay hint" возле вашей функции и так далее. Насколько я знаю, такое есть давно в Intelliji и им активно пользуются. А в этом релизе они добавили это на уровне компилятора.
Все остальные моменты, по моему мнению, не такие уж и большие, но, безусловно, интересные и для кого-то могут оказаться нововведением "вовремя". Вы можете почитать более подробно об изменениях в этой версии в их блог посте.
Вы можете подумать, а чего я тут фейерверки устраиваю? А потому что они таки улучшили то, с чем я уже довольно долго воюю. Надеюсь, они и дальше будут улучшать эти моменты. А какие именно, давайте обсудим в комментариях позже 🙂
Вчера команда TypeScript выпустила новую версию компилятора, в которой есть несколько интересных мест. Давайте подчеркнём самые интересные, по моему мнению:
- Улучшили Control Flow Analysis. Теперь, так называемые type guards, можно выносить в отдельные переменные и TypeScript не потеряет эту информацию по пути. Например, вы хотите проверить что что-то строка const isString = typeof someParam === 'string' и дальше вы можете писать просто if(isString) {}, TypeScript такое скушает (раньше это было ошибкой компиляции). И таких примеров побольше, можете почитать у них в посте.
- Все catch блоки по умолчанию приводятся к unknown типу (за флагом strict). Unknown тип это более безопасный вариант неизвестного типа, по сравнению с any. Я об этих типах, как раз, недавно писал. С этим релизом, TypeScript будет ошибки в catch блоках неявно приводить к unknown. И вам, собственно, нужно будет проверить что ошибка это та ошибка, которую вы ожидаете или нет.
- С этим релизом добавилась возможность иметь "inlay hints". Я с таким часто встречаюсь при разработке на Rust и, если честно, меня это немного бесит. Но, знаю людей, которым это очень даже заходит. Речь идёт о том, что в IDE у вас будут добавляться имена параметров к вашим аргументам или выведенный тип возврата функции будет добавлен как "inlay hint" возле вашей функции и так далее. Насколько я знаю, такое есть давно в Intelliji и им активно пользуются. А в этом релизе они добавили это на уровне компилятора.
Все остальные моменты, по моему мнению, не такие уж и большие, но, безусловно, интересные и для кого-то могут оказаться нововведением "вовремя". Вы можете почитать более подробно об изменениях в этой версии в их блог посте.
Microsoft News
Announcing TypeScript 4.4
Today we’re excited to announce the availability of TypeScript 4.4! If you haven’t heard of TypeScript yet, it’s a language that builds on JavaScript by adding syntax for static types. Tools like the TypeScript compiler just erase those types, leaving you…
Давно сюда ничего не писал потому что на последние несколько месяцев активно погрузился в 3д разработку на js: threejs, react-three-fiber, webxr и иже с ними: я теперь возглавил разработку вебного VR интерфейса для нашего сервиса.
R3F, он же react-three-fiber это супер клевая идея, реакт рендерер который практически без оверхеда, засчет динамической природы js транслирует jsx (только с дргуими тэгами) в объекты three js (императивная библиотека для 3д в js)
выглядит примерно вот так
Раньше когда нужен был ui на канвасе то обычно не заморачивались и рисовали html поверх канваса. Но с VR есть одна интересная особенность, в immersive session (когда ты находишься в 3д пространстве в очках), единственное что доступно это webgl context, dom там нет (точнее есть, но не визуально). И соответсвенно весь ui надо рисовать внутри, чего до этого мало кто делал, поэтому я залез с головой в r3f экосистему (сейчас я кстати мейнтенер https://github.com/pmndrs/react-three-flex)
Мы пишем свои компоненты для кнопок, текстовых инпутов, скролла и тд, потом скорее всего вынесем в опенсорс, короче вот как-то так
R3F, он же react-three-fiber это супер клевая идея, реакт рендерер который практически без оверхеда, засчет динамической природы js транслирует jsx (только с дргуими тэгами) в объекты three js (императивная библиотека для 3д в js)
выглядит примерно вот так
const Icon = ({ src, size }: { src?: string; size?: number }) => {Очень крутая и интересная область с моей точки зрения, одно только 3д чего стоит, но есть еще один очень клевый челлендж:
const [_, height] = useFlexSize();
const map = useTexture(src || Empty);
return (
<group>
{src && (
<group position={[0, -height / 2, 0]}>
<mesh>
<circleGeometry args={[26 / 400, 30]} />
<meshBasicMaterial color="#232529" />
</mesh>
<mesh position-z={0.001}>
<planeGeometry args={[size, size]} />
<meshBasicMaterial transparent map={map} />
</mesh>
</group>
)}
</group>
);
};
Раньше когда нужен был ui на канвасе то обычно не заморачивались и рисовали html поверх канваса. Но с VR есть одна интересная особенность, в immersive session (когда ты находишься в 3д пространстве в очках), единственное что доступно это webgl context, dom там нет (точнее есть, но не визуально). И соответсвенно весь ui надо рисовать внутри, чего до этого мало кто делал, поэтому я залез с головой в r3f экосистему (сейчас я кстати мейнтенер https://github.com/pmndrs/react-three-flex)
Мы пишем свои компоненты для кнопок, текстовых инпутов, скролла и тд, потом скорее всего вынесем в опенсорс, короче вот как-то так
Вот еще вести с полей, в oculus browser есть нативная поддержка hls (такой формат для стриминга видео по http, поддерживается в safari и на мобильных платформах), но нельзя затащить видео текстуру на канвас: ругается на CORS, но он настроен правильно (на других платформах что поддерживают hls все чики пуки), и даже когда он не нужен такая же ошибка
Если кто знает куда им можно зарепортить буду благодарен
Если кто знает куда им можно зарепортить буду благодарен