<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.wonsys.net/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.wonsys.net/~d/styles/itemcontent.css" type="text/css" media="screen"?><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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Wonsys Blog</title>
	
	<link>http://blog.wonsys.net</link>
	<description>Blogging about design, development, entrepreneurship, arts &amp; culture and, of course, our products</description>
	<pubDate>Thu, 29 May 2008 16:36:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.wonsys.net/Wonsys" type="application/rss+xml" /><feedburner:emailServiceId>802103</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.wonsys.net/Wonsys" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://my.feedlounge.com/external/subscribe?url=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://static.feedlounge.com/buttons/subscribe_0.gif">Subscribe with FeedLounge</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.wonsys.net%2FWonsys" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>Clean your configuration with configuration_manager</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/300654428/</link>
		<comments>http://blog.wonsys.net/posts/33-clean-your-configuration-with-configuration_manager/#comments</comments>
		<pubDate>Thu, 29 May 2008 16:36:25 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[dev]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/?p=33</guid>
		<description><![CDATA[<p>If you&#8217;re spreading constants around your environments files to configure your Rails apps based on the environment it is running on, stop immediately! Let&#8217;s say it&#8217;s not very wise&#8230; ;)
There&#8217;s no point in having lots of different constants all around your code that basically all do the same thing: configure your app.</p>

<p>Instead, you should do [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re spreading constants around your environments files to configure your Rails apps based on the environment it is running on, stop immediately! Let&#8217;s say it&#8217;s not very wise&#8230; ;)<br />
There&#8217;s no point in having lots of different constants all around your code that basically all do the same thing: configure your app.</p>

<p>Instead, you should do something similar to what <a href="http://topfunky.com">Geoffrey Grosenbach</a> suggests in <a href="https://peepcode.com/products/draft-rails-code-review-pdf"><em>Rails Code Review</em></a> &#8212; BTW, we translated that <a href="https://peepcode.com/products/code-review-pdf-it">PDF in Italian</a>: have a YAML file in your <code>config</code> directory where you store all of the settings for your app grouped by environment.</p>

<p>I said you should do something similar, because what Geoffrey suggests is just a starting point and that solution can be made a tad more elegant.<br />
Which is what our new plugin is about!</p>

<p><a href="http://github.com/wonsys/configuration_manager/tree/master"><strong>ConfigurationManager</strong></a> allows you to have a single YAML file where you can store all of your settings, then setup a single constant which can be used all over your app by doing something like <code>ConstantName.setting_name</code>; or even <code>ConstantName.group_of_settings.setting_name</code>.</p>

<p>The YAML file should be placed in <code>config/configuration_manager.yml</code> and it should contain your settings like this:</p>

<pre><code>everyone: &amp;every_env
  key1: value1
  inner_hash:
    key2: value2

development: &amp;non_production_env
  &lt;&lt;: *every_env
  key3: value3

test:
  &lt;&lt;: *non_production_env

production:
  &lt;&lt;: *every_env
  key4: value4
</code></pre>

<p>Then in your <code>environment.rb</code> you put the following:</p>

<pre><code>MyConfig = ConfigurationManager.new_manager
</code></pre>

<p>Which will allow you to access your settings wherever you need them:</p>

<pre><code>MyConfig.inner_hash.key2 #=&gt; value2
MyConfig.key4 #=&gt; value4
etc...
</code></pre>

<p>I hope you get the idea&#8230;it should make sense. :) </p>

<p>Development of the plugin is on <a href="http://github.com/">Github</a>, but you can install it from our usual Google Code repository:</p>

<pre><code>script/plugin install http://wonsys.googlecode.com/svn/plugins/configuration_manager/
</code></pre>

<p>If you find any bugs, please let us know using our <a href="http://wonsysos.16bugs.com/">bug tracker</a>.</p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=MwaXGH"><img src="http://feeds.wonsys.net/~f/Wonsys?i=MwaXGH" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=3rwvxH"><img src="http://feeds.wonsys.net/~f/Wonsys?i=3rwvxH" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=7HFqah"><img src="http://feeds.wonsys.net/~f/Wonsys?i=7HFqah" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=6XKL4H"><img src="http://feeds.wonsys.net/~f/Wonsys?i=6XKL4H" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/300654428" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/33-clean-your-configuration-with-configuration_manager/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/33-clean-your-configuration-with-configuration_manager/</feedburner:origLink></item>
		<item>
		<title>Still here</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/295964557/</link>
		<comments>http://blog.wonsys.net/posts/24-still-here/#comments</comments>
		<pubDate>Thu, 22 May 2008 17:05:00 +0000</pubDate>
		<dc:creator>Simone D.</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[update]]></category>

		<category><![CDATA[wonsys]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/?p=24</guid>
		<description><![CDATA[<p>Hey everyone!</p>

<p>It&#8217;s been a long a time since our last post, but in the past few months we&#8217;ve been incredibly busy working on a few projects: both for ourselves and for our clients.
Of course, we love being busy and don&#8217;t complain about it, but we had to put the blog on hold.</p>

<p>However, the idea right [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Hey everyone!</p>

<p>It&#8217;s been a long a time since our last post, but in the past few months we&#8217;ve been incredibly busy working on a few projects: both for ourselves and for our clients.<br />
Of course, we love being busy and don&#8217;t complain about it, but we had to put the blog on hold.</p>

<p>However, the idea right now is to get back to it and find the time to write more often, alternating longer and more insightful posts with short-and-to-the-point ones.</p>

<p>Let&#8217;s see if we can keep this beast alive! ;) </p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=9HZJKH"><img src="http://feeds.wonsys.net/~f/Wonsys?i=9HZJKH" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=KwoKuH"><img src="http://feeds.wonsys.net/~f/Wonsys?i=KwoKuH" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=vILlSh"><img src="http://feeds.wonsys.net/~f/Wonsys?i=vILlSh" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=kHHZ6H"><img src="http://feeds.wonsys.net/~f/Wonsys?i=kHHZ6H" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/295964557" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/24-still-here/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/24-still-here/</feedburner:origLink></item>
		<item>
		<title>16bugs: new version launch</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/201917366/</link>
		<comments>http://blog.wonsys.net/posts/32-16bugs-new-version-launch/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 00:09:49 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[16bugs]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[coupon]]></category>

		<category><![CDATA[launch]]></category>

		<category><![CDATA[news]]></category>

		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/32-16bugs-new-version-launch/</guid>
		<description><![CDATA[<p>I&#8217;m very proud to announce yesterday we released the all new version of 16bugs.</p>

<p>16bugs was introduced almost two years ago and we felt the need to rewrite it from scratch to include all the valuable feedback you have been sending our way.</p>

<p>We released the first part of the upgrade, with a few more features coming [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very proud to announce yesterday we released the all new version of <a href="http://16bugs.com/"><strong>16bugs</strong></a>.</p>

<p><a href="http://16bugs.com/">16bugs</a> was introduced almost two years ago and we felt the need to rewrite it from scratch to include all the valuable feedback you have been sending our way.</p>

<p>We released the first part of the upgrade, with a few more features coming in the next weeks.</p>

<p>This upgrade includes:</p>

<ul>
<li>Custom member groups inside each company (no more Project Manager, Developer and Beta Testers)</li>
<li>Per-project permissions for each single member of the company</li>
<li>Project activity to always be on top of what&#8217;s happening</li>
<li>Improved syndication feeds and email notifications</li>
<li>Watch single projects/bugs via email</li>
<li>Ability to pay in advance for more than one month</li>
<li>Bug IDs limited to company</li>
<li>Increased upload size (because 1MB wasn&#8217;t enough) and no more limits on which files you can upload</li>
<li>Refined UI and lots of small tweaks</li>
</ul>

<p>This new version shouldn&#8217;t break anything &#8212; knocking on wood &#8212; except for one small thing: we greatly improved feeds for companies and single projects and we had to break compatibility with the old feeds. Refresh your feeds and you should find instructions on how to subscribe to the new feeds.
We&#8217;re very sorry for this inconvenience, but we&#8217;re sure it will benefit everyone.</p>

<p>To celebrate this release with you, use coupon code <strong>newbugs</strong> to get 50% off when upgrading or extending your subscription for up to 1 year.</p>

<p>Please, let us know if you notice anything strange by sending an <a href="mailto:support@16bugs.com">email</a> or <a href="http://16bugs.16bugs.com/">submitting a bug</a>.</p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=ymXgcI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=ymXgcI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=my4k4I"><img src="http://feeds.wonsys.net/~f/Wonsys?i=my4k4I" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=BdPDfi"><img src="http://feeds.wonsys.net/~f/Wonsys?i=BdPDfi" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=N6aWvI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=N6aWvI" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/201917366" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/32-16bugs-new-version-launch/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/32-16bugs-new-version-launch/</feedburner:origLink></item>
		<item>
		<title>Pixménage</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/188715215/</link>
		<comments>http://blog.wonsys.net/posts/31-pixmnage/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 08:37:11 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[client]]></category>

		<category><![CDATA[photography]]></category>

		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/31-pixmnage/</guid>
		<description><![CDATA[<p>We&#8217;re finally ready to announce another client project we&#8217;ve been working on since the end of Spring: Pixm&#233;nage.</p>

<p>Pixm&#233;nage allows photographers to manage their digital &#8212; or digital-ized, as I prefer them ;) &#8212; photos with ease.
You can create an online portfolio and share photos with clients and colleagues, or even family.
It&#8217;s a great archiving tool, [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re finally ready to announce another client project we&#8217;ve been working on since the end of Spring: <a href="http://www.pixmenage.com/"><strong>Pixm&eacute;nage</strong></a>.</p>

<p><a href="http://www.pixmenage.com/">Pixm&eacute;nage</a> allows photographers to manage their digital &#8212; or digital-ized, as I prefer them ;) &#8212; photos with ease.<br />
You can create an online portfolio and share photos with clients and colleagues, or even family.<br />
It&#8217;s a great archiving tool, as it allows you to tag photos, put them in albums, crop and rotate them, and all sort of useful stuff.</p>

<p>It was built with professional photographers in mind, so it supports basically all kind of RAW files, it can import/export from FTP, it allows for collaborative work on photo selections with clients, etc.</p>

<p>No wonder working with huge 250MB RAW files wasn&#8217;t as easy as pie: while in development mode, it&#8217;s no biggie, because you know you&#8217;re processing only one photo at a time, but we had to develop it as if there were hundreds of users uploading photos at the same time, so we built a very simple, yet extremely powerful queuing mechanism which allows us to asynchronously process photos while leaving the users free to do whatever they want. And should we need more power, we can simply drop one more server in the processing cloud.<br />
We tried to work with stuff like <a href="http://backgroundrb.rubyforge.org/">Backgroundrb</a>, but they didn&#8217;t live up to expectations, so we had to opt for the custom tailored solution &#8212; which in the end, is the best choice, at least most of the times.<br />
In the future we might give <a href="http://aws.amazon.com/ec2">EC2</a> a try, also considering we&#8217;re using <a href="http://aws.amazon.com/s3">S3</a> for storing photos, but right now we&#8217;re very happy with our own stack.</p>

<p><a href="http://www.pixmenage.com/">Give it a try</a> and let us know what you think.<br />
We&#8217;re constantly improving it, so we&#8217;re very open to feedback.</p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=BgXOkI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=BgXOkI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=a15cDI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=a15cDI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=TmLoUi"><img src="http://feeds.wonsys.net/~f/Wonsys?i=TmLoUi" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=AWrMSI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=AWrMSI" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/188715215" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/31-pixmnage/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/31-pixmnage/</feedburner:origLink></item>
		<item>
		<title>Music Milker</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/183484590/</link>
		<comments>http://blog.wonsys.net/posts/30-music-milker/#comments</comments>
		<pubDate>Mon, 12 Nov 2007 09:51:23 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[blog]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[wonsys]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/30-music-milker/</guid>
		<description><![CDATA[<p>As promised yesterday, here we are with another announcement: today, we&#8217;re launching a new website: Music Milker.</p>

<p>Music Milker is a blog about music where we will post a new song from an up and coming artist everyday.
Every week, we will have the artist of the week, with an interview with the artist and, hopefully, some [...]</p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://musicmilker.com/" title="Discove new moosic" class="noborder"><img src="http://static.pagety.com/musicmilker/musicmilker_468.png" width="468" height="60" alt="Music Milker: Discover new moosic" /></a></p>

<p>As promised yesterday, here we are with another announcement: today, we&#8217;re launching a new website: <a href="http://musicmilker.com/"><strong>Music Milker</strong></a>.</p>

<p><em>Music Milker</em> is a blog about music where we will post a new song from an up and coming artist everyday.<br />
Every week, we will have the <em>artist of the week</em>, with an interview with the artist and, hopefully, some sort of give away &#8212; we&#8217;re starting with <a href="http://musicmilker.com/artists/topher-mohr/">Topher Mohr</a>, who&#8217;s been very kind and provided a free song for everyone to download.</p>

<p>Every now and then we&#8217;ll throw in a song from the past, just to make sure you don&#8217;t forget songs that made a difference in the history of music.<br />
Still, most of the songs will be from new artists, indeed, we believe there&#8217;s a lot of untapped potential around the Web, so we&#8217;ll try to spread the word about it.</p>

<p>I suggest you <a href="http://feeds.wonsys.net/MusicMilker">add it to your feed reader</a> and see what comes through it.</p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=SYNxHI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=SYNxHI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=7W0kSI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=7W0kSI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=esBNei"><img src="http://feeds.wonsys.net/~f/Wonsys?i=esBNei" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=G5b1BI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=G5b1BI" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/183484590" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/30-music-milker/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/30-music-milker/</feedburner:origLink></item>
		<item>
		<title>Episode39</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/183089506/</link>
		<comments>http://blog.wonsys.net/posts/29-episode39/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 13:12:37 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[clients]]></category>

		<category><![CDATA[italian]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/29-episode39/</guid>
		<description><![CDATA[<p>Last week, we officially closed the beta for a client project we&#8217;ve been working on for the past 5 months.
The project is called Episode39: it&#8217;s a website for TV shows lovers. Unfortunately, it&#8217;s in Italian only, so most of you won&#8217;t be able to use it.</p>

<p>We were in charge of the development of the platform [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Last week, we officially closed the beta for a client project we&#8217;ve been working on for the past 5 months.<br />
The project is called <a href="http://www.episode39.it/"><strong>Episode39</strong></a>: it&#8217;s a website for TV shows lovers. Unfortunately, it&#8217;s in Italian only, so most of you won&#8217;t be able to use it.</p>

<p>We were in charge of the development of the platform &#8212; the design was given to us and we only had to make a few UX changes &#8211;, which, of course, is built on top of our beloved Ruby on Rails.<br />
There&#8217;s a bit of MySQL trickery here and there &#8212; especially for shows matching between users and <a href="http://blog.wonsys.net/posts/26-our-first-plugin-acts_as_fulltextable/">full-text search</a> &#8211;, but most of it is pure Ruby.</p>

<p>With every new project we learn something new, and this one was not different: we had a lot of custom SQL queries, joins, and queries that couldn&#8217;t be trimmed down using eager loading, still, we couldn&#8217;t allow for slow pages with tens of queries.<br />
Luckily enough, there&#8217;s a lot you can do to improve your apps with clever usage of Ruby/Rails and MySQL.<br />
Remember, <span class="highlight">ActiveRecord is nice and good for most situations, but at times you must get your hands dirty and work directly on the DB if you want your site to perform properly.</span></p>

<p>Make sure you give <a href="http://www.episode39.it/">Episode39</a> a spin if you can understand Italian and let us know what you think about it.</p>

<p>Stay tuned for a couple more announcements during the next few days!</p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=1uyclI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=1uyclI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=0uEhHI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=0uEhHI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=JEIeFi"><img src="http://feeds.wonsys.net/~f/Wonsys?i=JEIeFi" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=m179cI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=m179cI" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/183089506" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/29-episode39/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/29-episode39/</feedburner:origLink></item>
		<item>
		<title>See you at Rails to Italy</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/174447230/</link>
		<comments>http://blog.wonsys.net/posts/28-see-you-at-rails-to-italy/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 18:46:25 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[italy]]></category>

		<category><![CDATA[railstoitaly]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/28-see-you-at-rails-to-italy/</guid>
		<description><![CDATA[<p>Tomorrow, we&#8217;re heading towards Pisa, where, on Friday and Saturday, Rails to Italy will be held.</p>

<p>A lot of smart people are talking and I&#8217;m sure it&#8217;ll be a great conference.
We&#8217;re organizing a Web development panel on the second day, so make sure you stop by if you can.</p>

<p>If anyone is coming, we&#8217;ll be very happy [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Tomorrow, we&#8217;re heading towards Pisa, where, on Friday and Saturday, <a href="http://www.railstoitaly.org/"><strong>Rails to Italy</strong></a> will be held.</p>

<p>A lot of smart people are talking and I&#8217;m sure it&#8217;ll be a great conference.<br />
We&#8217;re organizing a Web development panel on the second day, so make sure you stop by if you can.</p>

<p>If anyone is coming, we&#8217;ll be very happy to meet you there and have a little chat.</p>

<p>See you in Pisa! :) </p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=ML6trI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=ML6trI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=aSIICI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=aSIICI" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=GUyEni"><img src="http://feeds.wonsys.net/~f/Wonsys?i=GUyEni" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=hU1FAI"><img src="http://feeds.wonsys.net/~f/Wonsys?i=hU1FAI" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/174447230" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/28-see-you-at-rails-to-italy/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/28-see-you-at-rails-to-italy/</feedburner:origLink></item>
		<item>
		<title>Speeding up email delivery on Rails</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/169893338/</link>
		<comments>http://blog.wonsys.net/posts/27-speeding-up-email-delivery-on-rails/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 23:07:18 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[dev]]></category>

		<category><![CDATA[mail]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[sendmail]]></category>

		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/27-speeding-up-email-delivery-on-rails/</guid>
		<description><![CDATA[<p>There&#8217;s one thing that has always bugged me: when using Sendmail to deliver email from Action Mailer in Ruby on Rails, it always takes a few seconds for the email to be sent, thus slowing down whatever task the user is trying to accomplish.
When, for example, a user signs up for your service, you might [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s one thing that has always bugged me: when using Sendmail to deliver email from Action Mailer in Ruby on Rails, it always takes a few seconds for the email to be sent, thus slowing down whatever task the user is trying to accomplish.<br />
When, for example, a user signs up for your service, you might want to send her a welcome email, but what if this slows down the sign up procedure a bit? Sure, a couple of seconds are not that much, but your new user might think the site is slow, which is not desirable.</p>

<p>In the past, we fixed this behaviour by adding the email to a queue in the DB which was then processed by a cron script every few minutes.<br />
Sure, it worked, but what about using Sendmail&#8217;s own queue to achieve the same result? What if Rails could simply pass the email to Sendmail and then get back to work?</p>

<p>Here&#8217;s an easy way to achieve this.<br />
Add the following to your <code>config/environments/production.rb</code>:</p>

<pre><code>config.action_mailer.sendmail_settings = 
    {:arguments =&gt; "-i -t -O DeliveryMode='b'"}
</code></pre>

<p><strong>Pros&amp;cons:</strong> using the DB queue will allow for easier error handling, but then emails will be delayed by a few minutes depending on you cron settings. Using Sendmail&#8217;s queue allows for instant email delivery, but makes error handling a tad harder.<br />
I think going the Sendmail route is the right decision for most projects. You choose. :) </p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=QdXKCiJT"><img src="http://feeds.wonsys.net/~f/Wonsys?i=QdXKCiJT" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=tox4m5aT"><img src="http://feeds.wonsys.net/~f/Wonsys?i=tox4m5aT" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=GL3qzy9v"><img src="http://feeds.wonsys.net/~f/Wonsys?i=GL3qzy9v" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=5qkPX3DA"><img src="http://feeds.wonsys.net/~f/Wonsys?i=5qkPX3DA" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/169893338" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/27-speeding-up-email-delivery-on-rails/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/27-speeding-up-email-delivery-on-rails/</feedburner:origLink></item>
		<item>
		<title>Our first plugin: acts_as_fulltextable</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/165312034/</link>
		<comments>http://blog.wonsys.net/posts/26-our-first-plugin-acts_as_fulltextable/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 17:18:58 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[ferret]]></category>

		<category><![CDATA[fulltext]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[search]]></category>

		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/26-our-first-plugin-acts_as_fulltextable/</guid>
		<description><![CDATA[<p>Update (05/10/2007): we&#8217;ve moved the plugin to Google Code.</p>

<p>We&#8217;ve never been really happy with what was available to perform full-text searches in Rails.
We tried a whole bunch of different plugins &#8212; most notably acts<em>as</em>ferret and acts<em>as</em>sphinx &#8211;, but none seemed to work as expected.</p>

<p>Ferret is great, but we couldn&#8217;t determine why it was throwing all [...]</p>
]]></description>
			<content:encoded><![CDATA[<p><strong>Update (05/10/2007):</strong> we&#8217;ve moved the plugin to <a href="http://code.google.com/p/wonsys/">Google Code</a>.</p>

<p>We&#8217;ve never been really happy with what was available to perform full-text searches in Rails.<br />
We tried a whole bunch of different plugins &#8212; most notably <a href="http://projects.jkraemer.net/acts_as_ferret/"><strong>acts_as_ferret</strong></a> and <a href="http://www.datanoise.com/articles/2007/3/23/acts_as_sphinx-plugin"><strong>acts_as_sphinx</strong></a> &#8211;, but none seemed to work as expected.</p>

<p>Ferret is great, but we couldn&#8217;t determine why it was throwing all kinds of indexing errors at us.<br />
After a short investigation, we supposed Ferret &#8212; or more probably acts_as_ferret &#8212; couldn&#8217;t cope with the high number of writes in our system.<br />
So we decided to move to Sphinx and while it seemed to be working fine for a while, it suddenly started behaving strangely: the daemon was running, but the plugin couldn&#8217;t connect to it, then it stopped updating the index and so on.</p>

<p>I&#8217;m sure we could&#8217;ve find the culprits for all of those issues, but in the end we hadn&#8217;t got the time to do it.<br />
That&#8217;s why we decided to move to <a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html"><strong>MySQL&#8217;s very own full-text search</strong></a>.</p>

<p><em>MySQL full-text support might be less powerful than Ferret&#8217;s, still, it should work for 80% of the times in which full-text search is needed.</em><br />
We only had two issues with it:</p>

<ol>
<li>Indexing only works for MyISAM tables</li>
<li>We didn&#8217;t want to have a separate index for all of the different tables we had to search into, since most of the times we would have to search in all of them at once</li>
</ol>

<p>The fix was kinda easy: <em>we would use a dedicated MyISAM table to perform searches.</em><br />
The table needed to have a way to refer to the original objects, so we decided to opt for the same approach adopted by polymorphic associations: storing both id and type.<br />
Then we had to store the data and, given we didn&#8217;t need to give different weights to different fields, <em>we decided to store all of the data in a single field, actually merging different fields into one.</em></p>

<p>So, a few hours &#8212; and coffees &#8212; later we had a working plugin that updates the <em>searchable</em> table after each save is made and performs fast and reliable searches.<br />
Of course, the plugin is available for your own searching pleasure. Just keep in mind it doesn&#8217;t allow for the sort of flexibility you might have using something like Ferret, however, it should be just perfect if all you need is to perform basic searches on a few tables.</p>

<p>Keep in mind we only spent a few hours on it and it definitely needs some more love &#8212; tests, I&#8217;m looking at you &#8211;, but it works, and we&#8217;re currently using it.<br />
Should you have any issues, please <a href="http://wonsysos.16bugs.com/"><strong>submit a bug report</strong></a> or send an email to info at wonsys dot net.</p>

<p>You can install the plugin by following the steps above:</p>

<ol>
<li><p>Install the plugin:<br />
<code>script/plugin install http://wonsys.googlecode.com/svn/plugins/acts_as_fulltextable/</code></p></li>
<li><p>Add the following code to the model that should be included in searches:<br />
<code>acts_as_fulltextable :fields, :to, :include, :in, :index</code></p></li>
<li>Create the migration:<br />
<code>script/generate fulltext_rows model1 model2 model3 ...</code><br />
Then execute it:<br />
<code>rake db:migrate</code></li>
</ol>

<p>To perform searches you can:</p>

<ol>
<li>run a search on a single model:<br />
<code>Model.find_fulltext('query to run', :limit =&gt; 10, :offset =&gt; 0)</code></li>
<li>run it on more models at once:<br />
<code>FulltextRow.search('query to run', :only =&gt; [:only, :this, :models], :limit =&gt; 10, :offset =&gt; 0)</code></li>
</ol>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=aZBe2uLE"><img src="http://feeds.wonsys.net/~f/Wonsys?i=aZBe2uLE" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=r8w6uovV"><img src="http://feeds.wonsys.net/~f/Wonsys?i=r8w6uovV" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=91sYBxBw"><img src="http://feeds.wonsys.net/~f/Wonsys?i=91sYBxBw" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=q9ws5WGx"><img src="http://feeds.wonsys.net/~f/Wonsys?i=q9ws5WGx" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/165312034" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/26-our-first-plugin-acts_as_fulltextable/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/26-our-first-plugin-acts_as_fulltextable/</feedburner:origLink></item>
		<item>
		<title>Unilife Turns One</title>
		<link>http://feeds.wonsys.net/~r/Wonsys/~3/155364512/</link>
		<comments>http://blog.wonsys.net/posts/25-unilife-turns-one/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 06:14:05 +0000</pubDate>
		<dc:creator>Michele</dc:creator>
		
		<category><![CDATA[Unilife]]></category>

		<guid isPermaLink="false">http://blog.wonsys.net/posts/25-unilife-turns-one/</guid>
		<description><![CDATA[<p>Today, Unilife turns one and while we had to downscale it a bit, we&#8217;re very proud of where it is today.</p>

<p>Unilife was our first project as a company and not just as a bunch of friends, indeed, it was the very reason for incorporating Wonsys in the first place.
It was always meant to be a [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Today, <a href="http://uilife.it/">Unilife</a> turns one and while we had to downscale it a bit, we&#8217;re very proud of where it is today.</p>

<p>Unilife was our first project as a company and not just as a bunch of friends, indeed, it was the very reason for incorporating <a href="http://wonsys.net/">Wonsys</a> in the first place.<br />
It was always meant to be a starting point, something from which to grow, and it served this purpose incredibly well.</p>

<p>Thanks to Unilife, we grew a lot as people and as a business, not financially maybe, but it allowed us to understand a lot of the nitty-gritty, meet a lot of people and basically learn how things go.</p>

<p>Happy birthday Unilife! And thanks to everyone who has helped during the past 12 months.</p>

<p>P.S.<br />
If you&#8217;re registered on Unilife, log in to know everything about the party we&#8217;re having this Friday to celebrate Unilife&#8217;s first birthday.</p>
<div class="feedflare">
<a href="http://feeds.wonsys.net/~f/Wonsys?a=4hvN9fn2"><img src="http://feeds.wonsys.net/~f/Wonsys?i=4hvN9fn2" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=A9p08jj1"><img src="http://feeds.wonsys.net/~f/Wonsys?i=A9p08jj1" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=Lt8dHz5B"><img src="http://feeds.wonsys.net/~f/Wonsys?i=Lt8dHz5B" border="0"></img></a> <a href="http://feeds.wonsys.net/~f/Wonsys?a=yGNz6t1j"><img src="http://feeds.wonsys.net/~f/Wonsys?i=yGNz6t1j" border="0"></img></a>
</div><img src="http://feeds.wonsys.net/~r/Wonsys/~4/155364512" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.wonsys.net/posts/25-unilife-turns-one/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.wonsys.net/posts/25-unilife-turns-one/</feedburner:origLink></item>
	</channel>
</rss>
