Страницы

воскресенье, 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?

среда, 14 декабря 2016 г.

MongoDB Views

В конце ноября вышел релиз MongoDB 3.4, стало быть наконец настал тот час когда можно смело использовать новые фичи, конечно если ваши админы планируют обновлять MongoDB до этой версии. Сегодня хочу затестить еще одну вкусняшку по имени Views. Для примера возьмем запрос, о котором я подробно рассказывал в одном из предыдущих постов, и создадим на его основе вьюху. Выглядит Read-only View как коллекция, документы которой билдятся по aggregation запросу.

воскресенье, 6 ноября 2016 г.

MongoDB Linked List

На этой неделе появилась версия MongoDB 3.4.0 Release Candidate 2 с кучей вкусняшек на борту, которые хочется попробовать уже сейчас. Предлагаю провести дегустацию одного из самых вкусных блюд предстоящего релиза - пайпа по имени $graphLookup - с помощью которого можно выполнять поиск по коллекции рекурсивно. Напишем запрос к коллекции, документы которой имплементируют связный список. Реализация подобной структуры в текущем стабильном релизе на мой взгляд вообще не вариант, и я рад что уже совсем скоро смогу рассчитывать на нее в процессе проектирования.

вторник, 1 ноября 2016 г.

суббота, 1 октября 2016 г.

Что еще почитать по JavaScript

С момента предыдущей публикации по теме мне удалось прочитать следующую литературу по JavaScript: Functional Programming in JavaScript by Luis AtencioFunctional Programming in JavaScript by Dan Mantyla и Professor Frisby's Mostly Adequate Guide to Functional Programming. Кроме того: High Performance Browser Networking - "must read" мануал для веб-разработчика, Out of the Tar Pit - вкуснейшая статья на холиварную тему "imperative vs. declarative" и Designing Data-Intensive Applications - я прочитал так называемый "Early Release" т.к. книга пока еще не издана, когда выйдет в тираж обязательно познакомлюсь с материалом не вошедшим в "раннее издание".

суббота, 3 сентября 2016 г.

VS Code Node.js Debugging

В VS Code есть встроенный дебаггер, но не смотря на то, что я использую этот инструмент уже давно, Node.js код я дебажу с помощью node-inspector. Сначала запускаю дебаггер: node-inspector --web-port 8088 --save-live-edit true --preload false, затем приложение: node --debug app или node --debug-brk app (по ситуации), после чего открываю в браузере интерфейс дебаггера по адресу http://127.0.0.1:8088/?ws=127.0.0.1:8088&port=5858. Расскажу как я пытался перейти на встроенный дебаггер VS Code.

пятница, 19 августа 2016 г.

Node.js HTTP/2

На прошлой неделе среди разработчиков Node.js началось обсуждение реализации протокола HTTP/2. Ждать появления HTTP/2 в Node.js core еще очень долго, но уже сейчас можно затестить фичи этого протокола с помощью модуля node-spdy, который работает как с протоколом SPDY - предшественником HTTP/2, который кстати Google Chrome больше не поддерживает, так и с HTTP/2, обязательно поверх TLS. Расскажу как я тестил фичу по имени HTTP/2 Server Push.

вторник, 9 августа 2016 г.

JavaScript trampolining

Самой ожидаемой фичей ES6 для меня остается proper tail calls (уже рассказывал об этом), которая на сегодня в V8 так и не реализована. Далее покажу один из способов эмуляции "правильного" вызова tail-recursive функций с помощью одного приема по имени trampolining. Название не очень отражает суть, я бы назвал эту технику "развинчивание стэка вручную". Для примера возьмем "традиционную" рекурсивную реализацию функции, возвращающей факториал:

четверг, 4 августа 2016 г.

JavaScript curry

Случилось мне недавно каррировать функцию. Наверное проще было бы заимствовать уже готовый вариант у специально предназначенных для подобных практик инструментов - Lodash или Rambda, но мне этот вопрос показался тривиальным и вряд ли заслуживающим более 30 секунд времени на реализацию. Высказывание уважаемого Douglas Crockford отражает суть: "The making of good software takes time. If you try to make it take less time, it will take more time.".

суббота, 9 июля 2016 г.

VS Code with Tabs

Свершилось чудо! Вчера вышла версия 1.3 текстового редактора Visual Studio Code с поддержкой вкладок! Я использую VS Code уже около года, и отсутствие вкладок было единстенным неудобством этого инструмента. Конец моим страданиям и разочарованиям. Из расширений у меня установлены ESLint и Go, что позволяет вполне комфортно работать с Node.js и Go, в случае необходимости можно найти еще. В общем мелкомягким зачет, хороший инструмент, мне нравится.