Рубрика «node.js» - 102

[цитата]Читатель, заходящий на сайт NodeJS.org, по центру страницы видит четыре цитаты от лидеров сайтостроения, выражающие удовольствие от Node. Цитаты меняются каждую минуту. При некотором везении (или терпении при перезагрузке страницы) читатель увидит похвалу от Клаудио Кальдато из Microsoft Open Technologies, Inc. — для вашего удобства я привожу эту цитату на иллюстрации справа.

Чем вызвана к жизни такая похвала? Ведь, казалось бы, задолго до того, как движок Node вообще успел появился на свет, у Microsoft существовало собственное (встроенное в Windows, начиная с Windows 98, а также устанавливаемое вместе с Internet Explorer 5) средство для запуска скриптов — Windows Script Host.

Ответ очевиден: Node.js работает гораздо быстрее. (У него, кстати, ещё и API попроще. Но главное — скорость.)

Но насколько именно быстрее Node, чем WSH?

Это нетрудно выяснить опытным путём. Возьмём тот скрипт, при помощи которого evgeniyup вчера сравнивал быстродействие WSH с быстродействием виртуальной машины своего языка ObjectScript. В начале скрипта добавим десяток строк — «костыль» для Node.js, реализующий WSH-функцию WScript.Echo при её отсутствии.

показать (или вновь скрыть) исходный код скрипта

// CScript to Node.js:
if (typeof WScript == "undefined") WScript = {};
if (typeof WScript.Echo == "undefined") WScript.Echo = function(){
  var i;
  var log = '';
  for (i=0; i < arguments.length; i++){
     log += arguments[i];
  }
  console.log(log);
}

var fannkuch = function(n)
{
  var p = [], q = [], s = [], sign = 1, maxflips = 0, sum = 0;
  var i;
  for(i=1; i<=n; i++) p[i] = q[i] = s[i] = i;
  for(;;){
    // Copy and flip.
    var q1 = p[1];				// Cache 1st element.
    if(q1 != 1){
      for(i=2; i<=n; i++) q[i] = p[i];		// Work on a copy.
      var flips = 1;
      for(;;){
        var qq = q[q1];
        if(qq == 1){				// ... until 1st element is 1.
          sum = sum + sign*flips;
          if(flips > maxflips){
            maxflips = flips;
          } // New maximum?
          break;
        }
        q[q1] = q1;
        if(q1 >= 4){
          var i = 2, j = q1 - 1
          for(;;){ var tmp = q[i]; q[i] = q[j]; q[j] = tmp; if(++i >= --j) break; }
        }
        q1 = qq; flips++;
      }
    }
    // Permute.
    if(sign == 1){
      var tmp = p[2]; p[2] = p[1]; p[1] = tmp; sign = -1;	// Rotate 1<-2.
    }else{
      var tmp = p[2]; p[2] = p[3]; p[3] = tmp; sign = 1;	// Rotate 1<-2 and 1<-2<-3.
      for(i = 3;; i++){
        // print "mark 4"
        var sx = s[i];
        if(sx != 1){ s[i] = sx-1; break; }
        if(i == n) return [sum, maxflips];	// Out of permutations.
        s[i] = i;
        // Rotate 1<-...<-i+1.
        var t = p[1]; for(var j = 1; j <= i; j++){ p[j] = p[j+1]; } p[i+1] = t;
      }
    }
  }
}

function getTimeSec(){
 	var d = new Date();
    return (d.getTime() + d.getMilliseconds() / 1000.0) / 1000.0;
}

var n = 10;
var start_time = getTimeSec();
var r = fannkuch(n);
var sum = r[0], flips = r[1];
WScript.Echo(
    sum,"n",
    "Pfannkuchen(",n,") = ",flips,"n",
    "time = ",(getTimeSec() - start_time),"n"
)

После этого достаточно запустить этот скрипт дважды (сперва в Node, затем в WSH) — и мы получим вот какой результат в консоли (и на скриншоте):

[скриншот]

Разница на два порядка! Вычисления, с которыми Node.js справляется за секунду, Windows Script Host перемалывал больше двух минут.

Читать полностью »

Большинство Paste сервисов(pastebin, pastie, github gists) справляются с задачей на ура.

Только вот задача у них довольно таки тривиальная — расшарить тривиальный кусок кода.

А исполнять этот код нужно в голове или копировать/вставить, с условием того что ваша голова или рабочее окружение поддерживают язык на котором расшаренный код написан.

JSFiddle пошёл дальше разрешив исполнять javascript код не в голове а в браузере.

CIBox пошёл ещё дальше разрешив исполнять серверные языки и получать результат в браузере в реальном времени.

На сегодня есть поддержка Ruby, Python и Node.js

Continuous Integration?

Естественно! Код можно исполнять на всех мажорных версиях поддерживаемых языков/фреймворков.

А также можно загружать код из GitHub репозиториев или с помощью rsync

Получается виртуальное окружение с довольно мощным потенциалом. Можно например с мобильного исправить код приложения, протестировать «до дыр» и загрузить на production сервер.

Читать полностью »

Node.js + Chromium = node webkit: ещё более перспективный вариант второго шага эволюции веборазработчикаПредисловие от переводчика.  В постскриптуме к моей вчерашней блогозаписи я указал, что AppJS — это не единственное такое средство, которое позволяет создавать приложения с GUI (графическим интерфейсом пользователя) при помощи вебоподобных методов разработки на языках HTML, CSS и JavaScript с использованием движка Node.js. Естественной иллюстрацией к этому постскриптуму является нижеследующий перевод гитхабовской страницы проекта node-webkit. И сразу скажу: я предвижу заранее, что непредвзятый взгляд ваш сочтёт node-webkit ещё более удобным и развитым средством, чем AppJS.


Введение

node-webkit — среда для запуска приложений, основанная на Chromium и Node.js. При помощи node-webkit можно создавать традиционные графические приложения посредством HTML и JavaScript. Также node-webkit позволяет вызывать модули Node.js прямо из DOM и тем обеспечивает новый способ создания таких приложений и употребления веботехнологий в них.

node-webkit создан и разрабатывается в Интеловском Центре технологий с открытым исходным кодом (Intel Open Source Technology Center).

Введение в node-webkit (слайды).

Достоинства

  • Приложения создаются при помощи современных HTML5, CSS3, JS и WebGL.
     
  • Полная поддержка API Node.js и созданных другими разработчиками модулей.
     
  • Вызов API Node.js без потерь в производительности.
     
  • Лёгкость упаковки и распространения приложений.

Читать полностью »

в 18:34, , рубрики: node.js, метки:

В этой статье я расскажу, какие проблемы прийдется решить, чтобы получить VPS с реально работающим node.js сервисом. Это все элементарные вещи, но, может быть, кому-нибудь еще пригодится.

Установка node

Проблема: в репозитории может не оказаться пакета для нужной версии node. Как вариант, у вас может быть два проекта, требующих разные версии node.
Решение: на девелоперских машинах в таких случаях используют nvm. На боевом сервере его тоже можно запросто использовать, просто прийдется написать специальный скрипт для запуска своего сервера.
Читать полностью »

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

Node.js + Chromium = AppJS: один из перспективных вариантов второго шага эволюции веборазработчикаПервый шаг эволюции веборазработчика совершается тогда, когда разработчик знакомится с Node.js и тотчас же постигает, что ему теперь достаточно воспользоваться знанием джаваскрипта и изучить довольно простой API Node, чтобы немедленно получить возможность сочинять не одни только скрипты для сайтов, но также и консольные приложения, и даже серверные (в частности, вебсерверные).

Исторически это не первый из таких инструментов.

Каждый из нас может вспомнить, что были и до появления Node.js попытки создать движок для удобного программирования на джаваскрипте (Windows Script Host, Rhino, JSDB, и так далее).

Однако только у Node мы видим и достаточно быстрый движок (V8), и кросс-платформенность, и простой API, и превеликое множество дополнительных модулей. Сочетание этих достоинств делает Node удачным и удобным.

Второй шаг эволюции веборазработчика совершается тогда, когда знание языка JavaScript (а также других веботехнологий — прежде всего CSS и HTML или XML) становится можно применять для разработки ещё и приложений с графическим интерфейсом пользователя — то есть с GUI.

Многие производители создавали средства вебоподобной разработки GUI-приложений.

Здесь можно припомнить с десяток более или менее успешных попыток достигнуть желаемого.

Фонд Мозиллы придумал сперва XUL и XULRunner, а затем и целую операционную систему — Firefox OS.

«Хьюлетт-Паккард» выпустил webOS (с недавних пор — Open webOS).

Google придумал Google Chrome OS.

Ещё можно вспомнить, что у Qt есть основанный на JavaScript язык разметки GUI — QML называется.

Развиваются PhoneGap, Appcelerator Titanium, Adobe AIR и другие средства вебоподобного программирования кросс-платформенных приложений.

Часть вышеперечисленных решений родилась на свет увесистою (например, когда для запуска вебоподобного приложения требуется крупная виртуальная машина или даже новая операционная система). Большинство из них также потребует от программиста выучить некоторый API, иногда довольно корявый и страшный (например, XPCOM для XULRunner), но даже когда такой API достаточно изящен, то всё же изучение его требует усилий. Чем больше он умеет, тем более обширным окажется API.

Между тем, если на первом шаге своей эволюции веборазработчик успел выучить API от Node.js — нет ли возможности опереться на это знание и не учить в дальнейшем ничего лишнего?

Node.js + Chromium = AppJS: один из перспективных вариантов второго шага эволюции веборазработчикаВторой шаг эволюции веборазработчика становится естественным продолжением первого, если разметка и оформление вебоподобного приложения задаются при помощи HTML и CSS, а поведение — при помощи JavaScript, причём «под капотом» работает ужé известный разработчику движок Node.js.

В частности, если воспользоваться AppJS, то тогда объектная модель (DOM) демонстрируемой «страницы» содержит под именем window.node глобальный объект Node.js, и мы можем без труда прочесть в window.node.process.versions.node версию Node, в window.node.process.arch — архитектуру процессора, в window.node.process.platform — платформу, и вывести какое-нибудь такое сообщение в окне нашего графического приложения:

[скриншот]

(Понятно, что аналогичным образом можно употреблять и другие возможности Node.js — сетевые, файловые и так далее.)

Что же такое AppJS?

Читать полностью »

Node.js на узле Фидонета: автоматизация периодических публикацийНекоторые фидошники сталкиваются с необходимостью периодически публиковать в той или иной фидонетовской эхоконференции одно и то же сообщение (один и тот же текстовый файл) раз в несколько дней.

Например, модератору (или комодератору, в зависимости от распределения их обязанностей) приходится раз в неделю-другую класть в свою эхоконференцию её правила. Чуть другим (но всё же подобным) примером являются те фидошники, которые взяли на себя поддержку некоторого FAQ и также публикуют его в одной или нескольких тематически соответствующих эхоконференциях. (В эхе Fidonet.History её FAQ содержит своеобразную летопись истории Фидонета, выраженную в вопросах и ответах, в эхе SU.IP.Point — список узлов, набирающих новых пойнтов, в SU.FidoTech — разъяснение ряда технических терминов и алгоритмы нескольких полезных приёмов. В эхоконференциях, посвящённых тому или иному программному продукту, FAQ поясняет его настройку. И так далее.)

Если узел (или пойнт) работает беспрерывно на одном и том же компьютере, то такая публикация автоматизируется простым, бесхитростным способом: публикацию файла вписывают в список задач для демона cron (в UNIX-подобных системах) или его аналога в других системах.

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

Сегодня мы рассмотрим, каким подспорьем может движок Node.js стать в исполнении этой задачи.

Читать полностью »

Система online документации для JavaScript — ADWiki

Ссылочки

Что ADWiki умеет:

  • Парсить файлы Вашего проекта описанные на jsdoc
  • Поднимать сайт с чистеньким дизайном на bootstrap
  • Организовывать на сайте небольшой блог, где Вы сможете дополнять документацию статьями о проекте

Читать полностью »

Работаю в аутсорсинговой компании и как-то встала задача загрузки видео с возможностью последующей обработки для внутренних нужд приложения: ресайз до нужного размера, конвертирование к нужному формату, вытягивание аудио-дорожек (если таковые присутствуют), раскадровка видео. В конце результаты нужно сохранить в облачном хранилище для последующего использования в онлайн-редакторе. Требования: масштабируемость, неограниченый размер видео, скорость, кроссбраузерность, наглядность.

Поскольку тема очень обширная, разделю ее на разделы:

  1. Общие проблемы, нюансы, с которыми пришлось столкнуться
  2. Загрузка видео (на этой теме, пожалуй, не буду останавливаться, поскольку она уже поднималась в этом и этом посте.
  3. Обработка видео.
  4. Сохранение в облачном хранилище.

Читать полностью »

Начну издалека. С браузеров. Новинками браузеростроения интересуюсь не так уж и часто, но вот однажды, со скуки, решил посмотреть, что javascript грядущий нам готовит и что с этого нам могут предложить современные браузеры. Речь идет, само собой, не об ECMAScript 5, а уже о ECMAScript 6 ECMAScript Harmony. Через пару минут серфинга я наткнулся на такую вот сводную табличку. Не самая актуальная — Chrome, например, довольно давно поддерживает Proxy. Само собой, разброд оказался еще тот. В браузере это использовать пока не реально.
В браузере. А на сервере? На сервере нет необходимости поддерживать зоопарк различных браузеров. Node.js использует V8 — тот же javascript движок, что и Chrome, соответственно, он должен поддерживать те же новые возможности языка.
Читать полностью »

ECT — это логическое развитие существующих подходов к шаблонизации под соусом высокой производительности. В начале года я публиковал свою разработку — шаблонизатор JUST. ECT начинался как его развитие, но через некоторое время различие в них стало слишком большим, поэтому появился новый продукт.

Синтаксис

Во время работы с JUST, который использует EJS-совместимый синтаксис, пришло понимание, что это не очень удобно. Хотелось упрощения, хотя бы, для условных операторов и циклов. Я начал развивать код в этом направлении, но вовремя остановился. Я сам очень плохо отношусь к подобным велосипедам в плане синтаксиса. Когда добавляешь подобный синтаксический сахар в свою разработку, это кажется очень крутым и удобным нововведением. Но разработчик, который видит его впервые, скорее выберет знакомое ему и понятное решение, чем будет разбираться в новом синтаксисе.

Логичным решением в данной ситуации стало использование CoffeeScript в качестве встраиваемого языка.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js