Страницы

четверг, 8 июня 2017 г.

HolyJS 2017 Piter

И я там был, мед пиво пил... нет, меда не было, был горячий шоколад, интересные доклады, не менее интересные обсуждения в дискуссионных зонах, и в качестве суперзвезды один из самых известных персонажей в мире JavaScript ... Douglas Crockford !!! Понравились доклады про типизацию: Илья Климов снова пел про Flow + Reason, следом к нему присоединился Patrick Stapfer, ребята из Wrike попытались сравнить Dart с TypeScript и ES2017. После второй дозы фейсбуковского хайпа я подошел к уважаемому Douglas Crockford и задал ему вопрос:

воскресенье, 21 мая 2017 г.

Google Chrome Bookmarks

Некоторые папки панели закладок браузера Google Chrome я использую для того, чтобы сохранить ссылку на страницу, с содержанием которой не мешало бы познакомиться позже, когда будет свободное время. Список ссылок в таких папках напоминает стек - после добавления ссылка становится первой в списке. К сожалению добавление страницы в закладки в Google Chrome больше напоминает добавление в очередь. До поры до времени мне приходилось перетаскивать ссылки в начало списка сразу же после добавления руками. Попытки найти инструмент для автоматизации этого нехитрого процесса не увенчались успехом, поэтому я написал расширение.

понедельник, 1 мая 2017 г.

TypeScript checkJs

На прошлой неделе была анонсирована версия TypeScript 2.3, в которой появилась возможность выполнять проверку типов "vanilla JS" файлов. Я потрясен! Теперь можно не только линтить, но и тайп-чекить, что в перспективе может позволить создавать еще более надежный код. И для этого совсем не обязательно писать на TypeScript. Достаточно при запуске компилятора использовать следующие опции: --noEmit--allowJs и --checkJs, или как вариант можно добавить поля { noEmit: true, allowJs: true } в tsconfig.json + комментарий // @ts-check в самое начало JavaScript файла.

пятница, 21 апреля 2017 г.

TypeScript Curry

Начал потихоньку писать файлы объявлений к существующему коду и почти сразу же попал на непростые задачи, такие как, например, сигнатура функции каррирования, по-моему не самый простой вопрос. И вот как я его решал: погуглил, как говорится, в гугле, и получилось... что получилось, не без недостатков, если бы была возможность использовать вложенные дженерики, могло бы получиться лучше, тем не менее в моем случае решает. Вот как-нибудь так:

воскресенье, 9 апреля 2017 г.

VS Code JavaScript Intellisense

Не смотря на то, что с TypeScript я познакомился еще до появления на свет Visual Studio Code, мне еще ни разу не довелось использовать его в повседневной работе. Пишу на ES6 (Node.js), стараюсь документировать код с помощью jsdoc, но зачастую одних только комментов не хватает для того, чтобы intellisense подсказал мне с чем я имею дело в текущий момент времени, а иногда очень хотелось бы (и не мне одному), поэтому я решил попробовать миксовать declaration files с "vanilla JS".

суббота, 1 апреля 2017 г.

Safely Accessing Deeply Nested Values In JavaScript

Весь этот функциональный хайп начинает действовать на нервы, честное слово. На днях прочитал пару постов о вариантах реализации доступа к свойствам объекта в JavaScript, и у меня возникли вопросы к авторам по коду. К примеру зачем в случае отсутствия свойства объекта возвращать null, тогда как "канонически" это undefined? Для того чтобы притянуть это за уши к Maybe? Или какого коллайдера вместо цикла использовать функцию высшего порядка? Для "красоты"? Супер полезная абстракция, согласен, зачастую очень даже уместная, но это не тот случай.

четверг, 16 марта 2017 г.

JavaScript Execution Optimization

Небольшой этюд на тему оптимизации в V8, или сказ о том как мономорфизм влечет за собой оптимизацию, а полиморфизм (не путаем с subtype или parametric polymorphism), в свою очередь, деоптимизацию JavaScript функций, с картинками. По мотивам публикаций Benedikt Meurer и Вячеслава Егорова. Для того, чтобы по-взрослому разобраться в том, как оптимизировать JavaScript код, рекомендую почитать публикации уважаемых разработчиков, упомянутых выше, а также документацию V8. Дисклеймер: "Premature optimization is the root of all evil", - Donald Knuth.

пятница, 24 февраля 2017 г.

Node.js at scale. Configuration

Вчера мне попался на глаза один пост с интригующим заголовком: "О структуре и масштабировании сложных приложений Node.js". После прочтения сжечь хочу рассказать о своем варианте управления конфигурацией "сложных приложений" Node.js. Не смотря на то, что в npm есть целый ряд модулей (npm search configuration), самый известный из которых, nconf, умеет не только миксовать process.argv, process.env и содержимое файлов (по моему основной функционал подобных решений), но и еще много чего (ненужного на мой взгляд), я написал свой велосипед. Знакомьтесь, hackee.

воскресенье, 15 января 2017 г.

Node.js Event Loop

А знаете ли вы, что process.nextTick и Promise используют отдельный Event Loop внутри Event Loop, а fs, crypto.randomBytes и crypto.pbkdf2, dns.lookuphttp.get и http.request (вызванные с именем хоста, а не ip-адресом, и поэтому вызывающие dns.lookup), а также C/C++ аддоны, которые используют libuv thread pool, создают свои собственные потоки (по умолчанию до 4, максимум до 128), и таким образом Node.js Event Loop не совсем Single Threaded, а скорее Mostly Single Threaded?