Страницы

среда, 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 г.

JavaScript Persons

В мире JavaScript немало "весовых" персон которые так или иначе оказывают влияние на "рядовых" JavaScript разработчиков. На меня больше всего повлияли трое: Douglas Crockford, Reginald Braithwaite и Eric Elliott. Знакомьтесь: 1) Douglas Crockford: сайтпрофиль в Google+, плейлисты на Youtube, 2) Reginald Braithwaite: сайт, профиль в Twitter, книги, 3) Eric Elliott: профиль в Medium, профиль в Twitter, коллекция ссылок по теме JavaScript.

суббота, 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, в случае необходимости можно найти еще. В общем мелкомягким зачет, хороший инструмент, мне нравится.

пятница, 8 июля 2016 г.

ES6 split unicode string

Вчера увидел пост о том, как разбить строку в массив символов юникода с помощью регулярного выражения. Хотел было предложить автору попробовать использовать спред, но он волшебным образом меня опередил и в постскриптуме привел результаты своих тестов, которые показывают более высокую производительность регулярного выражения против спреда. По теме производительности JavaScript хочу предложить пару на мой взгляд наивкуснейших материалов: блог Вячеслава Егорова, а также свежее видео его доклада на конференции HolyJS 2016.

суббота, 14 мая 2016 г.

JavaScript Symbol.species

Наверное самой ожидаемой фичей ES6 для меня является proper tail calls, которая в V8 похоже на сегодня не реализована. Недавно обратил внимание на то, что в Node.js версии 6.0.0 реализовали другую полезную фичу по имени Symbol.species, которая позволяет подклассам переопределить конструктор, используемый по умолчанию для создания новых объектов. Правда пока только под флагом --harmony, поэтому с наследованием от встроенных конструкторов я бы повременил.

воскресенье, 1 мая 2016 г.

Go Tail MongoDB

На днях написал простенький Go пакет по имени mgotail, предназначенный для получения свежих документов из MongoDB capped collections с помощью tailable cursors. Node.js модуль mongodb-tail справляется с этой задачей, но в силу своей природы не эффективен если использовать несколько процессорных ядер. Писать код на Go я начал совсем недавно, пока как говорится "верхушек нахватался", может быть поэтому решение на Go мне кажется и быстрее, и надежнее.

суббота, 2 апреля 2016 г.

JavaScript Role Based Access Control

На днях по случаю увидел один пост, посвященный реализации контроля доступа в Node.js, и предложенный вариант меня немного удивил. После просмотра реализации "ролей" я понял в каком ключе написано все остальное, пролистал пост до конца и был удивлен еще больше - автор поста пишет книги по безопасности Node.js приложений! Тут "Остапа понесло" и я решил прокомментировать промо этого поста: "It could be implemented much easier using bit masks".

суббота, 12 марта 2016 г.

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

Очередная порция мануалов по JavaScript, с которыми я познакомился за период, прошедший с момента предыдущей публикации по теме: Exploring ES6Speaking JavaScript и Setting up ES6 от Dr. Axel Rauschmayer (автора ②ality - блога по веб-разработке), а также Understanding ECMAScript 6 от Nicholas C. Zakas (не менее известного веб-девелопера). Весь материал по ссылкам полностью читабелен онлайн. Кроме того рекомендую просто обалденное на мой взгляд видео - JavaScript Combinators, the “six” edition - свежий доклад с NDC Conferences от уважаемого Reginald Braithwaite. Для "гурманов" могу предложить Category theory for JavaScript programmers: плейлист состоящий из 28 видео на тему "Теория категорий".

понедельник, 22 февраля 2016 г.

Node.js Stream. Promise vs. Callback

Пайпинг потоков в Node.js - дело нехитрое. Главное не забывать слушать ошибки в каждом потоке. И на сегодня это единственный кейс, где я нахожу оправданным использование промисов вместо функций обратного вызова. Объясню почему на простом примере. Для начала напишем три кастомных конструктора, которые наследуют от ReadableTransform, Writable и работают в Object Mode:

среда, 10 февраля 2016 г.

Node.js MongoDB Iterate Cursor

Три паттерна итерации по курсору MongoDB: первый - "классический" - на старых добрых функциях обратного вызова, второй - "на любителя" - на промисах, третий - "для извращенцев эстетов" - на промисах и генераторах с использованием co, второй и третий можно применять только со второй версией MongoDB Native NodeJS Driver и Node.js не меньше четвертой версии.

воскресенье, 7 февраля 2016 г.

Node.js FFmpeg Stream

Как определить наличие обложки в аудио файле и вытащить ее из потока с помощью FFmpeg на Node.js. Может пригодиться для загрузки музыки на веб-сайт, создания каталога музыкальных произведений из уже существующих файлов и т.п. Для приготовления понадобится аудио файл в формате mp3, без обложки, плюс пара картинок в формате JPG и PNG.

воскресенье, 10 января 2016 г.

ES6 Iterators

Пара этюдов на тему итераторов, по мотивам The Carpenter Interviews for a Job - эпизода книги JavaScript Allongé, а также поста блога Реджинальда Брэйтуэйта (имя которого я упоминал в предыдущем посте) - Solving a Coding Problem with Iterators and Generators. Первый лишний раз подтверждает принцип KISS (в контексте изложения у меня ассоциируется с библейскими бисером и свиньями), второй... просто моя интерпретация с вариациями на тему.

пятница, 1 января 2016 г.

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

На исходе только что ушедшего года мне удалось прочитать еще пару трудов по JavaScript: JavaScript Allongé и JavaScript Spessore. На мой взгляд очень интересное чтиво: "вектор" обоих мануалов (приятно думать что я его правильно "вкурил") показался мне очень близким, да и манера изложения автора по имени Reginald Braithwaite, мне понятна. По ссылкам можно "читать онлайн" (я так и сделал) или собрать из HTML свои экземпляры в какой-нибудь PDF. Еще один ресурс автора "в мемориз", теперь и я слежу за тобой :). А вот еще несколько ссылок по теме: