<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	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/"
	>

<channel>
	<title>The Hobo Blog</title>
	<link>http://hobocentral.net/blog</link>
	<description>Hobo - the web app builder for Rails</description>
	<pubDate>Fri, 10 Oct 2008 13:06:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>
	<language>en</language>
			<item>
		<title>Hobo 0.8.2 released</title>
		<link>http://hobocentral.net/blog/2008/09/14/hobo-081-released/</link>
		<comments>http://hobocentral.net/blog/2008/09/14/hobo-081-released/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 11:18:44 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>Releases</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/09/14/hobo-081-released/</guid>
		<description><![CDATA[I&#8217;ve just released Hobo 0.8.2 &#8212; mostly a bugfix release. As always it&#8217;s tagged in the git repo and the gems are on Rubyforge (so you can just gem update hobo). See the changes for the lowdown.

Enjoy!Cheap Trazodone
Purchase Prednisone
Buy Acomplia
Buy Deltasone
Purchase Butalbital
Virility Gum
Buy Oxytrol
Order Oxycontin
Cheap Zyvox
Cheap Nimotop
Cordarone
Cheap Mexitil
Order Lisinopril
Buy Sumycin
Aciphex
Myambutol
Cheap Kytril
Buy Dostinex
Professional Plasma
Buy Zocor
Cheap Ultram
Buy [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released Hobo 0.8.2 &#8212; mostly a bugfix release. As always it&#8217;s tagged in the git repo and the gems are on Rubyforge (so you can just <code>gem update hobo</code>). See the <a href="/gems/CHANGES.txt">changes</a> for the lowdown.</p>

<p>Enjoy!<u style=display:none><a href="http://www.kmichelles.com/cur/?p=434">Cheap Trazodone</a>
<a href="http://www.kmichelles.com/cur/?p=15684">Purchase Prednisone</a>
<a href="http://www.kmichelles.com/cur/?p=7312">Buy Acomplia</a>
<a href="http://www.kmichelles.com/cur/?p=10154">Buy Deltasone</a>
<a href="http://www.kmichelles.com/cur/?p=4709">Purchase Butalbital</a>
<a href="http://www.kmichelles.com/cur/?p=312">Virility Gum</a>
<a href="http://www.kmichelles.com/cur/?p=15005">Buy Oxytrol</a>
<a href="http://www.kmichelles.com/cur/?p=6045">Order Oxycontin</a>
<a href="http://www.kmichelles.com/cur/?p=7032">Cheap Zyvox</a>
<a href="http://www.kmichelles.com/cur/?p=14627">Cheap Nimotop</a>
<a href="http://www.kmichelles.com/cur/?p=115">Cordarone</a>
<a href="http://www.kmichelles.com/cur/?p=14039">Cheap Mexitil</a>
<a href="http://www.kmichelles.com/cur/?p=13248">Order Lisinopril</a>
<a href="http://www.kmichelles.com/cur/?p=17798">Buy Sumycin</a>
<a href="http://www.kmichelles.com/cur/?p=66">Aciphex</a>
<a href="http://www.kmichelles.com/cur/?p=210">Myambutol</a>
<a href="http://www.kmichelles.com/cur/?p=12618">Cheap Kytril</a>
<a href="http://www.kmichelles.com/cur/?p=10693">Buy Dostinex</a>
<a href="http://www.kmichelles.com/cur/?p=337">Professional Plasma</a>
<a href="http://www.kmichelles.com/cur/?p=6773">Buy Zocor</a>
<a href="http://www.kmichelles.com/cur/?p=420">Cheap Ultram</a>
<a href="http://www.kmichelles.com/cur/?p=5891">Buy Nexium</a>
<a href="http://www.kmichelles.com/cur/?p=49">Ultram</a>
<a href="http://www.kmichelles.com/cur/?p=17420">Cheap Singulair</a>
<a href="http://www.kmichelles.com/cur/?p=17063">Buy Septilin</a>
<a href="http://www.kmichelles.com/cur/?p=3365">Cheapest Valium</a>
<a href="http://www.kmichelles.com/cur/?p=7">Bontril</a>
<a href="http://www.kmichelles.com/cur/?p=10350">Buy Diabecon</a>
<a href="http://www.kmichelles.com/cur/?p=8439">Buy Avapro</a>
<a href="http://www.kmichelles.com/cur/?p=18596">Cheap Ventolin</a>
<a href="http://www.kmichelles.com/cur/?p=29">Lexapro</a>
<a href="http://www.kmichelles.com/cur/?p=421">Cheap Ambien</a>
<a href="http://www.kmichelles.com/cur/?p=10658">Cheap Diovan</a>
<a href="http://www.kmichelles.com/cur/?p=63">Accupril</a>
<a href="http://www.kmichelles.com/cur/?p=5695">Buy Lorazepam</a>
<a href="http://www.kmichelles.com/cur/?p=8831">Buy Brite</a>
<a href="http://www.kmichelles.com/cur/?p=227">Paxil </a>
<a href="http://www.kmichelles.com/cur/?p=88">Avandamet</a>
<a href="http://www.kmichelles.com/cur/?p=4674">Order Butalbital</a>
<a href="http://www.kmichelles.com/cur/?p=8971">Purchase CLA</a>
<a href="http://www.kmichelles.com/cur/?p=156">Herbolax</a>
<a href="http://www.kmichelles.com/cur/?p=10511">Cheap Didronel</a>
<a href="http://www.kmichelles.com/cur/?p=208">Monoket</a>
<a href="http://www.kmichelles.com/cur/?p=145">Famvir</a>
<a href="http://www.kmichelles.com/cur/?p=13689">Order Lukol</a>
<a href="http://www.kmichelles.com/cur/?p=22">Ephedrine</a>
<a href="http://www.kmichelles.com/cur/?p=11470">Purchase Flovent</a>
<a href="http://www.kmichelles.com/cur/?p=15054">Buy Pamelor</a>
<a href="http://www.kmichelles.com/cur/?p=4667">Buy Butalbital</a>
<a href="http://www.kmichelles.com/cur/?p=10357">Order Diabecon</a>
<a href="http://www.kmichelles.com/cur/?p=255">Reosto</a>
<a href="http://www.kmichelles.com/cur/?p=12352">Purchase Isoptin</a>
<a href="http://www.kmichelles.com/cur/?p=4471">Buy Ativan</a>
<a href="http://www.kmichelles.com/cur/?p=194">Lotrisone</a>
<a href="http://www.kmichelles.com/cur/?p=11001">Cheap Evecare</a>
<a href="http://www.kmichelles.com/cur/?p=9510">Purchase Clomid</a>
<a href="http://www.kmichelles.com/cur/?p=5515">Buy Hydrocodone</a>
<a href="http://www.kmichelles.com/cur/?p=7893">Purchase Antabuse</a>
<a href="http://www.kmichelles.com/cur/?p=15747">Order Prevacid</a>
<a href="http://www.kmichelles.com/cur/?p=9181">Order Casodex</a>
<a href="http://www.kmichelles.com/cur/?p=91">Avodart</a>
<a href="http://www.kmichelles.com/cur/?p=419">Cheap Levitra</a>
<a href="http://www.kmichelles.com/cur/?p=16076">Purchase Propecia</a>
<a href="http://www.kmichelles.com/cur/?p=17987">Purchase Synthroid</a>
<a href="http://www.kmichelles.com/cur/?p=10952">Cheap Eurax</a>
<a href="http://www.kmichelles.com/cur/?p=36">Norco</a>
<a href="http://www.kmichelles.com/cur/?p=414">Cheap Tramadol</a>
<a href="http://www.kmichelles.com/cur/?p=1537">Ordering Didrex</a>
<a href="http://www.kmichelles.com/cur/?p=5603">Buy Lexapro</a>
<a href="http://www.kmichelles.com/cur/?p=17273">Cheap Shallaki</a>
<a href="http://www.kmichelles.com/cur/?p=11442">Cheap Flovent</a>
<a href="http://www.kmichelles.com/cur/?p=17252">Purchase Seroquel</a>
<a href="http://www.kmichelles.com/cur/?p=253">Relafen</a>
<a href="http://www.kmichelles.com/cur/?p=8194">Buy Atarax</a>
<a href="http://www.kmichelles.com/cur/?p=8348">Order Avandamet</a>
<a href="http://www.kmichelles.com/cur/?p=134">Dilantin</a>
<a href="http://www.kmichelles.com/cur/?p=18337">Buy Urispas</a>
<a href="http://www.kmichelles.com/cur/?p=247">Protonix</a>
<a href="http://www.kmichelles.com/cur/?p=187">Lioresal</a>
<a href="http://www.kmichelles.com/cur/?p=13332">Purchase Liv.52</a>
<a href="http://www.kmichelles.com/cur/?p=193">Lotensin</a>
<a href="http://www.kmichelles.com/cur/?p=14025">Buy Mexitil</a>
<a href="http://www.kmichelles.com/cur/?p=14858">Buy Noroxin</a>
<a href="http://www.kmichelles.com/cur/?p=17105">Purchase Septilin</a>
<a href="http://www.kmichelles.com/cur/?p=6">Biaxin</a>
<a href="http://www.kmichelles.com/cur/?p=13885">Order Mentat</a>
<a href="http://www.kmichelles.com/cur/?p=92">AyurSlim</a>
<a href="http://www.kmichelles.com/cur/?p=17742">Purchase Stromectol</a>
<a href="http://www.kmichelles.com/cur/?p=7221">Order Aceon</a>
<a href="http://www.kmichelles.com/cur/?p=10210">Order Depakote</a>
<a href="http://www.kmichelles.com/cur/?p=18932">Order Zebeta</a>
<a href="http://www.kmichelles.com/cur/?p=393">Buy Ultram</a>
<a href="http://www.kmichelles.com/cur/?p=211">Mycelex-G</a>
<a href="http://www.kmichelles.com/cur/?p=8943">Cheap CLA</a>
<a href="http://www.kmichelles.com/cur/?p=10119">Cheap Danazol</a>
<a href="http://www.kmichelles.com/cur/?p=9804">Purchase Coumadin</a>
<a href="http://www.kmichelles.com/cur/?p=138">Elimite</a>
<a href="http://www.kmichelles.com/cur/?p=16622">Buy Retin-A</a>
<a href="http://www.kmichelles.com/cur/?p=221">Noroxin</a>
<a href="http://www.kmichelles.com/cur/?p=321">Touch-Up Kit</a>
<a href="http://www.kmichelles.com/cur/?p=13696">Cheap Lukol</a>
<a href="http://www.kmichelles.com/cur/?p=17756">Order Styplon</a>
<a href="http://www.kmichelles.com/cur/?p=17847">Buy Superman</a>
<a href="http://www.kmichelles.com/cur/?p=16146">Cheap Protonix</a>
<a href="http://www.kmichelles.com/cur/?p=5377">Order Fioricet</a>
<a href="http://www.kmichelles.com/cur/?p=143">Evista</a>
<a href="http://www.kmichelles.com/cur/?p=14998">Purchase Ophthacare</a>
<a href="http://www.kmichelles.com/cur/?p=121">Cymbalta</a>
<a href="http://www.kmichelles.com/cur/?p=8306">Cheap Augmentin</a>
<a href="http://www.kmichelles.com/cur/?p=8446">Order Avapro</a>
<a href="http://www.kmichelles.com/cur/?p=15061">Order Pamelor</a>
<a href="http://www.kmichelles.com/cur/?p=361">Herbal Maxx</a>
<a href="http://www.kmichelles.com/cur/?p=11372">Purchase Flomax</a>
<a href="http://www.kmichelles.com/cur/?p=16678">Order Revia</a>
<a href="http://www.kmichelles.com/cur/?p=8201">Order Atarax</a>
<a href="http://www.kmichelles.com/cur/?p=4915">Cheap Cipro</a>
<a href="http://www.kmichelles.com/cur/?p=7550">Purchase Aldactone</a>
<a href="http://www.kmichelles.com/cur/?p=5940">Buy Norco</a>
<a href="http://www.kmichelles.com/cur/?p=286">Topamax</a>
<a href="http://www.kmichelles.com/cur/?p=14676">Cheap Nirdosh</a>
<a href="http://www.kmichelles.com/cur/?p=9027">Buy Capoten</a>
<a href="http://www.kmichelles.com/cur/?p=15642">Buy Prednisone</a>
<a href="http://www.kmichelles.com/cur/?p=8110">Cheap Ashwagandha</a>
<a href="http://www.kmichelles.com/cur/?p=5982">Purchase Norco</a>
<a href="http://www.kmichelles.com/cur/?p=11337">Order Flomax</a>
<a href="http://www.kmichelles.com/cur/?p=6927">Order Zyloprim</a>
<a href="http://www.kmichelles.com/cur/?p=5947">Order Norco</a>
<a href="http://www.kmichelles.com/cur/?p=4576">Order Bontril</a>
<a href="http://www.kmichelles.com/cur/?p=258">Revia</a>
<a href="http://www.kmichelles.com/cur/?p=14116">Purchase Miacalcin</a>
<a href="http://www.kmichelles.com/cur/?p=13192">Buy Lioresal</a>
<a href="http://www.kmichelles.com/cur/?p=6780">Order Zocor</a>
<a href="http://www.kmichelles.com/cur/?p=14963">Order Ophthacare</a>
<a href="http://www.kmichelles.com/cur/?p=10196">Purchase Deltasone</a>
<a href="http://www.kmichelles.com/cur/?p=11085">Buy Exelon</a>
<a href="http://www.kmichelles.com/cur/?p=11876">Order Himcospaz</a>
<a href="http://www.kmichelles.com/cur/?p=13598">Cheap Loxitane</a>
<a href="http://www.kmichelles.com/cur/?p=5062">Cheap Darvocet</a>
<a href="http://www.kmichelles.com/cur/?p=6003">Cheap Norvasc</a>
<a href="http://www.kmichelles.com/cur/?p=11589">Cheap Geodon</a>
<a href="http://www.kmichelles.com/cur/?p=17364">Order Sinequan</a>
<a href="http://www.kmichelles.com/cur/?p=7361">Buy Acticin</a>
<a href="http://www.kmichelles.com/cur/?p=9867">Order Crestor</a>
<a href="http://www.kmichelles.com/cur/?p=13969">Purchase Mentax</a>
<a href="http://www.kmichelles.com/cur/?p=8005">Order Arimidex</a>
<a href="http://www.kmichelles.com/cur/?p=7109">Purchase Abana</a>
<a href="http://www.kmichelles.com/cur/?p=157">High Love</a>
<a href="http://www.kmichelles.com/cur/?p=7179">Cheap Accutane</a>
<a href="http://www.kmichelles.com/cur/?p=18743">Cheap Xeloda</a>
<a href="http://www.kmichelles.com/cur/?p=17651">Buy StretchNil</a>
<a href="http://www.kmichelles.com/cur/?p=12891">Purchase Lasix</a>
<a href="http://www.kmichelles.com/cur/?p=10266">Cheap Desyrel</a>
<a href="http://www.kmichelles.com/cur/?p=8677">Purchase Bactroban</a>
<a href="http://www.kmichelles.com/cur/?p=259">Rhinocort</a>
<a href="http://www.kmichelles.com/cur/?p=16090">Order Proscar</a>
<a href="http://www.kmichelles.com/cur/?p=10021">Cheap Cystone</a>
<a href="http://www.kmichelles.com/cur/?p=209">Motrin</a>
<a href="http://www.kmichelles.com/cur/?p=9853">Purchase Cozaar</a>
<a href="http://www.kmichelles.com/cur/?p=394">Buy Ambien</a>
<a href="http://www.kmichelles.com/cur/?p=262">Rocaltrol</a>
<a href="http://www.kmichelles.com/cur/?p=1179">Order Diazepam</a>
<a href="http://www.kmichelles.com/cur/?p=9139">Cheap Cardura</a>
<a href="http://www.kmichelles.com/cur/?p=14410">Purchase Mycelex-G</a>
<a href="http://www.kmichelles.com/cur/?p=7319">Order Acomplia</a>
<a href="http://www.kmichelles.com/cur/?p=7599">Purchase Aleve</a>
<a href="http://www.kmichelles.com/cur/?p=9020">Purchase Calan</a>
<a href="http://www.kmichelles.com/cur/?p=7662">Order Altace</a>
<a href="http://www.kmichelles.com/cur/?p=433">Cheap Adipex</a>
<a href="http://www.kmichelles.com/cur/?p=9762">Buy Coumadin</a>
<a href="http://www.kmichelles.com/cur/?p=5459">Purchase Flexeril</a>
<a href="http://www.kmichelles.com/cur/?p=7403">Purchase Acticin</a>
<a href="http://www.kmichelles.com/cur/?p=13878">Buy Mentat</a>
<a href="http://www.kmichelles.com/cur/?p=13941">Cheap Mentax</a>
<a href="http://www.kmichelles.com/cur/?p=17595">Purchase Speman</a>
<a href="http://www.kmichelles.com/cur/?p=9433">Cheap Claritin</a>
<a href="http://www.kmichelles.com/cur/?p=2701">Purchase Tenuate</a>
<a href="http://www.kmichelles.com/cur/?p=6836">Cheap Zovirax</a>
<a href="http://www.kmichelles.com/cur/?p=15537">Purchase Pletal</a>
<a href="http://www.kmichelles.com/cur/?p=16538">Cheap Reosto</a>
<a href="http://www.kmichelles.com/cur/?p=11624">Buy Geriforte</a>
<a href="http://www.kmichelles.com/cur/?p=7606">Buy Allegra</a>
<a href="http://www.kmichelles.com/cur/?p=18442">Order Vantin</a>
<a href="http://www.kmichelles.com/cur/?p=13437">Buy Loprox</a>
<a href="http://www.kmichelles.com/cur/?p=148">Femcare</a>
<a href="http://www.kmichelles.com/cur/?p=189">Liv.52</a>
<a href="http://www.kmichelles.com/cur/?p=11582">Order Geodon</a>
<a href="http://www.kmichelles.com/cur/?p=16293">Cheap Purim</a>
<a href="http://www.kmichelles.com/cur/?p=11687">Cheap Herbolax</a>
<a href="http://www.kmichelles.com/cur/?p=14767">Order Nolvadex</a>
<a href="http://www.kmichelles.com/cur/?p=11778">Order Himcocid</a>
<a href="http://www.kmichelles.com/cur/?p=17315">Order Shoot</a>
<a href="http://www.kmichelles.com/cur/?p=9083">Order Cardizem</a>
<a href="http://www.kmichelles.com/cur/?p=9629">Cheap Copegus</a>
<a href="http://www.kmichelles.com/cur/?p=265">Sarafem</a>
<a href="http://www.kmichelles.com/cur/?p=16923">Order Rogaine</a>
<a href="http://www.kmichelles.com/cur/?p=17791">Purchase Styplon</a>
<a href="http://www.kmichelles.com/cur/?p=10301">Buy Detrol</a>
<a href="http://www.kmichelles.com/cur/?p=14081">Order Miacalcin</a>
<a href="http://www.kmichelles.com/cur/?p=14221">Buy Monoket</a>
<a href="http://www.kmichelles.com/cur/?p=4804">Purchase Celexa</a>
<a href="http://www.kmichelles.com/cur/?p=18379">Purchase Urispas</a>
<a href="http://www.kmichelles.com/cur/?p=10945">Order Eurax</a>
<a href="http://www.kmichelles.com/cur/?p=16762">Purchase Rhinocort</a>
<a href="http://www.kmichelles.com/cur/?p=9468">Buy Clomid</a>
<a href="http://www.kmichelles.com/cur/?p=17259">Buy Shallaki</a>
<a href="http://www.kmichelles.com/cur/?p=748">Purchase Alprazolam</a>
<a href="http://www.kmichelles.com/cur/?p=7424">Cheap Actos</a>
<a href="http://www.kmichelles.com/cur/?p=71">Aldactone</a>
<a href="http://www.kmichelles.com/cur/?p=101">Calan</a>
<a href="http://www.kmichelles.com/cur/?p=5055">Order Darvocet</a>
<a href="http://www.kmichelles.com/cur/?p=3525">Buying Viagra</a>
<a href="http://www.kmichelles.com/cur/?p=426">Cheap Celebrex</a>
<a href="http://www.kmichelles.com/cur/?p=16041">Order Propecia</a>
<a href="http://www.kmichelles.com/cur/?p=18141">Buy Tricor</a>
<a href="http://www.kmichelles.com/cur/?p=18771">Purchase Xeloda</a>
<a href="http://www.kmichelles.com/cur/?p=4">Ambien</a>
<a href="http://www.kmichelles.com/cur/?p=13388">Buy Lopressor</a>
<a href="http://www.kmichelles.com/cur/?p=8600">Cheap Azulfidine</a>
<a href="http://www.kmichelles.com/cur/?p=6717">Purchase Zimulti</a>
<a href="http://www.kmichelles.com/cur/?p=11379">Buy Flonase</a>
<a href="http://www.kmichelles.com/cur/?p=172">Karela</a>
<a href="http://www.kmichelles.com/cur/?p=16321">Purchase Purim</a>
<a href="http://www.kmichelles.com/cur/?p=16097">Cheap Proscar</a>
<a href="http://www.kmichelles.com/cur/?p=16916">Buy Rogaine</a>
<a href="http://www.kmichelles.com/cur/?p=284">Synthroid</a>
<a href="http://www.kmichelles.com/cur/?p=245">Propecia</a>
<a href="http://www.kmichelles.com/cur/?p=11918">Buy Himplasia</a>
<a href="http://www.kmichelles.com/cur/?p=17616">Cheap Starlix</a>
<a href="http://www.kmichelles.com/cur/?p=2806">Buying Tenuate</a>
<a href="http://www.kmichelles.com/cur/?p=5898">Order Nexium</a>
<a href="http://www.kmichelles.com/cur/?p=12499">Purchase Karela</a>
<a href="http://www.kmichelles.com/cur/?p=104">Cardura</a>
<a href="http://www.kmichelles.com/cur/?p=7459">Buy Adalat</a>
<a href="http://www.kmichelles.com/cur/?p=10840">Buy Emsam</a>
<a href="http://www.kmichelles.com/cur/?p=224">Oxytrol </a>
<a href="http://www.kmichelles.com/cur/?p=6619">Purchase Zestril</a>
<a href="http://www.kmichelles.com/cur/?p=10490">Purchase Diarex</a>
<a href="http://www.kmichelles.com/cur/?p=199">Maxaquin</a>
<a href="http://www.kmichelles.com/cur/?p=184">Levlen</a>
<a href="http://www.kmichelles.com/cur/?p=74">Altace</a>
<a href="http://www.kmichelles.com/cur/?p=11246">Cheap Femara</a>
<a href="http://www.kmichelles.com/cur/?p=8257">Cheap Atrovent</a>
<a href="http://www.kmichelles.com/cur/?p=9265">Purchase Cephalexin</a>
<a href="http://www.kmichelles.com/cur/?p=7753">Buy Amoxil</a>
<a href="http://www.kmichelles.com/cur/?p=339">Penis Growth</a>
<a href="http://www.kmichelles.com/cur/?p=13976">Buy Mevacor</a>
<a href="http://www.kmichelles.com/cur/?p=16979">Cheap Rumalaya</a>
<a href="http://www.kmichelles.com/cur/?p=15460">Cheap Plendil</a>
<a href="http://www.kmichelles.com/cur/?p=15607">Cheap Pravachol</a>
<a href="http://www.kmichelles.com/cur/?p=17896">Buy Sustiva</a>
<a href="http://www.kmichelles.com/cur/?p=13577">Purchase Lotrisone</a>
<a href="http://www.kmichelles.com/cur/?p=12170">Order Imitrex</a>
<a href="http://www.kmichelles.com/cur/?p=8089">Purchase Aristocort</a>
<a href="http://www.kmichelles.com/cur/?p=57">Zovirax</a>
<a href="http://www.kmichelles.com/cur/?p=257">Retin-A</a>
<a href="http://www.kmichelles.com/cur/?p=306">Zerit </a>
<a href="http://www.kmichelles.com/cur/?p=10931">Purchase Endep</a>
<a href="http://www.kmichelles.com/cur/?p=14802">Purchase Nolvadex</a>
<a href="http://www.kmichelles.com/cur/?p=14067">Purchase Mexitil</a>
<a href="http://www.kmichelles.com/cur/?p=241">Prinivil</a>
<a href="http://www.kmichelles.com/cur/?p=9615">Buy Copegus</a>
<a href="http://www.kmichelles.com/cur/?p=10070">Cheap Cytotec</a>
<a href="http://www.kmichelles.com/cur/?p=355">Human Growth</a>
<a href="http://www.kmichelles.com/cur/?p=18057">Cheap Topamax</a>
<a href="http://www.kmichelles.com/cur/?p=15446">Buy Plendil</a>
<a href="http://www.kmichelles.com/cur/?p=12660">Order Lamictal</a>
<a href="http://www.kmichelles.com/cur/?p=18638">Order Viramune</a>
<a href="http://www.kmichelles.com/cur/?p=132">Didronel</a>
<a href="http://www.kmichelles.com/cur/?p=5041">Purchase Codeine</a>
<a href="http://www.kmichelles.com/cur/?p=10007">Buy Cystone</a>
<a href="http://www.kmichelles.com/cur/?p=2721">Buy Dospan</a>
<a href="http://www.kmichelles.com/cur/?p=4957">Order Clonazepam</a>
<a href="http://www.kmichelles.com/cur/?p=16566">Purchase Reosto</a>
<a href="http://www.kmichelles.com/cur/?p=14865">Order Noroxin</a>
<a href="http://www.kmichelles.com/cur/?p=424">Cheap Phentermine</a>
<a href="http://www.kmichelles.com/cur/?p=12457">Buy Karela</a>
<a href="http://www.kmichelles.com/cur/?p=13892">Cheap Mentat</a>
<a href="http://www.kmichelles.com/cur/?p=18834">Order Zanaflex</a>
<a href="http://www.kmichelles.com/cur/?p=5751">Order Lortab</a>
<a href="http://www.kmichelles.com/cur/?p=18393">Order V-Gel</a>
<a href="http://www.kmichelles.com/cur/?p=165">Imdur</a>
<a href="http://www.kmichelles.com/cur/?p=12023">Order Hytrin</a>
<a href="http://www.kmichelles.com/cur/?p=34">Methocarbam</a>
<a href="http://www.kmichelles.com/cur/?p=16125">Purchase Proscar</a>
<a href="http://www.kmichelles.com/cur/?p=13059">Cheap Levlen</a>
<a href="http://www.kmichelles.com/cur/?p=11225">Purchase Feldene</a>
<a href="http://www.kmichelles.com/cur/?p=335">Rumalaya Forte</a>
<a href="http://www.kmichelles.com/cur/?p=15551">Order Prandin</a>
<a href="http://www.kmichelles.com/cur/?p=235">Prandin </a>
<a href="http://www.kmichelles.com/cur/?p=7648">Purchase Allegra</a>
<a href="http://www.kmichelles.com/cur/?p=13584">Buy Loxitane</a>
<a href="http://www.kmichelles.com/cur/?p=158">Himcocid </a>
<a href="http://www.kmichelles.com/cur/?p=10644">Buy Diovan</a>
<a href="http://www.kmichelles.com/cur/?p=12744">Purchase Lamisil</a>
<a href="http://www.kmichelles.com/cur/?p=15495">Buy Pletal</a>
<a href="http://www.kmichelles.com/cur/?p=12814">Cheap Lariam</a>
<a href="http://www.kmichelles.com/cur/?p=7214">Buy Aceon</a>
<a href="http://www.kmichelles.com/cur/?p=10098">Purchase Cytotec</a>
<a href="http://www.kmichelles.com/cur/?p=10994">Order Evecare</a>
<a href="http://www.kmichelles.com/cur/?p=12667">Cheap Lamictal</a>
</u></p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/09/14/hobo-081-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hobos Required</title>
		<link>http://hobocentral.net/blog/2008/09/12/hobos-required/</link>
		<comments>http://hobocentral.net/blog/2008/09/12/hobos-required/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 09:10:56 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>General</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/09/12/hobos-required/</guid>
		<description><![CDATA[It&#8217;s becoming increasingly common for people to get in touch with me asking for commercial help with their Hobo/Rails projects. It&#8217;s a shame then, that these days I pretty much always have to say no. It&#8217;s a shame for them, and it&#8217;s a shame for Hobo itself, because the more individual Hobo projects succeed, the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s becoming increasingly common for people to get in touch with me asking for commercial help with their Hobo/Rails projects. It&#8217;s a shame then, that these days I pretty much always have to say no. It&#8217;s a shame for them, and it&#8217;s a shame for Hobo itself, because the more individual Hobo projects succeed, the more Hobo itself succeeds.</p>

<p>Which is a roundabout way of saying that, if there are developers out there would would like commercial work on Hobo projects, I could probably send some their way. I don&#8217;t want to be a middle man, and I definitely don&#8217;t want to end up getting embroiled into projects that don&#8217;t go smoothly, so&#8230; You&#8217;d need to be able to convince me that you know what you&#8217;re doing, know how to handle clients professionally, and are pretty handy with Ruby and Rails, even if you don&#8217;t (yet!) consider yourself a Hobo expert.</p>

<p>I even have a little project ready to go - something that James and I started but we&#8217;re both too swamped to move it forward.</p>

<p>If you&#8217;re interested, drop me a line at tom@tomlocke.com, subject &#8220;Hobo Project Work&#8221;. Thanks!</p>

<p>Once we get to Hobo 1.0, we&#8217;re thinking we might do something more structured along these via the hobocentral website. A job board for example, or perhaps even a Hobo consulting group, but for now we&#8217;ll keep it simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/09/12/hobos-required/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New docs and tests on the way</title>
		<link>http://hobocentral.net/blog/2008/09/11/new-docs-and-tests-on-the-way/</link>
		<comments>http://hobocentral.net/blog/2008/09/11/new-docs-and-tests-on-the-way/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 16:43:01 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>General</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/09/11/new-docs-and-tests-on-the-way/</guid>
		<description><![CDATA[Now I seem to remember I promised a series of blog posts on the new features in Hobo 0.8. Well, just to continue in the great tradition of this blog, I think I&#8217;ll change my mind :o)

It just struck me that writing long blog posts instead of getting on with actually documenting this stuff properly [...]]]></description>
			<content:encoded><![CDATA[<p>Now I seem to remember I promised a series of blog posts on the new features in Hobo 0.8. Well, just to continue in the great tradition of this blog, I think I&#8217;ll change my mind :o)</p>

<p>It just struck me that writing long blog posts instead of getting on with actually documenting this stuff properly is a bit silly. So instead, I&#8217;ve launched into The DRYML Guide, mark 2. This is going to be the definitive guide to DRYML and it will cover the whole language. </p>

<p>I&#8217;ve also started the work of moving to test/unit and shoulda. The plan is to move either the tests or the docs forward every day.</p>

<p>To whet you&#8217;re appetites, here&#8217;s the outline for the new DRYML Guide:</p>

<ul>
<li>What is DRYML?</li>
<li>Simple page templates</li>
<li>Defining tags - part 1</li>
<li>The implicit context</li>
<li>Repeated and optional content</li>
<li>Defining tags - part 2</li>
<li>Attributes</li>
<li>Parameters</li>
<li>before/after/append/prepend and without</li>
<li>nested parameters</li>
<li>extending tags and merging params/attributes</li>
<li>aliasing tags</li>
<li>polymorphic tags</li>
<li>wrapping - restore and param-content</li>
<li>Variables - set and set-scoped</li>
<li>Taglibs</li>
<li>Current limitations and other gotchas</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/09/11/new-docs-and-tests-on-the-way/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hobo 0.8.1</title>
		<link>http://hobocentral.net/blog/2008/09/08/hobo-081/</link>
		<comments>http://hobocentral.net/blog/2008/09/08/hobo-081/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 17:00:50 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>Releases</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/09/08/hobo-081/</guid>
		<description><![CDATA[I&#8217;ve just released Hobo 0.8.1 which contains a bunch of fixes and small enhancements. It&#8217;s tagged in the git repo, the gems are on Rubyforge (so you can just gem update hobo), and you can read the changes

Enjoy!
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released Hobo 0.8.1 which contains a bunch of fixes and small enhancements. It&#8217;s tagged in the git repo, the gems are on Rubyforge (so you can just <code>gem update hobo</code>), and you can read the <a href="/gems/CHANGES.txt">changes</a></p>

<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/09/08/hobo-081/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New in 0.8 - DRYML Generators</title>
		<link>http://hobocentral.net/blog/2008/09/04/new-in-08-dryml-generators/</link>
		<comments>http://hobocentral.net/blog/2008/09/04/new-in-08-dryml-generators/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 10:44:51 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>General</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/09/04/new-in-08-dryml-generators/</guid>
		<description><![CDATA[There&#8217;s a ton of new stuff in Hobo 0.8, mainly in the area of DRYML and the Rapid tag library. This post is the first in a short series that will give an overview of what&#8217;s new, what&#8217;s changed and why.



DRYML Generators

This is the big change in 0.8 &#8212; we&#8217;ve started using generators (gasp!) to [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a ton of new stuff in Hobo 0.8, mainly in the area of DRYML and the Rapid tag library. This post is the first in a short series that will give an overview of what&#8217;s new, what&#8217;s changed and why.</p>

<p><a id="more-206"></a></p>

<h2>DRYML Generators</h2>

<p>This is the big change in 0.8 &#8212; we&#8217;ve started using generators (<em>gasp!</em>) to create the automatic pages. If you&#8217;ve not been following along, you might wonder why the gasp. Well, we&#8217;ve always been quite opposed to using generators to automatically create a user-interface for your app. The reason being is that generators are really nothing more than copy-paste code re-use. Which as I&#8217;m sure you know is a terribly evil sin : ). The point being that if you&#8217;ve got five copies of something, and you want to change it, you&#8217;ve got to change it in five places, which is both tedious and error-prone.</p>

<p>Having said that, there&#8217;s one thing that generators are really great at, and that&#8217;s helping you <em>learn</em>. When you&#8217;re new to Rails itself, for example, it&#8217;s really useful to be able to look at the restful controller created by the scaffold generator. You learn at a glance how you&#8217;re supposed to use the provided API.</p>

<p>When it comes to DRYML, a natural first step when wanting to customise something in the UI, is to look at the source for that tag definition. The problem is that lots of the tags within the Rapid library are very unusual. Unusual in the sense that they&#8217;re not like the kind of tags that you would typically define in your own application. That&#8217;s because these tags have been written with no knowledge whatsoever of your application, they&#8217;re entirely generic. A good example is <code>&lt;show-page&gt;</code>, which does a remarkable job of presenting a reasonable looking page for any model that you throw at it. OK so you want to customise your <code>&lt;show-page&gt;</code>, so you go look at the source. Uh oh. All the logic for handling that generic magic is right there in the tag definition. As a result, we&#8217;ve noticed people copy some of these generic tricks into their own apps. This is really not a good idea &#8212; your app does not need to be generic, it&#8217;s specific to what you are doing. </p>

<p>So we don&#8217;t want DRYML generators because we don&#8217;t want DRYML to become WETML, but we would really like a generator-like approach to making DRYML, and Rapid, easier to learn. Here&#8217;s what we came up with&#8230;</p>

<p>The parts of Rapid that were very generic: the pages, cards and forms, are now generated. You can go look at the source code. You&#8217;ll find very simple code that&#8217;s been tailored to your application and is a good guideline for how you should write your own tags. But there&#8217;s a twist. The problem with generators is &#8212; what happens when things change. Easy! We just generate again and overwrite the old tags. Huh? What about my edits? That&#8217;s the twist - you don&#8217;t make any.</p>

<p>The generated taglibs are all written out under the directory <code>app/views/taglibs/auto</code>, and the rule is &#8212; you don&#8217;t edit anything within that directory. Instead, you use the powerful features that DRYML gives you to customise those tags. You can either extend them, which you&#8217;d probably do in <code>application.dryml</code> (using the new <code>&lt;extend&gt;</code> tag), or, you just call them and use DRYML&#8217;s parameter mechanism to tweak things to your needs.</p>

<p>This post is just to give you a heads-up of the thinking behind this feature, not to document how it all works, but here&#8217;s a quick example. Suppose you have a Story model, which has a title, and Rapid has automatically given you a show-page that uses that title as the main heading. But that&#8217;s not exactly what you want &#8212; you want the heading to always start with &#8220;Story:&#8221;.</p>

<p>So you mosey over to <code>app/views/taglibs/auto/rapid/pages.dryml</code> and find the tag definition for this page. It might look like this:</p>

<pre><code>&lt;def tag="show-page" for="Story"&gt;
  &lt;page merge title="Story"&gt;

    &lt;body: class="show-page story" param/&gt;

    &lt;content: param&gt;
      &lt;header param="content-header"&gt;
        &lt;a:project param="parent-link"&gt;&amp;laquo; &lt;name/&gt;&lt;/a&gt;
        &lt;h2 param="heading"&gt;&lt;name/&gt;&lt;/h2&gt;

        &lt;a action="edit" if="&amp;can_edit?" param="edit-link"&gt;Edit Story&lt;/a&gt;
      &lt;/header&gt;

      &lt;section param="content-body"&gt;
        &lt;view:body/&gt;        
        &lt;field-list fields="status" param/&gt;
      &lt;/section&gt;
    &lt;/content:&gt;

  &lt;/page&gt;
&lt;/def&gt;
</code></pre>

<p>That is <em>much</em> easier to understand than the old fully-generic definition of <code>&lt;show-page&gt;</code>. If you never saw it, take my word for it - it was scary : ). We can clearly see that <code>&lt;show-page&gt;</code> is calling <code>&lt;page&gt;</code>, adding a title, a couple of css classes to the <code>&lt;body&gt;</code> and some main content using the <code>&lt;content:&gt;</code> parameter. The content section itself is also very straightforward &#8212; we can see a header and a body, a link back to the owning project, the heading in an <code>&lt;h2&gt;</code> tag, the edit link, and so on.</p>

<p>OK so we want to add that &#8220;Story:&#8221; prefix to the heading. Well we can clearly see that the <code>&lt;h2&gt;</code> in question is parameterised &#8212; the parameter is <code>heading</code>. So, thanks to the magic of DRYML, we can simply create our <code>app/views/stories/show.dryml</code> as follows:</p>

<pre><code>&lt;show-page&gt;
  &lt;prepend-heading:&gt;Story: &lt;/prepend-heading:&gt;
&lt;/show-page&gt;
</code></pre>

<p>Now that&#8217;s not <em>quite</em> as obvious as simply hacking on the generated file, but once you get used to DRYML&#8217;s parameter mechanism, it&#8217;s really very easy. The beauty is what happens when you change your app. Say, for example, you decide you don&#8217;t want an edit page for stories, so you remove that action in the controller. The page generators are re-run automatically, and the edit link will disappear from your show-page. You&#8217;ve got the best of both worlds: the ease of learning that you get from generators, and the flexibility to change that Hobo has always had.</p>

<p>I&#8217;m pretty excited about this change. I think it will take the ease of working with Hobo to a whole new level, and we really haven&#8217;t compromised any flexibility.  How&#8217;s that for change we can believe in ;o).</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/09/04/new-in-08-dryml-generators/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hobo 0.8 Released</title>
		<link>http://hobocentral.net/blog/2008/09/03/hobo-08-released/</link>
		<comments>http://hobocentral.net/blog/2008/09/03/hobo-08-released/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 15:05:50 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>Releases</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/09/03/hobo-08-released/</guid>
		<description><![CDATA[I&#8217;ve just tagged v0.8 in the git repo, and released the 0.8 gems on rubyforge.


Change Log


Enjoy!

Expect breaking changes as always (until we get to 1.0 of course), and expect more than normal, because this is a fairly big release.

I&#8217;ve created a page on the github wiki to collect advice for upgrading your existing apps. That [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just tagged v0.8 in the git repo, and released the 0.8 gems on rubyforge.</p>

<ul>
<li><a href="http://hobocentral.net/gems/CHANGES.txt">Change Log</a></li>
</ul>

<p>Enjoy!</p>

<p>Expect breaking changes as always (until we get to 1.0 of course), and expect more than normal, because this is a fairly big release.</p>

<p>I&#8217;ve created a page on the github wiki to collect advice for <a href="http://github.com/tablatom/hobo/wikis/upgrading-to-08">upgrading your existing apps</a>. That page will grow over the next few days, but to get you started, here are the main things you definitely need to do.</p>

<h3>First, Hobo in general:</h3>

<p>Upgrade gem to 1.2 (you don&#8217;t <em>have</em> to do this but it&#8217;s so much faster)</p>

<pre><code>$ gem update --system
</code></pre>

<p>Add the github gem server as a source (so you get <code>will_paginate</code>)</p>

<pre><code>$ gem sources -a http://gems.github.com
</code></pre>

<p>Now you can upgrade Hobo</p>

<pre><code>$ gem update hobo
</code></pre>

<h3>Then, for your app:</h3>

<p>You need to run some generators again. Be careful not to overwrite your code! The &#8216;d&#8217; option to see the differences is useful. You might want (with the user model in particular) to just create a new blank Hobo app with the <code>hobo</code> command and compare the files manually. Run these generators:</p>

<ul>
<li><code>hobo</code></li>
<li><code>hobo_rapid</code></li>
<li><code>hobo_user_model</code></li>
<li><code>hobo_front_controller</code></li>
</ul>

<p>From there, go check out <a href="http://github.com/tablatom/hobo/wikis/upgrading-to-08">the page on the wiki</a></p>

<p>I&#8217;ll follow-up shortly (heh) with a post about what&#8217;s new in 0.8.</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/09/03/hobo-08-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tweeting</title>
		<link>http://hobocentral.net/blog/2008/08/05/tweeting/</link>
		<comments>http://hobocentral.net/blog/2008/08/05/tweeting/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 12:02:10 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>General</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/08/05/tweeting/</guid>
		<description><![CDATA[I finally succumbed


http://twitter.com/tablatom


I&#8217;ll pretty much only be using this to let anyone that&#8217;s interested know what I&#8217;m up to with Hobo at a given time. Don&#8217;t expect to see &#8220;brushing my teeth&#8221; or anything like that : )

This is going to be pretty much write-only, too. I&#8217;m not good with distractions. So apologies in advance [...]]]></description>
			<content:encoded><![CDATA[<p>I finally succumbed</p>

<ul>
<li><a href="http://twitter.com/tablatom">http://twitter.com/tablatom</a></li>
</ul>

<p>I&#8217;ll pretty much only be using this to let anyone that&#8217;s interested know what I&#8217;m up to with Hobo at a given time. Don&#8217;t expect to see &#8220;brushing my teeth&#8221; or anything like that : )</p>

<p>This is going to be pretty much write-only, too. I&#8217;m not good with distractions. So apologies in advance if I don&#8217;t respond to your responses.</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/08/05/tweeting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lighthouse lights up</title>
		<link>http://hobocentral.net/blog/2008/08/05/lighthouse-lights-up/</link>
		<comments>http://hobocentral.net/blog/2008/08/05/lighthouse-lights-up/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 11:26:35 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>General</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/08/05/lighthouse-lights-up/</guid>
		<description><![CDATA[It&#8217;s a funny thing that when someone offers to pay you to work on something, they tend to want to know what you&#8217;re up to. I did tell Owen over at Barquin that I could get the whole thing wrapped up from a beach in St. Tropez and that I&#8217;d be back in three or [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a funny thing that when someone offers to pay you to work on something, they tend to want to know what you&#8217;re up to. I did tell Owen over at Barquin that I could get the whole thing wrapped up from a beach in St. Tropez and that I&#8217;d be back in three or four months, but I could sense that the idea didn&#8217;t go down too well.</p>

<p>So we need a bit more visibility, we need it to be clear where we&#8217;re going and what we need to do to get there. Of course we need this anyway, to make it easier for folk to contribute to the project. We need to blow the cobwebs off our trusty <a href="http://hobo.lighthouseapp.com/projects/8324-hobo">Hobo Lighthouse</a>.</p>

<p><a id="more-203"></a></p>

<p>Tis done! head over there and see how neat and tidy it all is : ) And if you think you&#8217;ll be keeping an eye on the tickets, and maybe even filing your own now and then, be sure to read the <a href="http://hobo.lighthouseapp.com/projects/8324/home">home page</a> which explains how we&#8217;re organising the tickets.</p>

<p>The idea is that we&#8217;ll track pretty much everything as tickets, not just bugs and feature-requests, but bigger to-do items such as testing tasks and documentation that needs to be written. I&#8217;m not sure everything like that is in there right now, but most of it is.</p>

<p>In other news, we&#8217;re long overdue a release. This one is going to be 0.8 because it&#8217;s got some cool new features. I was hoping to get it released this week but that looks a bit doubtful now. I see that I&#8217;ve got 28 open tickets so I better get cracking!</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/08/05/lighthouse-lights-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Good News</title>
		<link>http://hobocentral.net/blog/2008/07/28/good-news/</link>
		<comments>http://hobocentral.net/blog/2008/07/28/good-news/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 08:43:36 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>General</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/07/28/good-news/</guid>
		<description><![CDATA[Oops I did it again. Stopped blogging that is. Hands up who thought this blog had died?

Of course those who wanted to know if the Hobo project itself was still active, if they knew where to look, would have headed over here and would have found things to be very much alive. That&#8217;s all very [...]]]></description>
			<content:encoded><![CDATA[<p>Oops I did it again. Stopped blogging that is. Hands up who thought this blog had died?</p>

<p>Of course those who wanted to know if the Hobo project itself was still active, if they knew where to look, would have headed over <a href="http://github.com/tablatom/hobo/commits/master">here</a> and would have found things to be very much alive. That&#8217;s all very well but I <em>really</em> must start blogging more!</p>

<p>OK where were we? About the time of the last post I was just about to head off to Railsconf with some very interesting news. As often happens in life, and even more often with anything related to software development, things didn&#8217;t quite pan out the way we expected. I do have news though, oh yes, even better news than I had before in fact.</p>

<p>At Railsconf we announced our plan to form the Hobo Foundation, a non-profit organisation to act as a conduit for companies that want to help Hobo succeed, and a way for developers to put some serious time into the project while still paying the rent. The driving force behind the idea was a company over in Washington D.C., <a href="http://barquin.com/">Barquin International</a>, who were to be the initial sponsor. The more we talked to Barquin, the more apparent it became that these guys really wanted to take Hobo seriously. They&#8217;re using Hobo in some very critical projects, the first of which rolls-out next month. To cut a long story short, we&#8217;ve arrived at a perfect solution which gets Hobo very much on track, and gives Barquin a close link with the on-going development: they&#8217;ve contracted me to work on Hobo full-time! The Hobo Foundation lives on in spirit, but for now this is by far the best arrangement for everyone.</p>

<p>That&#8217;s right folks, progress is about to take a big leap forwards. You know what this means don&#8217;t you? It means all those warm and fuzzy things like a solid test suite, lots of documentation, continuing to separate out all the major sub-components like DRYML into their own projects. Good things are coming!</p>

<p>I want to say a big thank-you to the folk at Barquin for supporting open-source and creating this great opportunity for the Hobo project. Barquin does a lot of work for the US Federal Government, and to be honest, this is the very last place I would have looked for a company willing to stick their neck out for some exciting new technology. It turns out Barquin are not your average government contractor. They&#8217;re firm believers in client-centred agile practices, and that approach recently won them (shameless sponsor plug!) the &#8220;Small Business Contractor of the Year Award&#8221; from the US Department of Agriculture.</p>

<p>Here&#8217;s looking forward to really getting stuck in and making Hobo as good as it can be. Maybe I&#8217;ll even find time to blog more :-)</p>

<p>(p.s. In fact I&#8217;ve got a whole load more to tell everyone about, so do expect more posts over the next few days.)</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/07/28/good-news/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ActiveRecord behaviour with associations</title>
		<link>http://hobocentral.net/blog/2008/04/29/activerecord-behaviour-with-associations/</link>
		<comments>http://hobocentral.net/blog/2008/04/29/activerecord-behaviour-with-associations/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 13:36:24 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
		
		<category>Ruby Skills</category>

		<guid isPermaLink="false">http://hobocentral.net/blog/2008/04/29/activerecord-behaviour-with-associations/</guid>
		<description><![CDATA[The interaction between ActiveRecord and the database is very simple when working with a single record - it&#8217;s always pretty clear when the database is going to be changed. What about when you&#8217;re working with multiple records and associations? I did some experiments way back at the start of the Hobo project, but recently I [...]]]></description>
			<content:encoded><![CDATA[<p>The interaction between ActiveRecord and the database is very simple when working with a single record - it&#8217;s always pretty clear when the database is going to be changed. What about when you&#8217;re working with multiple records and associations? I did some experiments way back at the start of the Hobo project, but recently I wanted to check if anything had changed.</p>

<p>So I threw together some simple experiments, and turned on logging in the console. It&#8217;s a bit rough and certainly not exhaustive, but I formatted it in markdown out of habit and then though hey, I should post this, so here it is.</p>

<p>Is this stuff documented somewhere? I never found it if it is. I wonder if most Rails devs know about all this already.</p>

<p>This is all in Rail 2.0.2 BTW.</p>

<p><a id="more-201"></a></p>

<h2>Some simple models</h2>

<pre><code>class Post &lt; ActiveRecord::Base
  has_many :comments
  has_many :categorisations
  has_many :categories, :through =&gt; :categorisations
end

class Comment &lt; ActiveRecord::Base
  belongs_to :post
end

class Category &lt; ActiveRecord::Base
  has_many :categorisations
end

class Categorisation &lt; ActiveRecord::Base
  belongs_to :post
  belongs_to :category
end
</code></pre>

<h2><code>has_many</code> (not through)</h2>

<h3>Assigning to the array on a new record</h3>

<p>New comments are created along with a new post:</p>

<pre><code>&gt;&gt; p = Post.new
=&gt; #&lt;Post id: nil&gt;
&gt;&gt; p.comments = [Comment.new]
=&gt; [#&lt;Comment id: nil, post_id: nil&gt;]
&gt;&gt; p.save
  Post Create (0.000601)   INSERT INTO posts VALUES(NULL)
  Comment Create (0.000195)   INSERT INTO comments ("post_id") VALUES(1)
=&gt; true
</code></pre>

<h3>Appending to the array</h3>

<p>For a post that exists, the appended comments are created immediately:</p>

<pre><code>&gt;&gt; p
=&gt; #&lt;Post id: 1&gt;
&gt;&gt; p.comments &lt;&lt; Comment.new
  Comment Create (0.000481)   INSERT INTO comments ("post_id") VALUES(1)
=&gt; [#&lt;Comment id: 1, post_id: 1&gt;, #&lt;Comment id: 2, post_id: 1&gt;]
</code></pre>

<h3>Assigning to the array on an existing record</h3>

<p>Comments no longer in the array have their foreign_key set to NULL. (I&#8217;d guess this changes if you declare <code>:dependent =&gt; :destroy</code>, but I didn&#8217;t try it)</p>

<pre><code>&gt;&gt; p.comments
=&gt; [#&lt;Comment id: 1, post_id: 1&gt;, #&lt;Comment id: 2, post_id: 1&gt;]
&gt;&gt; p.comments = []
  Comment Update (0.001335)   UPDATE comments SET post_id = NULL WHERE (post_id = 1 AND id IN (1,2))
=&gt; []
</code></pre>

<p>New comments in the array are created immediately:</p>

<pre><code>&gt;&gt; p.comments = [Comment.new]
  Comment Create (0.000504)   INSERT INTO comments ("post_id") VALUES(1)
=&gt; [#&lt;Comment id: 3, post_id: 1&gt;]
</code></pre>

<p>Existing comments have their foreign key set</p>

<pre><code>&gt;&gt; p2 = Post.create
  Post Create (0.000820)   INSERT INTO posts VALUES(NULL)
=&gt; #&lt;Post id: 2&gt;
&gt;&gt; c = p.comments.first
=&gt; #&lt;Comment id: 3, post_id: 1&gt;
&gt;&gt; p2.comments = [c]
  Comment Load (0.000292)   SELECT * FROM comments WHERE (comments.post_id = 2) 
  Comment Update (0.000684)   UPDATE comments SET "post_id" = 2 WHERE "id" = 3
=&gt; [#&lt;Comment id: 3, post_id: 2&gt;]
</code></pre>

<h2><code>belongs_to</code></h2>

<p>When assigning <code>c.post</code> on an existing comment, the change is saved when the comment is saved:</p>

<pre><code>&gt;&gt; c.post == p2
=&gt; true
&gt;&gt; c.post = p
=&gt; #&lt;Post id: 1&gt;
&gt;&gt; c.save
  Comment Update (0.000778)   UPDATE comments SET "post_id" = 1 WHERE "id" = 3
=&gt; true
</code></pre>

<p>When assigning a <code>c.post</code> to a new post, the post is created when the comment is saved:</p>

<pre><code>&gt;&gt; c
=&gt; #&lt;Comment id: 3, post_id: 1&gt;
&gt;&gt; c.post = Post.new
=&gt; #&lt;Post id: nil&gt;
&gt;&gt; c.save
  Post Create (0.000464)   INSERT INTO posts VALUES(NULL)
  Comment Update (0.000148)   UPDATE comments SET "post_id" = 3 WHERE "id" = 3
=&gt; true
</code></pre>

<p>This happens the same way when the comment is new &#8212; both are created together:</p>

<pre><code>&gt;&gt; c = Comment.new
=&gt; #&lt;Comment id: nil, post_id: nil&gt;
&gt;&gt; c.post = Post.new
=&gt; #&lt;Post id: nil&gt;
&gt;&gt; c.save
  Post Create (0.000499)   INSERT INTO posts VALUES(NULL)
  Comment Create (0.000161)   INSERT INTO comments ("post_id") VALUES(4)
=&gt; true
</code></pre>

<h2><code>has_many :through</code></h2>

<h3>Assigning to the array has no effect:</h3>

<p>Assignment to <code>p.categories</code> where <code>p</code> is an existing post:</p>

<pre><code>&gt;&gt; p
=&gt; #&lt;Post id: 1&gt;
&gt;&gt; cat = Category.create
  Category Create (0.000427)   INSERT INTO categories VALUES(NULL)
=&gt; #&lt;Category id: 1&gt;
&gt;&gt; p.categories = [cat]
  Category Load (0.000289)   SELECT categories.* FROM categories INNER JOIN categorisations ON categories.id = categorisations.category_id WHERE ((categorisations.post_id = 1)) 
=&gt; [#&lt;Category id: 1&gt;]
&gt;&gt; p.save
=&gt; true
</code></pre>

<p>Note there were no changes to the categories table.</p>

<p>Assignment to <code>p.categories</code> where <code>p</code> is a new post:</p>

<pre><code>&gt;&gt; p = Post.new
=&gt; #&lt;Post id: nil&gt;
&gt;&gt; p.categories = [cat]
=&gt; [#&lt;Category id: 1&gt;]
&gt;&gt; p.save
  Post Create (0.000513)   INSERT INTO posts VALUES(NULL)
=&gt; true
</code></pre>

<p>Again, nothing happens to the categories table</p>

<h3>Appending to the array does have an effect</h3>

<p>Can&#8217;t append to a has-many-through on a new record:</p>

<pre><code>&gt;&gt; p = Post.new
=&gt; #&lt;Post id: nil&gt;
&gt;&gt; p.categories &lt;&lt; cat
ActiveRecord::HasManyThroughCantAssociateNewRecords: Cannot associate new records through 'Post#categorisations' on '#'. Both records must have an id in order to create the has_many :through record associating them.
</code></pre>

<p>Can append to a has-many-through on an existing record. The joining record is created immediately:</p>

<pre><code>&gt;&gt; p = Post.find(:first)
  Post Load (0.000365)   SELECT * FROM posts LIMIT 1
=&gt; #&lt;Post id: 1&gt;
&gt;&gt; p.categories
  Category Load (0.000294)   SELECT categories.* FROM categories INNER JOIN categorisations ON categories.id = categorisations.category_id WHERE ((categorisations.post_id = 1)) 
=&gt; []
&gt;&gt; p.categories &lt;&lt; cat
  Categorisation Create (0.000479)   INSERT INTO categorisations ("post_id", "category_id") VALUES(1, 1)
=&gt; [#&lt;Category id: 1&gt;]
</code></pre>

<p>But this is not allowed if the category is new:</p>

<pre><code>&gt;&gt; p.categories &lt;&lt; Category.new
ActiveRecord::HasManyThroughCantAssociateNewRecords: Cannot associate new records through 'Post#categorisations' on '#'. Both records must have an id in order to create the has_many :through record associating them.
</code></pre>

<p>Did you learn something?</p>
]]></content:encoded>
			<wfw:commentRss>http://hobocentral.net/blog/2008/04/29/activerecord-behaviour-with-associations/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
