Продолжаю делиться своими мыслями по поводу прочитанных статей. Сегодня попалась статья Акселя Раушмайера "Future JavaScript: what is still missing?". Аксель в ней размышляет о том, каких возможностей пока ещё не хватает в JS. Текста много, поэтому остановлюсь на самых интересных пунктах.
В JS нет простого способа сравнить два объекта по значению. Аксель предлагает для этого новый синтаксис
Очевидно, что при добавлении новых возможностей всем угодить невозможно, и это понятно, так как при дизайне языка очень много внимания уделяется балансу и обратной совместимости.
#js #future #musings
http://2ality.com/2019/01/future-js.html
В JS нет простого способа сравнить два объекта по значению. Аксель предлагает для этого новый синтаксис
#{x: 1} === #{x: 1} или новые виды классов на базе экспериментального синтаксиса декораторов. Также нет возможности использовать обычные инструкции как выражения. Для этого предлагается использовать do-выражения, которые уже существуют в качестве предложения добавления в стандарт. Для более удобной работы с композицией функций предлагается использовать pipeline operator |>. Интересно то, что на данный момент существуют два конкурирующих предложения "F# Pipelines" и "Smart Pipelines". Также Аксель высказывает мысль, что было бы неплохо иметь более легковесную конструкцию (относительно Worker API) для работы с конкурентностью. В статье ещё есть очень интересная мысль про использование стандартной библиотеки вместо объектов определённых в стандарте (Object, Reflect, Math, JSON).Очевидно, что при добавлении новых возможностей всем угодить невозможно, и это понятно, так как при дизайне языка очень много внимания уделяется балансу и обратной совместимости.
#js #future #musings
http://2ality.com/2019/01/future-js.html
В статье, про которую я писал вчера, Аксель говорит о том, что он не фанат опционального чейнинга (`obj?.prop` - пропозал в будущий стандарт JS) и даёт ссылку на статью "Overly defensive programming" Карла Витулло, которая раскрывает идею того, почему чрезмерные проверки по всему коду это не очень хорошая практика.
Если мы пишем в коде слишком много защитных проверок (например, `const p = obj && obj.p;`) и подавляем возможные ошибки, то это может служить признаком того, что мы не знаем, какие гарантии предоставляют используемые сервисы и сторонние библиотеки. В итоге это может приводить к непонятным ошибкам. Лучше всего заблоговременно разобраться в данных и кинуть ошибку как можно ближе к тому месту, где она произошла, не забыв залогировать. В статье есть хороший пример. Какое сообщение вам будет понятнее: Warning: Failed prop type: The prop 'a' is marked as required in 'Thing', but its value is 'undefined'. или Uncaught TypeError: Cannot read property 'b' of undefined? Кажется, что ответ очевиден. Как альтернативу проверкам можно использовать статическую типизацию, которая просто не даст коду собраться, если какие-то контракты были нарушены.
Чрезмерные проверки - это как прикрывание дыр в стене с помощью картин. На первый взгляд может казаться, что всё в порядке, но на самом деле дыры остаются на своём месте точно также как и баги в программе.
#programming #softwaredesign #musings
https://medium.com/@vcarl/overly-defensive-programming-e7a1b3d234c2
Если мы пишем в коде слишком много защитных проверок (например, `const p = obj && obj.p;`) и подавляем возможные ошибки, то это может служить признаком того, что мы не знаем, какие гарантии предоставляют используемые сервисы и сторонние библиотеки. В итоге это может приводить к непонятным ошибкам. Лучше всего заблоговременно разобраться в данных и кинуть ошибку как можно ближе к тому месту, где она произошла, не забыв залогировать. В статье есть хороший пример. Какое сообщение вам будет понятнее: Warning: Failed prop type: The prop 'a' is marked as required in 'Thing', but its value is 'undefined'. или Uncaught TypeError: Cannot read property 'b' of undefined? Кажется, что ответ очевиден. Как альтернативу проверкам можно использовать статическую типизацию, которая просто не даст коду собраться, если какие-то контракты были нарушены.
Чрезмерные проверки - это как прикрывание дыр в стене с помощью картин. На первый взгляд может казаться, что всё в порядке, но на самом деле дыры остаются на своём месте точно также как и баги в программе.
#programming #softwaredesign #musings
https://medium.com/@vcarl/overly-defensive-programming-e7a1b3d234c2
Medium
Overly defensive programming
(Also republished on my personal blog)
Channel name was changed to «Defront — про фронтенд-разработку и не только»
Hackerrank выложил результаты опроса 70 тысяч программистов.
Cамый популярный язык 2018 года JavaScript; в прошлом году на первом месте была Java. Больше всего программисты в 2019 году хотят изучить Go, Kotlin и Python. В прошлом году на третьем месте была Scala, сейчас она переместилась на 6-ое место. Мне показался забавным график "Frameworks developers want to learn in 2019", где перемешали Angular, React, Spring, .NETCore, Ruby on Rails и другое. В общем, больше всего разработчики хотят изучить React. Наиболее перспективной новой технологией, разработчики считают Internet of Things (53%), Deep Learning уступил всего лишь три процента (50%). Во время работы большинство программистов предпочитает слушать электронную/танцевальную музыку, при этом у старшего поколения (54-72 года) наиболее популярны классика и рок.
#survey #results
http://info.hackerrank.com/rs/487-WAY-049/images/HackerRank_2019-Developer-Skills-Report.pdf
Cамый популярный язык 2018 года JavaScript; в прошлом году на первом месте была Java. Больше всего программисты в 2019 году хотят изучить Go, Kotlin и Python. В прошлом году на третьем месте была Scala, сейчас она переместилась на 6-ое место. Мне показался забавным график "Frameworks developers want to learn in 2019", где перемешали Angular, React, Spring, .NETCore, Ruby on Rails и другое. В общем, больше всего разработчики хотят изучить React. Наиболее перспективной новой технологией, разработчики считают Internet of Things (53%), Deep Learning уступил всего лишь три процента (50%). Во время работы большинство программистов предпочитает слушать электронную/танцевальную музыку, при этом у старшего поколения (54-72 года) наиболее популярны классика и рок.
#survey #results
http://info.hackerrank.com/rs/487-WAY-049/images/HackerRank_2019-Developer-Skills-Report.pdf
Вчера Бенджамин Де Кок (участник рабочей группы CSS) твитнул про то, что их группа утвердила добавление в стнадарт много новых математических функций:
Это означает, что после добавления в браузеры новых CSS-функций, у фронтендеров будет ещё меньше причин обращаться к CSS-препроцессорам. Добавление новых функций также поможет создавать в CSS новые виды анимаций и трансформаций, которые ранее были невозможны. С помощью функции
Я уверен, что перечисленные примеры далеко не полный список того, для чего могут быть полезны новые функции.
#css #future #cssfunctions #csswg
https://twitter.com/bdc/status/1100921258839953408
calc(), min(), max(), clamp(), sin(), cos(), tan(), acos(), asin(), atan(), atan2(), hypot(), sqrt(), pow().Это означает, что после добавления в браузеры новых CSS-функций, у фронтендеров будет ещё меньше причин обращаться к CSS-препроцессорам. Добавление новых функций также поможет создавать в CSS новые виды анимаций и трансформаций, которые ранее были невозможны. С помощью функции
clamp() можно будет легко устанавливать размер шрифта, который будет зависить от размера вьюпорта, но при этом шрифт будет ограничен верхними и нижними пороговыми значениями.Я уверен, что перечисленные примеры далеко не полный список того, для чего могут быть полезны новые функции.
#css #future #cssfunctions #csswg
https://twitter.com/bdc/status/1100921258839953408
Twitter
Benjamin De Cock
The CSS Working Group agreed this morning on adding many math functions. We now have: • calc() • min() • max() • clamp() • sin() • cos() • tan() • acos() • asin() • atan() • atan2() • hypot() • sqrt() • pow() The face of CSS is rapidly changing.
Недавно на youtube появился очень ламповый документальный фильм, посвящённый Ember.js. В нём создатели Ember.js рассказывают про историю появления фреймворка и рассказывают про то, какое место он занимает в современном мире фронтенд разработки.
Ember.js - эволюционное развитие SproutCore, фреймворка, котрый был разработан в Apple (используется на icloud.com). Чарльз Джоли, который был лидом SproutCore, вместе с Йехуда Катц основали стартап, в котором Йехуда и Том Дейл фуллтайм работали над новым фреймворком Amber.js, который затем переименовали в Ember.js. Сейчас вокруг Ember есть небольшое сильное коммьюнити. Фреймворк используют как в стартапах (Tilde), так и в больших корпорациях (linkedin.com). Ребята видят рост популярности React, Angular и Vue.js, но сдаваться не собираются.
Интересный факт - Йехуда и Том разрабатывали абсолютно всё с помощью парного программирования.
#jsframeworks #emberjs #documentary #history
https://www.youtube.com/watch?v=Cvz-9ccflKQ
Ember.js - эволюционное развитие SproutCore, фреймворка, котрый был разработан в Apple (используется на icloud.com). Чарльз Джоли, который был лидом SproutCore, вместе с Йехуда Катц основали стартап, в котором Йехуда и Том Дейл фуллтайм работали над новым фреймворком Amber.js, который затем переименовали в Ember.js. Сейчас вокруг Ember есть небольшое сильное коммьюнити. Фреймворк используют как в стартапах (Tilde), так и в больших корпорациях (linkedin.com). Ребята видят рост популярности React, Angular и Vue.js, но сдаваться не собираются.
Интересный факт - Йехуда и Том разрабатывали абсолютно всё с помощью парного программирования.
#jsframeworks #emberjs #documentary #history
https://www.youtube.com/watch?v=Cvz-9ccflKQ
YouTube
Ember.js: The Documentary
Starring Yehuda Katz and Tom Dale (co-creators of Ember.js), as well as many other big names from the #Ember community, "Ember.js: The Documentary" explores why and how #Emberjs came to be, the pioneers behind its creation and the life-altering decisions…
Продолжаем чтение статей Акселя Раушмайера (что поделать, они очень хороши). В этот раз попалась статья про оптимизацию хвостовых вызовов (tail call optimization - TCO) в ES2015.
Всё написано по делу и с хорошими примерами. Рассказывается про стек вызовов. Объясняется то, в каких случаях будет происходить оптимизация вызовов и в каких не будет, при этом даются советы про то, как это исправить. Например, некоторые рекурсивные функции без хвостовой оптимизации могут быть преобразованы в рекурсивную функцию с TCO, если воспользоваться дополнительной функцией-хелпером (как в примере с вычислением факториала).
Наличие оптимизации хвостовых вызовов помогает реализовывать рекурсивные алгоритмы более органично. Жаль только, что TCO, похоже, не скоро будет добавлен в v8 (Chromium) и SpiderMonkey (Firefox) из-за проблем с его реализацией. Поддержка TCO пока только есть в Safari.
#js #tco #fp #es2015
http://2ality.com/2015/06/tail-call-optimization.html
Всё написано по делу и с хорошими примерами. Рассказывается про стек вызовов. Объясняется то, в каких случаях будет происходить оптимизация вызовов и в каких не будет, при этом даются советы про то, как это исправить. Например, некоторые рекурсивные функции без хвостовой оптимизации могут быть преобразованы в рекурсивную функцию с TCO, если воспользоваться дополнительной функцией-хелпером (как в примере с вычислением факториала).
Наличие оптимизации хвостовых вызовов помогает реализовывать рекурсивные алгоритмы более органично. Жаль только, что TCO, похоже, не скоро будет добавлен в v8 (Chromium) и SpiderMonkey (Firefox) из-за проблем с его реализацией. Поддержка TCO пока только есть в Safari.
#js #tco #fp #es2015
http://2ality.com/2015/06/tail-call-optimization.html
В январе этого года на www.javanoscriptjanuary.com опубликовали статью гуглера Майка Самуэля "Defensive JavaScript" про то, каких подходов следует придерживаться, чтобы писать безопасный код.
Просто перечислю основные пункты из статьи. Не доверяйте кастомным проверкам, так как в процессе тестирования ложно-негативные случаи выявляются с меньшей вероятностью, лучше воспользоваться готовым и проверенным временем инструментом. Проверяйте предположения перед тем, как делать то, что нельзя отменить, например, предположение о том, что строка безопасна, при использовании
Статья хорошая, несмотря на то что есть проблемы с форматированием. Всегда интересно прочитать про то "как там у них". Очень оценил большое количество ссылок на релевантные темы. В общем, рекомендую.
#js #security
https://www.javanoscriptjanuary.com/blog/defensive-javanoscript
Просто перечислю основные пункты из статьи. Не доверяйте кастомным проверкам, так как в процессе тестирования ложно-негативные случаи выявляются с меньшей вероятностью, лучше воспользоваться готовым и проверенным временем инструментом. Проверяйте предположения перед тем, как делать то, что нельзя отменить, например, предположение о том, что строка безопасна, при использовании
myDOMNode.innerHTML = x; или response.write(x); на сервере. Не стоит пренебрегать дополнительными уровнями защиты, даже если они кажутся избыточными. Если вы используете статическую типизацию, это не повод отказываться от дополнительных проверок пользовательских данных.Статья хорошая, несмотря на то что есть проблемы с форматированием. Всегда интересно прочитать про то "как там у них". Очень оценил большое количество ссылок на релевантные темы. В общем, рекомендую.
#js #security
https://www.javanoscriptjanuary.com/blog/defensive-javanoscript
В рассылке сайта dev.to попалась статья про прфессинальное выгорание. Это очень серьёзная проблема, к которой, к сожалению, иногда относятся несерьёзно.
В статье Молли Струв рассказывает про свой случай. Она стала старшим разработчиком и начала очень сильно перерабатывать. Прошло время - у неё пошатнулись отношения с коллегами. Один человек из её команды поговорил с ней про то, что с ней происходит. В итоге вся команда решила принять очень странное для неё решение: Молли кикнули из некоторых рабочих чатов и отстранили от некоторых задач. Несколько недель она приходила в себя, так как причин для переработок больше не было. Прошло какое-то время и она поняла, что, действительно, у неё есть проблема, с которой надо работать. В итоге всё наладилось и она вернулась в здоровый режим работы...
Пожалуйста, берегите себя и тех, кто вас окружает.
#productivity
https://dev.to/molly_struve/i-cant-do-it-all-my-burnout-story-1e54
В статье Молли Струв рассказывает про свой случай. Она стала старшим разработчиком и начала очень сильно перерабатывать. Прошло время - у неё пошатнулись отношения с коллегами. Один человек из её команды поговорил с ней про то, что с ней происходит. В итоге вся команда решила принять очень странное для неё решение: Молли кикнули из некоторых рабочих чатов и отстранили от некоторых задач. Несколько недель она приходила в себя, так как причин для переработок больше не было. Прошло какое-то время и она поняла, что, действительно, у неё есть проблема, с которой надо работать. В итоге всё наладилось и она вернулась в здоровый режим работы...
Пожалуйста, берегите себя и тех, кто вас окружает.
#productivity
https://dev.to/molly_struve/i-cant-do-it-all-my-burnout-story-1e54
DEV
I Can't Do It All: My Burnout Story
Sometimes you can't handle burnout on your own and you need someone else to step in.
Для того чтобы разобраться в нюансах настройки кэширования ресурсов на стороне клиента, советую прочитать очень хорошую статью Гарри Робертса "Cache-Control for Civilians", которую он опубликовал буквально пару дней назад.
В статье разбираются как распространённые методы управления кэшом, например, использование заголовка Cache-Control, так и новые механизмы, например, директива immutable и заголовок Clear-Site-Data. Рассказывается про кэш-бустинг. Из этой части я узнал, что cloudflare удаляет query string, если он используются для бустинга ассетов. То есть
Статья, как я уже говорил в начале, хорошая, но мне кажется, что она была бы ещё лучше, если бы в ней был более детальный разбор работы no-cache.
#http #cache
https://csswizardry.com/2019/03/cache-control-for-civilians/
В статье разбираются как распространённые методы управления кэшом, например, использование заголовка Cache-Control, так и новые механизмы, например, директива immutable и заголовок Clear-Site-Data. Рассказывается про кэш-бустинг. Из этой части я узнал, что cloudflare удаляет query string, если он используются для бустинга ассетов. То есть
style.css?v=1.2.14 превращается просто в style.css. Ещё в статье есть пара практических советов настройки кэширования для определённых видов страниц.Статья, как я уже говорил в начале, хорошая, но мне кажется, что она была бы ещё лучше, если бы в ней был более детальный разбор работы no-cache.
#http #cache
https://csswizardry.com/2019/03/cache-control-for-civilians/
Csswizardry
Cache-Control for Civilians – CSS Wizardry
What does Cache-Control really do? In basic terms? Let’s find out!
Кайл Симпсон (автор "You Don't Know JS") у себя в твиттере поделился своими наблюдениями про то, как иногда используются функции, содержащие
Если вы замечаете, что вам становятся нужны стрелочные функции для сохранения контекста и что вы чрезмерно используете
То его можно заменить паттерном "Модуль":
fu
#js #context
https://twitter.com/getify/status/1101491957916938240?s=21
this.Если вы замечаете, что вам становятся нужны стрелочные функции для сохранения контекста и что вы чрезмерно используете
.bind() или старый-добрый var self = this;, то всё это симптомы того, что вы боритесь с this. Например, если такой класс используется в вашей программе автономно:class Foo {
constructor(x) {
this.x = x;
this. bar = () => this.baz(this.x + 1);
this.baz = v => v * 2;
}
}
var a = new Foo(20);
btn.addEventListener("click",a. bar); // 42То его можно заменить паттерном "Модуль":
fu
nction Foo(x) {
return { bar, baz };
function bar() { return baz(x + 1); }
function baz(v) { return v * 2; }
}
var a = Foo(20);
btn.addEventListener("click",a. bar); // 42
Подобный избыточный код может возникать просто из-за привычек или эмоциональной привязанности к классам. Но всё же лучше всего использовать правильный инструмент, вместо того чтобы бороться с ним.#js #context
https://twitter.com/getify/status/1101491957916938240?s=21
Twitter
getify
The vast majority of uses I see of `this`-based functions in JS, they're not actually getting any benefit from opting into that mechanism. It's like many devs just adopt that style of coding out of habit, not out of neccessity.
В 2017-ом году Анна Селезнёва из Злых Марсиан выступала на Web Standards Days с докладом "Знакомьтесь, модальное окно".
Это очень хороший доклад про то, какие есть подходы при создании модальных окон в вебе. Аня делится практическими советами реализации модальных окон и затрагивает вопросы доступности и юзабилити. Из доклада я узнал про экспериментальный атрибут
Доклад был в 2017-ом году. На данный момент его можно дополнить тем, что элемент
#webstandards #ui #a11y #talk
https://www.youtube.com/watch?v=s6PI8pKQxgo
Это очень хороший доклад про то, какие есть подходы при создании модальных окон в вебе. Аня делится практическими советами реализации модальных окон и затрагивает вопросы доступности и юзабилити. Из доклада я узнал про экспериментальный атрибут
inert, с помощью которого можно сделать так, чтобы элементу нельзя было выставить фокус с клавиатуры, и focus-lock - библиотеку для захвата фокуса.Доклад был в 2017-ом году. На данный момент его можно дополнить тем, что элемент
<dialog> стал официальной частью стандарта HTML 5.2 в 2018-ом году.#webstandards #ui #a11y #talk
https://www.youtube.com/watch?v=s6PI8pKQxgo
YouTube
Знакомьтесь, модальное окно, Анна Селезнёва
Что может быть привычнее! Но всегда ли оно оправдано? И если без него не обойтись, то как создать его правильно? Лучшие рекомендации специалистов по UX и доступности, а также немного жизненного опыта.
Анна Селезнёва на конференции Web Standards Days 21 октября…
Анна Селезнёва на конференции Web Standards Days 21 октября…
Наткнулся на пост, написанный Рейчел Эндрю в 2016 году, в котором она рассказывает про то, почему не будет CSS4 "Why there is no CSS4 - explaining CSS Levels".
В статье Рейчел говорит про то, что cамая последняя монолитная спецификация была версии 2.1. Участники рабочей группы решили, что для более эффективной разработки новых стандартов её стоит разбить на части. Поэтому следующая спецификация уже состояла из отдельных документов, так называемых "модулей". И если вы читаете какую-то книгу или статью про CSS3, на самом деле вы читаете про набор разных документов.
Существующим стандартам, которые являются развитием предыдущей версии CSS2.1 был присвоен "Level 3" (например, "CSS Selectorls Level 3"). А новым фичам, которых раньше не было - "Level 1" (например, "CSS Flexible Box Layout Module Level 1"). Такое разбиение позволяет участникам рабочей группы работать независимо над разными частями CSS, не блокируя релизы новых версий спецификаций соседних модулей.
#css #webstandards #csswg
https://www.rachelandrew.co.uk/archives/2016/09/13/why-there-is-no-css4-explaining-css-levels
В статье Рейчел говорит про то, что cамая последняя монолитная спецификация была версии 2.1. Участники рабочей группы решили, что для более эффективной разработки новых стандартов её стоит разбить на части. Поэтому следующая спецификация уже состояла из отдельных документов, так называемых "модулей". И если вы читаете какую-то книгу или статью про CSS3, на самом деле вы читаете про набор разных документов.
Существующим стандартам, которые являются развитием предыдущей версии CSS2.1 был присвоен "Level 3" (например, "CSS Selectorls Level 3"). А новым фичам, которых раньше не было - "Level 1" (например, "CSS Flexible Box Layout Module Level 1"). Такое разбиение позволяет участникам рабочей группы работать независимо над разными частями CSS, не блокируя релизы новых версий спецификаций соседних модулей.
#css #webstandards #csswg
https://www.rachelandrew.co.uk/archives/2016/09/13/why-there-is-no-css4-explaining-css-levels
The site of Rachel Andrew, writer, speaker and web developer
Why there is no CSS4 - explaining CSS Levels
We had CSS1, and CSS2. We even had CSS2.1 and we then moved onto CSS3 – or did we? This post is a quick explanation of how CSS is versioned today.
Бенедикт Мюрер - разработчик v8 - пару дней назад опубликовал дизайн-документ, посвящённый оптимизации конкатенации строк в JS.
Конкатенация строк - одна из основных операций над строками, у которой, как оказывается, есть хороший потенциал для ускорения. Если конкатенация будет оптимизирована, то решения для сервер сайд рендеринга станут ещё быстрее (именно на этом примере Бенедикт показывает важность оптимизации).
В документе также рассказывается про текущий механизм оптимизации строк - "ropes". Приводится пример того, как можно написать один вид конкатенации в двух разных вариантах: оптимизированном и неоптимизированном. Но разработчики v8 предупреждают, чтобы мы не кидались переписывать свой код. Движки будут учиться конкатенировать строки более эффективно самостоятельно, если с этим возникнут проблемы, тогда (возможно) в языке появится новый StringBuilder API.
#js #v8 #strings #future #performance
https://twitter.com/bmeurer/status/1102452256794906625
Конкатенация строк - одна из основных операций над строками, у которой, как оказывается, есть хороший потенциал для ускорения. Если конкатенация будет оптимизирована, то решения для сервер сайд рендеринга станут ещё быстрее (именно на этом примере Бенедикт показывает важность оптимизации).
В документе также рассказывается про текущий механизм оптимизации строк - "ropes". Приводится пример того, как можно написать один вид конкатенации в двух разных вариантах: оптимизированном и неоптимизированном. Но разработчики v8 предупреждают, чтобы мы не кидались переписывать свой код. Движки будут учиться конкатенировать строки более эффективно самостоятельно, если с этим возникнут проблемы, тогда (возможно) в языке появится новый StringBuilder API.
#js #v8 #strings #future #performance
https://twitter.com/bmeurer/status/1102452256794906625
Twitter
Benedikt Meurer
✍️ Wrote down some findings regarding string concatenation performance in JavaScript. Seems like this is still an area that could use some work. 🤔 🔗 https://t.co/ddFxOdVRuO
Недавно инженер из Facebook Феликс Клинг опубликовал небольшое веб-приложение, с помощью которого можно разобраться в тонкостях работы алгоритма нестрогого сравнения. Этот алгоритм ("Abstract Equality Comparison") работает тогда, когда сравниваются два значения с помощью оператора
С помощью этого приложения можно наглядно увидеть, почему
#js #tool #ecmanoscript
https://felix-kling.de/js-loose-comparison/
==.С помощью этого приложения можно наглядно увидеть, почему
'\n' == false или [0] == ![0] дадут истинный результат.#js #tool #ecmanoscript
https://felix-kling.de/js-loose-comparison/
felix-kling.de
JavaScript loose comparison (==) step by step
An interactive demonstration how loose comparison (==) works in JavaScript
Алексей Федосов из 2ГИС написал интересную статью про то, как команда веб-карт оптимизирует генерализацию маркеров в новой версии 2gis.ru.
Ребята перешли от использования R-дерева к решению на основе буфера коллизий, где "занятость" определённой позиции определяется наличием закрашенных пикселей в буфере. В итоге они ускорили процесс генерализации маркеров более чем в 10 раз. Но для генерализации подписей на карте продолжают использовать R-дерево, так как буфер коллизий не может дать ответ на то, с чем именно произошло пересечение.
Статья Алексея очень хороший пример того, насколько далеко продвинулся современный веб и какие задачи могут появляться у наших коллег по цеху.
#map #webgl #algorithm #2gis
https://habr.com/ru/company/2gis/blog/442720/
Ребята перешли от использования R-дерева к решению на основе буфера коллизий, где "занятость" определённой позиции определяется наличием закрашенных пикселей в буфере. В итоге они ускорили процесс генерализации маркеров более чем в 10 раз. Но для генерализации подписей на карте продолжают использовать R-дерево, так как буфер коллизий не может дать ответ на то, с чем именно произошло пересечение.
Статья Алексея очень хороший пример того, насколько далеко продвинулся современный веб и какие задачи могут появляться у наших коллег по цеху.
#map #webgl #algorithm #2gis
https://habr.com/ru/company/2gis/blog/442720/
Хабр
Быстрая генерализация маркеров на WebGL-карте
Маркеры — дело полезное. Полезное в разумных количествах. Когда их становится слишком много, польза улетучивается. Как поступить, если требуется отметить на кар...
В феврале Дмитрий Мананников опубликовал в своём блоге новую статью - "Код ревью".
Хочется выделить из неё следующие пункты. Целью код ревью является проверка соответствия задаче, проверка логики, читаемости и т.п. Не цели ревью - дискуссия о цели вносимых изменений, проверка синтаксиса на корректность, организация спора про те или иные конструкции языка. Очень важно разделять большое код ревью на несколько маленьких. Если непонятна какая-то логика, можно попросить её упростить или написать комментарий. Если видите, что можно улучшить, не стесняйтесь предлагать свои варианты решения.
В статье всё сказано по делу. Добавить что-то к ней мне особо нечего, наверное, это из-за того, что мы в Яндекс Маркете придерживаемся тех же подходов, про которые пишет Дмитрий.
#musings #codereview #programming
https://slonoed.net/ru/code-review/
Хочется выделить из неё следующие пункты. Целью код ревью является проверка соответствия задаче, проверка логики, читаемости и т.п. Не цели ревью - дискуссия о цели вносимых изменений, проверка синтаксиса на корректность, организация спора про те или иные конструкции языка. Очень важно разделять большое код ревью на несколько маленьких. Если непонятна какая-то логика, можно попросить её упростить или написать комментарий. Если видите, что можно улучшить, не стесняйтесь предлагать свои варианты решения.
В статье всё сказано по делу. Добавить что-то к ней мне особо нечего, наверное, это из-за того, что мы в Яндекс Маркете придерживаемся тех же подходов, про которые пишет Дмитрий.
#musings #codereview #programming
https://slonoed.net/ru/code-review/
slonoed.net
Код ревью
Базовые принципы ревью кода, которые помогут сделать процесс не только приятным, но и полезным.
Хочу поделиться полезной статьёй Мартина Чаова "Using SSE Instead Of WebSockets For Unidirectional Data Flow Over HTTP/2", в которой он описывает преимущества и недостатки разных подходов к реализации общения браузера и сервера.
В статье делается небольшой обзор Polling и WebSocket и подробно разбирается работа Server-Sent Events (SSE). Главное преимущество SSE относительно Polling состоит в том, что при его использовании нам достаточно одного соединения. Преимущество относительно WebSocket - нет необходимости устанавливать полноценное двунаправленное соединение между клиентом и сервером, которое приводит к более сложной архитектуре и большей требовательности к ресурсам, что очень критично для мобильных устройств.
SSE полезен в том случае, когда вам достаточно однонаправленного потока данных с сервера. При этом в браузере поддержка SSE обеспечивается с помощью интерфейса
#polling #sse #realtime #websocket
https://www.smashingmagazine.com/2018/02/sse-websockets-data-flow-http2/
В статье делается небольшой обзор Polling и WebSocket и подробно разбирается работа Server-Sent Events (SSE). Главное преимущество SSE относительно Polling состоит в том, что при его использовании нам достаточно одного соединения. Преимущество относительно WebSocket - нет необходимости устанавливать полноценное двунаправленное соединение между клиентом и сервером, которое приводит к более сложной архитектуре и большей требовательности к ресурсам, что очень критично для мобильных устройств.
SSE полезен в том случае, когда вам достаточно однонаправленного потока данных с сервера. При этом в браузере поддержка SSE обеспечивается с помощью интерфейса
EventSource, который появился в стандарте HTML5.#polling #sse #realtime #websocket
https://www.smashingmagazine.com/2018/02/sse-websockets-data-flow-http2/
Smashing Magazine
Using SSE Instead Of WebSockets For Unidirectional Data Flow Over HTTP/2 — Smashing Magazine
Whenever we design a web application utilizing real-time data, we need to consider how we are going to deliver our data from the server to the client. The default answer usually is "WebSockets." But is there a better way? Let's compare three different methods:…
Увидел интересный тред в твиттере (по сути статью), в котором Colm MacCárthaigh, рассказал про основные принципы работы современных алгоритмов шифрования. Мне понравился доступный язык, которым в статье объясняются сложные вещи, поэтому очень захотелось перевести её на русский язык.
В статье без погружения в детали разбирается работа современных алгоритмов симметричного шифрования: DES, 3DES, AES, RC4, ChaCha20. Объясняется общий принцип работы этих алгоритмов, что такое вектор инициализации, как формируются поток случайных данных, с которым происходит XOR-инг, схемы проверки целостности и т.п. Ещё в статье упоминается пара интересных атак на шифры.
Несмотря на устрашающий заголовок статья очень доступная. Подобные статьи вдохновляют на изучение чего-то нового. Советую её прочитать просто ради общего развития.
https://habr.com/ru/post/443050/
#cryptography #security
В статье без погружения в детали разбирается работа современных алгоритмов симметричного шифрования: DES, 3DES, AES, RC4, ChaCha20. Объясняется общий принцип работы этих алгоритмов, что такое вектор инициализации, как формируются поток случайных данных, с которым происходит XOR-инг, схемы проверки целостности и т.п. Ещё в статье упоминается пара интересных атак на шифры.
Несмотря на устрашающий заголовок статья очень доступная. Подобные статьи вдохновляют на изучение чего-то нового. Советую её прочитать просто ради общего развития.
https://habr.com/ru/post/443050/
#cryptography #security
Хабр
Самое простое объяснение принципа работы современных алгоритмов симметричного шифрования
(Нашёл в твиттере тред с очень крутым объяснением работы симметричных шифров. Его написал Colm MacCárthaigh один из основных контрибьюторов Apache. Я спросил разрешение Колма на перевод, он любезно...
Вадим Демедес опубликовал небольшую статью про "Ink".
Ink - это разработанная Вадимом библиотека для написания интерактивных консольных интерфейсов с использованием React-компонентов. Ink поддерживает flexbox-лайаут с помощью yoga-layout. Вокруг библиотеки есть небольшая экосистема: можно найти готовые компоненты text-input, spinner, tab, select, gradient и другие.
Ребята из npm и jest выразили свою заинтересованность в проекте, и, возможно, они будут использовать его в будущем.
#library #react #cli
https://vadimdemedes.com/posts/building-rich-command-line-interfaces-with-ink-and-react
Ink - это разработанная Вадимом библиотека для написания интерактивных консольных интерфейсов с использованием React-компонентов. Ink поддерживает flexbox-лайаут с помощью yoga-layout. Вокруг библиотеки есть небольшая экосистема: можно найти готовые компоненты text-input, spinner, tab, select, gradient и другие.
Ребята из npm и jest выразили свою заинтересованность в проекте, и, возможно, они будут использовать его в будущем.
#library #react #cli
https://vadimdemedes.com/posts/building-rich-command-line-interfaces-with-ink-and-react
Пару недель назад у нас в Новосибирске был митап для фронтендеров JSParty. Один из докладов был от Тима Чаптыкова из ВКонтакте: "Оптимизация графики на практике".
В докладе Тим рассказал про практические приёмы оптимизации векторной и растровой графики. Очень подробно разобрал настройки при экспорте изображений из Photoshop, Illustrator и Sketch. Поделился наиболее оптимальными настройками для SVGO, малоизвестными трюками при работе с изображениями и хорошими чек-листами, с которыми можно сверяться при экспорте графики для веба. В докладе есть пара историй из жизни про генерацию графики на клиенте. Не знаю почему, но из доклада я запомнил такой факт, что при сжатии больших JPEG для Retina-дисплеев достаточно качества 51%.
К сожалению, записи видео не было, но есть запись доклада с Frontfest Moscow 2017. Обновлённые слайды можно найти тут.
#graphic #optimization #talk
https://www.youtube.com/watch?v=wexOXAflVX0
В докладе Тим рассказал про практические приёмы оптимизации векторной и растровой графики. Очень подробно разобрал настройки при экспорте изображений из Photoshop, Illustrator и Sketch. Поделился наиболее оптимальными настройками для SVGO, малоизвестными трюками при работе с изображениями и хорошими чек-листами, с которыми можно сверяться при экспорте графики для веба. В докладе есть пара историй из жизни про генерацию графики на клиенте. Не знаю почему, но из доклада я запомнил такой факт, что при сжатии больших JPEG для Retina-дисплеев достаточно качества 51%.
К сожалению, записи видео не было, но есть запись доклада с Frontfest Moscow 2017. Обновлённые слайды можно найти тут.
#graphic #optimization #talk
https://www.youtube.com/watch?v=wexOXAflVX0