<?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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Rock, Paper, Software</title>
	
	<link>http://software.tulentsev.com</link>
	<description>Random thoughts about programming</description>
	<lastBuildDate>Fri, 03 Feb 2012 13:47:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ThoughtsOnSoftwareAndComputers" /><feedburner:info uri="thoughtsonsoftwareandcomputers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Ruby: how to override class method with a module</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/YUPrwi5lqyw/</link>
		<comments>http://software.tulentsev.com/2012/02/ruby-how-to-override-class-method-with-a-module/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 13:09:00 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[metaprogramming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=298</guid>
		<description><![CDATA[This seems to be a popular interview question. It indeed requires advanced knowledge of ruby. You have a class with a class method. Write a module that, when included, will override that class method. Explanation of the problem Now classic way of mixing in class methods is this (and it doesn&#8217;t solve the problem, of [...]]]></description>
			<content:encoded><![CDATA[<p>This seems to be a popular interview question. It indeed requires advanced knowledge of ruby.</p>

<blockquote>
  <p>You have a class with a class method. Write a module that, when included, will override that class method.</p>
</blockquote>

<h3>Explanation of the problem</h3>

<p>Now classic way of mixing in class methods is this (and it doesn&#8217;t solve the problem, of course).</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#9966CC; font-weight:bold;">module</span> FooModule
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">included</span> base
        base.<span style="color:#9900CC;">extend</span> ClassMethods
      <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
      <span style="color:#9966CC; font-weight:bold;">module</span> ClassMethods
        <span style="color:#9966CC; font-weight:bold;">def</span> bar
          <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;module&quot;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">class</span> Klass
      <span style="color:#9966CC; font-weight:bold;">include</span> FooModule
&nbsp;
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">bar</span>
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'class'</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
&nbsp;
    Klass.<span style="color:#9900CC;">bar</span> <span style="color:#008000; font-style:italic;">#=&gt; class</span></pre></div></div>




<p>When modules are included or extended into a class, its methods are placed right above this class&#8217; methods in inheritance chain. This means that if we were to call <code>super</code> in that class method, it would print &#8220;module&#8221;. But we don&#8217;t want to touch original class definition, we want to alter it from outside.</p>

<h3>So, can we do something?</h3>

<p>Good for us, ruby has a concept of <a href="http://www.google.ru/search?ix=hca&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=ruby+open+classes">&#8220;open classes&#8221;</a>. This means that we can change virtually everything in the app, even some 3rd-party libraries. Every class can &#8220;opened&#8221; and new methods can be added to it, or old methods can be redefined. Let&#8217;s look how it works.<span id="more-298"></span></p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#9966CC; font-weight:bold;">class</span> Klass
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">bar</span>
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'class'</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">class</span> Klass
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">bar</span>
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'class 2'</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    Klass.<span style="color:#9900CC;">bar</span> <span style="color:#008000; font-style:italic;">#=&gt; class 2</span></pre></div></div>




<p>The second class definition does not overwrite previous one, it opens and alters it. In this case, it happened to define a method with the same name. This resulted in old method being overwritten by the new one. This works with any classes, even base library classes.</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>, <span style="color:#006666;">2</span>, <span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">to_s</span> <span style="color:#008000; font-style:italic;">#=&gt; [1, 2, 3]</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC0066; font-weight:bold;">Array</span>
      <span style="color:#9966CC; font-weight:bold;">def</span> to_s
        <span style="color:#996600;">&quot;an array: #{join ', '}&quot;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>, <span style="color:#006666;">2</span>, <span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">to_s</span> <span style="color:#008000; font-style:italic;">#=&gt; an array: 1, 2, 3</span></pre></div></div>




<p>Or the same code can be rewritten as</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>, <span style="color:#006666;">2</span>, <span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">to_s</span> <span style="color:#008000; font-style:italic;">#=&gt; [1, 2, 3]</span>
&nbsp;
    <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">class_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      <span style="color:#9966CC; font-weight:bold;">def</span> to_s
        <span style="color:#996600;">&quot;an array: #{join ', '}&quot;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span>, <span style="color:#006666;">2</span>, <span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">to_s</span> <span style="color:#008000; font-style:italic;">#=&gt; an array: 1, 2, 3</span></pre></div></div>




<h3>Applying the knowledge</h3>

<p>Let&#8217;s start with simpler things, like overriding an instance method.</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#9966CC; font-weight:bold;">class</span> Klass
      <span style="color:#9966CC; font-weight:bold;">def</span> say
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'class'</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">module</span> FooModule
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">included</span> base
        base.<span style="color:#9900CC;">class_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
          <span style="color:#9966CC; font-weight:bold;">def</span> say
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;module&quot;</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
&nbsp;
    Klass.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span>:<span style="color:#9966CC; font-weight:bold;">include</span>, FooModule<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    Klass.<span style="color:#9900CC;">new</span>.<span style="color:#9900CC;">say</span> <span style="color:#008000; font-style:italic;">#=&gt; module</span></pre></div></div>




<p>Modules have a special callback that gets called every time a module is included in a class. We can use that to call class_eval on that class and redefine a method.</p>

<p>Replacing a class method is done in a similar way.</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#9966CC; font-weight:bold;">class</span> Klass
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">say</span>
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'class'</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">module</span> FooModule
      <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">included</span> base
        base.<span style="color:#9900CC;">instance_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
          <span style="color:#9966CC; font-weight:bold;">def</span> say
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;module&quot;</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
&nbsp;
    Klass.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span>:<span style="color:#9966CC; font-weight:bold;">include</span>, FooModule<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    Klass.<span style="color:#9900CC;">say</span> <span style="color:#008000; font-style:italic;">#=&gt; module</span></pre></div></div>




<p>The only difference here is that we call instance_eval instead of class_eval. This can be a very confusing part. In short, class_eval creates instance methods and instance_eval creates class methods.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=YUPrwi5lqyw:LaMjuUz13_A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=YUPrwi5lqyw:LaMjuUz13_A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=YUPrwi5lqyw:LaMjuUz13_A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=YUPrwi5lqyw:LaMjuUz13_A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/YUPrwi5lqyw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2012/02/ruby-how-to-override-class-method-with-a-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2012/02/ruby-how-to-override-class-method-with-a-module/</feedburner:origLink></item>
		<item>
		<title>Mongoid, db.system.namespaces queries</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/bw0gCXeicDE/</link>
		<comments>http://software.tulentsev.com/2012/02/mongoid-db-system-namespaces-queries/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 12:12:54 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MongoDb]]></category>
		<category><![CDATA[MongoId]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=295</guid>
		<description><![CDATA[Recently I faced some issues with Mongoid when upgrading my Rails app from REE+Passenger to MRI 1.9.3+Unicorn. There are some Resque workers in the background. After some deploy they started to consume a ton of traffic from MongoDB. After some investigation, I found that they heavily read system.namespaces collection. I tried upgrading to latest versions [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I faced some issues with <a href="http://mongoid.org">Mongoid</a> when upgrading my Rails app from REE+Passenger to MRI 1.9.3+Unicorn.</p>

<p>There are some Resque workers in the background. After some deploy they started to consume a ton of traffic from MongoDB. After some investigation, I found that they heavily read <code>system.namespaces</code> collection. I tried upgrading to latest versions of <code>mongoid</code>(2.4.3) and <code>mongo</code>(1.5.2) to no avail. This does not happen with normal unicorn workers. This also does not happen if I downgrade <code>mongoid</code> to 2.0.1.</p>

<p>I am still not sure what&#8217;s happening here. I&#8217;ll update this post when I discover something.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=bw0gCXeicDE:hXTjn1F5VbQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=bw0gCXeicDE:hXTjn1F5VbQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=bw0gCXeicDE:hXTjn1F5VbQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=bw0gCXeicDE:hXTjn1F5VbQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/bw0gCXeicDE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2012/02/mongoid-db-system-namespaces-queries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2012/02/mongoid-db-system-namespaces-queries/</feedburner:origLink></item>
		<item>
		<title>How to quickly lock screen in Mac OS X?</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/377BnvXQjFI/</link>
		<comments>http://software.tulentsev.com/2012/01/how-to-quickly-lock-screen-in-mac-os-x/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 13:28:28 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=291</guid>
		<description><![CDATA[I am tired of googling the same information over and over, so I am posting it here. To quickly lock your screen, press Ctrl+Shift+Eject. Also, you can press Fn+Ctrl+Eject to quickly restart your Mac, shut it down or put to sleep.]]></description>
			<content:encoded><![CDATA[<p>I am tired of googling the same information over and over, so I am posting it here.</p>

<p>To quickly lock your screen, press Ctrl+Shift+Eject.</p>

<p>Also, you can press Fn+Ctrl+Eject to quickly restart your Mac, shut it down or put to sleep.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=377BnvXQjFI:wL3sMdtuK20:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=377BnvXQjFI:wL3sMdtuK20:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=377BnvXQjFI:wL3sMdtuK20:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=377BnvXQjFI:wL3sMdtuK20:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/377BnvXQjFI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2012/01/how-to-quickly-lock-screen-in-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2012/01/how-to-quickly-lock-screen-in-mac-os-x/</feedburner:origLink></item>
		<item>
		<title>Email validation done right</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/S-K_7KC4Ius/</link>
		<comments>http://software.tulentsev.com/2012/01/email-validation-done-right/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 13:48:24 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=289</guid>
		<description><![CDATA[Let&#8217;s imagine that you have to check if a string is a valid email. You could come up with something like: /&#91;a-zA-Z0-9\.&#93;+@&#91;a-z&#93;+\.&#91;a-z&#93;+/ It works, right? WRONG. Sure it&#8217;ll handle a couple of your test examples. But it&#8217;s not ready for real world usage. Here&#8217;s a standards compliant Perl regex. /&#40;?&#40;DEFINE&#41; &#40;?&#60;address&#62; &#40;?&#38;mailbox&#41; &#124; &#40;?&#38;group&#41;&#41; &#40;?&#60;mailbox&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s imagine that you have to check if a string is a valid email. You could come up with something like:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;">    <span style="color: #339933;">/</span><span style="color: #009900;">&#91;</span>a<span style="color: #339933;">-</span>zA<span style="color: #339933;">-</span>Z0<span style="color: #339933;">-</span><span style="color: #cc66cc;">9</span>\<span style="color: #339933;">.</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+@</span><span style="color: #009900;">&#91;</span>a<span style="color: #339933;">-</span>z<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>\<span style="color: #339933;">.</span><span style="color: #009900;">&#91;</span>a<span style="color: #339933;">-</span>z<span style="color: #009900;">&#93;</span><span style="color: #339933;">+/</span></pre></div></div>

<p>It works, right? WRONG. Sure it&#8217;ll handle a couple of your test examples. But it&#8217;s not ready for real world usage. Here&#8217;s a standards compliant Perl regex.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#40;</span>DEFINE<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;address&gt;</span>         <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;mailbox</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;group</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;mailbox&gt;</span>         <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;name_addr</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;addr_spec</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;name_addr&gt;</span>       <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;display_name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;angle_addr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;angle_addr&gt;</span>      <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #339933;">&lt;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;addr_spec</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;group&gt;</span>           <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;display_name</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;mailbox_list</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #339933;">;</span>
                                          <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;display_name&gt;</span>    <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;phrase</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;mailbox_list&gt;</span>    <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;mailbox</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> <span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;mailbox</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;addr_spec&gt;</span>       <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;local_part</span><span style="color: #009900;">&#41;</span> \<span style="color: #339933;">@</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;domain</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;local_part&gt;</span>      <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;dot_atom</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;quoted_string</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;domain&gt;</span>          <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;dot_atom</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;domain_literal</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;domain_literal&gt;</span>  <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> \<span style="color: #009900;">&#91;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;dcontent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>
                                 \<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;dcontent&gt;</span>        <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;dtext</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;quoted_pair</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;dtext&gt;</span>           <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;NO_WS_CTL</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">\x21</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x5a</span><span style="color: #0000ff;">\x5e</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x7e</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;atext&gt;</span>           <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;ALPHA</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;DIGIT</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#91;</span><span style="color: #339933;">!</span><span style="color: #666666; font-style: italic;">#\$%&amp;'*+-/=?^_`{|}~])</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;atom&gt;</span>            <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;atext</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;dot_atom&gt;</span>        <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;dot_atom_text</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;dot_atom_text&gt;</span>   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;atext</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> \<span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;atext</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;text&gt;</span>            <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">\x01</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x09</span><span style="color: #0000ff;">\x0b</span><span style="color: #0000ff;">\x0c</span><span style="color: #0000ff;">\x0e</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x7f</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;quoted_pair&gt;</span>     \\ <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;qtext&gt;</span>           <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;NO_WS_CTL</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">\x21</span><span style="color: #0000ff;">\x23</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x5b</span><span style="color: #0000ff;">\x5d</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x7e</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;qcontent&gt;</span>        <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;qtext</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;quoted_pair</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;quoted_string&gt;</span>   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;DQUOTE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;qcontent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>
                        <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;DQUOTE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CFWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;word&gt;</span>            <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;atom</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;quoted_string</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;phrase&gt;</span>          <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;word</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;"># Folding white space</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;FWS&gt;</span>             <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;WSP</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;CRLF</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;WSP</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;ctext&gt;</span>           <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;NO_WS_CTL</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">\x21</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x27</span><span style="color: #0000ff;">\x2a</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x5b</span><span style="color: #0000ff;">\x5d</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x7e</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;ccontent&gt;</span>        <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;ctext</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;quoted_pair</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;comment</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;comment&gt;</span>         \<span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;ccontent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> \<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;CFWS&gt;</span>            <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;comment</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>
                       <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?:</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;comment</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #0000ff;">&amp;FWS</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;"># No whitespace control</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;NO_WS_CTL&gt;</span>       <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">\x01</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x08</span><span style="color: #0000ff;">\x0b</span><span style="color: #0000ff;">\x0c</span><span style="color: #0000ff;">\x0e</span><span style="color: #339933;">-</span><span style="color: #0000ff;">\x1f</span><span style="color: #0000ff;">\x7f</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
&nbsp;
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;ALPHA&gt;</span>           <span style="color: #009900;">&#91;</span>A<span style="color: #339933;">-</span>Za<span style="color: #339933;">-</span>z<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;DIGIT&gt;</span>           <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;CRLF&gt;</span>            <span style="color: #0000ff;">\x0d</span> <span style="color: #0000ff;">\x0a</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#40;</span><span style="color: #339933;">?</span><span style="color: #009999;">&lt;DQUOTE&gt;</span>          <span style="color: #ff0000;">&quot;)
   (?&lt;WSP&gt;             [<span style="color: #000099; font-weight: bold;">\x</span>20<span style="color: #000099; font-weight: bold;">\x</span>09])
 )
&nbsp;
 (?&amp;address)/x</span></pre></div></div>

<p> I couldn&#8217;t even imagine that the matter is *this* complex.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=S-K_7KC4Ius:yOfv_3fAEAg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=S-K_7KC4Ius:yOfv_3fAEAg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=S-K_7KC4Ius:yOfv_3fAEAg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=S-K_7KC4Ius:yOfv_3fAEAg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/S-K_7KC4Ius" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2012/01/email-validation-done-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2012/01/email-validation-done-right/</feedburner:origLink></item>
		<item>
		<title>jQuery chaining</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/s-08tUXHIOU/</link>
		<comments>http://software.tulentsev.com/2010/08/jquery-chaining/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 16:00:13 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=189</guid>
		<description><![CDATA[I am beginning to fall in love with jQuery. Screw you, bicycle inventors! :-) function next_step&#40;&#41; &#123; // note how elegant and self-explanatory this code is. var cl = 'step_selected'; $&#40;'.' + cl&#41;.removeClass&#40;cl&#41;.next&#40;&#41;.addClass&#40;cl&#41;; &#160; // Also look at previous version of the code, // before I remembered about chaining methods. &#160; // var li = [...]]]></description>
			<content:encoded><![CDATA[<p>I am beginning to fall in love with jQuery. Screw you, <a href="http://vkontakte.ru">bicycle inventors</a>! :-)</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">    <span style="color: #003366; font-weight: bold;">function</span> next_step<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">// note how elegant and self-explanatory this code is.</span>
        <span style="color: #003366; font-weight: bold;">var</span> cl <span style="color: #339933;">=</span> <span style="color: #3366CC;">'step_selected'</span><span style="color: #339933;">;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.'</span> <span style="color: #339933;">+</span> cl<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span>cl<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span>cl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// Also look at previous version of the code,</span>
        <span style="color: #006600; font-style: italic;">// before I remembered about chaining methods.</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// var li = $('.step_selected');</span>
        <span style="color: #006600; font-style: italic;">// li.removeClass('step_selected');</span>
        <span style="color: #006600; font-style: italic;">// li.next().addClass('step_selected');</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">// Not as sexy, right? :-)</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=s-08tUXHIOU:yWLxAL38JWE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=s-08tUXHIOU:yWLxAL38JWE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=s-08tUXHIOU:yWLxAL38JWE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=s-08tUXHIOU:yWLxAL38JWE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/s-08tUXHIOU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2010/08/jquery-chaining/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2010/08/jquery-chaining/</feedburner:origLink></item>
		<item>
		<title>Funny side benefit :-)</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/1euWxdzaLR0/</link>
		<comments>http://software.tulentsev.com/2010/08/funny-side-benefit/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 16:17:18 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=187</guid>
		<description><![CDATA[There I was, minding my own business, trying to solve problems in graph theory and I accidentally made a Sudoku puzzle solver! Isn&#8217;t it funny how life turns out sometimes? But that&#8217;s just how awesome LINQ is. Eric Lippert on LINQ]]></description>
			<content:encoded><![CDATA[<blockquote><p>There I was, minding my own business, trying to solve problems in graph theory and I accidentally made a Sudoku puzzle solver! Isn&#8217;t it funny how life turns out sometimes? But that&#8217;s just how awesome LINQ is.</p></blockquote>
<p><a href="http://blogs.msdn.com/b/ericlippert/archive/2010/07/29/graph-colouring-part-five.aspx">Eric Lippert on LINQ</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=1euWxdzaLR0:wXJ6wWdMdqA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=1euWxdzaLR0:wXJ6wWdMdqA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=1euWxdzaLR0:wXJ6wWdMdqA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=1euWxdzaLR0:wXJ6wWdMdqA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/1euWxdzaLR0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2010/08/funny-side-benefit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2010/08/funny-side-benefit/</feedburner:origLink></item>
		<item>
		<title>Atomic updates, part 2</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/bNH5dv4TRhA/</link>
		<comments>http://software.tulentsev.com/2010/06/atomic-updates-part-2/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 14:12:41 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[MongoDb]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=184</guid>
		<description><![CDATA[Let&#8217;s review another common scenario: posts and votes. Mongo&#8217;s approach would be to store vote count in the post itself (caching) and keep voters also in the post, in an array field. Let&#8217;s assume we want to register a new vote on post. This operation consists of three steps: 1. ensure that the voter hasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s review another common scenario: posts and votes. Mongo&#8217;s approach would be to store vote count in the post itself (caching) and keep voters also in the post, in an array field. Let&#8217;s assume we want to register a new vote on post. This operation consists of three steps:</p>
<blockquote><p>
1. ensure that the voter hasn&#8217;t voted yet, and, if not,<br />
2. increment the number of votes and<br />
3. add the new voter to the array.</p>
<p>MongoDB&#8217;s query and update features allows us to perform all three actions in a single operation. Here&#8217;s what that would look like from the shell:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">//</span> Assume that story_id <span style="color:#9966CC; font-weight:bold;">and</span> user_id represent real story <span style="color:#9966CC; font-weight:bold;">and</span> user ids.
<span style="color:#9900CC;">db</span>.<span style="color:#9900CC;">stories</span>.<span style="color:#9900CC;">update</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>_id: story_id, voters: <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'$ne'</span>: user_id<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span>, 
  <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'$inc'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>votes: <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#996600;">'$push'</span>: <span style="color:#006600; font-weight:bold;">&#123;</span>voters: user_id<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</pre></div></div>

<p>What this says is &#8220;get me a story with the given id whose voters array does not contain the given user id and, if you find such a story, perform two atomic updates: first, increment votes by 1 and then push the user id onto the voters array.&#8221;</p>
<p>This operation highly efficient; it&#8217;s also reliable. The one caveat is that, because update operations are &#8220;fire and forget,&#8221; you won&#8217;t get a response from the server. But in most cases, this should be a non-issue.
</p></blockquote>
<p>quote from <a href="http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails">MongoDB site</a>.</p>
<p>How would you implement this in your regular SQL database?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=bNH5dv4TRhA:y3zT520ikQI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=bNH5dv4TRhA:y3zT520ikQI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=bNH5dv4TRhA:y3zT520ikQI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=bNH5dv4TRhA:y3zT520ikQI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/bNH5dv4TRhA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2010/06/atomic-updates-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2010/06/atomic-updates-part-2/</feedburner:origLink></item>
		<item>
		<title>MongoId and atomic increment</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/v889RYZzSpg/</link>
		<comments>http://software.tulentsev.com/2010/06/mongoid-and-atomic-increment/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 23:01:26 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[MongoDb]]></category>
		<category><![CDATA[MongoId]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=179</guid>
		<description><![CDATA[I am starting to learn this new piece of technology, the MongoDB. It has many sweet features. However, using Ruby driver directly is not too comfortable. Plus we&#8217;re all hooked to ORM sweeteners. So people started developing ORM libraries for MongoDB and Ruby (MongoId, MongoMapper to name a few). I have decided to try MongoId [...]]]></description>
			<content:encoded><![CDATA[<p>I am starting to learn this new piece of technology, the MongoDB. It has many sweet features. However, using Ruby driver directly is not too comfortable. Plus we&#8217;re all hooked to ORM sweeteners. So people started developing ORM libraries for MongoDB and Ruby (<a href="http://mongoid.org">MongoId</a>, <a href="http://github.com/mongomapper/mongomapper">MongoMapper</a> to name a few).</p>
<p>I have decided to try MongoId first. It seems to be a quite good library. However, it still has gaps in documentation. Today I was finding out how to perform an atomic increment of a field. In SQL world this would look like:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> users <span style="color: #993333; font-weight: bold;">SET</span> spam_count <span style="color: #66cc66;">=</span> spam_count <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span>;</pre></div></div>

<p>Mongo Ruby driver supports this kind of operation, but MongoId doesn&#8217;t. So I was trying to get down to the driver. And this is what I couldn&#8217;t easily find in the docs. If you&#8217;re like me, I&#8217;ll save you a couple of hours. Here it is:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># assume we know object id already</span>
User.<span style="color:#9900CC;">collection</span>.<span style="color:#9900CC;">update</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'_id'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'4c05848e45760182b5000001'</span><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'$inc'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'spam_count'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=v889RYZzSpg:RvLKBJUE34k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=v889RYZzSpg:RvLKBJUE34k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=v889RYZzSpg:RvLKBJUE34k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=v889RYZzSpg:RvLKBJUE34k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/v889RYZzSpg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2010/06/mongoid-and-atomic-increment/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2010/06/mongoid-and-atomic-increment/</feedburner:origLink></item>
		<item>
		<title>Intuitive behaviour</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/L5A4wCuxVP0/</link>
		<comments>http://software.tulentsev.com/2009/05/intuitive-behaviour/#comments</comments>
		<pubDate>Mon, 18 May 2009 15:19:25 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[RubyMine]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=176</guid>
		<description><![CDATA[Today I was looking at exception stack trace. One of suspicious places was &#8216;&#8230;\reports_controller.rb:129&#8243;. Okay, navigating to this location using RubyMine is a piece of cake. Ctrl+Shift+N to get to reports_controller.rb, then Ctrl+G to position caret at specified line. But hey, that&#8217;s two actions. I hit Ctrl+Shift+N, put &#8216;reports_controller.rb:129&#8242; in and voila! It worked just [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was looking at exception stack trace. One of suspicious places was &#8216;&#8230;\reports_controller.rb:129&#8243;. Okay, navigating to this location using RubyMine is a piece of cake. Ctrl+Shift+N to get to reports_controller.rb, then Ctrl+G to position caret at specified line. But hey, that&#8217;s two actions. I hit Ctrl+Shift+N, put &#8216;reports_controller.rb:129&#8242; in and voila! It worked just as I expected!<br />
RubyMine: +1 to intuitivity, +1 to overall impression. </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=L5A4wCuxVP0:BmIkF1ty7gQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=L5A4wCuxVP0:BmIkF1ty7gQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=L5A4wCuxVP0:BmIkF1ty7gQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=L5A4wCuxVP0:BmIkF1ty7gQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/L5A4wCuxVP0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2009/05/intuitive-behaviour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2009/05/intuitive-behaviour/</feedburner:origLink></item>
		<item>
		<title>Advanced default parameters</title>
		<link>http://feedproxy.google.com/~r/ThoughtsOnSoftwareAndComputers/~3/miK4Y0Mt8o8/</link>
		<comments>http://software.tulentsev.com/2009/03/advanced-default-parametes/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 02:20:29 +0000</pubDate>
		<dc:creator>Sergei Tulentsev</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://software.tulentsev.com/?p=162</guid>
		<description><![CDATA[Today I was quite amazed by one of Ruby features. It is about default values of method parameters. For example you can do something like this: def get_current_actions&#40;project_id, status_id = params&#91;:status_id&#93; &#124;&#124; DEFAULT_STATUS_ID&#41; # implementation goes here end The code is saying basically this: &#8220;if status_id is not passed explicitly, try to take its value [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was quite amazed by one of Ruby features. It is about default values of method parameters. For example you can do something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> get_current_actions<span style="color:#006600; font-weight:bold;">&#40;</span>project_id, status_id = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:status_id</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> DEFAULT_STATUS_ID<span style="color:#006600; font-weight:bold;">&#41;</span>    
    <span style="color:#008000; font-style:italic;"># implementation goes here</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>The code is saying basically this: &#8220;if status_id is not passed explicitly, try to take its value from <strong>params</strong> array. If it doesn&#8217;t contain specified key, then fall back to a constant&#8221;. This feature (as almost all the rest of Ruby magic) made avaiable by Ruby&#8217;s nature: it is interpreted language. This type of code is totally unusual to guys like me, who come from the world of static typing and compiled languages. But I think I&#8217;m gonna get used to it :-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=miK4Y0Mt8o8:QMIfVUkDbog:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=miK4Y0Mt8o8:QMIfVUkDbog:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?i=miK4Y0Mt8o8:QMIfVUkDbog:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?a=miK4Y0Mt8o8:QMIfVUkDbog:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/ThoughtsOnSoftwareAndComputers?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/ThoughtsOnSoftwareAndComputers/~4/miK4Y0Mt8o8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://software.tulentsev.com/2009/03/advanced-default-parametes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://software.tulentsev.com/2009/03/advanced-default-parametes/</feedburner:origLink></item>
	</channel>
</rss>

