<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>NetManiac</title>
	
	<link>http://nhw.pl/wp</link>
	<description>Witold Rugowski on web20 wave with Ruby on Rails</description>
	<lastBuildDate>Thu, 01 Dec 2011 09:46:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Netmaniac" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="netmaniac" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">Netmaniac</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Passing current user id to Rails models</title>
		<link>http://nhw.pl/wp/2011/11/30/passing-current-user-id-to-rails-models</link>
		<comments>http://nhw.pl/wp/2011/11/30/passing-current-user-id-to-rails-models#comments</comments>
		<pubDate>Tue, 29 Nov 2011 23:31:02 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[mvc violation]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[real world]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=533</guid>
		<description><![CDATA[Long time since last post, isn&#8217;t it? Well, I&#8217;m completely busy with my work in Nettigo, selling Arduinos and other nice gears :) I do not do gigs anymore, so there is a lot less reasons to write about Rails. But I still use this framework, since my backend software is written in Rails, so [...]]]></description>
			<content:encoded><![CDATA[<p>Long time since last post, isn&#8217;t it? Well, I&#8217;m completely busy with my work in Nettigo, selling Arduinos and other nice gears :) I do not do gigs anymore, so there is a lot less reasons to write about Rails.</p>
<p>But I still use this framework, since my backend software is written in Rails, so here is one thing which I think can be useful for You.</p>
<p>Often we want to pass ID of current user to Rails model internals. Most answers are <em>don&#8217;t do that</em>, this is controller work to do authorization stuff, MVC is to prevent such thins, etc. </p>
<p><small>here was not related picture (as usual on this blog). Some readers were complaining it was not only unrelated but even offending. Well, maybe they were right, so, I have removed that picture.</small></p>
<p>Yeah, right, but what if we want to keep some kind of audit trail what is happening with given model? This is not authorization, just who done what.</p>
<p>Since in my application case audit records are created in observers simple passing user id as some additional parameter is no go for me &#8211; I don&#8217;t want to change interface just to pass user info, that breaks too much things.</p>
<p>So, I have chosen this approach:</p>
<pre class='ruby' name='code'>
def with_user user, &#038;block
  if user.blank?
    yield
  else
    Thread.current[:user] = user.id
    yield
    Thread.current[:user] = nil
  end
end
</pre>
<p>And each operation I want to track I invoke:</p>
<pre class='ruby' name='code'>
with_user(current_user) do
 model.do_some_stuff
end
</pre>
<p><code>Thread.current</code> acts as a hash accessible in current thread and allow us to pass some info skipping MVC isolation (You wanted that, right? :) )</p>
<p>In observers I can access user ID and store it with record. If it is not present, audit trails is being marked as created by <em>System</em>. That means probably cron job, or console action (well on console I can run code inside <code>with_user</code> block when needed).</p>
<p>This is safe as long each request is being processed in single thread and we make sure that user ID will be cleared after our operation. When ID will stay in Thread.current, next request being processed by this Rails app instance will have access to that value and wrong audit records will be created.</p>
<p>Code has to be updated, since any exception will occur inside block, code after <code>yield</code> will be skipped and user ID won&#8217;t be erased from <code>Thread.current</code>. Here it is, final version:</p>
<pre class='ruby' name='code'>
def with_user user, &#038;block
  if user.blank?
    yield
  else
    Thread.current[:user] = user.id

    begin
      yield
    ensure
      Thread.current[:user] = nil
    end
  end
end
</pre>
<p>Code inside <code>ensure</code> will be executed each time &#8211; both when exception was raised and when execution was clean.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=ErZIhuvIF_A:ZOh-K_G1aP8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=ErZIhuvIF_A:ZOh-K_G1aP8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=ErZIhuvIF_A:ZOh-K_G1aP8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=ErZIhuvIF_A:ZOh-K_G1aP8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=ErZIhuvIF_A:ZOh-K_G1aP8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=ErZIhuvIF_A:ZOh-K_G1aP8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=ErZIhuvIF_A:ZOh-K_G1aP8:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2011/11/30/passing-current-user-id-to-rails-models/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>wsdl2ruby and failing SSL certificate validation</title>
		<link>http://nhw.pl/wp/2011/01/21/wsdl2ruby-and-failing-ssl-certificate-validation</link>
		<comments>http://nhw.pl/wp/2011/01/21/wsdl2ruby-and-failing-ssl-certificate-validation#comments</comments>
		<pubDate>Fri, 21 Jan 2011 00:39:29 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=521</guid>
		<description><![CDATA[When You are about to use Ruby to connect to some SOAP-like API You will probably use SOAP4r gem. First step would be to generate client code from WSDL provided by API. If it is served via HTTPS and server has SSL certificate not signed by some common CA (like self signed certs) You will [...]]]></description>
			<content:encoded><![CDATA[<p>When You are about to use Ruby to connect to some SOAP-like API You will probably use SOAP4r gem. First step would be to generate client code from WSDL provided by API. If it is served via HTTPS and server has SSL certificate not signed by some common CA (like self signed certs) You will experience following error  running <code>wsdl2ruby.rb</code>:</p>
<pre>
at depth 0 - 20: unable to get local issuer certificate
F, [2011-01-18T10:13:40.816069 #4035]
FATAL -- app: Detected an exception. Stopping ...
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
certificate verify failed (OpenSSL::SSL::SSLError)
</pre>
<p>HTTPClient (this is gem used by SOAP4r to do all HTTP communication) tries to validate SSL certificates by default. Good, this is what SSL was thought for :) HTTPClient allows to use own CA (which is better solution than to lower security, especially on production :) ), however I don&#8217;t know how to pass this via SOPA4r abstraction (<code>ssl-config.set-trust-ca('path')</code> in HTTPClient (<strong>UPDATE</strong> &#8211; OK I think here You can find info <a href="http://www.fngtps.com/2007/03/openssl-ssl-sslerror-with-soap4r-and-the-rubyforge-gem">how to specify CA, client key and cert in SOAP client</a>). We can tell HTTPClient not to check SSL certs via options of SOAP::RPC::Driver when using client code:</p>
<pre class='ruby' name='code'>
d = SomeSOAP::ClientClass.new
d.options['protocol.http.ssl_config.verify_mode'] = OpenSSL::SSL::VERIFY_NONE
</pre>
<p>This may be not very wise, so use that if You know what You are doing.</p>
<h2>And what about wsdl2ruby.rb</h2>
<p>Above example relates to scenario when You have generated client code, which should connect to HTTPS. But how to recover from <code>certificate verify failed</code> when running wsdl2ruby.rb (in other words &#8211; when generating client code and WSDL is on HTTPS server with self signed cert)?</p>
<p>First solution is to download WSDL and generate client code from local file. Will do the trick unless WSDL imports some additional XSDs via HTTPS URL&#8230; </p>
<p><a href="https://gist.github.com/736721">This gist</a> gave me idea how to solve that (BTW &#8211; very useful trick to debug HTTP traffic if You can not use proxy like <a href="http://www.charlesproxy.com/">Charles Proxy</a>). I did checked out SOAP4r gem code and updated <code>wsdl2ruby.rb</code> adding at begin:</p>
<pre class='ruby' name='code'>
BEGIN {
  require 'rubygems'
  require 'httpclient'
  HTTPClient.class_eval do
    alias_method '__initialize__', 'initialize'

    def initialize(*args,&#038;block)
      __initialize__(*args, &#038;block)
    ensure
      self.ssl_config.verify_mode=OpenSSL::SSL::VERIFY_NONE
    end
  end
}
</pre>
<p>That&#8217;s it. Well, almost. I was unlucky &#8211; due to some configuration twists WSDL and other referenced resources were hosted in some dev environment with wrong network configuration. Fixing that was totally out of my reach. </p>
<p>What was wrong? WSDL was accessible via HTTPS. All resources imported inside were referenced via HTTPS, too. But. When accessing these HTTPS URLs (other than WSDL) from outside network (where I was) plain HTTP error message was displayed, so SOAP code could not be generated. When URL was changed to HTTP &#8211; proper XML file was available. </p>
<p>So, another hack to <code>wsdl2ruby.rb</code>:</p>
<pre class='ruby' name='code'>
class  HTTPClient
    alias_method '__get_content__', 'get_content'
    def get_content(uri, query = nil, extheader = {}, &#038;block)
     uri = URI.parse(uri.to_s.gsub(/^https:/,'http:'))
     if block_given?
       __get_content__(uri, query, extheader) {block}
     else
       __get_content__(uri, query, extheader)
     end
    end
end
</pre>
<p>Now all requests to HTTPS are converted to plain HTTP. Again &#8211; do it when You understand what You are doing :) </p>
<h2>Where Ruby brought me</h2>
<p>When I started this blog (Apr 2006) I&#8217;ve just have discovered Ruby on Rails. During this almost five years many things have changed. And finally Ruby brought me to this place:</p>
<div id="attachment_524" class="wp-caption aligncenter" style="width: 510px"><img src="http://nhw.pl/wp/wp-content/uploads/massimo_and_arduino_logo.jpg" alt="Massimo and Arduino Logo at Maker Faire 2010 in NYC" title="Massimo showing Arduino Logo" width="500" height="333" class="size-full wp-image-524" /><p class="wp-caption-text">Massimo and Arduino Logo at Maker Faire 2010 in NYC<br/>CC by http://www.flickr.com/photos/mattrichardson/</p></div>
<p>And now small announcement. As You can see I was publishing on this blog very seldom in recent months. And reason is very simple. Almost two years ago I have started side business (do freelancer have side businesses? :)) ) <a href="http://nettigo.pl/">selling Arduinos in Poland (and whole Europe).</a> After slow start, it have took off, and between my work as freelancer and running shop there were no time to write on this blog.</p>
<p>Recently I have made decision to stop freelancing and devote all my time to Arduino (and electronics) related topics. Will I stop writing about Ruby? I guess not. Shop is on some hosted platform, but I do run some custom RoR software as backend. I plan to migrate at some point to own e-commerce solution, so I&#8217;m not leaving Ruby world.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=1QxUVMEUYfg:wUMG9k3KPxo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=1QxUVMEUYfg:wUMG9k3KPxo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=1QxUVMEUYfg:wUMG9k3KPxo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=1QxUVMEUYfg:wUMG9k3KPxo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=1QxUVMEUYfg:wUMG9k3KPxo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=1QxUVMEUYfg:wUMG9k3KPxo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=1QxUVMEUYfg:wUMG9k3KPxo:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2011/01/21/wsdl2ruby-and-failing-ssl-certificate-validation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveMerchant: dumping traffic between Your app and payment gateway</title>
		<link>http://nhw.pl/wp/2010/10/04/activemerchant-dumping-traffic-between-your-app-and-payment-gateway</link>
		<comments>http://nhw.pl/wp/2010/10/04/activemerchant-dumping-traffic-between-your-app-and-payment-gateway#comments</comments>
		<pubDate>Mon, 04 Oct 2010 15:58:09 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[activemerchant]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=515</guid>
		<description><![CDATA[Just a quick note &#8211; if You need to dump all traffic between payment gateway and Your application using ActiveMerchant just add to Your development.rb: ActiveMerchant::Billing::QuantumGateway.wiredump_device = File.open("/tmp/q.log", "a+") ActiveMerchant::Billing::QuantumGateway.wiredump_device.sync = true Just remember &#8211; it will work ONLY You have one application instance, since it uses simple file handle to write all traffic. And [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note &#8211; if You need to dump all traffic between payment gateway and Your application using ActiveMerchant just add to Your development.rb:</p>
<pre name='code' class='Ruby'>
ActiveMerchant::Billing::QuantumGateway.wiredump_device = File.open("/tmp/q.log", "a+")
ActiveMerchant::Billing::QuantumGateway.wiredump_device.sync = true
</pre>
<p>Just remember &#8211; it will work <b>ONLY</b> You have one application instance, since it uses simple file handle to write all traffic. And replace QunatumGateway with gateway used by You.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=COs0P6mrkiA:4tejw8E-3lk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=COs0P6mrkiA:4tejw8E-3lk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=COs0P6mrkiA:4tejw8E-3lk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=COs0P6mrkiA:4tejw8E-3lk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=COs0P6mrkiA:4tejw8E-3lk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=COs0P6mrkiA:4tejw8E-3lk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=COs0P6mrkiA:4tejw8E-3lk:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2010/10/04/activemerchant-dumping-traffic-between-your-app-and-payment-gateway/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ArgumentError: marshal data too short when loading session data</title>
		<link>http://nhw.pl/wp/2010/08/20/argumenterror-marshal-data-too-short-when-loading-session-data</link>
		<comments>http://nhw.pl/wp/2010/08/20/argumenterror-marshal-data-too-short-when-loading-session-data#comments</comments>
		<pubDate>Fri, 20 Aug 2010 22:24:27 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[wtf]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=509</guid>
		<description><![CDATA[I was stuck for a while when application maintained by me have started to throw ArgumentError: marshal data too short errors in random places When user have encountered that problem then it was unable to use application at all. Logs were showing that it happens when Rails was trying to create session object. Session store [...]]]></description>
			<content:encoded><![CDATA[<p>I was stuck for a while when application maintained by me have started to throw <code>ArgumentError: marshal data too short</code> errors in random places When user have encountered that problem then it was unable to use application at all.</p>
<div id="attachment_510" class="wp-caption aligncenter" style="width: 510px"><img src="http://nhw.pl/wp/wp-content/uploads/marshal.jpg" alt="Marshal" title="Marshal" width="500" height="375" class="size-full wp-image-510" /><p class="wp-caption-text">Marshal CC http://www.flickr.com/photos/qmnonic/</p></div>
<p>Logs were showing that it happens when Rails was trying to create session object. Session store was in ActiveRecord and <code>sessions</code> table was not corrupted.</p>
<p>After watching that for a while it have shown that places in code were this exception was thrown were random but there was pattern. Page visited <strong>before</strong> was common in each case.</p>
<p>It have turned out that application was storing in session whole ActiveRecord object. Like:</p>
<pre>
 session[:some_info] = @variable
</pre>
<p>And later we were trying to use that way:</p>
<pre>
@variable = Model.find session[:some_info]
</pre>
<p>Due to Rails magic AcitiveRecord&#8217;s find when provided with AR object will return that object (of course if is the same model). Code was working well (maybe not very effectively since You should avoid storing large objects in session) until object stored that way started to grow. Application was collecting some data and amount of data stored have grown to that point that after <code>Marshal.dump</code> size of string was more than 64 kB. And this is default size of <code>text</code> field used to store session data in MySQL. </p>
<p>When You try to store too much data in <code>text</code> field in MySQL, excessive data is being truncated, so <code>Marshal.load</code> throws that exception.</p>
<p>To have that error solved is enough to store just object id in session (<code>session[:some_info] = @variable.id</code>).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=naLCkqDnThg:mZboJYeCIY4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=naLCkqDnThg:mZboJYeCIY4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=naLCkqDnThg:mZboJYeCIY4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=naLCkqDnThg:mZboJYeCIY4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=naLCkqDnThg:mZboJYeCIY4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=naLCkqDnThg:mZboJYeCIY4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=naLCkqDnThg:mZboJYeCIY4:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2010/08/20/argumenterror-marshal-data-too-short-when-loading-session-data/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CHM should be in…</title>
		<link>http://nhw.pl/wp/2010/07/22/chm-should-be-in</link>
		<comments>http://nhw.pl/wp/2010/07/22/chm-should-be-in#comments</comments>
		<pubDate>Thu, 22 Jul 2010 00:17:29 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[note to self]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=503</guid>
		<description><![CDATA[Well&#8230; Long time&#8230; But finally a new post! If You have drank Linux KoolAid, then You can run on problems when You get some CHM file. It is old format and I think it has place where it can live (like many other proprietary data formats): But still, You can get documentation in such format, [...]]]></description>
			<content:encoded><![CDATA[<p>Well&#8230; Long time&#8230; But finally a new post! </p>
<p>If You have drank Linux KoolAid, then You can run on problems when You get some CHM file. It is old format and I think it has place where it can live (like many other proprietary data formats):</p>
<div id="attachment_504" class="wp-caption aligncenter" style="width: 510px"><img src="http://nhw.pl/wp/wp-content/uploads/chm.jpg" alt="Place where we should send .chm files " title="Place where we should send .chm files" width="500" height="333" class="size-full wp-image-504" /><p class="wp-caption-text">Place where we should send .chm files <a href='http://www.flickr.com/photos/mwichary/'>(c) Marcin Wichary</a></p></div>
<p>But still, You can get documentation in such format, chances are high if You are trying to interface some .Net SOAP service. In Linux &#8211; no viewer for CHM. </p>
<p>Or rather no standalone viewer. There is solution &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/3235/">CHM Reader addon for Firefox</a>. It is not perfect (no global search), but allows to navigate through that file. Printouts to PDF usually are stripped from hyperlinks, so navigating through 800 pages is reason why PDF printout is not an option&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=uoVPcDfxWDQ:dM7_SCpdHBs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=uoVPcDfxWDQ:dM7_SCpdHBs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=uoVPcDfxWDQ:dM7_SCpdHBs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=uoVPcDfxWDQ:dM7_SCpdHBs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=uoVPcDfxWDQ:dM7_SCpdHBs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=uoVPcDfxWDQ:dM7_SCpdHBs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=uoVPcDfxWDQ:dM7_SCpdHBs:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2010/07/22/chm-should-be-in/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thumbnails are missing when uploading new image</title>
		<link>http://nhw.pl/wp/2010/03/07/thumbnails-are-missing-when-uploading-new-image-in-wordpress</link>
		<comments>http://nhw.pl/wp/2010/03/07/thumbnails-are-missing-when-uploading-new-image-in-wordpress#comments</comments>
		<pubDate>Sun, 07 Mar 2010 20:46:43 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=499</guid>
		<description><![CDATA[Just a quick note &#8211; if You are experiencing missing thumbnails in image upload in WordPress, then probably Your PHP installation misses php-gd module. It is module by default installed on FreeBSD, but on Debian based Linux You have to add it by hand (apt-get install php5-gd). I had to move my blogs to new, [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note &#8211; if You are experiencing missing thumbnails in image upload in WordPress, then probably Your PHP installation misses php-gd module. </p>
<p>It is module by default installed on FreeBSD, but on Debian based Linux You have to add it by hand (apt-get install php5-gd).</p>
<p>I had to move my blogs to new, temporary host, with Linux on board instead of FreeBSD. Then I have noticed that when I want to publish new post I can only insert in it uploaded image in original size &#8211; not very handy. It took 15 minutes of googling and finally dive into <code>wp-includes/media.php</code> to check how these thumbnails are generated.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=rRHffzn4Z6U:jUuvS0k2928:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=rRHffzn4Z6U:jUuvS0k2928:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=rRHffzn4Z6U:jUuvS0k2928:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=rRHffzn4Z6U:jUuvS0k2928:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=rRHffzn4Z6U:jUuvS0k2928:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=rRHffzn4Z6U:jUuvS0k2928:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=rRHffzn4Z6U:jUuvS0k2928:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2010/03/07/thumbnails-are-missing-when-uploading-new-image-in-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby for Startups</title>
		<link>http://nhw.pl/wp/2010/01/19/ruby-for-startups</link>
		<comments>http://nhw.pl/wp/2010/01/19/ruby-for-startups#comments</comments>
		<pubDate>Tue, 19 Jan 2010 08:50:28 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=496</guid>
		<description><![CDATA[I&#8217;ve found this interesting &#8211; a bunch of info from Mike Subelsky (creator of OtherInbox) how to use Ruby and Rails in challenging startup environment (each startup&#8217;s environment is challenging :)) ) Ruby For Startups View more presentations from subelsky.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found this interesting &#8211; a bunch of info from Mike Subelsky (creator of <a href="http://oib.com">OtherInbox</a>) how to use Ruby and Rails in challenging startup environment (each startup&#8217;s environment is challenging :)) )</p>
<div style="width:425px;text-align:left" id="__ss_1920796"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/subelsky/ruby-for-startups" title="Ruby For Startups">Ruby For Startups</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rubyforstartups-090828135650-phpapp02&#038;rel=0&#038;stripped_title=ruby-for-startups" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rubyforstartups-090828135650-phpapp02&#038;rel=0&#038;stripped_title=ruby-for-startups" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/subelsky">subelsky</a>.</div>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=RGRscRdCDW8:Zyidsgo_qkg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=RGRscRdCDW8:Zyidsgo_qkg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=RGRscRdCDW8:Zyidsgo_qkg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=RGRscRdCDW8:Zyidsgo_qkg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=RGRscRdCDW8:Zyidsgo_qkg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=RGRscRdCDW8:Zyidsgo_qkg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=RGRscRdCDW8:Zyidsgo_qkg:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2010/01/19/ruby-for-startups/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Email verification – regexp</title>
		<link>http://nhw.pl/wp/2010/01/13/email-verification-regexp</link>
		<comments>http://nhw.pl/wp/2010/01/13/email-verification-regexp#comments</comments>
		<pubDate>Wed, 13 Jan 2010 22:08:15 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[validation]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=489</guid>
		<description><![CDATA[Many times before when I was supposed to collect emails from users I was googling to find some regexp to verify email syntax. At least I was aware that regexp challenging email address syntax is a bullshit ;) I was working few years as Unix sysadmin mostly on mail servers, so I had some idea [...]]]></description>
			<content:encoded><![CDATA[<p>Many times before when I was supposed to collect emails from users I was googling to find some regexp to verify email syntax. At least I was aware that regexp challenging email address syntax is a bullshit ;) I was working few years as Unix sysadmin mostly on mail servers, so I had some idea how RFCs related to email are bloated ;) and contain so many exceptions ;)</p>
<div id="attachment_490" class="wp-caption aligncenter" style="width: 510px"><img src="http://nhw.pl/wp/wp-content/uploads/kiss.jpg" alt="Step back and think again" title="Step back and think again" width="500" height="363" class="size-full wp-image-490" /><p class="wp-caption-text">Step back and think again. <small>Image CC by <a href='http://www.flickr.com/photos/ummella/'>Vivianna_love</a></small></p></div>
<p>From some time I do use following regexp to verify email address:</p>
<pre>
 /.+@.+[.].+/
</pre>
<p>This should check if:</p>
<ul>
<li>there is @ sign somewhere inside</li>
<li>at least one character is before @ sign</li>
<li>at least 3 chars (with one dot) are after @ sign</li>
</ul>
<p>Why such simple rules? I have found comment on StackOverflow, that man should step back and think why is checking email address? </p>
<p>I want just to help users and stop them making simple mistakes in theirs emails. Like not providing @ at all. Or eating .com in gmail.com address. And that&#8217;s it &#8211; email will be probably shortly after that verified with only reliable method via sending email to this address.</p>
<p>And if You insist to verify emails with more strict regular expression, please do remember that plus sign is perfectly valid character before @. Many regexps found via google are <em>forgetting</em> that&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=a5D4N5xx_co:b3x0xFvzDtI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=a5D4N5xx_co:b3x0xFvzDtI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=a5D4N5xx_co:b3x0xFvzDtI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=a5D4N5xx_co:b3x0xFvzDtI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=a5D4N5xx_co:b3x0xFvzDtI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=a5D4N5xx_co:b3x0xFvzDtI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=a5D4N5xx_co:b3x0xFvzDtI:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2010/01/13/email-verification-regexp/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Extracting fixtures</title>
		<link>http://nhw.pl/wp/2009/09/24/extracting-fixtures</link>
		<comments>http://nhw.pl/wp/2009/09/24/extracting-fixtures#comments</comments>
		<pubDate>Thu, 24 Sep 2009 14:49:54 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=482</guid>
		<description><![CDATA[I&#8217;m still using fixtures. Shame, I know. Why I do use them instead of Factory Girl or other solution like that? Well, fixtures can be much more closer to real data than mocks from Factory. How come, You ask? Fixtures are imaginary data exactly like mocks from other sources! My answer is: that depends how [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m still using fixtures. Shame, I know.</p>
<p>Why I do use them instead of Factory Girl or other solution like that? Well, fixtures can be much more closer to real data than mocks from Factory. How come, You ask? Fixtures are <em>imaginary</em> data exactly like mocks from other sources!</p>
<p>My answer is: that depends how You create fixtures. If You create them by hand, indeed they are disconnected from real world (like all mocks). </p>
<div id="attachment_485" class="wp-caption aligncenter" style="width: 510px"><img src="http://nhw.pl/wp/wp-content/uploads/imaginary.jpg" alt="What is Your real data/mocks ratio?" title="imaginary" width="500" height="375" class="size-full wp-image-485" /><p class="wp-caption-text">What is Your real data/mocks ratio? CC by <a href='http://www.flickr.com/photos/hsing/'>hsing</a></p></div>
<p>But I prefer to extract fixtures from real (production) database. That way I can easily pick entries created by users which are edge cases. The only trouble is with creating fixtures. For some time I&#8217;m using modified <a href="http://nhw.pl/wp/2008/10/11/rake-and-arguments-for-tasks">extract_fixtures</a> rake task. I have added some conditions to extracting process &#8211; SQL condition to select only particular records and adjusted syntax to recent rake.</p>
<p>This is useful especially when You are about to take over application code which has no tests. Extracting real data is quick way to start write integration tests (in such case they have are most efficient &#8211; time invested and application code coverage).</p>
<h2>How to extract fixtures without pain?</h2>
<p><span id="more-482"></span><br />
Now I want to share with You next improvement to this recipe. Old fixtures can be left unchanged (as long You don&#8217;t use ERb to spice them up).</p>
<p>Rake task load old fixtures file and <strong>add</strong> new records as selected from database by arguments You are providing. More &#8211; it keeps old fixtures names so all Your tests using <code>some_table :fixture</code> will work (but don&#8217;t You dare to create attribute called <code>fixtures_old_key_value</code> :)) ). As a bonus attributes in Your fixture file will be sorted by attribute name!</p>
<p>OK some examples (written by hand not real YML files I hope there are no mistakes ;)) :</p>
<pre>
cat test/fixtures/entries.yml
one:
  attr1: value
  attr2: value
  created_at: 2009-09-10 11:22

rake extract_fixtures[entries,1,"created_at<'2009-09-01'"]
cat test/fixtures/entries.yml
one:
  attr1: value
  attr2: value
  created_at: 2009-09-10 11:22
  id: 1
entries_2:
  attr1: value from DB
  attr2: Also value from DB
  created_at: 2009-08-01 22:11
  id: 2
</pre>
<p>All is clear? In file there was fixture named <code>:one</code>, after rake task we have added new one selected from database, new fixture has name <em>TABLE_NAME_ID</em>, old fixture has unchanged name.</p>
<p>You can add DISCARD=true and old fixtures will be well&#8230; discarded :)</p>
<p>Rake task take following arguments:</p>
<ol>
<li>table name</li>
<li>limit number of records extracted from database</li>
<li>WHERE condition</li>
</ol>
<p>Rake has one limitation &#8211; it treats all commas as arguments separators, so it is not possible to use IN operator. Instead of <code>rake extract_fixtures[entries,10,"id IN (1,2,3)"]</code> write <code>rake extract_fixtures[entries,10,"id=1 OR id=2 OR id=3)"]</code>.</p>
<p>You can download rake task file: <a href="http://nhw.pl/download/extract_fixtures.rake">http://nhw.pl/download/extract_fixtures.rake</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=JtJAkKeZEco:uGL44fI7J4E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=JtJAkKeZEco:uGL44fI7J4E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=JtJAkKeZEco:uGL44fI7J4E:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=JtJAkKeZEco:uGL44fI7J4E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=JtJAkKeZEco:uGL44fI7J4E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=JtJAkKeZEco:uGL44fI7J4E:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=JtJAkKeZEco:uGL44fI7J4E:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2009/09/24/extracting-fixtures/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Logger – simple, yet powerful Rails debugging tool</title>
		<link>http://nhw.pl/wp/2009/09/15/logger-simple-yet-powerful-rails-debugging-tool</link>
		<comments>http://nhw.pl/wp/2009/09/15/logger-simple-yet-powerful-rails-debugging-tool#comments</comments>
		<pubDate>Tue, 15 Sep 2009 22:35:02 +0000</pubDate>
		<dc:creator>Witold Rugowski</dc:creator>
				<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://nhw.pl/wp/?p=474</guid>
		<description><![CDATA[I don&#8217;t know about You, but logs are for me most powerful debugging tool. Placing many logger.debug or logger.info can quickly provide info what is happening inside Rails application. This approach is especially useful when something wrong is happening and trigger is unknown. Placing many logging directives can provide data for analysis what could be [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t know about You, but logs are for me most powerful debugging tool. Placing many <code>logger.debug</code> or <code>logger.info</code> can quickly provide info what is happening inside Rails application. </p>
<p>This approach is especially useful when something wrong is happening and trigger is unknown. Placing many logging directives can provide data for analysis what could be a reason.</p>
<div id="attachment_477" class="wp-caption aligncenter" style="width: 510px"><img src="http://nhw.pl/wp/wp-content/uploads/logbook.jpg" alt="Logbook" title="logbook" width="500" height="324" class="size-full wp-image-477" /><p class="wp-caption-text">CC by <a href='http://www.flickr.com/photos/addyeddy/'>Admond</a></p></div>
<p>Default Rails logger has one serious flaw which makes logs on production sites almost useless &#8211; messages are not grouped in calls. If You have many processes of Rails running and logging to single file, some requests will be processed in parallel and You have log entries mixed. With default log format there is no way to say which entry is from which process.</p>
<p>Since Rails 2.0 we have <code>ActiveSupport::BufferedLogger</code>, but it solves other problem &#8211; number of disk writes and file locks &#8211; You can set after how many entries log will be flushed to disk.</p>
<h3>AnnotatedLogger</h3>
<p>Here comes <code>AnnotatedLogger</code> for a rescue. The idea is to take each message and prefix it with PID of Rails process. As long You don&#8217;t run Rails in multithread mode, this is unique ID which will make log entry distinguishable.</p>
<pre name="code" class="ruby">
class AnnotatedLogger &lt; Logger

  def initialize *args
    super *args

    [:info, :debug, :warn, :error, :fatal].each {|m|
      AnnotatedLogger.class_eval %Q|
      def #{m} arg=nil, &#038;block
        pid = "%.5d:" % $$
        if block_given?
          arg = yield
        end
        super "%s %s" % [pid, arg.gsub(/\n/,"\n%s" % pid)]
      end
      |

    }
  end
end
</pre>
<p>Now in <code>Rails::Initializer.run do |config|</code> section of <code>config/environment.rb</code> define AnnotatedLogger as default Rails logger:</p>
<pre name="code" class="ruby">
 config.logger = AnnotatedLogger.new "log/#{RAILS_ENV}.log"
</pre>
<p>Of course You can add other data to log entries (timestamp?). Here is an example of log entries:</p>
<pre>
24551:Processing SearchController#processing (for [FILTERED] at 2009-09-15 15:11:24) [GET]
24551:   Session ID: df260892836fc619ec666f894e7d8e88
24551:   Parameters: {[FILTERED]}
24542:   Airport Load (0.216460)   SELECT * FROM [FILTERED]
24542: Completed in 0.24903 (4 reqs/sec) | Rendering: 0.01298 (5%) | DB: 0.22554 (90%) | 200 OK [FILTERED]
24551:   Search Columns (0.004711)   SHOW FIELDS FROM [FILTERED]
24551: Rendering template within layouts/blank
24551: Rendering search/processing
</pre>
<p>Without PIDs You would expect that <code>Airport Load</code> entry is part of <code>SearchController#processing</code> for session with ID <code>df260892836fc619ec666f894e7d8e88</code>. In reality this is output from processing different request. </p>
<h3>What else?</h3>
<p>This how I do deal with logs from Rails application. Do You have other ideas how to make logging more usable not only in development environment?</p>
<p><small><br />
<b>PS</b><br />
I have just other idea &#8211; probably You could use <code>BufferedLogger</code> with disabled auto flushing and patch <code>ActionController</code> to flush manually all entries after request was processed &#8211; then all messages would be dumped in single block.<br />
</small></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Netmaniac?a=OJ6UDn9lLPg:Lcca6vjAssk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Netmaniac?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=OJ6UDn9lLPg:Lcca6vjAssk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=OJ6UDn9lLPg:Lcca6vjAssk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=OJ6UDn9lLPg:Lcca6vjAssk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=OJ6UDn9lLPg:Lcca6vjAssk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Netmaniac?a=OJ6UDn9lLPg:Lcca6vjAssk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Netmaniac?i=OJ6UDn9lLPg:Lcca6vjAssk:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://nhw.pl/wp/2009/09/15/logger-simple-yet-powerful-rails-debugging-tool/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

