Страницы

воскресенье, 21 декабря 2014 г.

Node.js Stream Error Handling

Обработка ошибок в объектах, реализующих интерфейс Stream в Node.js - задача нетривиальная. Прежде чем мне случилось "по-взрослому" поработать с потоками я полагал, что событие error останавливает процесс передачи данных. Оказалось что это не так. Приведу несколько примеров, демонстрирующих это, в моем случае неожиданное, поведение. Заодно рассмотрим кастомную реализацию некоторых типов интерфейса Stream.

воскресенье, 14 декабря 2014 г.

AngularJS & HTML Service Example App

Следующая серия саги о том, как я миксовал AngularJS и Google Apps Script. На днях ребята из Google "ввели в эксплуатацию" новый режим песочницы HTML Service - IFRAME, который не использует Caja Compiler. В связи с этим событием я решил подмолодить тестовое приложение, а также опубликовать его исходный код.

воскресенье, 7 декабря 2014 г.

Node version management tool for Windows

Управление версиями node.js в Windows не особенно отличается от аналогичного процесса в других осях. Прежде я использовал nvmw, но вчера мне понадобилась версия 0.11.14 и я не смог ее установить с помощью этого скрипта. Решил не выяснять причину фэйла, и уже хотел было приступить к созданию собственного велосипеда - вопрос то несложный, но все-таки лень, которая как известно двигатель прогресса, сподвигла меня поискать иное решение. В результате я познакомился с nvm-windows, написанном, внимание... на Go! Автор жжет :).

среда, 19 ноября 2014 г.

Lightweight wrapper on MongoDB native Node.js driver

Модуль mongow - инструмент моделирования объектов MongoDB для Node.js разработчиков. С его помощью можно решать задачи, для которых Mongoose слишком много, а MongoDB native Node.js driver слишком мало. Для быстрого старта качаем архив, запускаем тестовое приложение и знакомимся с кодом.

суббота, 15 ноября 2014 г.

Слушаем вместе

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

суббота, 1 ноября 2014 г.

AngularJS & Goolge Apps Script Example

Продолжение темы мэшапа AngularJS и Google Apps Script, озвученной ранее. Пример приложения, которое я назвал Angular-GAS-Zoo. В качестве источника данных - таблица на Google Drive, на бэкэнде - HTML Service. Реализованы CRUD-операции, фильтры, сортировка, выбор столбцов. Никакой авторизации, валидации, welcome.

четверг, 30 октября 2014 г.

Как получить длину массива документа MongoDB

В MongoDB нет "нативного" метода получения длины массива, только с помощью aggregation framework, стало быть эта нехитрая операция на самом деле не особенно "дешевая", что желательно принимать во внимание еще на этапе проектирования. В моем арсенале есть три способа решения этого вопроса.

суббота, 25 октября 2014 г.

AngularJS & Google Apps Script

Сказ про то, как я дружил AngularJS с Google Apps Script, в частности с сервисом по имени HTML Service. Сразу хочу признаться в том, что от перечисленных продуктов "корпорации добра" я не в восторге, а попытки их мисковать на мой взгляд можно охарактеризовать как "увлекательный досуг для мазохистов", но тем не менее...

воскресенье, 28 сентября 2014 г.

Объекты в JavaScript. Вариации на тему

В последнее время я все чаще стал использовать геттеры, сеттеры, создавать объекты и определять их свойства с помощью соответствующих методов конструктора Object, а также предотвращать возможность их последующего изменения. Не потому что "так круче", просто в моем случае для этого есть причины. Сегодня хочу осветить несколько "продвинутых", на самом деле уже давно существующих, приемов работы с объектами в JavaScript на простых примерах.

воскресенье, 21 сентября 2014 г.

MongoDB ObjectId by date

Продолжение темы предыдущего поста - зачем мне все это? К примеру для того, чтобы вытащить документы коллекции MongoDB по дате создания. Возьмем коллекцию messages, созданную в одном из предыдущих постов. Отдельное поле, содержащее дату или timestamp отсутствует, однако дату создания документа можно получить по ObjectId.

воскресенье, 14 сентября 2014 г.

JavaScript Date toUTCString vs. toString

Не знаю какого коллайдера мне вздумалось реализовать возможность принимать в GET запросе параметр, содержащий дату в виде строки, хватило бы и unix time stamp, но на решение этого совсем необязательного вопроса я потратил гораздо больше времени чем планировал. В общем история очередного фэйла.

суббота, 6 сентября 2014 г.

Subime Text command line helper for Windows

На прошлой неделе вышел новый стабильный билд моего любимого текстового редактора Sublime Text. Удивила "новая фича" по имени "command line helper" - subl.exe - неужели в самом деле существовала проблема открыть файл(ы) || каталог(и) в редакторе из консоли Windows? Поделюсь своим решением:

воскресенье, 31 августа 2014 г.

MongoDB Tailable Cursors

В повседневной работе я нередко использую непереводимую игру слов с использованием местных идиоматических выражений. Как к примеру сказать по-русски "_id"? Я так и говорю: "underscore id". Сегодня расскажу про "tailable cursors" - курсоры, которые благодаря тому, что не закрываются сразу же после получения заключительной "порции" данных, отвечающих поисковому запросу, как это просходит с "обычными" курсорами, продолжают получать документы сразу же после их добавления в целевую коллекцию. Их можно применять только по отношению к "capped collections".

суббота, 23 августа 2014 г.

Как приручить malware

На днях я обнаружил в автозапуске Windows своего домашнего ноута запись "Microsoft Visual C++ 2010", бинарник которого почему-то находился в каталоге %APPDATA%. Замаскированный таким образом майнер биткойнов поселился также и на компьютерах моих детей, так как залетел одновременно с установкой одной игрушки, которую попросил мой младший сын.

воскресенье, 20 июля 2014 г.

Node.js Singleton Sample App

Пример приложения на Node.js + Express + MongoDB Native Driver в продолжение темы предыдущего поста, которое можно рассматривать в качестве "заготовки" модели. Приложение использует общий конструктор моделей доступа к данным, в котором для примера реализован единственный метод для извлечения одного документа коллекции, кэш созданных объектов, а также кэш запросов к базе данных.

суббота, 19 июля 2014 г.

Node.js Singleton

Небольшой этюд на тему шаблона singleton в контексте модулей Node.js. Как известно Node.js кэширует модули после первой загрузки, однако с кэшированием экспортируемых модулем объектов возможны варианты, в частности в случае экспорта конструктора объекта. Изложение пошаговое, в картинках. Результат - мой вариант решения вопроса. Заодно рассмотрим вопрос экспорта подключения к MongoDB.

воскресенье, 6 июля 2014 г.

Async vs. Callback Hell. Update

В предыдущем посте я показал пару приемов применения модуля async на простом примере. Сегодня этот пост мне показался незавершенным, тема не до конца раскрытой, код недописанным, Callback Hell недолеченным, в общем спешу поделиться более убедительным по моему мнению решением рассмотренного вопроса.

среда, 2 июля 2014 г.

Async vs. Callback Hell

Короткая зарисовка на тему управления потоком выполнения с помощью async. В большом приложении профит от применения этого модуля трудно переоценить. Я использую его уже не первый год и сегодня попробую показать пару приемов. На мой взгляд async - лучшее на текущий момент лекарство от Callback Hell.

воскресенье, 22 июня 2014 г.

Готовим инструменты для отладки node.js apps

Описанный далее способ ни в коем случае не претендует на статус догмата, как говорится на вкус и цвет... Кому-то больше по душе какие-нибудь IDE, содержащие собственные инструменты дебага, я использую Sublime Text и Chrome. Для приготовления нам понадобится установить node-inspector, а также настроить ConEmu (так сложилось, что в качестве ОС у меня установлены окна).

воскресенье, 15 июня 2014 г.

Авторизация с помощью аккаунта Google на PowerShell

Способы авторизации, рассмотренные далее, могут пригодиться если к примеру необходимо периодически отправлять какие-нибудь данные, либо просто напоминать о себе для того, чтобы преодолеть квоту на общее время выполнения триггеров, из операционной системы Windows в адрес скрипта Google Apps Script, развернутого в качестве веб-приложения таким образом, что доступ к приложению имеет только владелец ("Кто имеет доступ к приложению" - "Только я").

четверг, 29 мая 2014 г.

Just Try To Hack Me

Именно так выглядит SSID моей беспроводной сети. Но здесь не об этом. Приложение, упомянутое в предыдущем посте неожиданно для меня стало пользоваться спросом в определенных кругах в качестве примера авторизации с помощью OAuth 2.0. Разобравшись в том, как все работает на клиенте, заинтересовавшиеся разработчики решили на этом не останавливаться и обозначили свой интерес к серверной части. Для того, чтобы упростить понимание, я решил выложить исходники на GitHub, о чем сообщаю уважаемым читателям моего блога настоящим постом.

воскресенье, 25 мая 2014 г.

Куда уходят сервисы Google

Зарекалась свинья в грязи не валяться... Я потратил кое-какое время на Google Apps Script, и узнав недавно, что Google снова закрывает сервисы - Domain Service и ScriptDB (на котором у меня есть несколько открытых решений), в очередной раз почувствовал себя... мягко говоря огорченным. Ну жалко же потраченного времени, которое, как известно, деньги. И вот по этому самому поводу у меня родилось одно простенькое приложение - делайте Ваши ставки, господа!

четверг, 15 мая 2014 г.

Как создать RESTful API для frontend разработки за 5 минут

В процессе изложения расскажу как быстро развернуть RESTful backend на Google Apps Script. Кроме того познакомлю с двумя очень простыми frontend приложениями на AngularJS и Ember.js, наглядно демонстрирующими возможности сервиса GAS-REST, который транслирует RESTful запросы в адрес скрипта Google Apps Script, развернутого в качестве веб-приложения с целью его использования в роли сервера, раздающего данные, размещенные в таблице на Google Drive в формате JSON.

пятница, 2 мая 2014 г.

Создаем каркас приложения Ember.js с помощью Yeoman

Yeoman - инструмент для создания каркасов веб-приложений от Addy Osmani и К. Сегодня я расскажу о том, как быстро создать каркас приложения на Ember.js framework с использованием Ember.js Generator, для успешной работы которого нам потребуются: Node.js, npm, Yeoman, Grunt, Bower, Ruby и compass. У меня установлены следующие версии перечисленных инструментов:

суббота, 26 апреля 2014 г.

Пишем простой чат на Node.js. Пятая серия

Продолжаем рассматривать варианты хранения данных приложения Node.js на примере создания простого чата на TCP-сокетах. Использовать реляционные базы данных в нашем случае по-моему перебор, поэтому настоящим постом завершаем. Напоследок рассмотрим применение Mongoose ODM (Object Data Mapping).

воскресенье, 20 апреля 2014 г.

Простой блог на Ember.js + Google Apps Script

Ember.js - не такой попсовый как AngularJS, но не менее вкусный JavaScript framework, в процессе знакомства с которым я решил написать небольшой микс - простой блог по мотивам одного из мануалов с официального сайта фреймворка: frontend на Ember.js + шаблон Bootstrap Blog + backend на Google Apps Script, который можно быстро развернуть на Google Drive. Это совсем не "ember-style" код, и далеко не production решение, но вполне сгодится для выполнения функций небольшого блога. Итак, встречайте... Yet Another Blog.

вторник, 8 апреля 2014 г.

Как добавить виджет чата на вебсайт

Как создать веб-страницу, разместить на ней виджет чата с помощью приложения по имени Yet Another Chat, после чего развернуть созданную веб-страницу в сети интернет, и все это за пять минут. Исходный код чата находится в свободном доступе на GitHub, так что вы без проблем можете клонировать репозиторий, развернуть свою версию приложения и раздавать виджет со своего ресурса. Смотрим видео:

вторник, 1 апреля 2014 г.

Node.js developer. Sample code required

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

суббота, 22 марта 2014 г.

Пишем простой чат на Node.js. Четвертая серия

Продолжаем писать простенький чат на TCP-сокетах и заодно знакомиться с вариантами хранения данных приложения Node.js. Переходим к MongoDB. Прежде чем приступить к созданию кода нам потребуется создать так называемую capped collection - коллекцию ограниченного размера, для того, чтобы хранить в ней сообщения нашего чата в ограниченном количестве.

пятница, 21 марта 2014 г.

Google Drive Backup How To

Финальный мануал на тему как настроить резервное копирование документов в Google Drive. Проще некуда. С помощью сервиса Google Drive Backup можно решить вопрос за пять минут. По большому счету предмет обсуждения выглядит следующим образом: как передать права владения файлами и каталогами исходя из их принадлежности определенному каталогу пользователю домена Google. Смотрим видео:

среда, 19 марта 2014 г.

Node.js. Шаблон проектирования итератор

Пример использования озвученного в заголовке шаблона: итератор применяется, если необходимо обеспечить последовательный доступ к элементам структуры данных. Его реализацию можно встретить в процессе работы с сервисами Google Apps Script, такими как Drive Service, что на мой взгляд вполне оправдано.

Node.js. Шаблон проектирования декоратор

Пример использования озвученного в заголовке шаблона: декоратор позволяет динамически добавлять объекту функционал для определения его желаемого поведения. На первый взгляд звучит мудрено, но на самом деле все гораздо проще. Приступим, устроим Big Bada Boom :).

суббота, 15 марта 2014 г.

Пишем простой чат на Node.js. Третья серия

Продолжаем рассматривать варианты хранения данных приложения Node.js на примере создания простого чата на TCP-сокетах. На очереди хранилище Redis. Предлагаю хранить сообщения нашего чата в структуре данных по имени список. Списки в Redis позволяют хранить и манипулировать массивами значений для заданного ключа - то, что нужно для нашего чата.

воскресенье, 9 марта 2014 г.

Как настроить резервное копирование документов в Google Drive

Два варианта передачи прав владения объектами в облачном хранилище Google Диск - файлами и каталогами - определенному пользователю, в том числе исходя из их принадлежности определенному каталогу, аналогично файловой системе: с помощью скрипта Google Apps Script, а также с использованием сервиса Google Drive Backup. В настоящий момент сервис в фазе активной разработки, уже совсем скоро работа с ним станет еще проще. Смотрим видео:

понедельник, 3 марта 2014 г.

JavaScript. Небольшой этюд на тему неблокирующего кода

Задача: создать объект, который через определенные промежутки времени будет обновлять свои свойства или, к примеру, сообщать другим объектам о своем самочувствии. Вопрос: что может случиться, если "неправильно" этот самый объект удалить. По мотивам одного фэйла...

воскресенье, 2 марта 2014 г.

Пишем простой чат на Node.js. Вторая серия

В этом посте я продолжу свой рассказ о способах хранения данных приложения Node.js на примере создания простого чата на TCP-сокетах. Рассмотрим вариант хранения данных в файлах. Думаю сохранять данные через определенные промежутки времени будет дешевле, чем после каждого сообщения пользователей нашего чата, и здесь у меня два варианта реализации: с помощью функций setInterval или setTimeout.

воскресенье, 16 февраля 2014 г.

Пишем простой чат на Node.js. Первая серия

В прошлом году случилось мне познакомиться с товарищем по имени Node.js, и, скажу я вам, с тех пор мне нравится этот парень, как бы странно это не звучало, т.к. я предпочитаю девушек :). В настоящей статье я хочу познакомить уважаемого читателя с "этим парнем" а также рассмотреть несколько вариантов хранения данных приложения Node.js на примере создания простого чата на TCP-сокетах.

среда, 5 февраля 2014 г.

Сертификация MongoDB

Сегодня наконец получил сертификат об успешном завершении курса MongoDB for DBAs от MongoDB Inc, уже второй от этой компании, до этого был MongoDB for Node.js Developers. На мой взгляд очень полезные курсы, всем заинтересованным рекомендую посетить MongoDB University. Копии сертификатов - здесь.

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

Как запустить WMI CIM Studio в IE11

На днях потратил часа полтора на запуск WMI CIM Studio, которая является частью WMI Administrative Tools, в Internet Explorer 11. Перелопатил весь интернет, не помогло ни изменение параметров просмотра в режиме совместимости, ни назначение веб-узла в зону с пониженным уровнем безопасности. Пришлось применить более радикальное средство, рецептом которого спешу поделиться.

воскресенье, 2 февраля 2014 г.

Что послушать на работе

В последнее время прикипел к музыке в стиле lounge. Под нее классно работать, не напрягает нисколько. Слушайте вместе со мной.

понедельник, 27 января 2014 г.

Node.js. Storing application data

Chamber - репозиторий на GitHub, в котором я последовательно изложил несколько вариантов хранения данных Node.js приложения на примере создания простого чата на TCP-сокетах: оперативная память, файлы, Redis и MongoDB (с помощью Native NodeJS Driver или Mongoose). Каждый из вариантов - отдельный коммит - рабочий вариант приложения.

суббота, 25 января 2014 г.

Пишем keylogger на Google Apps Script и PowerShell

Как приготовить клавиатурного шпиона, что называется "на коленке". Для приготовления понадобится аккаунт Google и Windows Management Framework. Серверную часть напишем на JavaScript, с использованием Google Apps Script, клиентскую - на PowerShell, с использованием платформ COM и .NET. Смотрим видео:

вторник, 21 января 2014 г.

Как настроить уведомления об изменениях в Google Drive. Легко.

Продолжение рассказа о том, как настроить уведомления об изменениях в хранилище Google Диск. Сегодня настроим отправку уведомлений на мобильный телефон посредством SMS. Для этого используем сервис Google Календарь. Заодно сохраним информацию об изменениях с помощью того же сервиса. Смотрим видео:

вторник, 7 января 2014 г.

Открытка на Node.js.

Как приготовить оригинальное поздравление с праздником, что называется "своими руками". В финале изложения получим веб-приложение, которое будет раздавать наше поздравление не менее оригинальным, на мой взгляд, способом. Кого не интересует процесс приготовления, можно сразу клонировать репозиторий на GitHub. Результат, назовем его "открытка", может выглядеть примерно так: