
Node.JS *
Среда для запуска JavaScript-приложений
12 подсказок для масштабирования Node.js
JavaScript — заполняем нишу между микросервисами и объектами — «нано-сервисы»
Кто из нас не хочет сделать большое приложение с правильной архитектурой? Все хотят.
Чтобы была гибкость, переиспользуемость и четкость логики. Чтобы были домены, сервисы, их взаимодействие.
И даже иногда хочется чтобы было почти как в Erlang.
Идея создания фреймворка для микросервисов для NodeJs удачно воплощалась не единожды — так у нас как минимум есть Seneca и Studio.js, которые безусловно хороши, но они определяют большие логические единицы. С другой стороны у нас есть обычные объекты, разделяемые в системе посредством Dependency Injection или подобной техники, но они не дают должной четкости границ.
Иногда нужны "нано-сервисы".
Доработки шаблонизатора DoT.js
Так случилось и с DoT.js. Поначалу заброшенный авторами примерно на год в 2013-м, он получил их внимание ненадолго, поднявшись с версии 1.0.1 до 1.1.1, и снова был заброшен (или стабилизирован, смотря как рассуждать). В связи с этим ещё в 2013 году понадобилось (делать клон DoT.js), а теперь — и апгрейдить его.
Он — такой же быстрый, как и встроенный
_.template()
в Underscore/Lodash, но с улучшенным синтаксисом, при котором необходимость писать JS в шаблонах встречается нечасто, а в Underscor-овском — нужна всегда. Этим скобкам со скриптами даже придумали специальный термин: javascript encapulated sections (JES), и от них, в основном, избавились.Что получаем дополнительно?
1. Структура шаблонизатора была переработана (в 2013-м, ссылка оттуда), чтобы лучше читалась и уменьшилось число декодирований функций;
2. Тесты показали, что быстродействие в среднем не изменилось (колебания -3% — +10% в зависимости от параметров);
3. Добавлена команда работы по структуре, аналогично работе по массиву;
Пишем простой парсер web страниц

Поскольку это некоммерческий проект, созданный исключительно на моём энтузиазме, при работе я руководствовался следующим:
1. Минимум необходимых функций (сканирование web, сохранение необходимого в БД, простенький UI для доступа)
2. 0 финансовых затрат:
— В качестве сервера использую нетбук, который покупал в свое время для учебы acer aspare ONE KAV60, весьма бюджетный даже на момент покупки (2008 год), сейчас его процессора atom в 1600 МГц не хватает даже для нормальной работы в MS OFFICE
— Интернет — проводной домашний. Благо IP уже пол года не менялся, не пришлось заказывать статический
3. Минимум временых затрат. Проект делался после работы и дачи.
Имитация рации с помощью Freeswitch и немного про voip-конференции
Один говорит, все слушают.
А поможет нам в этом NodeJs и npm модуль modesl для взаимодействия с Freeswitch.

Пишем систему инвайтов (приглашений) для своего Meteor-приложения
Сегодня я попробую рассказать, как написать простенькую, но вполне рабочую систему Email-приглашений для своего Meteor приложения.
Зачем это может понадобиться? Например — если вы разрабатываете приложение, в котором несколько людей должны работать в рамках одной группы над каким-либо проектом. Это может быть к примеру учебное расписание, которое может редактировать несколько людей или каталог продукции Интернет-магазина компании.
В сети уже есть одно руководство на английском и CoffeScript, но мне описанный там подход показался неудобным и я решил реализовать собственную систему инвайтов для своего проекта, а затем поделиться ею с хабражителями.
Итак, наш пример будет уметь:
1) Отображать интерфейс приглашений включая список существующих приглашений и форму для отправки нового;
2) Сохранять все приглашения в базе данных;
3) Следить за статусами приглашений;
4) Отправлять приглашения на email;
5) Следить за ролями пользователей;
6) Активировать приглашения новых пользователей;
7) Использовать кучу сторонних модулей.
Внимание: Пример будет рассмотрен на основании живого проекта, так что просто скопировать и вставить его к себе, вероятно, не получится…
FutoIn AsyncSteps: концепция и реализация асинхронной бизнес-логики
FutoIn — с одной стороны, это «клей» из стандартов/спецификаций разных мастей для унификации программных интерфейсов различных существующих проектов по устоявшимся типам, с другой — это концепция для построения и масштабирования компонентов проекта и инфраструктуры, написанных на разных технологиях, без потребности в добавления этого самого «клея».
AsyncSteps — это спецификация и реализация программного интерфейса для построения асинхронных программ в независимости от выбранного языка или технологии.
Цели, поставленные для концепции:
- реализация (с оговорками) должна быть возможна на всех распространённых языках программирования с поддержкой объектов и анонимных функций. Репрезентативный минимум: С++, C#, Java, JavaScript, Lua (не ООП), PHP, Python;
- написанная программа должна легко читаться (сравнимо с классическим вариантом);
- должны поддерживаться исключения языка (Exceptions) с возможностью перехвата и разворачиванием асинхронного стека до самого начала;
- требуется удобство для написания асинхронных библиотек с единым подходом для вызова, возврата результата и обработки ошибок;
- предоставить простой инструмент для естественного распараллеливания независимых веток программы;
- предоставить простой инструмент создания асинхронных циклов с классическим управлением (break, continue) и меткой для выхода из вложенных циклов;
- предоставить место для хранения состояния исполняемой бизнес-логики;
- возможность отменять абстрактную асинхронную задачу, правильно завершая выполнение (освобождая внешние ресурсы);
- возможность легко интегрироваться с другими подходами асинхронного программирования;
- возможность ограничивать время выполнения задачи и отдельно каждой подзадачи;
- возможность создавать модель задачи для копирования (улучшения производительности критичных частей) или использования как объект первого класса для передачи логики в качестве параметра (а-ля callback);
- сделать отладку асинхронной программы максимально комфортной.
Как работают rooms в Socket.io
В качестве предисловия
Захотел наш клиент сделать на проектe чат с блекджеком и куртизанками. NodeJs не мой профиль и опыта с ним у меня было не так много. (Поэтому статья адресована таким же новичкам в node и socket.io, как и я сам).
Тем не менее, один проект я делал и связан он был — да, да с socket.io. Вот и в этот раз я подумал, что он идеально подойдет. Более того, на сайте даже есть демо и пример чата. Но, как всегда в жизни, все оказывается сложнее, чем в примерах.
Чат из примера отсылал сообщения абсолютно всем. Было понятно что как-то надо добавить пользователей в комнату. И если мы взглянем в документацию socket.io rooms and namespaces — здесь описано как работать с комнатами, но непонятно как они работают. Вот с этимм я предлагаю разобраться.
Управляем светодиодом через интернет с использованием RaspberryPi
Поэтому попробуем подключить к интернету самое простое — светодиод, взятый из сломанной оптической мыши. Будем через страницу в интернете включать и выключать светодиод, управлять частотой его мерцаний.
Для нашего эксперимента потребуется
- Интернет через ethernet кабель
- Raspberry Pi
- Сломанная оптическая мышка, провода, паяльник
- Доступ к сайту на vps с правами рута
Derby.js темы для темплейтов
По умолчанию подключается файл: styles/app/index.styl, где мы можем воспользоваться всеми синтаксическими преимуществами которые предоставляет Stylus.
Что делать, если в нашем проекте предусмотрено использование нескольких тем (стилей) для темплейтов?
Причины и достоинства третьего байхуистского способа употребления SQLite в Node.js

Но почему не существует такого одного способа, который был бы пригоден для всех?
Ответ на этот вопрос я предлагаю рассмотреть на примере употребления базы данных SQLite.
Своё приложение на Node.js с хранением в Dropbox – это просто

В этом посте я постараюсь коротко рассказать, как можно организовать web-сервис для хранения файлов, используя лишь бесплатные решения.
Всех заинтересованных – прошу под кат.
Ближайшие события
Релиз GlobalsDB 2012.2
Что нового?
Добавлен ожидаемый многими Node.JS API интерфейс для Windows, и сразу же для Windows 64-bit.
Реализованы небольшие дополнения и устранены некоторые ошибки.
Об этом и остальном
Просветление через Код: Суть Django Revolution

Django Revolution — это не просто инструмент, это философия. Философия, где рутина уступает место творчеству, а баги растворяются в чистоте кода. Это путь к просветлению в разработке API. Примите его, и ваш код будет сиять, а дух разработчика — парить.
Наш мир, сотканный из битов и фантомных сущностей, породил нового Джинна, способного исполнять самые заветные желания Разработчика. Встречайте: Django Revolution – не просто библиотека, а откровение, мантра, ключ к вратам истинного дзен в мире Django API.
Опыт создания онлайн-настолки: от идеи до реализации

Пару лет назад единственной настольной игрой, в которую я играл онлайн с друзьями, была «Монополия». Со временем она начала надоедать, и мне захотелось чего‑то нового. Моим открытием стала Machi Koro — экономическая карточная игра, где победа зависит не столько от случайности, сколько от выбранной стратегии, что выгодно отличает её от «Монополии».
На тот момент я не нашёл достойных онлайн‑аналогов Machi Koro, что и подтолкнуло меня к созданию собственной реализации. В этой статье я подробно расскажу о технической стороне проекта: от составления требований до выбора стека технологий.
Опыт работы с Serverless-архитектурой для Telegram-бота на Vercel и Timeweb Cloud

В последнее время активно занимаюсь разработкой Telegram-бота с использованием Serverless-подхода в Timeweb и Vercel сервисах.
16 NPM-пакетов, о которых должен знать каждый Node.js-разработчик

В этой статье мы рассмотрим 16 обязательных для любого Node.js‑разработчика NPM‑пакетов. Мы подробно расскажем о них, включая их ключевые особенности, как их установить и как именно вы можете использовать их в своих проектах для улучшения ваших рабочих процессов.
Конвертация даты по временной зоне пользователя в «NestJS», а также ввод и отображение даты в «Angular»

В этой статье я расскажу о добавлении нового поля workUntilDate
с типом timestamp(6)
в таблицу Webhook
базы данных Webhook
.
На стороне фронтенда (в Angular
-приложении) для этого поля будет реализован удобный календарь с возможностью выбора времени.
Пользователи смогут задавать дату и время в своей временной зоне, тогда как бэкенд (NestJS
-приложение) будет сохранять введённые данные в базе данных в формате UTC+0
.
Кроме того, интерфейс календаря и другие элементы, отображающие даты, будут адаптированы под язык и временную зону пользователя.
Интеграция и сохранение выбранного языка пользователя в базу данных в фулстек-приложении на «Angular» и «NestJS»

Этот пост не претендует на масштабность, но поскольку я последовательно документирую все этапы разработки бойлерплейта в формате статей, решил описать и эту задачу.
Здесь я приведу пример миграции базы данных для добавления нового поля, а также покажу, как реализовать соответствующий функционал на бэкенде и фронтенде для изменения этого значения.