Сэмуэль Мэддок — автор проекта Metastream — пару недель назад рассказал про текущую ситуацию разработки альтернативных проектов, поддерживающих зашифрованный видеостриминг, — "The End of Indie Web Browsers: You Can (Not) Compete".
Web разрабатывался как открытая платформа. Это означает, что все решения и стандарты открыты, и любой может их использовать без лицензионных отчислений. Создание стандарта Encrypted Media Extensions (EME) пошло вразрез с этой традицией. EME — обязательный компонент, который необходим для работы стриминговых сервисов, продающих лицензионный контент (Netflix, Hulu, и т.п.). Для того чтобы альтернативный браузер смог воспроизводить такой контент, он либо должен получить подтверждение от Google, либо заплатить Microsoft 10000$. Также теоретически можно реализовать этот компонент самостоятельно, но это требует координации с третьими сторонами, что альтернативным проектам может быть не под силу.
Я лично не против лицензионного контента в web'е. Но сложность, с которой сталкиваются альтернативные проекты при внедрении EME, вызывает сомнения в достаточной проработанности стандарта как стандарта, который является часть открытого web'а.
P.S. А может не всё так плохо? Если есть чем поделиться, пишите в @defrontchat
#browser #drm #musings
https://blog.samuelmaddock.com/posts/the-end-of-indie-web-browsers/
https://habr.com/en/post/485918/ (перевод)
Web разрабатывался как открытая платформа. Это означает, что все решения и стандарты открыты, и любой может их использовать без лицензионных отчислений. Создание стандарта Encrypted Media Extensions (EME) пошло вразрез с этой традицией. EME — обязательный компонент, который необходим для работы стриминговых сервисов, продающих лицензионный контент (Netflix, Hulu, и т.п.). Для того чтобы альтернативный браузер смог воспроизводить такой контент, он либо должен получить подтверждение от Google, либо заплатить Microsoft 10000$. Также теоретически можно реализовать этот компонент самостоятельно, но это требует координации с третьими сторонами, что альтернативным проектам может быть не под силу.
Я лично не против лицензионного контента в web'е. Но сложность, с которой сталкиваются альтернативные проекты при внедрении EME, вызывает сомнения в достаточной проработанности стандарта как стандарта, который является часть открытого web'а.
P.S. А может не всё так плохо? Если есть чем поделиться, пишите в @defrontchat
#browser #drm #musings
https://blog.samuelmaddock.com/posts/the-end-of-indie-web-browsers/
https://habr.com/en/post/485918/ (перевод)
Samuelmaddock
The End of Indie Web Browsers: You Can (Not) Compete
In 2017, the body responsible for standardizing web browser technologies, W3C, introduced Encrypted Media Extensions (EME)—thus bringing with it the end of competitive indie web browsers.
No longer is it possible to build your own web browser capable of consuming…
No longer is it possible to build your own web browser capable of consuming…
Добрался до статьи Андрея Ситника про допущенные ошибки в советской космической программе, и чему они могут научить — "What I learned as a developer from accidents in space".
В статье разбирается несколько реальных эпизодов. Самый интересный (и пугающий) — возвращение Андрея Волынова на Землю 18 января 1969 года. Его корабль, как все Союзы состоял из трёх отделяемых модулей. Во время приближения к Земле сервисный модуль не смог отсоединиться. Из-за этого корабль начал входить в атмосферу в неправильной позиции — корабль начал гореть. Космонавт начал описывать вслух все звуки, которые он слышал и вибрации, которые чувствовал, в надежде, что записывающая аппаратура сохранит все данные, для того чтобы избежать подобной трагедии в будущих полётах. Но всё закончилось хорошо — космонавт уцелел. Тут можно провести аналогию. Если вы вдруг столкнулись с какой-либо проблемой в сторонней библиотеке, например, сделали опечатку в конфиге и не получили предупреждение, подумайте над тем, чтобы завести issue или открыть пулл реквест — это поможет другим разработчикам при работе с библиотекой в будущем.
Статья очень интересная. Рекомендую почитать всем.
#programming #musings
https://evilmartians.com/chronicles/what-i-learned-as-a-developer-from-accidents-in-space
В статье разбирается несколько реальных эпизодов. Самый интересный (и пугающий) — возвращение Андрея Волынова на Землю 18 января 1969 года. Его корабль, как все Союзы состоял из трёх отделяемых модулей. Во время приближения к Земле сервисный модуль не смог отсоединиться. Из-за этого корабль начал входить в атмосферу в неправильной позиции — корабль начал гореть. Космонавт начал описывать вслух все звуки, которые он слышал и вибрации, которые чувствовал, в надежде, что записывающая аппаратура сохранит все данные, для того чтобы избежать подобной трагедии в будущих полётах. Но всё закончилось хорошо — космонавт уцелел. Тут можно провести аналогию. Если вы вдруг столкнулись с какой-либо проблемой в сторонней библиотеке, например, сделали опечатку в конфиге и не получили предупреждение, подумайте над тем, чтобы завести issue или открыть пулл реквест — это поможет другим разработчикам при работе с библиотекой в будущем.
Статья очень интересная. Рекомендую почитать всем.
#programming #musings
https://evilmartians.com/chronicles/what-i-learned-as-a-developer-from-accidents-in-space
evilmartians.com
What I learned as a developer from accidents in space—Martian Chronicles, Evil Martians’ team blog
How Soviet space tales help the creator of PostCSS to follow best practices in development.
Рич Харрис — создатель svelte и rollup — пару дней назад рассказал про подход для создания js-free графиков, который был проверен в бою на сайте New York Times, — "A new technique for making responsive, JavaScript-free charts".
Идея состоит в том, чтобы генерировать noscript-разметку диаграммы на сервере. Весь текст и оси создаются с помощью обычного css и html, для того чтобы избавиться от искажений при изменении размера контейнера. То есть окончательная диаграмма представляет из себя "бутерброд" из html и noscript. Для упрощения создания подобных графиков Рич создал библиотеку Pancake, которая работает поверх Svelte. Благодаря ей создаваемые диаграммы можно прогрессивно улучшать, добавляя интерактивность после инициализации js.
Pancake не является серебряной пулей — при большом количестве отображаемых данных есть проблемы с производительностью. Рич пишет, что планирует добавить поддержку рендеринга с помощью
#chart #library #noscript #svelte
https://dev.to/richharris/a-new-technique-for-making-responsive-javanoscript-free-charts-gmp
Идея состоит в том, чтобы генерировать noscript-разметку диаграммы на сервере. Весь текст и оси создаются с помощью обычного css и html, для того чтобы избавиться от искажений при изменении размера контейнера. То есть окончательная диаграмма представляет из себя "бутерброд" из html и noscript. Для упрощения создания подобных графиков Рич создал библиотеку Pancake, которая работает поверх Svelte. Благодаря ей создаваемые диаграммы можно прогрессивно улучшать, добавляя интерактивность после инициализации js.
Pancake не является серебряной пулей — при большом количестве отображаемых данных есть проблемы с производительностью. Рич пишет, что планирует добавить поддержку рендеринга с помощью
<canvas>.#chart #library #noscript #svelte
https://dev.to/richharris/a-new-technique-for-making-responsive-javanoscript-free-charts-gmp
DEV Community
A new technique for making responsive, JavaScript-free charts
There are countless libraries for generating charts on the web. Each serves a slightly different nich...
В блоге v8 появилась статья про использование SIMD в WebAssembly — "Fast, parallel applications with WebAssembly SIMD".
SIMD (Single Instruction, Multiple Data) — набор низкоуровневых инструкций процессора, которые позволяют распараллеливать обработку данных в рамках одного ядра. SIMD используется для ускорения работы кодеков, алгоритмов обработки изображений, компьютерного зрения и т.п. Чтобы web-приложения могли использовать SIMD-операции, разрабатывается расширение стандарта WebAssembly. В окончательном стандарте набор инструкций будет ограничиваться только теми инструкциями, которые можно использовать вне зависимости от архитектуры процессора.
Разработчики v8 представили экспериментальную реализацию предложения, благодаря ей демо отслеживания жестов рук ускорилось в пять раз. Демку можно запустить в последней версии Chrome, включив "WebAssembly SIMD support" в
#webassembly #v8
https://v8.dev/features/simd
https://storage.googleapis.com/mediapipe-viz.appspot.com/wasm-demos/hand-tracking-simd/hand_tracking_demo.html
SIMD (Single Instruction, Multiple Data) — набор низкоуровневых инструкций процессора, которые позволяют распараллеливать обработку данных в рамках одного ядра. SIMD используется для ускорения работы кодеков, алгоритмов обработки изображений, компьютерного зрения и т.п. Чтобы web-приложения могли использовать SIMD-операции, разрабатывается расширение стандарта WebAssembly. В окончательном стандарте набор инструкций будет ограничиваться только теми инструкциями, которые можно использовать вне зависимости от архитектуры процессора.
Разработчики v8 представили экспериментальную реализацию предложения, благодаря ей демо отслеживания жестов рук ускорилось в пять раз. Демку можно запустить в последней версии Chrome, включив "WebAssembly SIMD support" в
chrome://flags/.#webassembly #v8
https://v8.dev/features/simd
https://storage.googleapis.com/mediapipe-viz.appspot.com/wasm-demos/hand-tracking-simd/hand_tracking_demo.html
v8.dev
Fast, parallel applications with WebAssembly SIMD · V8
Bringing vector operations to WebAssembly
Орта Терокс написал статью про опыт перевода основного сайта TypeScript на Gatsby — "Why the TypeScript team is using Gatsby for its new website".
Старая версия сайта собирается с помощью Jekyll. Это хороший инструмент, но он плохо масштабируется — на сотнях статей, сборка сайта занимает очень много времени. С учётом того, что на сайте TypeScript могут появиться переводы на разные языки и новые статьи, Jekyll не самое подходящее решение. У Gatsby таких проблем с производительностью нет. Дополнительно его можно подружить с TypeScript, и весь код страниц будет проверяться статически. В статье есть небольшая инструкция, как это сделать.
Если работаете с Gatsby и планируете прикрутить к нему TS, то эта статья может быть полезна.
#gastby #react #typenoscript
https://www.gatsbyjs.org/blog/2020-01-23-why-typenoscript-chose-gatsby/
Старая версия сайта собирается с помощью Jekyll. Это хороший инструмент, но он плохо масштабируется — на сотнях статей, сборка сайта занимает очень много времени. С учётом того, что на сайте TypeScript могут появиться переводы на разные языки и новые статьи, Jekyll не самое подходящее решение. У Gatsby таких проблем с производительностью нет. Дополнительно его можно подружить с TypeScript, и весь код страниц будет проверяться статически. В статье есть небольшая инструкция, как это сделать.
Если работаете с Gatsby и планируете прикрутить к нему TS, то эта статья может быть полезна.
#gastby #react #typenoscript
https://www.gatsbyjs.org/blog/2020-01-23-why-typenoscript-chose-gatsby/
Gatsby
The Best React-Based Framework | Gatsby
Gatsby is a React-based open source framework with performance, scalability and security built-in. Collaborate, build and deploy 1000x faster on Netlify.
Сегодня на хабре появилась статья Александра Воронянского про опыт модернизации фронта Маркета — "Как переписать фронтенд нагруженного проекта и не потерять главного".
Очень интересно было почитать статью, так как я непосредственно участвовал в описанных событиях. Изначально Маркет работал на xml-based технологиях. Серверная часть фронтенда обслуживалась xnoscript — технологией Яндекса, практически вышедшей из употребления в компании. Представьте, что если бы вы писали node.js приложение, но с помощью xml со вставками на JavaScript. Примерно так выглядела работа с xnoscript. Сейчас серверный фронт работает на Node.js, на клиенте используется React.
Маркет — это большой проект, который нельзя было заморозить для перевода на новый стек. Перенос осуществлялся постранично. Чтобы не просадить производительность, был настроен сбор клиентских метрик, которые показывали деградации в миграции. В конце статьи есть несколько советов по миграции больших проектов.
В общем, интересная и полезная статья. Почитайте, если у вас планируется что-то подобное.
#yandex #experience #migration
https://habr.com/ru/company/yandex/blog/486146/
Очень интересно было почитать статью, так как я непосредственно участвовал в описанных событиях. Изначально Маркет работал на xml-based технологиях. Серверная часть фронтенда обслуживалась xnoscript — технологией Яндекса, практически вышедшей из употребления в компании. Представьте, что если бы вы писали node.js приложение, но с помощью xml со вставками на JavaScript. Примерно так выглядела работа с xnoscript. Сейчас серверный фронт работает на Node.js, на клиенте используется React.
Маркет — это большой проект, который нельзя было заморозить для перевода на новый стек. Перенос осуществлялся постранично. Чтобы не просадить производительность, был настроен сбор клиентских метрик, которые показывали деградации в миграции. В конце статьи есть несколько советов по миграции больших проектов.
В общем, интересная и полезная статья. Почитайте, если у вас планируется что-то подобное.
#yandex #experience #migration
https://habr.com/ru/company/yandex/blog/486146/
Хабр
Как переписать фронтенд нагруженного проекта и не потерять главного
Представим ситуацию. Ваш сервис или сайт был запущен несколько лет назад. Он постоянно развивается, приносит прибыль, его любят пользователи. Кодовая база с каждым годом растёт, инфраструктура...
Совсем забыл рассказать здесь. С понедельника я веду коллективный твиттер-аккаунт JS-сообщества — jsunderhood.
Уже написал два больших треда:
1) Про Defront — https://twitter.com/jsunderhood/status/1224284390739542016?s=20
2) Про Историю JS и JS-экосистемы — https://twitter.com/jsunderhood/status/1224595199294345217?s=20
Рекомендую почитать про историю JS — получился очень хороший тред. Про Defront почитайте, если интересна жизнь в телеграме и процесс написания статей.
Уже написал два больших треда:
1) Про Defront — https://twitter.com/jsunderhood/status/1224284390739542016?s=20
2) Про Историю JS и JS-экосистемы — https://twitter.com/jsunderhood/status/1224595199294345217?s=20
Рекомендую почитать про историю JS — получился очень хороший тред. Про Defront почитайте, если интересна жизнь в телеграме и процесс написания статей.
Twitter
jsunderhood
Сегодня хочу рассказать про Defront (https://t.co/kGbphbPG75). Это телеграм-канал про web и фронтенд-разработку.
В блоге v8 появилась статья о том, как читать спецификацию ECMAScript — "Understanding the ECMAScript spec, part 1".
В статье разбирается спецификация метода
Очень клёвая статья. Must read для тех, кто хочет научиться понимать спецификацию. Жду вторую часть.
#js #specification #tutorial
https://v8.dev/blog/understanding-ecmanoscript-part-1
В статье разбирается спецификация метода
Object.prototype.hasOwnProperty. Рассматривается отличие типов языка (могут использоваться обычными программистами, например, null, undefined, Boolean, Number, String) от типов спецификации (используются только для описания спеки, например, Completion Records). Разбирается понятие слотов (slots), которые обозначаются в спецификации с помощью двойных квадратных скобок: o.[[Prototype]], o.[[GetOwnProperty]](). Описывается конструкция, которая выглядят как вызов функции в языке, но на самом деле ей не является.Очень клёвая статья. Must read для тех, кто хочет научиться понимать спецификацию. Жду вторую часть.
#js #specification #tutorial
https://v8.dev/blog/understanding-ecmanoscript-part-1
v8.dev
Understanding the ECMAScript spec, part 1 · V8
Tutorial on reading the ECMAScript specification
Недавно вышла новая версия Chrome. Пит Лепаж рассказал про самые интересные и важные обновления — "New in Chrome 80".
Web-воркеры теперь поддерживают ESM. Эта фича позволила улучшила производительность и эргономику работы с воркерами. Для включения поддержки ESM при вызове конструктора
Появилось несколько новых API, делающих PWA удобнее. Contact Picker API позволяет пользователям выбирать контакты из своей адресной книги. С помощью метода
В рамках origin trail доступен Content indexing API, благодаря которому PWA может получить доступ к списку закешированных ресурсов. Появился Notification triggers для отложенной отправки нотификаций.
В JS появилась поддержка optional chaining
В консоли девтулзов теперь можно без боли использовать
#release #chrome #announcement
https://developers.google.com/web/updates/2020/02/nic80
Web-воркеры теперь поддерживают ESM. Эта фича позволила улучшила производительность и эргономику работы с воркерами. Для включения поддержки ESM при вызове конструктора
Worker необходимо передать вторым аргументом {type: "module"}.Появилось несколько новых API, делающих PWA удобнее. Contact Picker API позволяет пользователям выбирать контакты из своей адресной книги. С помощью метода
getInstalledRelatedApps() можно проверить, установлено ли основное нативное приложение, чтобы не надоедать пользователю лишней рекламой. Периодическая фоновая синхронизация данных позволяет поддерживать контент PWA в актуальном состоянии.В рамках origin trail доступен Content indexing API, благодаря которому PWA может получить доступ к списку закешированных ресурсов. Появился Notification triggers для отложенной отправки нотификаций.
В JS появилась поддержка optional chaining
obj?.prop. Favicon теперь может использовать SVG-изображения. Установка display: minimal-ui в PWA включает отображение кнопок назад и перезагрузки. Ещё в анонсе сказано, что можно ссылаться на любой текст на странице используя #:~:text=something, но у меня эта фича почему-то не работает.В консоли девтулзов теперь можно без боли использовать
class и let — больше нет ошибки из-за переопределения идентификатора. Началась работа над поддержкой DWARF Debugging Standard для улучшения дебага WebAssembly. На панели "Network" в "Initiator" можно отобразить цепочку запросов в виде вложенного списка — это облегчает поиск инициатора запроса.#release #chrome #announcement
https://developers.google.com/web/updates/2020/02/nic80
Chrome for Developers
New in Chrome 80 | Blog | Chrome for Developers
Chrome 80 is rolling out now, and there's a ton of new stuff in it for developers! There's support for modules in workers, optional chaining in JavaScript, new origin trials, features that have graduated from origin trial, and so much more. Let's dive in…
Вчера вышла девятая версия Angular. Стивен Флюин рассказал про новый релиз в статье "Version 9 of Angular Now Available — Project Ivy has arrived!".
Девятая версия самое большое обновление Angular за последние три года. В этой версии по умолчанию включён Ivy — новый компилятор и пайплайн рендеринга. Благодаря ему Angular теперь может компилировать компоненты на этапе сборки, ускоряя рендеринг и инициализацию приложения. Также благодаря Ivy бандлы приложения получаются до 40% меньше. В этой версии был улучшен developer experience: добавлены новые возможности для дебага приложения, улучшены сообщения об ошибках, улучшена статическая типизация шаблонов (ngIf, ngFor, ng-template, etc).
Вышел очень интересный релиз. Обязательно попробую его потыкать, когда будет время.
#angular #release #announcement
https://blog.angular.io/version-9-of-angular-now-available-project-ivy-has-arrived-23c97b63cfa3
Девятая версия самое большое обновление Angular за последние три года. В этой версии по умолчанию включён Ivy — новый компилятор и пайплайн рендеринга. Благодаря ему Angular теперь может компилировать компоненты на этапе сборки, ускоряя рендеринг и инициализацию приложения. Также благодаря Ivy бандлы приложения получаются до 40% меньше. В этой версии был улучшен developer experience: добавлены новые возможности для дебага приложения, улучшены сообщения об ошибках, улучшена статическая типизация шаблонов (ngIf, ngFor, ng-template, etc).
Вышел очень интересный релиз. Обязательно попробую его потыкать, когда будет время.
#angular #release #announcement
https://blog.angular.io/version-9-of-angular-now-available-project-ivy-has-arrived-23c97b63cfa3
Medium
Version 9 of Angular Now Available— Project Ivy has arrived!
The 9.0.0 release of Angular is here! This is a major release that spans the entire platform, including the framework, Angular Material…
Какой основной редактор/IDE используете для разработки на JavaScript, CSS, HTML, TypeScript, JS+Flow, Elm, ReasonML?
Final Results
1%
Atom
0%
Brackets
1%
Emacs
40%
JetBrains IDEs (WebStorm, IntelliJ IDEA etc.)
3%
Sublime Text
0%
TextMate
2%
Vim/NeoVim/Oni
3%
Visual Studio
49%
Visual Studio Code
1%
Другое
Недавно вышел Yarn 2. Джэмон Холмгрен из Inifinite Red поделился, к чему пришла команда после оценки перехода c первой версии Yarn на вторую версию и NPM — "Yarn 1 vs Yarn 2 vs NPM".
При сравнении пакетных менеджеров учитывался уровень поддержки, скорость, предсказуемость сборок, надёжность, распространение среди сообщества, кеширование, стоимость перехода и дополнительные фичи.
Краткие итоги статьи. По уровню поддержки победили Yarn 1 и NPM — Yarn 2 не поддерживает React Native; для них это было критично. По скорости установки пакетов победил Yarn 1. С утилизацией кеширования не было замеров, но разработчики утверждают, что Yarn 1 потребляет меньше траффика по сравнению с NPM. Также Yarn 1 распространён среди сообщества React/React Native. Многие дополнительные фичи, которые предоставляет Yarn 2 некритичны для их проектов. Мне показалось сомнительным, что в пункте про надёжность и предсказуемость NPM немного уступил Yarn 1 из-за статьи 2018 года. После оценки команда решила остаться на Yarn 1.
Рекомендую почитать статью, если вы тоже задумываетесь о переходе на новый пакетный менеджер.
#package #yarn #npm #comparison
https://shift.infinite.red/yarn-1-vs-yarn-2-vs-npm-a69ccf0229cd
При сравнении пакетных менеджеров учитывался уровень поддержки, скорость, предсказуемость сборок, надёжность, распространение среди сообщества, кеширование, стоимость перехода и дополнительные фичи.
Краткие итоги статьи. По уровню поддержки победили Yarn 1 и NPM — Yarn 2 не поддерживает React Native; для них это было критично. По скорости установки пакетов победил Yarn 1. С утилизацией кеширования не было замеров, но разработчики утверждают, что Yarn 1 потребляет меньше траффика по сравнению с NPM. Также Yarn 1 распространён среди сообщества React/React Native. Многие дополнительные фичи, которые предоставляет Yarn 2 некритичны для их проектов. Мне показалось сомнительным, что в пункте про надёжность и предсказуемость NPM немного уступил Yarn 1 из-за статьи 2018 года. После оценки команда решила остаться на Yarn 1.
Рекомендую почитать статью, если вы тоже задумываетесь о переходе на новый пакетный менеджер.
#package #yarn #npm #comparison
https://shift.infinite.red/yarn-1-vs-yarn-2-vs-npm-a69ccf0229cd
Medium
Yarn 1 vs Yarn 2 vs NPM
Re-examining Infinite Red’s decision to use Yarn — comparing NPM, Yarn 1, and Yarn 2
Юан Чуан написал статью о том, как сделать треугольник Серпинского с помощью CSS и одного div — "Single div Sierpinski triangle".
Треугольник Серпинского — это фрактальная структура, состоящая из большого количества треугольников, образующих паттерн. Идея его отрисовки с помощью CSS заключается в наложении друг на друга нескольких слоёв повторяющихся и уменьшающихся прямоугольных треугольников, создающихся с помощью линейного градиента. Первая половина треугольников на всех слоях закрашивается цветом, а вторая остаётся полностью прозрачной. После отрисовки всех слоёв с треугольниками применяется
Красивое решение задачи. Рекомендую посмотрерть.
#css #fun
https://yuanchuan.dev/single-div-sierpinski-triangle
Треугольник Серпинского — это фрактальная структура, состоящая из большого количества треугольников, образующих паттерн. Идея его отрисовки с помощью CSS заключается в наложении друг на друга нескольких слоёв повторяющихся и уменьшающихся прямоугольных треугольников, создающихся с помощью линейного градиента. Первая половина треугольников на всех слоях закрашивается цветом, а вторая остаётся полностью прозрачной. После отрисовки всех слоёв с треугольниками применяется
transform: skew() для трансформации прямоугольного треугольника в равнобедренный.Красивое решение задачи. Рекомендую посмотрерть.
#css #fun
https://yuanchuan.dev/single-div-sierpinski-triangle
yuanchuan.dev
Single div Sierpinski triangle
Today I found another way to draw the Sierpinski triangle using pure CSS.
Ахмад Шадид написал статью про "Intrinsic Sizing In CSS".
Черновик стандарта "Intrinsic & Extrinsic Sizing" описывает поведение блоков при указании внешних размеров (extrinsic), и размеров, которые определяются содержимым элемента (intrinsic). То есть extrinsic sizing — это
Никогда раньше не сталкивался с intrinsic sizing. "Can I Use" показывает, что эти свойства доступны с третьей версии Firefox и 22-ой версии Chrome. В общем, очень рекомендую посмотреть статью и потыкать примеры.
#css #layout
https://ishadeed.com/article/intrinsic-sizing-in-css/
Черновик стандарта "Intrinsic & Extrinsic Sizing" описывает поведение блоков при указании внешних размеров (extrinsic), и размеров, которые определяются содержимым элемента (intrinsic). То есть extrinsic sizing — это
10px, 20% и т.п. ( width: 100% ), а intrinsic — min-content, max-content и fit-content ( width: min-content ). Благодаря intrinsic-свойствам вёрстка макетов для динамического контента становится проще. При их использовании с гридами можно делать такие макеты, которые невозможно было сделать другими средствами CSS. Все основные свойства intrinsic sizing поддерживаются современными браузерами.Никогда раньше не сталкивался с intrinsic sizing. "Can I Use" показывает, что эти свойства доступны с третьей версии Firefox и 22-ой версии Chrome. В общем, очень рекомендую посмотреть статью и потыкать примеры.
#css #layout
https://ishadeed.com/article/intrinsic-sizing-in-css/
Ishadeed
Intrinsic Sizing In CSS
Сегодня вышла новая версия Firefox 73. Крис Миллс рассказал про нововведения в браузере — "Firefox 73 is upon us".
Больших фич в новом релиз нет, но есть обновления web-платформы. Были добавлены CSS-свойства
В инструментах разработчика ускорили работу панели "Network". Оптимизировали работу со скриптами, содержащими большой объём соурс мапов, теперь такие скрипты загружаются гораздо быстрее. Инспектор веб-сокетов стал поддерживать ещё один формат — WAMP.
#firefox #release
https://hacks.mozilla.org/2020/02/firefox-73-is-upon-us/
Больших фич в новом релиз нет, но есть обновления web-платформы. Были добавлены CSS-свойства
overscroll-behavior-block и overscroll-behavior-inline, которые являются логическими маппингами для overscroll-behavior-x и overscroll-behavior-y. Благодаря этому свойству упрощается настройка прокручиваемых элементов внутри других прокручиваемых элементов для языков с вертикальным письмом. Появились новые поля yearName в relatedYear в DateTimeFormat.prototype.formatToParts(), которые могут использоваться для форматирования CJK (Chinese, Japanese, Korean) календарей. У форм появился новый метод requestSubmit, который имитирует клик по кнопке отправки (type="submit") — отправляется событие submit и происходит валидация формы до отправки данных.В инструментах разработчика ускорили работу панели "Network". Оптимизировали работу со скриптами, содержащими большой объём соурс мапов, теперь такие скрипты загружаются гораздо быстрее. Инспектор веб-сокетов стал поддерживать ещё один формат — WAMP.
#firefox #release
https://hacks.mozilla.org/2020/02/firefox-73-is-upon-us/
Mozilla Hacks – the Web developer blog
Firefox 73 is upon us
Today we’ve released Firefox 73, with useful additions that include CSS and JavaScript updates, and numerous DevTools improvements. We’ve added to CSS logical properties, pushed performance forward in the Console ...
В конце января Аксель Раушмайер написал статью про типизацию объектов в TypeScript — "Typing objects in TypeScript".
В статье подробно описывается разница между типами
Ещё в статье рассказывается про интерфейсы, про избыточные свойства, разбирается разница между структурной и номинальной системой типов.
Хорошая статья. Рекомендую почитать, если работаете с TypeScript.
#typenoscript
https://2ality.com/2020/01/typing-objects-typenoscript.html
В статье подробно описывается разница между типами
Object и object. Объекты типа Object (с заглавной буквы "О") — это все инстансы класса Object. Объекты типы object (со строчной буквы "o") — представляют собой все непримитивные значения. При этом тип Object включает примитивные значения:function f(x: Object) { }
f('abc'); // OKЕщё в статье рассказывается про интерфейсы, про избыточные свойства, разбирается разница между структурной и номинальной системой типов.
Хорошая статья. Рекомендую почитать, если работаете с TypeScript.
#typenoscript
https://2ality.com/2020/01/typing-objects-typenoscript.html
Инженеры Plaid рассказали про свой опыт распаралеливания Node.js-приложения — "How we 30x'd our Node parallelism".
В инфраструктуре проекта было 4000 контейнеров с Node.js-приложением. Запросы не обрабатывались параллельно — каждый контейнер в один момент времени мог обрабатывать только один запрос. Попытка параллелизации выявила проблему с очень сильным потреблением памяти. Она была вызвана кодом, собирающим данные для отладки. Проблему успешно решили. По ходу дела заменили непроизводительную библиотеку для поточной обработки JSON-данных с bfj на JSONStream, нашли некорректную настройку в клиенте s3 и тонко настроили работу сборщика мусора.
После всех оптимизаций каждый воркер без проблем стал обрабатывать 30 запросов. Это позволило снизить количество контейнеров с 4000 до 130 и уменьшить затраты на инфраструктуру.
Статья большая и очень хорошая. Довольно редко встречаются статьи про опыт оптимизации больших проектов. Очень рекомендую почитать, если у вас крутятся сервисы на Node.js.
#nodejs #performance
https://blog.plaid.com/how-we-parallelized-our-node-service-by-30x/
https://habr.com/ru/company/ruvds/blog/483688/ (перевод)
В инфраструктуре проекта было 4000 контейнеров с Node.js-приложением. Запросы не обрабатывались параллельно — каждый контейнер в один момент времени мог обрабатывать только один запрос. Попытка параллелизации выявила проблему с очень сильным потреблением памяти. Она была вызвана кодом, собирающим данные для отладки. Проблему успешно решили. По ходу дела заменили непроизводительную библиотеку для поточной обработки JSON-данных с bfj на JSONStream, нашли некорректную настройку в клиенте s3 и тонко настроили работу сборщика мусора.
После всех оптимизаций каждый воркер без проблем стал обрабатывать 30 запросов. Это позволило снизить количество контейнеров с 4000 до 130 и уменьшить затраты на инфраструктуру.
Статья большая и очень хорошая. Довольно редко встречаются статьи про опыт оптимизации больших проектов. Очень рекомендую почитать, если у вас крутятся сервисы на Node.js.
#nodejs #performance
https://blog.plaid.com/how-we-parallelized-our-node-service-by-30x/
https://habr.com/ru/company/ruvds/blog/483688/ (перевод)
Plaid
How we 30x'd our Node parallelism | Plaid
What's the best way to safely increase parallelism in a production Node service?
That's a question my team needed to answer a couple of months ago.
We were ...
That's a question my team needed to answer a couple of months ago.
We were ...
Омар Алшакер написал статью про свои эксперименты со временем в web'е — "4 Creative Ways to JavaScript Timing in Browsers".
Самое интересное в статье — идея реализации подобия таймера с микросекундным разрешением. Его можно создать с помощью веб-воркера и вызовом метода
Статья небольшая и не очень серьёзная. Стоит почитать, если интересна тема нестандартной эксплуатации возможностей web-платформы.
#js #experimental #fun
https://blog.omaralshaker.com/creative-ways-to-javanoscript-timing/
Самое интересное в статье — идея реализации подобия таймера с микросекундным разрешением. Его можно создать с помощью веб-воркера и вызовом метода
performance.now() в бесконечном цикле. Другие советы по сути бесполезные, но интересные с точки зрения изобретательности. Например, можно сделать подобие setInterval запустив бесконечную анимацию на DOM-элементе и подписавшись на событие animationiteration. Что-то похожее можно сделать с SVG-элементом, используя SMIL-анимацию, но подписываться надо на событие repeat. Для реализации своей версии setTimeout можно использовать KeyframeEffect из Web Animation API (экспериментальное api).Статья небольшая и не очень серьёзная. Стоит почитать, если интересна тема нестандартной эксплуатации возможностей web-платформы.
#js #experimental #fun
https://blog.omaralshaker.com/creative-ways-to-javanoscript-timing/
Omar Alshaker - Blog
4 Creative Ways to JavaScript Timing in Browsers
This article assumes the availability for Web APIs, therefore, most methods suggested here don’t work in NodeJS. Using an infinite synchronous loop in a Web Worker (not Service Worker) Since …
Кристофер Хиллер из IBM рассказал как эффективно работать с Diagnostic Repots в Node.js — "Debugging NodeJS in Production with Diagnostic Reports".
Diagnostic Reports был добавлен в Node.js 11.8. С помощью этой фичи можно получить много полезной информации, которая может помочь при поиске проблем. Diagnostic Reports генерирует большой отчёт — JSON-файл, в котором есть данные про окружение, используемые разделяемые библиотеки, текущее состояние event loop и т.п. Кристофер представил утилиту report-toolkit, которая облегчает работу с отчётом. Эта утилита может быть полезна при поиск причин зависаний, анализ моргающих процессов (работает в одном окружении, падает в другом).
Полезный доклад. Рекомендую посмотреть, если работаете с нодой.
#talk #nodejs #debug
https://www.youtube.com/watch?v=PLiar_Aj9gs
Diagnostic Reports был добавлен в Node.js 11.8. С помощью этой фичи можно получить много полезной информации, которая может помочь при поиске проблем. Diagnostic Reports генерирует большой отчёт — JSON-файл, в котором есть данные про окружение, используемые разделяемые библиотеки, текущее состояние event loop и т.п. Кристофер представил утилиту report-toolkit, которая облегчает работу с отчётом. Эта утилита может быть полезна при поиск причин зависаний, анализ моргающих процессов (работает в одном окружении, падает в другом).
Полезный доклад. Рекомендую посмотреть, если работаете с нодой.
#talk #nodejs #debug
https://www.youtube.com/watch?v=PLiar_Aj9gs
Сергей Мелюков (контрибьютор Webpack) написал статью про новую экспериментальную фичу Webpack 5 Beta — Asset Modules.
Традиционный подход работы с ассетами (noscript, png, woff, etc.) подразумевает установку и настройку дополнительных загрузчиков: file-loader, url-loader, raw-loader. Asset Modules — это новая фича, благодаря которой Webpack может работать с ассетами "из коробки" без установки дополнительных загрузчиков.
Asset Modules добавляет несколько типов ассетов:
Asset Modules — это экспериментальная фича. Разработчики ждут от пользователей обратную связь.
#webpack #bundler #experimental
https://habr.com/ru/post/488464/ (на русском языке)
https://dev.to/smelukov/webpack-5-asset-modules-2o3h
Традиционный подход работы с ассетами (noscript, png, woff, etc.) подразумевает установку и настройку дополнительных загрузчиков: file-loader, url-loader, raw-loader. Asset Modules — это новая фича, благодаря которой Webpack может работать с ассетами "из коробки" без установки дополнительных загрузчиков.
Asset Modules добавляет несколько типов ассетов:
asset (копирование файла в dist при превышении лимита на размер файла и инлайн файла, если его объём меньше лимита)asset/inline (аналог url-loader — файлы, попадающие под этот тип, инлайнятся всегда)asset/resource (аналог file-loader — файлы, попадающие под этот тип, всегда копируются в dist)asset/source (аналог raw-loader — инлайн файла в бандл в неизменном виде)Asset Modules — это экспериментальная фича. Разработчики ждут от пользователей обратную связь.
#webpack #bundler #experimental
https://habr.com/ru/post/488464/ (на русском языке)
https://dev.to/smelukov/webpack-5-asset-modules-2o3h
Хабр
Webpack 5 — Asset Modules
Доброго времени суток. Этим постом хочу начать серию статей про новые возможности грядущего webpack 5. Почему я хочу рассказывать про webpack? Как минимум потому...
Недавно Иван Акулов в своём блоге рассказал про все современные подходы добавления полифиллов для JS — "How to load polyfills only when needed".
На данный момент есть три актуальных подхода:
1) С помощью Polyfill.io. Это сторонний сервис, который определяет браузер по UA string и возвращает скрипт только с теми полифиллами, которые, действительно, нужны. Есть недостаток — добавляет 50-300мс к TTI.
2) Используя паттерн "module/nomodule". Если скрипт содержит
3) Используя опцию
Серебряной пули нет, но при необходимости эти подходы можно комбинировать друг с другом.
Статья хорошая, очень рекомендую почитать, если занимаетесь оптимизациями.
#perfromance #polyfill
https://3perf.com/blog/polyfills/
На данный момент есть три актуальных подхода:
1) С помощью Polyfill.io. Это сторонний сервис, который определяет браузер по UA string и возвращает скрипт только с теми полифиллами, которые, действительно, нужны. Есть недостаток — добавляет 50-300мс к TTI.
2) Используя паттерн "module/nomodule". Если скрипт содержит
type="module", он не будет выполняться в тех браузерах, которые не поддерживают ECMAScript Modules, то есть в старых браузерах. Если скрипт содержит аттрибут nomodule, то этот скрипт не будет выполняться в новых браузерах. Благодаря этим атрибутам новые и старые браузеры могут загружать необходимый набор полифиллов. Этот паттерн нельзя использовать, если требуется определение фич выше ES2015.3) Используя опцию
useBuiltins в @babel/preset-env, babel может подключать полфиллы только для тех браузеров, которые были указаны в конфиге. useBuiltins не самое лучшее решение, если необходима поддержка старых браузеров.Серебряной пули нет, но при необходимости эти подходы можно комбинировать друг с другом.
Статья хорошая, очень рекомендую почитать, если занимаетесь оптимизациями.
#perfromance #polyfill
https://3perf.com/blog/polyfills/
PerfPerfPerf
How to load polyfills only when needed
I was asked: “How does one serve polyfills only to browsers that need them?”