<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>nodeJS</title>
	
	<link>http://nodejs.ru</link>
	<description>Быстрый веб-сервер на javascript движке V8</description>
	<lastBuildDate>Sat, 03 Mar 2012 04:36:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Nodejs" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="nodejs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">Nodejs</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Релиз Node 0.6.12</title>
		<link>http://nodejs.ru/759</link>
		<comments>http://nodejs.ru/759#comments</comments>
		<pubDate>Sat, 03 Mar 2012 04:36:20 +0000</pubDate>
		<dc:creator>InTech</dc:creator>
				<category><![CDATA[Релизы]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[релиз]]></category>

		<guid isPermaLink="false">http://nodejs.ru/759</guid>
		<description><![CDATA[2012.03.02 Version 0.6.12 (stable)


Upgrade V8 to 3.6.6.24


dtrace ustack helper improvements (Dave Pacheco)


API Documentation refactor (isaacs)


#2827 net: fix race write() before and after connect() (koichik)


#2554 #2567 throw if fs args for 'start' or 'end' are strings (AJ ONeal)


punycode: Update to v1.0.0 (Mathias Bynens)


Make a fat binary for the OS X pkg (isaacs)


Fix hang on accessing process.stdin [...]]]></description>
			<content:encoded><![CDATA[<p>2012.03.02 Version 0.6.12 (stable)</p>
<ul>
<li>
<p>Upgrade V8 to 3.6.6.24</p>
</li>
<li>
<p>dtrace ustack helper improvements (Dave Pacheco)</p>
</li>
<li>
<p>API Documentation refactor (isaacs)</p>
</li>
<li>
<p>#2827 net: fix race write() before and after connect() (koichik)</p>
</li>
<li>
<p>#2554 #2567 throw if fs args for 'start' or 'end' are strings (AJ ONeal)</p>
</li>
<li>
<p>punycode: Update to v1.0.0 (Mathias Bynens)</p>
</li>
<li>
<p>Make a fat binary for the OS X pkg (isaacs)</p>
</li>
<li>
<p>Fix hang on accessing process.stdin (isaacs)</p>
</li>
<li>
<p>repl: make tab completion work on non-objects (Nathan Rajlich)</p>
</li>
<li>
<p>Fix fs.watch on OS X (Ben Noordhuis)</p>
</li>
<li>
<p>Fix #2515 nested setTimeouts cause premature process exit (Ben Noordhuis)</p>
</li>
<li>
<p>windows: fix time conversion in stat (Igor Zinkovsky)</p>
</li>
<li>
<p>windows: fs: handle EOF in read (Brandon Philips)</p>
</li>
<li>
<p>windows: avoid IOCP short-circuit on non-ifs lsps (Igor Zinkovsky)</p>
</li>
<li>
<p>Upgrade npm to 1.1.4 (isaacs)</p>
<p>
- windows fixes<br />
- Bundle nested bundleDependencies properly<br />
- install: support –save with url install targets<br />
- shrinkwrap: behave properly with url-installed modules<br />
- support installing uncompressed tars or single file modules from urls etc.<br />
- don't run make clean on rebuild<br />
- support HTTPS-over-HTTP proxy tunneling
</p>
</li>
</ul>
<p>Source Code: <a href="http://nodejs.org/dist/v0.6.12/node-v0.6.12.tar.gz">http://nodejs.org/dist/v0.6.12/node-v0.6.12.tar.gz</a></p>
<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.12/node-v0.6.12.msi">http://nodejs.org/dist/v0.6.12/node-v0.6.12.msi</a></p>
<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.12/node-v0.6.12.pkg">http://nodejs.org/dist/v0.6.12/node-v0.6.12.pkg</a></p>
<p>Website: <a href="http://nodejs.org/docs/v0.6.12/">http://nodejs.org/docs/v0.6.12/</a></p>
<p>Documentation: <a href="http://nodejs.org/docs/v0.6.12/api/">http://nodejs.org/docs/v0.6.12/api/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nodejs.ru/759/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
	</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! -->

