Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Dependency injection for Node.js. What do you think?

Date: Sat, 28 Jul 2012 01:02:22 -0700 (PDT)
From: Eldar <eldar...@gmail.com>
To: nodejs@googlegroups.com
Message-Id: <79fba4c7-c2fc-4f53-a486-0680dbb15235@googlegroups.com>
In-Reply-To: <CAAPeUN=KqDXYroxA0iV4b-bFfXhsVG_nE2G-U-Z0Kdd1W82qNQ@mail.gmail.com>
References: <ef102c88-93e2-4fbe-b405-c9ba8c3ea5de@googlegroups.com>
 <CAMy9rDQa983En1e5u0=QFGPikv_J3=MMkZ5Lx+HdaeehyKmM+g@mail.gmail.com>
 <CAGEtHiKa=4MmyAkjT=CcQ7gC2+if8CGjt3uKVn12HOYERwdPdA@mail.gmail.com>
 <CAEG95pe8CjnEQMTwWkhZrHiqhv7OJf_ktheYC0QiKdYmK_UUmQ@mail.gmail.com>
 <1428597985339663175@unknownmsgid>
 <CAHL2Ymoe8HOAKievE432utqtS5OOBcbo7g8hD56eQnf9YH0qYQ@mail.gmail.com>
 <CAAPeUN=KqDXYroxA0iV4b-bFfXhsVG_nE2G-U-Z0Kdd1W82qNQ@mail.gmail.com>
Subject: Re: [nodejs] Dependency injection for Node.js. What do you think?
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_240_30312369.1343462542672"

------=_Part_240_30312369.1343462542672
Content-Type: multipart/alternative; 
	boundary="----=_Part_241_3046539.1343462542672"

------=_Part_241_3046539.1343462542672
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Thank you for pointing to Broadway.

But yeah there are situations where hooks were not planed. For example: 

Once I tried to mock the file system. The goal were to define directory 
layout right in test. That's much more better and cleaner then having 
separate fixtures dir created by hand.  You have all information right were 
it used, you have instant understanding of what's going on, etc. But you 
can't mock file system if you need real IO right in the test and at the 
same time you are using third party! Anyway, even if you don't have such 
case, isn't it better to just use  "require" for things that semantically 
are nothing more then just a "require", rather then introduce  artificial 
hooks?

That's the reason why I'd like such thing to be officially supported. 
Actually the title of the topic is wrong. I had in mind feedback 
for proposal. 

On Saturday, July 28, 2012 2:02:05 AM UTC+4, Marak Squires wrote:
>
> Yeah, that's pretty much the whole point of Broadway.
>
> I use Broadway a lot of "plugin systems". Essentially, where you are 
> requiring files as node.js modules, but you want programmatic hooks into 
> the initialization and attachment process of the module.
>
> On Fri, Jul 27, 2012 at 2:57 PM, Joshua Holbrook <josh.holbr...@gmail.com>wrote:
>
>> You might like this, Eldar:
>>
>> https://github.com/flatiron/broadway
>>
>> It gives you dependency injection and IoC. We use it a lot in
>> flatiron, it's pretty sweet.
>>
>> --Josh
>>
>> On Fri, Jul 27, 2012 at 2:27 PM, Rob Ashton
>> <robashtondevelo...@gmail.com> wrote:
>> > Yeah, sorry
>> >
>> > Not a real developer, never worked on a real project, excuse me for my
>> > ignorance.
>> >
>> > Lol jking
>> >
>> > Sigh
>> >
>> > Sent from my iPhone
>> >
>> > On 27 Jul 2012, at 20:33, Joe Developer <joe.d.develo...@gmail.com> 
>> wrote:
>> >
>> > Erm, outside of the amateur hour projects just such functionality 
>> exists:
>> > http://blog.endpoint.com/2011/02/locally-served-yui3.html
>> >
>> > And yes, once you have had the pleasure of using it on non-trivial apps 
>> you
>> > miss it dearly when dealing with the ad-hoc structured or 'good enough
>> > rolled' alternatives.
>> >
>> > On Fri, Jul 27, 2012 at 11:47 PM, Martin Cooper <mfncoo...@gmail.com> 
>> wrote:
>> >>
>> >> On Fri, Jul 27, 2012 at 8:07 AM, Rob Ashton <robash...@codeofrob.com>
>> >> wrote:
>> >> > Do we need dependency injection in nodejs? Well - if you mean 
>> dependency
>> >> > injection literally, we have it already, it looks like this
>> >> >
>> >> > function doSomething(dependency) {
>> >> >
>> >> > }
>> >> >
>> >> > doSomething(new FooDependency())
>> >> >
>> >> > or
>> >> >
>> >> > doSomething(new BarDependency())
>> >> >
>> >> > or
>> >> >
>> >> > var Animal = function(vocals) {
>> >> >   this.vocals = vocals
>> >> > }
>> >> >
>> >> > var cat = new Animal(miaow)
>> >> > cat dog = new Animal(woof)
>> >> >
>> >> > etc
>> >> >
>> >> > ----------
>> >> >
>> >> > If you're talking about  'container' support to support this, it's a
>> >> > road
>> >> > that has been trodden well by .NET and Java devs, and has been shown
>> >> > time
>> >> > and time again to lead full circle to the very beginning where you 
>> just
>> >> > build your object graphs manually and introduce extensibility points
>> >> > where
>> >> > you need them for either mocking out slow dependencies for testing or
>> >> > allowing consumers to control something about your code.
>> >> >
>> >> > Trying to bake in support to this as part of the require system seems
>> >> > like
>> >> > asking for trouble, keep it explicit, keep it as needed and let the
>> >> > goodness
>> >> > follow.
>> >>
>> >> I agree with this. If you need dependency injection, design it into
>> >> your system. Don't force it on unsuspecting modules.
>> >>
>> >> A couple of things that come to mind off the top of my head:
>> >>
>> >> * If I compel some module to use, say, 'my-funky-fs' instead of 'fs'
>> >> without knowing it, will that cause *its* dependencies to have their
>> >> usage of 'fs' replaced too? What if one of them was already replacing
>> >> it with something of its own choosing, perhaps using a different
>> >> mechanism (like maybe graceful-fs)?
>> >>
>> >> * If someone reports an issue with one of my packages, and I spend a
>> >> bunch of my time debugging it, only to discover that the reporter
>> >> replaced one of my dependencies with some other flaky substitute and
>> >> that's the culprit, I'm not going to be happy about that. I design my
>> >> packages to work with their declared dependencies, or I specifically
>> >> design for dependency injection if it's needed.
>> >>
>> >> > My two cents.
>> >>
>> >> And mine. :)
>> >>
>> >> --
>> >> Martin Cooper
>> >>
>> >>
>> >> > On Fri, Jul 27, 2012 at 4:45 PM, Eldar <eldar...@gmail.com> wrote:
>> >> >>
>> >> >> Do we need this in Node?
>> >> >>
>> >> >> My answer is yes we need some (simple) way to specify the app level
>> >> >> dependencies  at runtime. Here is my take on this. Please checkout 
>> and
>> >> >> let
>> >> >> me know how do you feel about.
>> >> >>
>> >> >> But the idea is very simple:
>> >> >>
>> >> >>
>> >> >> // inside any index.js
>> >> >> var R = require('runtime').patchNative()
>> >> >> var use = R(module).use
>> >> >>
>> >> >> use('fs', 'node_modules/third/party', require('./smart-fs'))
>> >> >>
>> >> >> That's it. Third party module just uses our smart file system
>> >> >>
>> >> >> --
>> >> >> Job Board: http://jobs.nodejs.org/
>> >> >> Posting guidelines:
>> >> >> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> >> >> You received this message because you are subscribed to the Google
>> >> >> Groups "nodejs" group.
>> >> >> To post to this group, send email to nodejs@googlegroups.com
>> >> >> To unsubscribe from this group, send email to
>> >> >> nodejs+unsubscribe@googlegroups.com
>> >> >> For more options, visit this group at
>> >> >> http://groups.google.com/group/nodejs?hl=en?hl=en
>> >> >
>> >> >
>> >> > --
>> >> > Job Board: http://jobs.nodejs.org/
>> >> > Posting guidelines:
>> >> > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> >> > You received this message because you are subscribed to the Google
>> >> > Groups "nodejs" group.
>> >> > To post to this group, send email to nodejs@googlegroups.com
>> >> > To unsubscribe from this group, send email to
>> >> > nodejs+unsubscribe@googlegroups.com
>> >> > For more options, visit this group at
>> >> > http://groups.google.com/group/nodejs?hl=en?hl=en
>> >>
>> >> --
>> >> Job Board: http://jobs.nodejs.org/
>> >> Posting guidelines:
>> >> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> >> You received this message because you are subscribed to the Google
>> >> Groups "nodejs" group.
>> >> To post to this group, send email to nodejs@googlegroups.com
>> >> To unsubscribe from this group, send email to
>> >> nodejs+unsubscribe@googlegroups.com
>> >> For more options, visit this group at
>> >> http://groups.google.com/group/nodejs?hl=en?hl=en
>> >
>> >
>> > --
>> > Job Board: http://jobs.nodejs.org/
>> > Posting guidelines:
>> > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> > You received this message because you are subscribed to the Google
>> > Groups "nodejs" group.
>> > To post to this group, send email to nodejs@googlegroups.com
>> > To unsubscribe from this group, send email to
>> > nodejs+unsubscribe@googlegroups.com
>> > For more options, visit this group at
>> > http://groups.google.com/group/nodejs?hl=en?hl=en
>> >
>> > --
>> > Job Board: http://jobs.nodejs.org/
>> > Posting guidelines:
>> > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> > You received this message because you are subscribed to the Google
>> > Groups "nodejs" group.
>> > To post to this group, send email to nodejs@googlegroups.com
>> > To unsubscribe from this group, send email to
>> > nodejs+unsubscribe@googlegroups.com
>> > For more options, visit this group at
>> > http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>>
>>
>> --
>> Joshua Holbrook
>> Head of Support
>> Nodejitsu Inc.
>> j...@nodejitsu.com
>>
>> --
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: 
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to nodejs@googlegroups.com
>> To unsubscribe from this group, send email to
>> nodejs+unsubscribe@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>
>
------=_Part_241_3046539.1343462542672
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Thank you for pointing to Broadway.<div><br></div><div>But yeah there are s=
ituations where hooks were not planed. For example:&nbsp;</div><div><br></d=
iv><div>Once I tried to mock the file system. The goal were to define direc=
tory layout right in test. That's much more better and cleaner then having =
separate fixtures dir created by hand. &nbsp;You have all information right=
 were it used, you have instant understanding of what's going on, etc. But =
you can't mock file system if you need real IO right in the test and at the=
 same time you are using third party! Anyway, even if you don't have such c=
ase, isn't it better to just use &nbsp;"require" for things that semantical=
ly are nothing more then just a "require", rather then introduce &nbsp;arti=
ficial hooks?</div><div><br></div><div>That's the reason why I'd like such =
thing to be&nbsp;officially&nbsp;supported. Actually the title of the topic=
 is wrong. I had in mind feedback for&nbsp;proposal.&nbsp;</div><br>On Satu=
rday, July 28, 2012 2:02:05 AM UTC+4, Marak Squires wrote:<blockquote class=
=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #cc=
c solid;padding-left: 1ex;">Yeah, that's pretty much the whole point of Bro=
adway.<div><br></div><div>I use Broadway a lot of "plugin systems". Essenti=
ally, where you are requiring files as node.js modules, but you want progra=
mmatic hooks into the&nbsp;initialization&nbsp;and attachment process of th=
e module.<br>
<br><div class=3D"gmail_quote">On Fri, Jul 27, 2012 at 2:57 PM, Joshua Holb=
rook <span dir=3D"ltr">&lt;<a href=3D"mailto:josh.holbr...@gmail.com" targe=
t=3D"_blank">josh.holbr...@gmail.com</a>&gt;</span> wrote:<br><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex">
You might like this, Eldar:<br>
<br>
<a href=3D"https://github.com/flatiron/broadway" target=3D"_blank">https://=
github.com/flatiron/<wbr>broadway</a><br>
<br>
It gives you dependency injection and IoC. We use it a lot in<br>
flatiron, it's pretty sweet.<br>
<br>
--Josh<br>
<div><div><br>
On Fri, Jul 27, 2012 at 2:27 PM, Rob Ashton<br>
&lt;<a href=3D"mailto:robashtondevelo...@gmail.com" target=3D"_blank">robas=
htondevelo...@gmail.com</a>&gt; wrote:<br>
&gt; Yeah, sorry<br>
&gt;<br>
&gt; Not a real developer, never worked on a real project, excuse me for my=
<br>
&gt; ignorance.<br>
&gt;<br>
&gt; Lol jking<br>
&gt;<br>
&gt; Sigh<br>
&gt;<br>
&gt; Sent from my iPhone<br>
&gt;<br>
&gt; On 27 Jul 2012, at 20:33, Joe Developer &lt;<a href=3D"mailto:joe.d.de=
velo...@gmail.com" target=3D"_blank">joe.d.develo...@gmail.com</a>&gt; wrot=
e:<br>
&gt;<br>
&gt; Erm, outside of the amateur hour projects just such functionality exis=
ts:<br>
&gt; <a href=3D"http://blog.endpoint.com/2011/02/locally-served-yui3.html" =
target=3D"_blank">http://blog.endpoint.com/2011/<wbr>02/locally-served-yui3=
.html</a><br>
&gt;<br>
&gt; And yes, once you have had the pleasure of using it on non-trivial app=
s you<br>
&gt; miss it dearly when dealing with the ad-hoc structured or 'good enough=
<br>
&gt; rolled' alternatives.<br>
&gt;<br>
&gt; On Fri, Jul 27, 2012 at 11:47 PM, Martin Cooper &lt;<a href=3D"mailto:=
mfncoo...@gmail.com" target=3D"_blank">mfncoo...@gmail.com</a>&gt; wrote:<b=
r>
&gt;&gt;<br>
&gt;&gt; On Fri, Jul 27, 2012 at 8:07 AM, Rob Ashton &lt;<a href=3D"mailto:=
robash...@codeofrob.com" target=3D"_blank">robash...@codeofrob.com</a>&gt;<=
br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; Do we need dependency injection in nodejs? Well - if you mean=
 dependency<br>
&gt;&gt; &gt; injection literally, we have it already, it looks like this<b=
r>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; function doSomething(dependency) {<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; }<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; doSomething(new FooDependency())<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; or<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; doSomething(new BarDependency())<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; or<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; var Animal =3D function(vocals) {<br>
&gt;&gt; &gt; &nbsp; this.vocals =3D vocals<br>
&gt;&gt; &gt; }<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; var cat =3D new Animal(miaow)<br>
&gt;&gt; &gt; cat dog =3D new Animal(woof)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; etc<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ----------<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If you're talking about &nbsp;'container' support to support =
this, it's a<br>
&gt;&gt; &gt; road<br>
&gt;&gt; &gt; that has been trodden well by .NET and Java devs, and has bee=
n shown<br>
&gt;&gt; &gt; time<br>
&gt;&gt; &gt; and time again to lead full circle to the very beginning wher=
e you just<br>
&gt;&gt; &gt; build your object graphs manually and introduce extensibility=
 points<br>
&gt;&gt; &gt; where<br>
&gt;&gt; &gt; you need them for either mocking out slow dependencies for te=
sting or<br>
&gt;&gt; &gt; allowing consumers to control something about your code.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Trying to bake in support to this as part of the require syst=
em seems<br>
&gt;&gt; &gt; like<br>
&gt;&gt; &gt; asking for trouble, keep it explicit, keep it as needed and l=
et the<br>
&gt;&gt; &gt; goodness<br>
&gt;&gt; &gt; follow.<br>
&gt;&gt;<br>
&gt;&gt; I agree with this. If you need dependency injection, design it int=
o<br>
&gt;&gt; your system. Don't force it on unsuspecting modules.<br>
&gt;&gt;<br>
&gt;&gt; A couple of things that come to mind off the top of my head:<br>
&gt;&gt;<br>
&gt;&gt; * If I compel some module to use, say, 'my-funky-fs' instead of 'f=
s'<br>
&gt;&gt; without knowing it, will that cause *its* dependencies to have the=
ir<br>
&gt;&gt; usage of 'fs' replaced too? What if one of them was already replac=
ing<br>
&gt;&gt; it with something of its own choosing, perhaps using a different<b=
r>
&gt;&gt; mechanism (like maybe graceful-fs)?<br>
&gt;&gt;<br>
&gt;&gt; * If someone reports an issue with one of my packages, and I spend=
 a<br>
&gt;&gt; bunch of my time debugging it, only to discover that the reporter<=
br>
&gt;&gt; replaced one of my dependencies with some other flaky substitute a=
nd<br>
&gt;&gt; that's the culprit, I'm not going to be happy about that. I design=
 my<br>
&gt;&gt; packages to work with their declared dependencies, or I specifical=
ly<br>
&gt;&gt; design for dependency injection if it's needed.<br>
&gt;&gt;<br>
&gt;&gt; &gt; My two cents.<br>
&gt;&gt;<br>
&gt;&gt; And mine. :)<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Martin Cooper<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; On Fri, Jul 27, 2012 at 4:45 PM, Eldar &lt;<a href=3D"mailto:=
eldar...@gmail.com" target=3D"_blank">eldar...@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Do we need this in Node?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; My answer is yes we need some (simple) way to specify the=
 app level<br>
&gt;&gt; &gt;&gt; dependencies &nbsp;at runtime. Here is my take on this. P=
lease checkout and<br>
&gt;&gt; &gt;&gt; let<br>
&gt;&gt; &gt;&gt; me know how do you feel about.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; But the idea is very simple:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; // inside any index.js<br>
&gt;&gt; &gt;&gt; var R =3D require('runtime').<wbr>patchNative()<br>
&gt;&gt; &gt;&gt; var use =3D R(module).use<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; use('fs', 'node_modules/third/party', require('./smart-fs=
'))<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; That's it. Third party module just uses our smart file sy=
stem<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; Job Board: <a href=3D"http://jobs.nodejs.org/" target=3D"=
_blank">http://jobs.nodejs.org/</a><br>
&gt;&gt; &gt;&gt; Posting guidelines:<br>
&gt;&gt; &gt;&gt; <a href=3D"https://github.com/joyent/node/wiki/Mailing-Li=
st-Posting-Guidelines" target=3D"_blank">https://github.com/joyent/<wbr>nod=
e/wiki/Mailing-List-<wbr>Posting-Guidelines</a><br>
&gt;&gt; &gt;&gt; You received this message because you are subscribed to t=
he Google<br>
&gt;&gt; &gt;&gt; Groups "nodejs" group.<br>
&gt;&gt; &gt;&gt; To post to this group, send email to <a href=3D"mailto:no=
dejs@googlegroups.com" target=3D"_blank">nodejs@googlegroups.com</a><br>
&gt;&gt; &gt;&gt; To unsubscribe from this group, send email to<br>
&gt;&gt; &gt;&gt; <a href=3D"mailto:nodejs%2Bunsubscribe@googlegroups.com" =
target=3D"_blank">nodejs+unsubscribe@<wbr>googlegroups.com</a><br>
&gt;&gt; &gt;&gt; For more options, visit this group at<br>
&gt;&gt; &gt;&gt; <a href=3D"http://groups.google.com/group/nodejs?hl=3Den?=
hl=3Den" target=3D"_blank">http://groups.google.com/<wbr>group/nodejs?hl=3D=
en?hl=3Den</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Job Board: <a href=3D"http://jobs.nodejs.org/" target=3D"_bla=
nk">http://jobs.nodejs.org/</a><br>
&gt;&gt; &gt; Posting guidelines:<br>
&gt;&gt; &gt; <a href=3D"https://github.com/joyent/node/wiki/Mailing-List-P=
osting-Guidelines" target=3D"_blank">https://github.com/joyent/<wbr>node/wi=
ki/Mailing-List-<wbr>Posting-Guidelines</a><br>
&gt;&gt; &gt; You received this message because you are subscribed to the G=
oogle<br>
&gt;&gt; &gt; Groups "nodejs" group.<br>
&gt;&gt; &gt; To post to this group, send email to <a href=3D"mailto:nodejs=
@googlegroups.com" target=3D"_blank">nodejs@googlegroups.com</a><br>
&gt;&gt; &gt; To unsubscribe from this group, send email to<br>
&gt;&gt; &gt; <a href=3D"mailto:nodejs%2Bunsubscribe@googlegroups.com" targ=
et=3D"_blank">nodejs+unsubscribe@<wbr>googlegroups.com</a><br>
&gt;&gt; &gt; For more options, visit this group at<br>
&gt;&gt; &gt; <a href=3D"http://groups.google.com/group/nodejs?hl=3Den?hl=
=3Den" target=3D"_blank">http://groups.google.com/<wbr>group/nodejs?hl=3Den=
?hl=3Den</a><br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Job Board: <a href=3D"http://jobs.nodejs.org/" target=3D"_blank">h=
ttp://jobs.nodejs.org/</a><br>
&gt;&gt; Posting guidelines:<br>
&gt;&gt; <a href=3D"https://github.com/joyent/node/wiki/Mailing-List-Postin=
g-Guidelines" target=3D"_blank">https://github.com/joyent/<wbr>node/wiki/Ma=
iling-List-<wbr>Posting-Guidelines</a><br>
&gt;&gt; You received this message because you are subscribed to the Google=
<br>
&gt;&gt; Groups "nodejs" group.<br>
&gt;&gt; To post to this group, send email to <a href=3D"mailto:nodejs@goog=
legroups.com" target=3D"_blank">nodejs@googlegroups.com</a><br>
&gt;&gt; To unsubscribe from this group, send email to<br>
&gt;&gt; <a href=3D"mailto:nodejs%2Bunsubscribe@googlegroups.com" target=3D=
"_blank">nodejs+unsubscribe@<wbr>googlegroups.com</a><br>
&gt;&gt; For more options, visit this group at<br>
&gt;&gt; <a href=3D"http://groups.google.com/group/nodejs?hl=3Den?hl=3Den" =
target=3D"_blank">http://groups.google.com/<wbr>group/nodejs?hl=3Den?hl=3De=
n</a><br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Job Board: <a href=3D"http://jobs.nodejs.org/" target=3D"_blank">http:=
//jobs.nodejs.org/</a><br>
&gt; Posting guidelines:<br>
&gt; <a href=3D"https://github.com/joyent/node/wiki/Mailing-List-Posting-Gu=
idelines" target=3D"_blank">https://github.com/joyent/<wbr>node/wiki/Mailin=
g-List-<wbr>Posting-Guidelines</a><br>
&gt; You received this message because you are subscribed to the Google<br>
&gt; Groups "nodejs" group.<br>
&gt; To post to this group, send email to <a href=3D"mailto:nodejs@googlegr=
oups.com" target=3D"_blank">nodejs@googlegroups.com</a><br>
&gt; To unsubscribe from this group, send email to<br>
&gt; <a href=3D"mailto:nodejs%2Bunsubscribe@googlegroups.com" target=3D"_bl=
ank">nodejs+unsubscribe@<wbr>googlegroups.com</a><br>
&gt; For more options, visit this group at<br>
&gt; <a href=3D"http://groups.google.com/group/nodejs?hl=3Den?hl=3Den" targ=
et=3D"_blank">http://groups.google.com/<wbr>group/nodejs?hl=3Den?hl=3Den</a=
><br>
&gt;<br>
&gt; --<br>
&gt; Job Board: <a href=3D"http://jobs.nodejs.org/" target=3D"_blank">http:=
//jobs.nodejs.org/</a><br>
&gt; Posting guidelines:<br>
&gt; <a href=3D"https://github.com/joyent/node/wiki/Mailing-List-Posting-Gu=
idelines" target=3D"_blank">https://github.com/joyent/<wbr>node/wiki/Mailin=
g-List-<wbr>Posting-Guidelines</a><br>
&gt; You received this message because you are subscribed to the Google<br>
&gt; Groups "nodejs" group.<br>
&gt; To post to this group, send email to <a href=3D"mailto:nodejs@googlegr=
oups.com" target=3D"_blank">nodejs@googlegroups.com</a><br>
&gt; To unsubscribe from this group, send email to<br>
&gt; <a href=3D"mailto:nodejs%2Bunsubscribe@googlegroups.com" target=3D"_bl=
ank">nodejs+unsubscribe@<wbr>googlegroups.com</a><br>
&gt; For more options, visit this group at<br>
&gt; <a href=3D"http://groups.google.com/group/nodejs?hl=3Den?hl=3Den" targ=
et=3D"_blank">http://groups.google.com/<wbr>group/nodejs?hl=3Den?hl=3Den</a=
><br>
<br>
<br>
<br>
</div></div><span><font color=3D"#888888">--<br>
Joshua Holbrook<br>
Head of Support<br>
Nodejitsu Inc.<br>
<a href=3D"mailto:j...@nodejitsu.com" target=3D"_blank">j...@nodejitsu.com<=
/a><br>
</font></span><div><div><br>
--<br>
Job Board: <a href=3D"http://jobs.nodejs.org/" target=3D"_blank">http://job=
s.nodejs.org/</a><br>
Posting guidelines: <a href=3D"https://github.com/joyent/node/wiki/Mailing-=
List-Posting-Guidelines" target=3D"_blank">https://github.com/joyent/<wbr>n=
ode/wiki/Mailing-List-<wbr>Posting-Guidelines</a><br>
You received this message because you are subscribed to the Google<br>
Groups "nodejs" group.<br>
To post to this group, send email to <a href=3D"mailto:nodejs@googlegroups.=
com" target=3D"_blank">nodejs@googlegroups.com</a><br>
To unsubscribe from this group, send email to<br>
<a href=3D"mailto:nodejs%2Bunsubscribe@googlegroups.com" target=3D"_blank">=
nodejs+unsubscribe@<wbr>googlegroups.com</a><br>
For more options, visit this group at<br>
<a href=3D"http://groups.google.com/group/nodejs?hl=3Den?hl=3Den" target=3D=
"_blank">http://groups.google.com/<wbr>group/nodejs?hl=3Den?hl=3Den</a><br>
</div></div></blockquote></div><br></div>
</blockquote>
------=_Part_241_3046539.1343462542672--

------=_Part_240_30312369.1343462542672--