<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nodeJS</title>
	<atom:link href="http://nodejs.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://nodejs.ru</link>
	<description>Быстрый веб-сервер на javascript движке V8</description>
	<lastBuildDate>Tue, 21 Feb 2012 12:49:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Проблемы с форумом (решение)</title>
		<link>http://nodejs.ru/757</link>
		<comments>http://nodejs.ru/757#comments</comments>
		<pubDate>Tue, 21 Feb 2012 12:04:34 +0000</pubDate>
		<dc:creator>Kuroki Kaze</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[работа сайта]]></category>

		<guid isPermaLink="false">http://nodejs.ru/757</guid>
		<description><![CDATA[Итак, с форумом вроде разобрались. Теперь должно быть можно зайти. Если у кого то проблема ещё присутствует, пишите на bolter.fire[at]gmail.com или в комментарии к этой записи.
]]></description>
			<content:encoded><![CDATA[<p>Итак, с форумом вроде разобрались. Теперь должно быть можно зайти. Если у кого то проблема ещё присутствует, пишите на bolter.fire[at]gmail.com или в комментарии к этой записи.</p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/757/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проблемы с форумом (забанен навсегда)</title>
		<link>http://nodejs.ru/754</link>
		<comments>http://nodejs.ru/754#comments</comments>
		<pubDate>Mon, 20 Feb 2012 21:17:54 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[форум]]></category>

		<guid isPermaLink="false">http://nodejs.ru/754</guid>
		<description><![CDATA[Напишу коротко, если кто-то из вас видит надпись, что забанен навсегда - это не так. На самом деле проблемы с форумом, ждём администратора.
]]></description>
			<content:encoded><![CDATA[<p>Напишу коротко, если кто-то из вас видит надпись, что забанен навсегда - это не так. На самом деле проблемы с форумом, ждём администратора.</p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/754/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Релиз Node v0.6.10</title>
		<link>http://nodejs.ru/751</link>
		<comments>http://nodejs.ru/751#comments</comments>
		<pubDate>Fri, 03 Feb 2012 02:21:34 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Релизы]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=751</guid>
		<description><![CDATA[2012.02.02, Version 0.6.10 (stable)


Update V8 to 3.6.6.20


Add npm msysgit bash shim to msi installer (isaacs)


buffers: fix intermittent out of bounds error (Ben Noordhuis)


buffers: honor length argument in base64 decoder (Ben Noordhuis)


windows: Fix path.exists regression (Bert Belder)


Make QueryString.parse run faster (Philip Tellis)


http: avoid freeing http-parser objects too early (koichik)


timers: add v0.4 compatibility hack (Ben Noordhuis)


Proper EPERM [...]]]></description>
			<content:encoded><![CDATA[<p>2012.02.02, Version 0.6.10 (stable)</p>
<ul>
<li>
<p>Update V8 to 3.6.6.20</p>
</li>
<li>
<p>Add npm msysgit bash shim to msi installer (isaacs)</p>
</li>
<li>
<p>buffers: fix intermittent out of bounds error (Ben Noordhuis)</p>
</li>
<li>
<p>buffers: honor length argument in base64 decoder (Ben Noordhuis)</p>
</li>
<li>
<p>windows: Fix path.exists regression (Bert Belder)</p>
</li>
<li>
<p>Make QueryString.parse run faster (Philip Tellis)</p>
</li>
<li>
<p>http: avoid freeing http-parser objects too early (koichik)</p>
</li>
<li>
<p>timers: add v0.4 compatibility hack (Ben Noordhuis)</p>
</li>
<li>
<p>Proper EPERM error code support (Igor Zinkovsky, Brandon Philips)</p>
</li>
<li>
<p>dgram: Implement udp multicast methods on windows (Bert Belder)</p>
</li>
</ul>
<p>Source Code: <a href="http://nodejs.org/dist/v0.6.10/node-v0.6.10.tar.gz">http://nodejs.org/dist/v0.6.10/node-v0.6.10.tar.gz</a></p>
<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.10/node-v0.6.10.msi">http://nodejs.org/dist/v0.6.10/node-v0.6.10.msi</a></p>
<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.10/node-v0.6.10.pkg">http://nodejs.org/dist/v0.6.10/node-v0.6.10.pkg</a></p>
<p>Website: <a href="http://nodejs.org/docs/v0.6.10/">http://nodejs.org/docs/v0.6.10/</a></p>
<p>Documentation: <a href="http://nodejs.org/docs/v0.6.10/api/">http://nodejs.org/docs/v0.6.10/api/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/751/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Релиз Node v0.7.2 (unstable)</title>
		<link>http://nodejs.ru/749</link>
		<comments>http://nodejs.ru/749#comments</comments>
		<pubDate>Thu, 02 Feb 2012 01:08:26 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Релизы]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=749</guid>
		<description><![CDATA[2012.02.01, Version 0.7.2 (unstable)


Update V8 to 3.8.9


Support for sharing streams across Isolates (Igor Zinkovsky)


#2636 – Fix case where http_parsers are freed too early (koichik)


url: Support for IPv6 addresses in URLs (Łukasz Walukiewicz)


child_process: Add disconnect() method to child processes (Andreas Madsen)


fs: add O_EXCL support, exclusive open file (Ben Noordhuis)


fs: more specific error messages (Tj Holowaychuk)


tty: emit [...]]]></description>
			<content:encoded><![CDATA[<p>2012.02.01, Version 0.7.2 (unstable)</p>
<ul>
<li>
<p>Update V8 to 3.8.9</p>
</li>
<li>
<p>Support for sharing streams across Isolates (Igor Zinkovsky)</p>
</li>
<li>
<p>#2636 – Fix case where http_parsers are freed too early (koichik)</p>
</li>
<li>
<p>url: Support for IPv6 addresses in URLs (Łukasz Walukiewicz)</p>
</li>
<li>
<p>child_process: Add disconnect() method to child processes (Andreas Madsen)</p>
</li>
<li>
<p>fs: add O_EXCL support, exclusive open file (Ben Noordhuis)</p>
</li>
<li>
<p>fs: more specific error messages (Tj Holowaychuk)</p>
</li>
<li>
<p>tty: emit ‘unknown’ key event if key sequence not found (Dan VerWeire, Nathan Rajlich)</p>
</li>
<li>
<p>build: compile release build too if BUILDTYPE=Debug (Ben Noordhuis)</p>
</li>
<li>
<p>module: fix –debug-brk on symlinked scripts (Fedor Indutny)</p>
</li>
<li>
<p>zlib: fix <code>Failed to set dictionary</code> issue (Fedor Indutny)</p>
</li>
<li>
<p>waf: predict target arch for OS X (Fedor Indutny)</p>
</li>
</ul>
<p>Source Code: <a href="http://nodejs.org/dist/v0.7.2/node-v0.7.2.tar.gz">http://nodejs.org/dist/v0.7.2/node-v0.7.2.tar.gz</a></p>
<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.2/node-v0.7.2.msi">http://nodejs.org/dist/v0.7.2/node-v0.7.2.msi</a></p>
<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.2/node-v0.7.2.pkg">http://nodejs.org/dist/v0.7.2/node-v0.7.2.pkg</a></p>
<p>Website: <a href="http://nodejs.org/docs/v0.7.2/">http://nodejs.org/docs/v0.7.2/</a></p>
<p>Documentation: <a href="http://nodejs.org/docs/v0.7.2/api/">http://nodejs.org/docs/v0.7.2/api/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/749/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Релиз Node 0.7.1 (unstable)</title>
		<link>http://nodejs.ru/747</link>
		<comments>http://nodejs.ru/747#comments</comments>
		<pubDate>Tue, 24 Jan 2012 10:04:02 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Релизы]]></category>

		<guid isPermaLink="false">http://nodejs.ru/747</guid>
		<description><![CDATA[2012.01.23, Version 0.7.1 (unstable)


Update V8 to 3.8.8


Install node-waf by default (Fedor Indutny)


crypto: Add ability to turn off PKCS padding (Ingmar Runge)


v8: implement VirtualMemory class on SunOS (Ben Noordhuis)


Add cluster.setupMaster (Andreas Madsen)


move path.exists* to fs.exists* (Maciej Małecki)


typed arrays: set class name (Ben Noordhuis)


libuv bug fixes (Igor Zinkovsky, Ben Noordhuis, Dan VerWeire)


Source: http://nodejs.org/dist/v0.7.1/node-v0.7.1.tar.gz
Windows Installer: http://nodejs.org/dist/v0.7.1/node-v0.7.1.msi
Macintosh Installer: http://nodejs.org/dist/v0.7.1/node-v0.7.1.pkg
Website: [...]]]></description>
			<content:encoded><![CDATA[<p>2012.01.23, Version 0.7.1 (unstable)</p>
<ul>
<li>
<p>Update V8 to 3.8.8</p>
</li>
<li>
<p>Install node-waf by default (Fedor Indutny)</p>
</li>
<li>
<p>crypto: Add ability to turn off PKCS padding (Ingmar Runge)</p>
</li>
<li>
<p>v8: implement VirtualMemory class on SunOS (Ben Noordhuis)</p>
</li>
<li>
<p>Add cluster.setupMaster (Andreas Madsen)</p>
</li>
<li>
<p>move <code>path.exists*</code> to <code>fs.exists*</code> (Maciej Małecki)</p>
</li>
<li>
<p>typed arrays: set class name (Ben Noordhuis)</p>
</li>
<li>
<p>libuv bug fixes (Igor Zinkovsky, Ben Noordhuis, Dan VerWeire)</p>
</li>
</ul>
<p>Source: <a href="http://nodejs.org/dist/v0.7.1/node-v0.7.1.tar.gz">http://nodejs.org/dist/v0.7.1/node-v0.7.1.tar.gz</a></p>
<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.1/node-v0.7.1.msi">http://nodejs.org/dist/v0.7.1/node-v0.7.1.msi</a></p>
<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.1/node-v0.7.1.pkg">http://nodejs.org/dist/v0.7.1/node-v0.7.1.pkg</a></p>
<p>Website: <a href="http://nodejs.org/docs/v0.7.1/">http://nodejs.org/docs/v0.7.1/</a></p>
<p>Documentation: <a href="http://nodejs.org/docs/v0.7.1/api/">http://nodejs.org/docs/v0.7.1/api/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/747/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Релиз Node v0.6.8</title>
		<link>http://nodejs.ru/744</link>
		<comments>http://nodejs.ru/744#comments</comments>
		<pubDate>Fri, 20 Jan 2012 07:29:16 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Релизы]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=744</guid>
		<description><![CDATA[2012.01.19, Version 0.6.8 (stable)


Update V8 to 3.6.6.19


Numeric key hash collision fix for V8 (Erik Corry, Fedor Indutny)


Add missing TTY key translations for F1-F5 on Windows (Brandon Benvie)


path.extname bugfix with . and .. paths (Bert Belder)


cluster: don’t always kill the master on uncaughtException (Ben Noordhuis)


Update npm to 1.1.0-2 (isaacs)


typed arrays: set class name (Ben Noordhuis)


zlib binding [...]]]></description>
			<content:encoded><![CDATA[<p>2012.01.19, Version 0.6.8 (stable)</p>
<ul>
<li>
<p>Update V8 to 3.6.6.19</p>
</li>
<li>
<p>Numeric key hash collision fix for V8 (Erik Corry, Fedor Indutny)</p>
</li>
<li>
<p>Add missing TTY key translations for F1-F5 on Windows (Brandon Benvie)</p>
</li>
<li>
<p>path.extname bugfix with . and .. paths (Bert Belder)</p>
</li>
<li>
<p>cluster: don’t always kill the master on uncaughtException (Ben Noordhuis)</p>
</li>
<li>
<p>Update npm to 1.1.0-2 (isaacs)</p>
</li>
<li>
<p>typed arrays: set class name (Ben Noordhuis)</p>
</li>
<li>
<p>zlib binding cleanup (isaacs, Bert Belder)</p>
</li>
<li>
<p>dgram: use slab memory allocator (Michael Bernstein)</p>
</li>
<li>
<p>fix segfault #2473</p>
</li>
</ul>
<p>Source Code: <a href="http://nodejs.org/dist/v0.6.8/node-v0.6.8.tar.gz">http://nodejs.org/dist/v0.6.8/node-v0.6.8.tar.gz</a></p>
<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.8/node-v0.6.8.msi">http://nodejs.org/dist/v0.6.8/node-v0.6.8.msi</a></p>
<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.8/node-v0.6.8.pkg">http://nodejs.org/dist/v0.6.8/node-v0.6.8.pkg</a></p>
<p>Website: <a href="http://nodejs.org/docs/v0.6.8/">http://nodejs.org/docs/v0.6.8/</a></p>
<p>Documentation: <a href="http://nodejs.org/docs/v0.6.8/api/">http://nodejs.org/docs/v0.6.8/api/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/744/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Релиз Node v0.7.0 (Unstable)</title>
		<link>http://nodejs.ru/739</link>
		<comments>http://nodejs.ru/739#comments</comments>
		<pubDate>Tue, 17 Jan 2012 06:18:38 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Релизы]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=739</guid>
		<description><![CDATA[Node v0.7.0 (Unstable)
Это первый релиз из нестабильной ветки v0.7. Всем рекомендуется использовать стабильную ветку v0.6.
2012.01.16, Version 0.7.0 (unstable)

Upgrade V8 to 3.8.6

Use GYP build system on unix (Ben Noordhuis)

Experimenetal isolates support (Ben Noordhuis)

Improvements to Cluster API (Andreas Madsen)

Use isolates for internal debugger (Fedor Indutny)

Bug fixes

Source Code: http://nodejs.org/dist/v0.7.0/node-v0.7.0.tar.gz
Windows Installer: http://nodejs.org/dist/v0.7.0/node-v0.7.0.msi
Macintosh Installer: http://nodejs.org/dist/v0.7.0/node-v0.7.0.pkg
Website: http://nodejs.org/docs/v0.7.0/
Documentation: http://nodejs.org/docs/v0.7.0/api/
]]></description>
			<content:encoded><![CDATA[<p>Node v0.7.0 (Unstable)</p>
<p>Это первый релиз из нестабильной ветки v0.7. Всем рекомендуется использовать стабильную ветку v0.6.</p>
<p>2012.01.16, Version 0.7.0 (unstable)</p>
<ul>
<li>Upgrade V8 to 3.8.6
</li>
<li>Use GYP build system on unix (Ben Noordhuis)
</li>
<li>Experimenetal isolates support (Ben Noordhuis)
</li>
<li>Improvements to Cluster API (Andreas Madsen)
</li>
<li>Use isolates for internal debugger (Fedor Indutny)
</li>
<li>Bug fixes</li>
</ul>
<p>Source Code: <a href="http://nodejs.org/dist/v0.7.0/node-v0.7.0.tar.gz">http://nodejs.org/dist/v0.7.0/node-v0.7.0.tar.gz</a></p>
<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.0/node-v0.7.0.msi">http://nodejs.org/dist/v0.7.0/node-v0.7.0.msi</a></p>
<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.0/node-v0.7.0.pkg">http://nodejs.org/dist/v0.7.0/node-v0.7.0.pkg</a></p>
<p>Website: <a href="http://nodejs.org/docs/v0.7.0/">http://nodejs.org/docs/v0.7.0/</a></p>
<p>Documentation: <a href="http://nodejs.org/docs/v0.7.0/api/">http://nodejs.org/docs/v0.7.0/api/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/739/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Модули, о которых следует знать: optimist</title>
		<link>http://nodejs.ru/732</link>
		<comments>http://nodejs.ru/732#comments</comments>
		<pubDate>Thu, 12 Jan 2012 12:47:54 +0000</pubDate>
		<dc:creator>Kuroki Kaze</dc:creator>
				<category><![CDATA[Мануалы]]></category>
		<category><![CDATA[модули]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=732</guid>
		<description><![CDATA[Первый пост был о dnode &#8212; библиотеке для вызова удалённых процедур в свободном стиле.
На этот раз я представлю Вам node-optimist &#8212; лёгкий парсер аргументов командной строки. Эта библиотека также написана Джеймсом Хэллидэем (SubStack), одним из основателей Browserling и Testling.

Вам интересно насколько простым может быть парсер аргументов командной строки? Смотрите:

var argv = require&#40;'optimist'&#41;.argv;

И всё готово! Все [...]]]></description>
			<content:encoded><![CDATA[<p>Первый пост был о <a href="http://nodejs.ru/726">dnode</a> &mdash; библиотеке для вызова удалённых процедур в свободном стиле.</p>
<p>На этот раз я представлю Вам <a href="https://github.com/substack/node-optimist">node-optimist</a> &mdash; лёгкий парсер аргументов командной строки. Эта библиотека также написана Джеймсом Хэллидэем (SubStack), одним из основателей Browserling и Testling.</p>
<p><span id="more-732"></span></p>
<p>Вам интересно насколько простым может быть парсер аргументов командной строки? Смотрите:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">argv</span><span style="color: #339933;">;</span></pre></div></div>

<p>И всё готово! Все параметры разобраны и помещены в <tt>argv</tt>.</p>
<p>Вот разные примеры использования. Для начала, в библиотеке есть поддержка длинных аргументов:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#<span style="color: #339933;">!/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>env node
<span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">argv</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">rif</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">5</span> <span style="color: #339933;">*</span> argv.<span style="color: #660066;">xup</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">7.138</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Buy more riffiwobbles'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Sell the xupptumblers'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Теперь можно запустить этот скрипт с параметрами <tt>--rif</tt> и <tt>--xup</tt>, вот так:</p>
<pre>
$ ./xup.js --rif=55 --xup=9.52
Buy more riffiwobbles

$ ./xup.js --rif 12 --xup 8.1
Sell the xupptumblers
</pre>
<p><br/></p>
<p>Кроме этого, поддерживаются короткие аргументы:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#<span style="color: #339933;">!/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>env node
<span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">argv</span><span style="color: #339933;">;</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(%d,%d)'</span><span style="color: #339933;">,</span> argv.<span style="color: #660066;">x</span><span style="color: #339933;">,</span> argv.<span style="color: #660066;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Можно использовать -x и -y для передачи параметров:</p>
<pre>
$ ./short.js -x 10 -y 21
(10,21)
</pre>
<p><br/></p>
<p>Node-optimist также поддерживает двоичные аргументы &mdash; короткие, длинные и смешанные:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#<span style="color: #339933;">!/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>env node
<span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">argv</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">s</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">fr</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">'Le chat dit: '</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">'The cat says: '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>
    <span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">fr</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">'miaou'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">'meow'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">p</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">'.'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Теперь можно вызывать скрипт с разными опциями:</p>
<pre>
$ ./bool.js -s
The cat says: meow

$ ./bool.js -sp
The cat says: meow.

$ ./bool.js -sp --fr
Le chat dit: miaou.
</pre>
<p><br/></p>
<p>Можно использовать аргументы без дефиса с помощью <tt>argv._</tt>:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#<span style="color: #339933;">!/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>env node
<span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">argv</span><span style="color: #339933;">;</span>
&nbsp;
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(%d,%d)'</span><span style="color: #339933;">,</span> argv.<span style="color: #660066;">x</span><span style="color: #339933;">,</span> argv.<span style="color: #660066;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>argv._<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот примеры использования:</p>
<pre>
$ ./nonopt.js -x 6.82 -y 3.35 moo
(6.82,3.35)
[ 'moo' ]

$ ./nonopt.js foo -x 0.54 bar -y 1.12 baz
(0.54,1.12)
[ 'foo', 'bar', 'baz' ]
</pre>
<p><br/></p>
<p>Optimist также предоставляет функции .usage() и .demand():</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#<span style="color: #339933;">!/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>env node
<span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">usage</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Usage: $0 -x [num] -y [num]'</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">demand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'x'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">argv</span><span style="color: #339933;">;</span>
&nbsp;
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">x</span> <span style="color: #339933;">/</span> argv.<span style="color: #660066;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Здесь параметры x и y обязательны, и если они не были переданы, будет выведена информация об использовании скрипта:</p>
<pre>
$ ./divide.js -x 55 -y 11
5

$ node ./divide.js -x 4.91 -z 2.51
Usage: node ./divide.js -x [num] -y [num]

Options:
  -x  [required]
  -y  [required]

Missing required arguments: y
</pre>
<p><br/></p>
<p>Optimist поддерживает значения параметров по умолчанию через <tt>.default()</tt>:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#<span style="color: #339933;">!/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>env node
<span style="color: #003366; font-weight: bold;">var</span> argv <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'optimist'</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #003366; font-weight: bold;">default</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'x'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #003366; font-weight: bold;">default</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'y'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">argv</span>
<span style="color: #339933;">;</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>argv.<span style="color: #660066;">x</span> <span style="color: #339933;">+</span> argv.<span style="color: #660066;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Здесь x и y по умолчанию будут равны 10:</p>
<pre>
$ ./default_singles.js -x 5
15
</pre>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/732/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Модули, о которых следует знать: dnode</title>
		<link>http://nodejs.ru/726</link>
		<comments>http://nodejs.ru/726#comments</comments>
		<pubDate>Tue, 10 Jan 2012 14:13:40 +0000</pubDate>
		<dc:creator>Kuroki Kaze</dc:creator>
				<category><![CDATA[Мануалы]]></category>
		<category><![CDATA[модули]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=726</guid>
		<description><![CDATA[Об авторе: Питер Круминс использует node.js больше двух лет, и построил на ней свой проект Browserling. Оригинальные статьи серии можно найти в его блоге.
В этой серии мы пройдемся по нескольким десяткам модулей для node.js, с примерами и объяснениями для чего какой модуль лучше применять.
Первый модуль в серии - dnode. Dnode это библиотека для удаленных вызовов [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>Об авторе</em>: Питер Круминс использует node.js больше двух лет, и построил на ней свой проект Browserling. Оригинальные статьи серии можно найти в <a href="http://catonmat.net">его блоге</a>.</p></blockquote>
<p>В этой серии мы пройдемся по нескольким десяткам модулей для node.js, с примерами и объяснениями для чего какой модуль лучше применять.</p>
<p>Первый модуль в серии - <a href="http://github.com/substack/dnode">dnode</a>. Dnode это библиотека для удаленных вызовов в свободном стиле, она написана <a href="http://substack.net/">Джеймсом Хэллидэем (SubStack)</a> - одним из основателей <a href="http://browserling.com/">Browserling</a> и <a href="http://testling.com/">Testling</a>.</p>
<p><span id="more-726"></span></p>
<p>Вот что это такое. Это server.js:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> dnode <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dnode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> server <span style="color: #339933;">=</span> dnode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    mul <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span> m<span style="color: #339933;">,</span> cb<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> cb<span style="color: #009900;">&#40;</span>n <span style="color: #339933;">*</span> m<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
server.<span style="color: #660066;">listen</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">5050</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>А это client.js:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> dnode <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dnode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
dnode.<span style="color: #660066;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">5050</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>remote<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    remote.<span style="color: #660066;">mul</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'10 * 20 = '</span> <span style="color: #339933;">+</span> n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Теперь при запуске client.js Вы получите вывод:</p>
<pre>
$ node client.js
200
</pre>
<p><br/></p>
<p>Видите что получилось? Клиент вызвал функцию mul на сервере и передал ей аргументы 10 и 20. Они были перемножены на стороне сервера и результат был отправлен обратно к клиенту через callback.</p>
<p>Важно пояснить, что код никуда не передавался, всё сделано исключительно вызовами. Вы можете увидеть пример реализации протокола dnode в репозитории <a href="https://github.com/substack/dnode-protocol">dnode-protocol на Github</a>.</p>
<p>Вот более сложный пример, где клиент вызывает сервер, который вызывает клиент, возвращающий промежуточный результат серверу, который потом передает клиенту окончательный результат.</p>
<p>server.js:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> dnode <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dnode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> server <span style="color: #339933;">=</span> dnode<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>client<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">calculate</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span> m<span style="color: #339933;">,</span> cb<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        client.<span style="color: #660066;">div</span><span style="color: #009900;">&#40;</span>n<span style="color: #339933;">*</span>m<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            cb<span style="color: #009900;">&#40;</span>res<span style="color: #339933;">+</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
server.<span style="color: #660066;">listen</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">5050</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>client.js:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> dnode <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dnode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> client <span style="color: #339933;">=</span> dnode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    div <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span> cb<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       cb<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">/</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
client.<span style="color: #660066;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">5050</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>remote<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    remote.<span style="color: #660066;">calculate</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'the result is '</span> <span style="color: #339933;">+</span> n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>При запуске клиента Вы получите результат 41. Вот что при этом происходит. Сначала клиент подключается к серверу dnode по порту 5050. После подключения, dnode вызывает функцию <tt>calculate</tt> на стороне сервера и передаёт ей аргументы 10 и 20 и функцию-обработчик, выводящую результат. Теперь когда сервер получает аргументы 10 и 20, он перемножает их и вызывает функцию <tt>div</tt> на клиенте, которая делит результат на 5. Полученный результат возвращается на сервер, к нему добавляется единица и вызывается изначальный обработчик, выводящий окончательный результат.</p>
<p>В Browserling мы везде используем dnode. Каждый сервис это сервер dnode и все они связаны между собой. Например, сервис аутентификации это сервер dnode. Мы может остановить его для обновления, не останавливая при этом весь сайт. Очень здорово.</p>
<p>Установить dnode можно через npm:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">npm <span style="color: #c20cb9; font-weight: bold;">install</span> dnode</pre></div></div>

<p>И так как у dnode есть четко определённый протокол, его можно реализовать на любом языке! Вот, к примеру, реализации на <a href="https://github.com/substack/dnode-perl">Perl</a>, <a href="https://github.com/substack/dnode-ruby">Ruby</a>, <a href="https://github.com/bergie/dnode-php">PHP</a> и <a href="https://github.com/aslakhellesoy/dnode-java">Java</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/726/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>По версии InfoWorld&#8217;s 2012 одним из победителей &#171;Технология года&#187; стал NodeJS!</title>
		<link>http://nodejs.ru/719</link>
		<comments>http://nodejs.ru/719#comments</comments>
		<pubDate>Tue, 10 Jan 2012 07:18:22 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[O node]]></category>
		<category><![CDATA[Интересно]]></category>

		<guid isPermaLink="false">http://nodejs.ru/?p=719</guid>
		<description><![CDATA[InfoWorld выбирал среди лучшего оборудования, программного обеспечения, средства разработки и облачных сервисов.

В номинации выбор был среди продуктов: Node.js, Jaxer, EJScript, RingoJS и AppengineJS.

Before Node.js came along, the world wanted servers with sophisticated, multithreaded operating systems that juggle everything for you. Then a clever programmer asked, "What if we just forgot about that?" What if we [...]]]></description>
			<content:encoded><![CDATA[<p><b>InfoWorld выбирал среди лучшего оборудования, программного обеспечения, средства разработки и облачных сервисов.</b></p>
<p><a href="http://nodejs.ru/wp-content/uploads/2012/01/InfoWorlds-2012-Technology-of-the-Year-Award-winners-InfoWorld-Google-Chrome_007.png"><img src="http://nodejs.ru/wp-content/uploads/2012/01/InfoWorlds-2012-Technology-of-the-Year-Award-winners-InfoWorld-Google-Chrome_007.png" alt="" width="527" height="397" class="alignnone size-full wp-image-720" /></a></p>
<p>В номинации выбор был среди продуктов: Node.js, Jaxer, EJScript, RingoJS и AppengineJS.</p>
<p><span id="more-719"></span></p>
<blockquote><p>Before Node.js came along, the world wanted servers with sophisticated, multithreaded operating systems that juggle everything for you. Then a clever programmer asked, "What if we just forgot about that?" What if we turned this fast JavaScript engine into a Web server? Node.js runs incredibly quickly because it doesn't stop to generate new threads every time someone sends a request to the server. Oh, there's a price. Your code better not take too long to execute. You better make sure it won't block because the operating system doesn't have your back. If you screw up, the entire machine will lock up with your endless loop. But let's not concentrate on that. Node.js is wicked fast and that makes it fun to explore.<br />
-- Peter Wayner</p></blockquote>
<p><a href="http://www.infoworld.com/slideshow/24605/infoworlds-2012-technology-the-year-award-winners-183313#slide19">Источник</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/719/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
