Страницы

вторник, 22 декабря 2015 г.

ES6 Lazy vs Eager

Небольшой этюд на тему работы c объектами, реализующими протоколы iterable и iterator, принятые стандартом ECMAScript 6 (он же 2015). Попробуем реализовать "горячий" и "ленивый" варианты итерируемой коллекции, с итераторами (само собой), генераторами, символами (куда же без них) и прочими свистелками (нововведениями стандарта), а также добавим "немного экстрима" в финале, не пытайтесь повторить это дома :).

четверг, 10 декабря 2015 г.

MongoDB Many to Many

Всех, кто работает с MongoDB, поздравляю с релизом версии 3.2.0! Там столько вкусного, это просто праздник какой-то! Предлагаю провести дегустацию одной из самых вкусных, и наверняка самых ожидаемых, вкусняшек - оператора $lookup. Реализуем варианты запросов к коллекциям, которые находятся в отношениях "один ко многим" (left outer join) и "многие ко многим". По ходу используем еще один свежий оператор - $arrayElemAt, а также новые фичи оператора $unwind.

вторник, 10 ноября 2015 г.

Что посмотреть по JavaScript

Сегодня совершил удивительное открытие: у гуру JavaScript по имени Douglas Crockford есть плейлист на youtube, в котором собраны видео его выступлений на различных мероприятиях, на текущий момент в количестве семидесяти штук. В моем плейлисте их около десяти, и чтобы посмотреть что-то новенькое нужно потратить время на то, чтобы найти это самое новенькое, а тут все уже собрано самим автором! Сохранил себе в плейлисты, нужно найти время посмотреть :)

воскресенье, 8 ноября 2015 г.

Node Version Manager for Windows

По-моему от возвращения io.js под крыло Joyent платформа Node.js только выиграла. Сегодня подмолодил nvmx - утилиту для управления версиями Node.js для Windows. Начиная с версий 4.x.x утилита не справлялась с заявленным функционалом по причине изменения url 64-битных дистрибутивов, о чем я узнал на прошлой неделе...

суббота, 3 октября 2015 г.

MongoDB Linked List

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

Node.js debuglog

Не заметил когда в пакете util Node.js появилась такая великолепная фича как debuglog, а также когда пакет util стал частью глобального объекта, может он всегда был в global.util, а я и не знал? В любом случае теперь можно отказаться от использования пакетов типа debug в пользу нативного инструмента. Предлагаю затестить как работает debuglog:

Node.js error custom property

Как создать ошибку в JavaScript - разумеется с помощью конструктора Error. В коде веб-сервисов на Node.js как правило используется функция-обработчик в которую прилетают все ошибки, где и происходит "магия" логгирования и прочая кастомная логика обработки ошибок. Сегодня расскажу как присвоить ошибке статус или иное кастомное свойство с помощью функции-фабрики и, самое главное, удалить упоминание о месте рождения ошибки из стека.

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

MongoDB && Elasticsearch Node.js package

Не знаю как в настоящий момент обстоят дела с поддержкой river plugins в Elasticsearch, а Node.js-модуль по имени mongodb-es-river уже готов оказать помощь в индексировании документов MongoDB в Elasticsearch, теперь с возможностью горизонтального масштабирования процесса "перетекания" данных. Далее расскажу как приготовить river-сервис на основе перечисленных выше ингредиентов.

четверг, 13 августа 2015 г.

MongoDB bitwise query operators

В MongoDB уже довольно давно существует оператор по имени $bit для выполнения битовых операций and | or | xor. И вот, как говорится не прошло и года, а на самом деле спустя четыре года, в версии 3.1.6 появилась возможность выполнять запросы по битовой маске. Я ждал эту фичу, предлагаю затестить:

пятница, 24 июля 2015 г.

Node.js. Scaling apps

Секрет создания больших приложений - не создавать большие приложения. В этом посте я хочу раскрыть рецепт приготовления масштабируемых приложений на архитектуре микросервисов на платформе Node.js с использованием MongoDB. Для примера приготовим какое-нибудь бесполезное веб-приложение. Особенность этого рецепта в том, что ничего кроме Node.js и MongoDB не потребуется.

воскресенье, 21 июня 2015 г.

MongoDB && Node.js && Elasticsearch

Продолжение темы предыдущего поста. Недолго музыка играла: разработчики эластика сообщили о том, что river-плагины устарели, и будут постепенно выводится из оборота, подробности можно узнать в этом посте на блоге эластика. Поэтому я начал потихоньку готовить свой велосипед в виде npm-пакета для Node.js. Разумеется на текущий момент, что называется not ready for production, тем не менее решает вопрос, что и демонстрирует следующее видео:

понедельник, 1 июня 2015 г.

MongoDB && Elasticsearch

Как подружить MongoDB и Elasticsearch с помощью MongoDB River Plugin for ElasticSearch. По ходу развернем MongoDB Replica Set, Elasticsearch Cluster, создадим пару коллекций с парой тестовых документов в каждой из них, пару индексов по одному на коллекцию, а также затестим что получилось путем отправки нескольких нехитрых запросов через cURL. В процессе используем ConEmu (у меня окна в качестве ОС), MongoDB Shell, Git SCM (Bash + cURL) и Python JSON tool (для читабельного вывода в консоль ответов на запросы в формате JSON).

воскресенье, 24 мая 2015 г.

Sublime Text Packages

Недавно на просторах сети мне повстречался небольшой видеоролик с участием известного в мире JavaScript девелопера Addy Osmani на тему плагинов для моего любимого текстового редактора. Далее поделюсь списком плагинов, которые установлены у меня: запускаю Sublime Text (я использую портабельную версию 3), выполняю команду Package Control: List Packages ...

суббота, 16 мая 2015 г.

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

С момента предыдущей публикации по теме мне удалось прочитать еще несколько свежих мануалов по JavaScript: Effective JavaScript. 68 Specific Ways to Harness the Power of JavaScriptPro JavaScript Development. Coding, Capabilities, and ToolingJavaScript Application Design. A Build First ApproachNode.js Design Patterns, а также пару "классичечких" произведений: JavaScript: The Good Parts и Secrets of the JavaScript Ninja. Далее мои впечатления о каждом из них в двух словах. Должен сразу предупредить уважаемого читателя: из разряда "для начинающих" только последние две книги, остальные предполагают наличие кое-какого "багажа".

суббота, 11 апреля 2015 г.

Node.js HTTP Proxy

Недавно познакомился с модулем по имени http-proxy. На мой взгляд образцовый инструмент - отбивает заявленный функционал на все 100% и в то же время простой как сатиновые трусы. Статистика модуля на GitHub, npm, а также мэйнтэйнер (не нашел подходящее слово в русском языке) в лице nodejitsu говорят сами за себя. Хочу предложить очень простой пример для того чтобы понять о чем речь:

воскресенье, 15 марта 2015 г.

Node.js Promise

Сегодня открыл для себя тот факт, что в Node.js v0.12.x реализовали интерфейс Promise. Нечасто приходится применять эту фичу на практике, т.к. на сервере мне хватает "стандартных" сердств плюс async в "клинических" случаях, а клиентской частью я по-серьезному вообще не занимаюсь, тем не менее решил по-быстрому затестить работает ли вообще Promise в REPL:

воскресенье, 8 марта 2015 г.

MongoDB Set Operators

Пример работы с множествами в MongoDB. В качестве множеств используем массивы. Извлечение данных реализуем на Aggregation Pipeline, в частности с помощью выражений для работы с множествами. По ходу создадим структуру данных, имитирующую взаимоотношения между полами. Будет интересно.

воскресенье, 1 марта 2015 г.

Video to gif

Сегодня мне понадобилось конвертировать видео в формат GIF. Одним только FFmpeg обойтись не удалось, т.к. из видеофайла размером 1MB у меня получилось изображение размером, внимание... 360MB! Поэтому ImageMagick здесь пришелся как нельзя кстати, и вместо одной команды мне пришлось ввести в консоль две:

суббота, 14 февраля 2015 г.

JavaScript runtime code evaluation

Не помню чтобы мне приходилось применять способы интерпретации кода во время выполнения на практике.  Но вчера, в пятницу, в самом конце рабочего дня (только так я могу объяснить причину), как говорится Остапа понесло :). Дальше расскажу как я до этого "докатился", пошагово, с картинками. Просьба не принимать всерьез приведенные листинги, хотя наверняка существуют задачи для решения которых подобные приемы можно считать вполне актуальными. Вот так замысловато я пытаюсь сообщить о том, что в моем случае это был перебор.

суббота, 7 февраля 2015 г.

Lightweight Node Version Manager for Windows

Свершилось чудо: вчера вышел node.js v0.12.0. Кроме того активно развивается io.js: во вторник увидел свет билд v1.1.0. Я уже рассказывал о том, что существующие инструменты управления версиями node для Windows меня не устраивают. Поэтому я все-таки нашел время на разработку своего инструмента, который решает вопрос... and now, ladies and gentlemen, may I proudly present to you... nvmx!

воскресенье, 1 февраля 2015 г.

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

Вот уже почти два месяца прошло с тех пор как я разбил машину. В мясо. Но, как говорится, нет худа без добра: теперь по дороге в офис и обратно у меня есть время почитать что-нибудь из полезного. Например свежую литературу по программированию. И за этот период мне удалось выполнить годовой норматив - познакомиться с тремя на мой взгляд заслуживающими внимания книгами: Functional JavaScript Introducing Functional Programming with Underscore.jsMastering JavaScript Design Patterns и Data Structures & Algorithms with JavaScript. Поделюсь своими впечатлениями от каждой из них в двух словах.

среда, 7 января 2015 г.

Node.js debugger is corrupted

На днях обнаружил одну неприятную особенность Node.js версий > 0.10.33, а именно косяк в отладчике. Для тех, кто дебажит по-стариковски через console.log это конечно ерунда, но я уже давно привык к node-inspector, поэтому пришлось откатиться на версию 0.10.33. Не интересно кто там накосячил - Joyent или Google, будем надеяться что в следующих версиях Node.js пофиксят это баг, да и вообще на мой взгляд пора бы уже 0.12 или 1.0 сбилдить, ECMAScript 6 можно не ждать.

четверг, 1 января 2015 г.

Node.js && (ImageMagick || FFmpeg) Stream

Поискал я готовые модули в npm для работы с ImageMagick и FFmpeg, и то что нашел мне не понравилось. Хотелось бы один поток на входе растасовывать на несколько потоков на выходе, и для этого написал я свой велосипед. В качестве модуля этот код я не вижу, а для примера сгодится. Смотрим внимательно...