<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Steve Eichert</title>
    <link>http://iqueryable.com/</link>
    <description />
    <language>en-us</language>
    <copyright>Steve Eichert</copyright>
    <lastBuildDate>Sat, 28 Jun 2008 17:29:38 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>steve.eichert@gmail.com</managingEditor>
    <webMaster>steve.eichert@gmail.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/SteveEichert" type="application/rss+xml" /><item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=1f1e39a5-78d5-4000-90b9-7542d53473e1</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,1f1e39a5-78d5-4000-90b9-7542d53473e1.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,1f1e39a5-78d5-4000-90b9-7542d53473e1.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1f1e39a5-78d5-4000-90b9-7542d53473e1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">For the last week <a href="http://twitter.com/">Twitter</a> has
been mostly unusable.  While it's been possible to "tweet" it hasn't been possible
to view replies, and now you can't see "older" posts.  While twitter hasn't become
a staple in my life yet, I can see with some recent changes in my life me relying
on it, or something similar, for communicating with others.  Twitter has proven
time and time again that it isn't up to the challenge of being a service that we can
rely on for much of anything.  I've given some other services a try to see what
might be able to take the place of twitter, and I'm starting to form an opinion on
what I think may be our best path forward.<br /><br />
I've developed a 6 step plan for removing twitter from our lives.<br /><br />
Step 1: Sign up for <a href="http://www.friendfeed.com/">friendfeed</a>, and add all
the online services you use to your account<br />
Step 2: Sign up for <a href="http://tumblr.com/">tumblr</a> (or some other microblogging
service) where you can post the things you normally post to twitter.  Another
option would be to just use the "share something" feature of friendfeed for what you
normally use twitter for.<br />
Step 3: Take advantage of all the other services friendfeed supports and use those
services for what they're good at.  For links use delicious or magnolia, for
photos use flickr or smugmug, in short use the services that you like the most and
use friendfeed as the central hub where you can view everything you and your friends
are doing online.   <br />
Step 4: Use friendfeed for viewing your "friends" activity stream, and allow it to
become the central place that you communicate with your "friends".<br />
Step 5: If you've become reliant on desktop client for interacting with twitter, download
twirl or AlertThingy and set it up with your friendfeed account.<br />
Step 6: Enjoy life without twitter<br /><br />
Sound good?<p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=1f1e39a5-78d5-4000-90b9-7542d53473e1" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/322141622" height="1" width="1" /></body>
      <title>It's time to give up on Twitter</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,1f1e39a5-78d5-4000-90b9-7542d53473e1.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/322141622/ItsTimeToGiveUpOnTwitter.aspx</link>
      <pubDate>Sat, 28 Jun 2008 17:29:38 GMT</pubDate>
      <description>For the last week &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; has been mostly unusable.&amp;nbsp;
While it's been possible to "tweet" it hasn't been possible to view replies, and now
you can't see "older" posts.&amp;nbsp; While twitter hasn't become a staple in my life
yet, I can see with some recent changes in my life me relying on it, or something
similar, for communicating with others.&amp;nbsp; Twitter has proven time and time again
that it isn't up to the challenge of being a service that we can rely on for much
of anything.&amp;nbsp; I've given some other services a try to see what might be able
to take the place of twitter, and I'm starting to form an opinion on what I think
may be our best path forward.&lt;br&gt;
&lt;br&gt;
I've developed a 6 step plan for removing twitter from our lives.&lt;br&gt;
&lt;br&gt;
Step 1: Sign up for &lt;a href="http://www.friendfeed.com/"&gt;friendfeed&lt;/a&gt;, and add all
the online services you use to your account&lt;br&gt;
Step 2: Sign up for &lt;a href="http://tumblr.com/"&gt;tumblr&lt;/a&gt; (or some other microblogging
service) where you can post the things you normally post to twitter.&amp;nbsp; Another
option would be to just use the "share something" feature of friendfeed for what you
normally use twitter for.&lt;br&gt;
Step 3: Take advantage of all the other services friendfeed supports and use those
services for what they're good at.&amp;nbsp; For links use delicious or magnolia, for
photos use flickr or smugmug, in short use the services that you like the most and
use friendfeed as the central hub where you can view everything you and your friends
are doing online.&amp;nbsp; &amp;nbsp;&lt;br&gt;
Step 4: Use friendfeed for viewing your "friends" activity stream, and allow it to
become the central place that you communicate with your "friends".&lt;br&gt;
Step 5: If you've become reliant on desktop client for interacting with twitter, download
twirl or AlertThingy and set it up with your friendfeed account.&lt;br&gt;
Step 6: Enjoy life without twitter&lt;br&gt;
&lt;br&gt;
Sound good?&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=1f1e39a5-78d5-4000-90b9-7542d53473e1" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,1f1e39a5-78d5-4000-90b9-7542d53473e1.aspx</comments>
      <category>twitter;web</category>
    <feedburner:origLink>http://iqueryable.com/2008/06/28/ItsTimeToGiveUpOnTwitter.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=0b3d7c0d-f493-47b0-a8e2-036333d1e7f4</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,0b3d7c0d-f493-47b0-a8e2-036333d1e7f4.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,0b3d7c0d-f493-47b0-a8e2-036333d1e7f4.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0b3d7c0d-f493-47b0-a8e2-036333d1e7f4</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">I have a small fantasy football related
project that I'm going to be working on that requires access to the full 2008 NFL
Schedule.  I decided to use <a href="http://code.whytheluckystiff.net/hpricot/">Hpricot</a>,
and scrape the <a href="http://sports.espn.go.com/nfl/schedule">schedule from ESPN</a>. 
The CSV file I created with the output from the below script can be found here: <a href="http://iqueryable.com/content/binary/nfl-schedule.csv">nfl-schedule.csv
(11.48 KB)</a>   
<br /><br /><a href="http://iqueryable.com/content/binary/parse_schedule.rb">Download script (parse_schedule.rb)</a><br /><p /><div><pre><span style="color: rgb(64, 128, 128); font-style: italic;">#!ruby</span><span style="color: rgb(0, 128, 0);">require</span><span style="color: rgb(186, 33, 33);">'rubygems'</span><span style="color: rgb(0, 128, 0);">require</span><span style="color: rgb(186, 33, 33);">'hpricot'</span><span style="color: rgb(0, 128, 0);">require</span><span style="color: rgb(186, 33, 33);">'open-uri'</span><span style="color: rgb(0, 128, 0); font-weight: bold;">class</span><span style="color: rgb(0, 0, 255); font-weight: bold;">Game</span><span style="color: rgb(0, 128, 0);">attr_accessor</span><span style="color: rgb(25, 23, 124);">:date</span>, <span style="color: rgb(25, 23, 124);">:week</span>, <span style="color: rgb(25, 23, 124);">:away_team</span>, <span style="color: rgb(25, 23, 124);">:home_team</span>, <span style="color: rgb(25, 23, 124);">:time</span><span style="color: rgb(0, 128, 0); font-weight: bold;">def</span><span style="color: rgb(0, 0, 255);">to_s</span><span style="color: rgb(186, 33, 33);">"</span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@date</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);" /><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@time</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);" /><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@away_team</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);"> at </span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@home_team</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">"</span><span style="color: rgb(0, 128, 0); font-weight: bold;">end</span><span style="color: rgb(0, 128, 0); font-weight: bold;">def</span><span style="color: rgb(0, 0, 255);">to_csv</span><span style="color: rgb(186, 33, 33);">"</span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@week</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">,</span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@date</span><span style="color: rgb(102, 102, 102);">.</span>gsub(<span style="color: rgb(186, 33, 33);">","</span>, <span style="color: rgb(186, 33, 33);">""</span>)<span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">,</span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@time</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">,</span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@away_team</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">,</span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span><span style="color: rgb(25, 23, 124);">@home_team</span><span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">"</span><span style="color: rgb(0, 128, 0); font-weight: bold;">end</span><span style="color: rgb(0, 128, 0); font-weight: bold;">end</span><span style="color: rgb(0, 128, 0); font-weight: bold;">def</span><span style="color: rgb(0, 0, 255);">parse_games</span>(doc)
games <span style="color: rgb(102, 102, 102);">=</span><span style="color: rgb(102, 102, 102);">[]</span> doc<span style="color: rgb(102, 102, 102);">.</span>search(<span style="color: rgb(186, 33, 33);">"//table[@class='tablehead']//tr"</span>)<span style="color: rgb(102, 102, 102);">.</span>each <span style="color: rgb(0, 128, 0); font-weight: bold;">do</span><span style="color: rgb(102, 102, 102);">|</span>tr<span style="color: rgb(102, 102, 102);">|</span><span style="color: rgb(25, 23, 124);">@week</span><span style="color: rgb(102, 102, 102);">=</span> tr<span style="color: rgb(102, 102, 102);">.</span>search(<span style="color: rgb(186, 33, 33);">"/td/a"</span>)<span style="color: rgb(102, 102, 102);">.</span>inner_html <span style="color: rgb(0, 128, 0); font-weight: bold;">if</span>(tr<span style="color: rgb(102, 102, 102);">[</span><span style="color: rgb(25, 23, 124);">:class</span><span style="color: rgb(102, 102, 102);">]</span><span style="color: rgb(102, 102, 102);">==</span><span style="color: rgb(186, 33, 33);">'stathead'</span>) <span style="color: rgb(25, 23, 124);">@date</span><span style="color: rgb(102, 102, 102);">=</span> tr<span style="color: rgb(102, 102, 102);">.</span>at(<span style="color: rgb(186, 33, 33);">"td"</span>)<span style="color: rgb(102, 102, 102);">.</span>inner_html <span style="color: rgb(0, 128, 0); font-weight: bold;">if</span>(tr<span style="color: rgb(102, 102, 102);">[</span><span style="color: rgb(25, 23, 124);">:class</span><span style="color: rgb(102, 102, 102);">]</span><span style="color: rgb(102, 102, 102);">==</span><span style="color: rgb(186, 33, 33);">'colhead'</span>)
teams <span style="color: rgb(102, 102, 102);">=</span><span style="color: rgb(102, 102, 102);">[]</span> tr<span style="color: rgb(102, 102, 102);">.</span>at(<span style="color: rgb(186, 33, 33);">"td"</span>)<span style="color: rgb(102, 102, 102);">.</span>search(<span style="color: rgb(186, 33, 33);">"a"</span>)<span style="color: rgb(102, 102, 102);">.</span>each <span style="color: rgb(0, 128, 0); font-weight: bold;">do</span><span style="color: rgb(102, 102, 102);">|</span>team<span style="color: rgb(102, 102, 102);">|</span> teams <span style="color: rgb(102, 102, 102);">&lt;&lt;</span> team<span style="color: rgb(102, 102, 102);">.</span>inner_html <span style="color: rgb(0, 128, 0); font-weight: bold;">end</span><span style="color: rgb(0, 128, 0); font-weight: bold;">if</span>(teams<span style="color: rgb(102, 102, 102);">.</span>size <span style="color: rgb(102, 102, 102);">==</span><span style="color: rgb(102, 102, 102);">2</span>) <span style="color: rgb(25, 23, 124);">@time</span><span style="color: rgb(102, 102, 102);">=</span> tr<span style="color: rgb(102, 102, 102);">.</span>search(<span style="color: rgb(186, 33, 33);">"td:eq(1)"</span>)<span style="color: rgb(102, 102, 102);">.</span>inner_html
game <span style="color: rgb(102, 102, 102);">=</span><span style="color: rgb(136, 0, 0);">Game</span><span style="color: rgb(102, 102, 102);">.</span>new()
game<span style="color: rgb(102, 102, 102);">.</span>date <span style="color: rgb(102, 102, 102);">=</span><span style="color: rgb(25, 23, 124);">@date</span> game<span style="color: rgb(102, 102, 102);">.</span>week <span style="color: rgb(102, 102, 102);">=</span><span style="color: rgb(25, 23, 124);">@week</span> game<span style="color: rgb(102, 102, 102);">.</span>time <span style="color: rgb(102, 102, 102);">=</span><span style="color: rgb(25, 23, 124);">@time</span> game<span style="color: rgb(102, 102, 102);">.</span>away_team <span style="color: rgb(102, 102, 102);">=</span> teams<span style="color: rgb(102, 102, 102);">[0]</span> game<span style="color: rgb(102, 102, 102);">.</span>home_team <span style="color: rgb(102, 102, 102);">=</span> teams<span style="color: rgb(102, 102, 102);">[1]</span> games <span style="color: rgb(102, 102, 102);">&lt;&lt;</span> game <span style="color: rgb(0, 128, 0); font-weight: bold;">end</span><span style="color: rgb(0, 128, 0); font-weight: bold;">end</span> games <span style="color: rgb(0, 128, 0); font-weight: bold;">end</span> games <span style="color: rgb(102, 102, 102);">=</span> parse_games(<span style="color: rgb(136, 0, 0);">Hpricot</span>(<span style="color: rgb(0, 128, 0);">open</span>(<span style="color: rgb(186, 33, 33);">"http://sports.espn.go.com/nfl/schedule"</span>)))
games<span style="color: rgb(102, 102, 102);">.</span>each <span style="color: rgb(0, 128, 0); font-weight: bold;">do</span><span style="color: rgb(102, 102, 102);">|</span>g<span style="color: rgb(102, 102, 102);">|</span><span style="color: rgb(0, 128, 0);">puts</span> g<span style="color: rgb(102, 102, 102);">.</span>to_csv <span style="color: rgb(0, 128, 0); font-weight: bold;">end</span><span style="color: rgb(0, 128, 0);">puts</span><span style="color: rgb(186, 33, 33);">"Total
games: </span><span style="color: rgb(187, 102, 136); font-weight: bold;">#{</span>games<span style="color: rgb(102, 102, 102);">.</span>size<span style="color: rgb(187, 102, 136); font-weight: bold;">}</span><span style="color: rgb(186, 33, 33);">"</span></pre></div><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=0b3d7c0d-f493-47b0-a8e2-036333d1e7f4" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/296946369" height="1" width="1" /></body>
      <title>2008 NFL Schedule in CSV format courtesy of Hpricot</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,0b3d7c0d-f493-47b0-a8e2-036333d1e7f4.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/296946369/2008NFLScheduleInCSVFormatCourtesyOfHpricot.aspx</link>
      <pubDate>Sat, 24 May 2008 00:35:58 GMT</pubDate>
      <description>I have a small fantasy football related project that I'm going to be working on that requires access to the full 2008 NFL Schedule.&amp;nbsp; I decided to use &lt;a href="http://code.whytheluckystiff.net/hpricot/"&gt;Hpricot&lt;/a&gt;,
and scrape the &lt;a href="http://sports.espn.go.com/nfl/schedule"&gt;schedule from ESPN&lt;/a&gt;.&amp;nbsp;
The CSV file I created with the output from the below script can be found here: &lt;a href="http://iqueryable.com/content/binary/nfl-schedule.csv"&gt;nfl-schedule.csv
(11.48 KB)&lt;/a&gt;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://iqueryable.com/content/binary/parse_schedule.rb"&gt;Download script (parse_schedule.rb)&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span style="color: rgb(64, 128, 128); font-style: italic;"&gt;#!ruby&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;require&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;'rubygems'&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;require&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;'hpricot'&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;require&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;'open-uri'&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;Game&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;attr_accessor&lt;/span&gt; &lt;span style="color: rgb(25, 23, 124);"&gt;:date&lt;/span&gt;, &lt;span style="color: rgb(25, 23, 124);"&gt;:week&lt;/span&gt;, &lt;span style="color: rgb(25, 23, 124);"&gt;:away_team&lt;/span&gt;, &lt;span style="color: rgb(25, 23, 124);"&gt;:home_team&lt;/span&gt;, &lt;span style="color: rgb(25, 23, 124);"&gt;:time&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;to_s&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@date&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt; &lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@time&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt; &lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@away_team&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt; at &lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@home_team&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;"&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;to_csv&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@week&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@date&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;gsub(&lt;span style="color: rgb(186, 33, 33);"&gt;","&lt;/span&gt;, &lt;span style="color: rgb(186, 33, 33);"&gt;""&lt;/span&gt;)&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@time&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@away_team&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;@home_team&lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;"&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;parse_games&lt;/span&gt;(doc)
games &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;[]&lt;/span&gt; doc&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;search(&lt;span style="color: rgb(186, 33, 33);"&gt;"//table[@class='tablehead']//tr"&lt;/span&gt;)&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;each &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;do&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;|&lt;/span&gt;tr&lt;span style="color: rgb(102, 102, 102);"&gt;|&lt;/span&gt; &lt;span style="color: rgb(25, 23, 124);"&gt;@week&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; tr&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;search(&lt;span style="color: rgb(186, 33, 33);"&gt;"/td/a"&lt;/span&gt;)&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;inner_html &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;if&lt;/span&gt;(tr&lt;span style="color: rgb(102, 102, 102);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;:class&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;==&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;'stathead'&lt;/span&gt;) &lt;span style="color: rgb(25, 23, 124);"&gt;@date&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; tr&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;at(&lt;span style="color: rgb(186, 33, 33);"&gt;"td"&lt;/span&gt;)&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;inner_html &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;if&lt;/span&gt;(tr&lt;span style="color: rgb(102, 102, 102);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(25, 23, 124);"&gt;:class&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;==&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;'colhead'&lt;/span&gt;)
teams &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;[]&lt;/span&gt; tr&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;at(&lt;span style="color: rgb(186, 33, 33);"&gt;"td"&lt;/span&gt;)&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;search(&lt;span style="color: rgb(186, 33, 33);"&gt;"a"&lt;/span&gt;)&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;each &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;do&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;|&lt;/span&gt;team&lt;span style="color: rgb(102, 102, 102);"&gt;|&lt;/span&gt; teams &lt;span style="color: rgb(102, 102, 102);"&gt;&amp;lt;&amp;lt;&lt;/span&gt; team&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;inner_html &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;if&lt;/span&gt;(teams&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;size &lt;span style="color: rgb(102, 102, 102);"&gt;==&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;2&lt;/span&gt;) &lt;span style="color: rgb(25, 23, 124);"&gt;@time&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; tr&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;search(&lt;span style="color: rgb(186, 33, 33);"&gt;"td:eq(1)"&lt;/span&gt;)&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;inner_html
game &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(136, 0, 0);"&gt;Game&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;new()
game&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;date &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(25, 23, 124);"&gt;@date&lt;/span&gt; game&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;week &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(25, 23, 124);"&gt;@week&lt;/span&gt; game&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;time &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(25, 23, 124);"&gt;@time&lt;/span&gt; game&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;away_team &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; teams&lt;span style="color: rgb(102, 102, 102);"&gt;[0]&lt;/span&gt; game&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;home_team &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; teams&lt;span style="color: rgb(102, 102, 102);"&gt;[1]&lt;/span&gt; games &lt;span style="color: rgb(102, 102, 102);"&gt;&amp;lt;&amp;lt;&lt;/span&gt; game &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; games &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; games &lt;span style="color: rgb(102, 102, 102);"&gt;=&lt;/span&gt; parse_games(&lt;span style="color: rgb(136, 0, 0);"&gt;Hpricot&lt;/span&gt;(&lt;span style="color: rgb(0, 128, 0);"&gt;open&lt;/span&gt;(&lt;span style="color: rgb(186, 33, 33);"&gt;"http://sports.espn.go.com/nfl/schedule"&lt;/span&gt;)))
games&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;each &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;do&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;|&lt;/span&gt;g&lt;span style="color: rgb(102, 102, 102);"&gt;|&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;puts&lt;/span&gt; g&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;to_csv &lt;span style="color: rgb(0, 128, 0); font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;puts&lt;/span&gt; &lt;span style="color: rgb(186, 33, 33);"&gt;"Total
games: &lt;/span&gt;&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;#{&lt;/span&gt;games&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;size&lt;span style="color: rgb(187, 102, 136); font-weight: bold;"&gt;}&lt;/span&gt;&lt;span style="color: rgb(186, 33, 33);"&gt;"&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=0b3d7c0d-f493-47b0-a8e2-036333d1e7f4" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,0b3d7c0d-f493-47b0-a8e2-036333d1e7f4.aspx</comments>
      <category>ruby</category>
    <feedburner:origLink>http://iqueryable.com/2008/05/24/2008NFLScheduleInCSVFormatCourtesyOfHpricot.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=d593013f-15cb-462d-9d2e-5c0a5e10fd30</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,d593013f-15cb-462d-9d2e-5c0a5e10fd30.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,d593013f-15cb-462d-9d2e-5c0a5e10fd30.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d593013f-15cb-462d-9d2e-5c0a5e10fd30</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Have you ever been shamboozled by the WinForms
designer in Visual Studio?  If you haven't, its likely only because you've never
used it.  Over the last several years I've had many wars with the WinForms designer,
and unfortunately I've lost every single time.  
<br /><br />
Not long ago as I was exploring a couple interesting open source ruby projects, I
came across one that had me longing for something as simple in the .NET world. 
The project was <a href="http://code.whytheluckystiff.net/shoes/">shoes</a>, done
by none other then <a href="http://www.whytheluckystiff.net/">why the lucky stiff</a>. 
For those unfamiliar with shoes, it's website describes it as:<br /><blockquote><i><span class="searchword1">Shoes</span> is a very informal graphics
and windowing toolkit. It's for making regular old apps that run on Windows, Mac OS
X and Linux. It's a blend of my favorite things from the Web, some <span class="searchword0">Ruby</span> style,
and a sprinkling of cross-platform widgets</i>.<br /></blockquote>To give you an idea of how simple shoes makes creating the simplest of
GUI's checkout the following code:<br /><pre>Shoes.app {<br />
button("Press Me") { alert("You pressed me") }<br />
}<br /></pre>
To give you a little more background, shoes uses a ruby "dsl" for describing the layout
of desktop GUI, and under the covers is implemented in C.  Although I wasn't
sure how far I could get, I decided to "implement" shoes using IronRuby for my <a href="http://iqueryable.com/2008/05/20/MakingACaseForIronRubyAtPhillyCodeCamp.aspx">philly
code camp presentation</a>.  My goal was to keep the same ruby syntax for declaring
the layout and controls that make up the screen,  however, instead of using the
backend implementation of shoes I wanted to write my own implementation in IronRuby
by leveraging the interop capabilities between IronRuby and Windows Forms.  After
hacking on it for a few hours a couple nights last week, as well as doing a little
more this past weekend I've been able to get enough of shoes replicated in IronRuby
to create some reasonable apps.  Let's start with a simple "Hello Iron Shoes"
example.  
<br /><pre>require "shoes"<br />
Shoes.app :width =&gt; 450, :height =&gt; 400, :title =&gt; "Hello!" do 
<br />
banner "Hello Iron Shoes"<br />
end</pre><p />
We start with a require statement that includes the shoes.rb file that implements
the shoes "dsl".  Every shoes app starts with a call to Shoes.app that takes
a hash of options.  In this example we specify the width and height of the form
as well as a title.  We then pass a block that contains a simple <font face="Courier New">banner
"Hello Iron Shoes"</font> statement.  Within shoes, all layout and nesting is
done via Ruby blocks.  So everything within the do...end block of Shoes.app is
added as content to the form.  When we run the above using IronRuby we get the
following result.<br /><img src="http://iqueryable.com/content/binary/Picture%201.png" border="0" /><br />
What's you might find particularly interesting is that since <a href="http://www.mono-project.com">Mono</a> just
recently completed their implementation of Windows Forms, and since IronRuby is open
source we get the same cross platform support from our IronRuby implementation as
we get with the real shoes.  We can also add a bit of user interaction by using
an edit_line and button like so:<br /><br /><pre>require "shoes"<br />
Shoes.app :width =&gt; 200, :height =&gt; 200, :title =&gt; "Hello!" do 
<br />
@input = edit_line<br />
button("Say Hello") { alert("Hello #{@input.text}")}<br />
end</pre><img src="http://iqueryable.com/content/binary/Picture%203.png" border="0" /><img src="http://iqueryable.com/content/binary/Picture%202.png" border="0" /><br /><br />
Finally to see some of the other controls that are supported checkout this very beautifully
designed form:<br /><img src="http://iqueryable.com/content/binary/Picture%204.png" border="0" /><br />
The code for this beauty is as follows:<br /><pre>require "shoes"<br />
Shoes.app :width =&gt; 800, :height =&gt; 600, :title =&gt; "IronShoes everything
sample" do 
<br />
flow :width =&gt; 800, :height =&gt; 600 do<br />
stack :width =&gt; 300, :height =&gt; 600 do<br />
link "CLICK ME" do; alert "HEY"; end<br />
link "GOOGLE", :click =&gt; "http://google.com"<br />
image "shoes-logo.png", :click =&gt; "http://code.whytheluckystiff.net/shoes/"<br />
@e = edit_line<br />
banner "Hello Iron Shoes"<br />
para "This is shoes...", strong("and another"), em("and a final one")<br />
button "Foo" do<br />
alert("Hello Foo")<br />
end<br />
button "Bar" do<br />
alert("Hello Bar")<br />
end<br />
button "Get Textbox Value" do<br />
alert(@e.text)<br />
end<br />
edit_box :width =&gt; 200, :height =&gt; 100<br />
end</pre><pre>    stack :width =&gt; 400, :height =&gt; 600 do<br />
  banner "Banner"<br />
title "Title"<br />
subtitle "Subtitle"<br />
tagline "Tagline" 
<br />
caption "Caption"<br />
para "This is some more text"<br />
image "rails.png"<br />
para "Jimmy kissed", strong("Margaret"),<br />
"and I've saved a picture somewhere on",<br />
link("Flickr", :click =&gt; "http://flickr.com")<br />
end<br />
end<br />
end<br /><br /></pre><p>
To checkout the code for my IronRuby implementation of shoes you can <a href="http://iqueryable.com/content/binary/IronRubyDemos.zip">download
the zip file containing my demos from my Code Camp presentation</a>.
</p><p>
Overall, the experience of creating a basic implementation of shoes with IronRuby
was very enjoyable.  While I did run into some problems, for the most part things
went very smoothly.  I created a basic calculator, a very ugly friendfeed client
(since twitter was down), as well as the other basic examples shown here.  
<br /></p><p>
There is still a lot of API's available within shoes I'm not handling, as well as
many things I'm not handling as well as I could so I'll likely continue to hack around
on it a bit.  WPF and Silverlight support would be nice (and very doable) as
well!
</p><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=d593013f-15cb-462d-9d2e-5c0a5e10fd30" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/294268044" height="1" width="1" /></body>
      <title>Creating cross platform GUI's with IronRuby</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,d593013f-15cb-462d-9d2e-5c0a5e10fd30.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/294268044/CreatingCrossPlatformGUIsWithIronRuby.aspx</link>
      <pubDate>Tue, 20 May 2008 01:24:59 GMT</pubDate>
      <description>Have you ever been shamboozled by the WinForms designer in Visual Studio?&amp;nbsp; If you haven't, its likely only because you've never used it.&amp;nbsp; Over the last several years I've had many wars with the WinForms designer, and unfortunately I've lost every single time.&amp;nbsp; &lt;br&gt;
&lt;br&gt;
Not long ago as I was exploring a couple interesting open source ruby projects, I
came across one that had me longing for something as simple in the .NET world.&amp;nbsp;
The project was &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;shoes&lt;/a&gt;, done
by none other then &lt;a href="http://www.whytheluckystiff.net/"&gt;why the lucky stiff&lt;/a&gt;.&amp;nbsp;
For those unfamiliar with shoes, it's website describes it as:&lt;br&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;span class="searchword1"&gt;Shoes&lt;/span&gt; is a very informal graphics
and windowing toolkit. It's for making regular old apps that run on Windows, Mac OS
X and Linux. It's a blend of my favorite things from the Web, some &lt;span class="searchword0"&gt;Ruby&lt;/span&gt; style,
and a sprinkling of cross-platform widgets&lt;/i&gt;.&lt;br&gt;
&lt;/blockquote&gt;To give you an idea of how simple shoes makes creating the simplest of
GUI's checkout the following code:&lt;br&gt;
&lt;pre&gt;Shoes.app {&lt;br&gt;
button("Press Me") { alert("You pressed me") }&lt;br&gt;
}&lt;br&gt;
&lt;/pre&gt;
To give you a little more background, shoes uses a ruby "dsl" for describing the layout
of desktop GUI, and under the covers is implemented in C.&amp;nbsp; Although I wasn't
sure how far I could get, I decided to "implement" shoes using IronRuby for my &lt;a href="http://iqueryable.com/2008/05/20/MakingACaseForIronRubyAtPhillyCodeCamp.aspx"&gt;philly
code camp presentation&lt;/a&gt;.&amp;nbsp; My goal was to keep the same ruby syntax for declaring
the layout and controls that make up the screen,&amp;nbsp; however, instead of using the
backend implementation of shoes I wanted to write my own implementation in IronRuby
by leveraging the interop capabilities between IronRuby and Windows Forms.&amp;nbsp; After
hacking on it for a few hours a couple nights last week, as well as doing a little
more this past weekend I've been able to get enough of shoes replicated in IronRuby
to create some reasonable apps.&amp;nbsp; Let's start with a simple "Hello Iron Shoes"
example.&amp;nbsp; 
&lt;br&gt;
&lt;pre&gt;require "shoes"&lt;br&gt;
Shoes.app :width =&amp;gt; 450, :height =&amp;gt; 400, :title =&amp;gt; "Hello!" do 
&lt;br&gt;
banner "Hello Iron Shoes"&lt;br&gt;
end&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;
We start with a require statement that includes the shoes.rb file that implements
the shoes "dsl".&amp;nbsp; Every shoes app starts with a call to Shoes.app that takes
a hash of options.&amp;nbsp; In this example we specify the width and height of the form
as well as a title.&amp;nbsp; We then pass a block that contains a simple &lt;font face="Courier New"&gt;banner
"Hello Iron Shoes"&lt;/font&gt; statement.&amp;nbsp; Within shoes, all layout and nesting is
done via Ruby blocks.&amp;nbsp; So everything within the do...end block of Shoes.app is
added as content to the form.&amp;nbsp; When we run the above using IronRuby we get the
following result.&lt;br&gt;
&lt;img src="http://iqueryable.com/content/binary/Picture%201.png" border="0"&gt;
&lt;br&gt;
What's you might find particularly interesting is that since &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt; just
recently completed their implementation of Windows Forms, and since IronRuby is open
source we get the same cross platform support from our IronRuby implementation as
we get with the real shoes.&amp;nbsp; We can also add a bit of user interaction by using
an edit_line and button like so:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;require "shoes"&lt;br&gt;
Shoes.app :width =&amp;gt; 200, :height =&amp;gt; 200, :title =&amp;gt; "Hello!" do 
&lt;br&gt;
@input = edit_line&lt;br&gt;
button("Say Hello") { alert("Hello #{@input.text}")}&lt;br&gt;
end&lt;/pre&gt;
&lt;img src="http://iqueryable.com/content/binary/Picture%203.png" border="0"&gt;&lt;img src="http://iqueryable.com/content/binary/Picture%202.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Finally to see some of the other controls that are supported checkout this very beautifully
designed form:&lt;br&gt;
&lt;img src="http://iqueryable.com/content/binary/Picture%204.png" border="0"&gt;
&lt;br&gt;
The code for this beauty is as follows:&lt;br&gt;
&lt;pre&gt;require "shoes"&lt;br&gt;
Shoes.app :width =&amp;gt; 800, :height =&amp;gt; 600, :title =&amp;gt; "IronShoes everything
sample" do 
&lt;br&gt;
flow :width =&amp;gt; 800, :height =&amp;gt; 600 do&lt;br&gt;
stack :width =&amp;gt; 300, :height =&amp;gt; 600 do&lt;br&gt;
link "CLICK ME" do; alert "HEY"; end&lt;br&gt;
link "GOOGLE", :click =&amp;gt; "http://google.com"&lt;br&gt;
image "shoes-logo.png", :click =&amp;gt; "http://code.whytheluckystiff.net/shoes/"&lt;br&gt;
@e = edit_line&lt;br&gt;
banner "Hello Iron Shoes"&lt;br&gt;
para "This is shoes...", strong("and another"), em("and a final one")&lt;br&gt;
button "Foo" do&lt;br&gt;
alert("Hello Foo")&lt;br&gt;
end&lt;br&gt;
button "Bar" do&lt;br&gt;
alert("Hello Bar")&lt;br&gt;
end&lt;br&gt;
button "Get Textbox Value" do&lt;br&gt;
alert(@e.text)&lt;br&gt;
end&lt;br&gt;
edit_box :width =&amp;gt; 200, :height =&amp;gt; 100&lt;br&gt;
end&lt;/pre&gt;
&lt;pre&gt;    stack :width =&amp;gt; 400, :height =&amp;gt; 600 do&lt;br&gt;
&amp;nbsp; banner "Banner"&lt;br&gt;
title "Title"&lt;br&gt;
subtitle "Subtitle"&lt;br&gt;
tagline "Tagline" 
&lt;br&gt;
caption "Caption"&lt;br&gt;
para "This is some more text"&lt;br&gt;
image "rails.png"&lt;br&gt;
para "Jimmy kissed", strong("Margaret"),&lt;br&gt;
"and I've saved a picture somewhere on",&lt;br&gt;
link("Flickr", :click =&amp;gt; "http://flickr.com")&lt;br&gt;
end&lt;br&gt;
end&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
&lt;/pre&gt;
&lt;p&gt;
To checkout the code for my IronRuby implementation of shoes you can &lt;a href="http://iqueryable.com/content/binary/IronRubyDemos.zip"&gt;download
the zip file containing my demos from my Code Camp presentation&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Overall, the experience of creating a basic implementation of shoes with IronRuby
was very enjoyable.&amp;nbsp; While I did run into some problems, for the most part things
went very smoothly.&amp;nbsp; I created a basic calculator, a very ugly friendfeed client
(since twitter was down), as well as the other basic examples shown here.&amp;nbsp; 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
There is still a lot of API's available within shoes I'm not handling, as well as
many things I'm not handling as well as I could so I'll likely continue to hack around
on it a bit.&amp;nbsp; WPF and Silverlight support would be nice (and very doable) as
well!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=d593013f-15cb-462d-9d2e-5c0a5e10fd30" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,d593013f-15cb-462d-9d2e-5c0a5e10fd30.aspx</comments>
      <category>ironruby</category>
    <feedburner:origLink>http://iqueryable.com/2008/05/20/CreatingCrossPlatformGUIsWithIronRuby.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=9b34e48b-6efa-4910-8a73-e352d5674344</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,9b34e48b-6efa-4910-8a73-e352d5674344.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,9b34e48b-6efa-4910-8a73-e352d5674344.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9b34e48b-6efa-4910-8a73-e352d5674344</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">This past weekend I got a chance to present
on <a href="http://www.ironruby.net/">IronRuby</a> at the Philly Code Camp. 
I had a really great time preparing and giving this talk, despite more then a few
hiccups along the way (keynote trouble and computer crash!).  After getting to
talk to a few people afterwards it seems it was well received despite my stumblings.<br /><br />
My primary goal for the presentation was to encourage those in the audience who don't
know Ruby to learn it.  I think Ruby is a great programming language that has
a ton of really compelling use cases.  Additionally, I think the process of learning
Ruby is extremely beneficial and can change the way you think about and write software.<br /><br />
I'm very excited about where the IronRuby project is, and even more so about where
it's headed.  The team is making great strides and getting really close to a
couple milestones that will be very exciting.  We really need to get as many
individuals within the .NET community involved in the IronRuby project as possible
so we can have a kick ass implementation of Ruby that runs on the CLR!<br /><br />
I've attached <a href="http://iqueryable.com/content/binary/IronRuby.pdf">my slides</a> to
this post, but be forewarned that they're not all that useful standalone.  I've
also attached my <a href="http://iqueryable.com/content/binary/IronRubyDemos.zip">sample
code/demos</a>.  I had the most fun putting together <a href="http://iqueryable.com/2008/05/20/CreatingCrossPlatformGUIsWithIronRuby.aspx">my
"shoes" sample</a> which <strike>I'm going to write a follow up post on shortly</strike> I've
written about in my <a href="http://iqueryable.com/2008/05/20/CreatingCrossPlatformGUIsWithIronRuby.aspx">Creating
Cross platform GUI's with IronRuby post</a>.<br /><br /><a href="http://iqueryable.com/content/binary/IronRuby.pdf">Slides</a><br /><a href="http://iqueryable.com/content/binary/IronRubyDemos.zip">Sample Code</a><br /><p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=9b34e48b-6efa-4910-8a73-e352d5674344" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/294268375" height="1" width="1" /></body>
      <title>Making a case for IronRuby at Philly Code Camp</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,9b34e48b-6efa-4910-8a73-e352d5674344.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/294268375/MakingACaseForIronRubyAtPhillyCodeCamp.aspx</link>
      <pubDate>Tue, 20 May 2008 00:52:26 GMT</pubDate>
      <description>This past weekend I got a chance to present on &lt;a href="http://www.ironruby.net/"&gt;IronRuby&lt;/a&gt; at
the Philly Code Camp.&amp;nbsp; I had a really great time preparing and giving this talk,
despite more then a few hiccups along the way (keynote trouble and computer crash!).&amp;nbsp;
After getting to talk to a few people afterwards it seems it was well received despite
my stumblings.&lt;br&gt;
&lt;br&gt;
My primary goal for the presentation was to encourage those in the audience who don't
know Ruby to learn it.&amp;nbsp; I think Ruby is a great programming language that has
a ton of really compelling use cases.&amp;nbsp; Additionally, I think the process of learning
Ruby is extremely beneficial and can change the way you think about and write software.&lt;br&gt;
&lt;br&gt;
I'm very excited about where the IronRuby project is, and even more so about where
it's headed.&amp;nbsp; The team is making great strides and getting really close to a
couple milestones that will be very exciting.&amp;nbsp; We really need to get as many
individuals within the .NET community involved in the IronRuby project as possible
so we can have a kick ass implementation of Ruby that runs on the CLR!&lt;br&gt;
&lt;br&gt;
I've attached &lt;a href="http://iqueryable.com/content/binary/IronRuby.pdf"&gt;my slides&lt;/a&gt; to
this post, but be forewarned that they're not all that useful standalone.&amp;nbsp; I've
also attached my &lt;a href="http://iqueryable.com/content/binary/IronRubyDemos.zip"&gt;sample
code/demos&lt;/a&gt;.&amp;nbsp; I had the most fun putting together &lt;a href="http://iqueryable.com/2008/05/20/CreatingCrossPlatformGUIsWithIronRuby.aspx"&gt;my
"shoes" sample&lt;/a&gt; which &lt;strike&gt;I'm going to write a follow up post on shortly&lt;/strike&gt; I've
written about in my &lt;a href="http://iqueryable.com/2008/05/20/CreatingCrossPlatformGUIsWithIronRuby.aspx"&gt;Creating
Cross platform GUI's with IronRuby post&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://iqueryable.com/content/binary/IronRuby.pdf"&gt;Slides&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://iqueryable.com/content/binary/IronRubyDemos.zip"&gt;Sample Code&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=9b34e48b-6efa-4910-8a73-e352d5674344" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,9b34e48b-6efa-4910-8a73-e352d5674344.aspx</comments>
      <category>ironruby</category>
    <feedburner:origLink>http://iqueryable.com/2008/05/20/MakingACaseForIronRubyAtPhillyCodeCamp.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=f0fcf58d-434b-4057-8006-47be5bf72dd2</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,f0fcf58d-434b-4057-8006-47be5bf72dd2.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,f0fcf58d-434b-4057-8006-47be5bf72dd2.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f0fcf58d-434b-4057-8006-47be5bf72dd2</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">In preparation for my upcoming <a href="http://www.phillydotnet.org/Default.aspx?tabid=709">Code
Camp session on IronRuby</a> I've been hacking around on the <a href="http://rubyforge.org/scm/?group_id=4359">IronRuby
source</a>, as well as on Ruby programs that can run on IronRuby.  One of the
core areas of interest for me concerning IronRuby is in writing specifications for
my .NET applications using Ruby.  While I've been learning Ruby (the real kind)
I've become very fond of the testing libraries they have available, most notably <a href="http://rspec.info/">RSpec</a> and <a href="http://mocha.rubyforge.org/">mocha</a>.  
<br /><br />
Over the last two nights I've been writing some ruby code to test .NET classes written
in C#.  With a few of the hacks I have locally, I've had some pretty good success. 
The following set of specifications verify the behavior of an Account class I've written.<br /><br />
require "../../trunk/tests/ironruby/Util/simple_test.rb"<br />
require "IronRubySamples"<br />
include IronRubySamples<br /><br />
describe "Account" do<br />
    describe "When depositing money into my account" do<br />
        it "should increase my balance by the amount
deposited" do 
<br />
            account = Account.new(10)<br />
            account.Deposit(10)<br />
            account.Balance.should ==
20<br />
        end<br />
    end<br />
                   
            
<br />
    describe "When withdrawing money from my account" do<br />
        it "should decrease my balance by the amount
withdrawn" do<br />
            account = Account.new(100)<br />
            account.Withdraw(50)<br />
            account.Balance.should ==
50<br />
        end<br />
    end<br />
                    
<br />
    describe "When withdrawing money from an account with insufficient
funds" do<br />
        it "should tell me I have insufficient funds"
do<br />
            account = Account.new(30)<br />
            should_raise(InsufficentFundsException)
{ account.Withdraw(50) }<br />
        end<br />
    end<br />
    
<br />
    describe "When making a withdraw that drops my balance below the
minimum" do<br />
        it "should reduce my account by the amount withdrawn
+ the low funds charge amount" do<br />
            account = Account.new(55)<br />
            account.Withdraw(50)<br />
            account.Balance.should ==
4<br />
        end<br />
    end<br />
end<br /><br />
The next step in my quest to test .NET code with IronRuby required me to figure out
how to mock out dependent objects.  I considered several different options. 
My first thought was to try and use "simple mock", however, I quickly realized <a href="http://twitter.com/sbellware/statuses/806031504">via
Scott Bellware</a> that while it worked well on IronRuby libraries it wouldn't fit
my needs.  My next thought was to give <a href="http://code.google.com/p/moq/">Moq</a> a
try.  After downloading Moq, I attempted to run a spec that referenced Moq and
created a Mock&lt;T&gt; instance as shown below:<br /><br />
require "../../trunk/tests/ironruby/Util/simple_test.rb"<br />
require "IronRubySamples"<br />
require "Moq"<br />
include Moq<br />
include IronRubySamples<br /><br />
describe "LoginController" do<br />
    describe "When a user logs in" do<br />
        it "should vallidate credentials with login
service" do 
<br />
            mock = Mock.of(ILoginService).new<br />
            #do expects<br />
            
<br />
            controller = LoginController.new(mock.Object)<br />
            controller.Login("steve",
"****")<br />
        end<br />
    end<br />
end 
<br /><br />
When running this via ir.exe I got an error that "Moq.Mock is not a generic type". 
After poking around a bit I discovered this was due to a <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=20033&amp;group_id=4359&amp;atid=16798">bug
in IronRuby</a>.  Currently IronRuby has problems when there is a generic and
non generic type of the same name within a referenced assembly.  In order to
work around this, I first tried to figure out what needed to be modified in IronRuby,
however, that wasn't very fruitful so I decided to modify the source for Moq to get
around my problem.  After renaming the static Mock class in Moq to MockRetriever,
and hacking around <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=20043&amp;group_id=4359&amp;atid=16798">another
bug</a> in IronRuby related to creating generic types where the type argument is an
interface, I was finally able to get IronRuby to create the Mock&lt;ILoginService&gt;
type:<br /><br />
mock = Mock.of(ILoginService).new<br /><br />
Unfortunately, this led to me to another roadblock.  When setting up expectations
in Moq you do so with lambda expressions such as:<br /><br />
// C#<br />
var mock = new Mock&lt;ILoginService&gt;();<br />
mock.Expect(s =&gt; s.Login("steve", "****"));<br /><br />
While IronRuby has blocks and lambda's it doesn't have a way to express the above
(at least that I know).  I'm going to dig around in the IronRuby source a bit
to see if any ideas pop into my head, but at this point I'm not very hopeful.  
<br /><p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=f0fcf58d-434b-4057-8006-47be5bf72dd2" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/286504279" height="1" width="1" /></body>
      <title>Defeated by IronRuby in my attempts to write tests for my C# code in ruby</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,f0fcf58d-434b-4057-8006-47be5bf72dd2.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/286504279/DefeatedByIronRubyInMyAttemptsToWriteTestsForMyCCodeInRuby.aspx</link>
      <pubDate>Fri, 09 May 2008 01:09:46 GMT</pubDate>
      <description>In preparation for my upcoming &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=709"&gt;Code
Camp session on IronRuby&lt;/a&gt; I've been hacking around on the &lt;a href="http://rubyforge.org/scm/?group_id=4359"&gt;IronRuby
source&lt;/a&gt;, as well as on Ruby programs that can run on IronRuby.&amp;nbsp; One of the
core areas of interest for me concerning IronRuby is in writing specifications for
my .NET applications using Ruby.&amp;nbsp; While I've been learning Ruby (the real kind)
I've become very fond of the testing libraries they have available, most notably &lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt; and &lt;a href="http://mocha.rubyforge.org/"&gt;mocha&lt;/a&gt;.&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
Over the last two nights I've been writing some ruby code to test .NET classes written
in C#.&amp;nbsp; With a few of the hacks I have locally, I've had some pretty good success.&amp;nbsp;
The following set of specifications verify the behavior of an Account class I've written.&lt;br&gt;
&lt;br&gt;
require "../../trunk/tests/ironruby/Util/simple_test.rb"&lt;br&gt;
require "IronRubySamples"&lt;br&gt;
include IronRubySamples&lt;br&gt;
&lt;br&gt;
describe "Account" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe "When depositing money into my account" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it "should increase my balance by the amount
deposited" do 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account = Account.new(10)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account.Deposit(10)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account.Balance.should ==
20&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe "When withdrawing money from my account" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it "should decrease my balance by the amount
withdrawn" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account = Account.new(100)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account.Withdraw(50)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account.Balance.should ==
50&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe "When withdrawing money from an account with insufficient
funds" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it "should tell me I have insufficient funds"
do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account = Account.new(30)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; should_raise(InsufficentFundsException)
{ account.Withdraw(50) }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe "When making a withdraw that drops my balance below the
minimum" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it "should reduce my account by the amount withdrawn
+ the low funds charge amount" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account = Account.new(55)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account.Withdraw(50)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; account.Balance.should ==
4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
The next step in my quest to test .NET code with IronRuby required me to figure out
how to mock out dependent objects.&amp;nbsp; I considered several different options.&amp;nbsp;
My first thought was to try and use "simple mock", however, I quickly realized &lt;a href="http://twitter.com/sbellware/statuses/806031504"&gt;via
Scott Bellware&lt;/a&gt; that while it worked well on IronRuby libraries it wouldn't fit
my needs.&amp;nbsp; My next thought was to give &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; a
try.&amp;nbsp; After downloading Moq, I attempted to run a spec that referenced Moq and
created a Mock&amp;lt;T&amp;gt; instance as shown below:&lt;br&gt;
&lt;br&gt;
require "../../trunk/tests/ironruby/Util/simple_test.rb"&lt;br&gt;
require "IronRubySamples"&lt;br&gt;
require "Moq"&lt;br&gt;
include Moq&lt;br&gt;
include IronRubySamples&lt;br&gt;
&lt;br&gt;
describe "LoginController" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe "When a user logs in" do&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; it "should vallidate credentials with login
service" do 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mock = Mock.of(ILoginService).new&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #do expects&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; controller = LoginController.new(mock.Object)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; controller.Login("steve",
"****")&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br&gt;
end 
&lt;br&gt;
&lt;br&gt;
When running this via ir.exe I got an error that "Moq.Mock is not a generic type".&amp;nbsp;
After poking around a bit I discovered this was due to a &lt;a href="http://rubyforge.org/tracker/index.php?func=detail&amp;amp;aid=20033&amp;amp;group_id=4359&amp;amp;atid=16798"&gt;bug
in IronRuby&lt;/a&gt;.&amp;nbsp; Currently IronRuby has problems when there is a generic and
non generic type of the same name within a referenced assembly.&amp;nbsp; In order to
work around this, I first tried to figure out what needed to be modified in IronRuby,
however, that wasn't very fruitful so I decided to modify the source for Moq to get
around my problem.&amp;nbsp; After renaming the static Mock class in Moq to MockRetriever,
and hacking around &lt;a href="http://rubyforge.org/tracker/index.php?func=detail&amp;amp;aid=20043&amp;amp;group_id=4359&amp;amp;atid=16798"&gt;another
bug&lt;/a&gt; in IronRuby related to creating generic types where the type argument is an
interface, I was finally able to get IronRuby to create the Mock&amp;lt;ILoginService&amp;gt;
type:&lt;br&gt;
&lt;br&gt;
mock = Mock.of(ILoginService).new&lt;br&gt;
&lt;br&gt;
Unfortunately, this led to me to another roadblock.&amp;nbsp; When setting up expectations
in Moq you do so with lambda expressions such as:&lt;br&gt;
&lt;br&gt;
// C#&lt;br&gt;
var mock = new Mock&amp;lt;ILoginService&amp;gt;();&lt;br&gt;
mock.Expect(s =&amp;gt; s.Login("steve", "****"));&lt;br&gt;
&lt;br&gt;
While IronRuby has blocks and lambda's it doesn't have a way to express the above
(at least that I know).&amp;nbsp; I'm going to dig around in the IronRuby source a bit
to see if any ideas pop into my head, but at this point I'm not very hopeful.&amp;nbsp; 
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=f0fcf58d-434b-4057-8006-47be5bf72dd2" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,f0fcf58d-434b-4057-8006-47be5bf72dd2.aspx</comments>
      <category>.net;ironruby;ruby</category>
    <feedburner:origLink>http://iqueryable.com/2008/05/09/DefeatedByIronRubyInMyAttemptsToWriteTestsForMyCCodeInRuby.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=863d922d-6c8a-409f-b9b6-ce630b7d6462</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,863d922d-6c8a-409f-b9b6-ce630b7d6462.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,863d922d-6c8a-409f-b9b6-ce630b7d6462.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=863d922d-6c8a-409f-b9b6-ce630b7d6462</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">As I continue on my quest to get more information
about IronRuby, I figured it was worth figuring out what needs to happen in order
to contribute code back into the project.  The source code for IronRuby is synced
with RubyForge every so often, and patches to the source code can be submitted on
the <a href="http://rubyforge.org/tracker/?atid=16800&amp;group_id=4359&amp;func=browse">RubyForge
project here</a>.  Before making any contributions to IronRuby a contributor
agreement must be electronically signed.  John Lam's post to the IronRuby mailing
list can be found <a href="http://rubyforge.org/pipermail/ironruby-core/2007-September/000005.html">here</a>,
and the actual agreement is available at: <a temp_href="http://www.ironruby.net/contributor.pdf " href="http://www.ironruby.net/contributor.pdf%20">http://www.ironruby.net/contributor.pdf </a><br /><br />
The agreement appears to be pretty staight forward, the main point worth attention
is that you grant Microsoft all rights to the contribution.<i><br /></i><blockquote><i>For good and valuable consideration (including without </i><i>limitation
the opportunity to contribute to the Project), receipt and sufficiency of which is
hereby </i><i>acknowledged, Assignor hereby assigns and agrees to assign to Microsoft
its entire right, title, </i><br /><i>and interest (including all intellectual property rights) in the Contributions</i>.<br /><br /></blockquote>Microsoft then licenses the contribution back to you to do with it as
you wish.<br /><blockquote><i>Microsoft grants You a non-exclusive license under the rights assigned
to Microsoft in Section 3 to use, reproduce, modify, license or otherwise distribute,
and exploit the Contribution as You see fit. </i><br /><br /></blockquote>If you're interested in contributing you need to send an email to ssiadmin
at microsoft.com requesting to be added as a contributor to the IronRuby project. 
I sent an email this morning so I'm not sure what happens next, but I'm assuming the
electronic signing of the contributor agreement will be the next step.<br /><p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=863d922d-6c8a-409f-b9b6-ce630b7d6462" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/274070207" height="1" width="1" /></body>
      <title>Contributing to IronRuby</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,863d922d-6c8a-409f-b9b6-ce630b7d6462.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/274070207/ContributingToIronRuby.aspx</link>
      <pubDate>Sun, 20 Apr 2008 12:31:37 GMT</pubDate>
      <description>As I continue on my quest to get more information about IronRuby, I figured it was worth figuring out what needs to happen in order to contribute code back into the project.&amp;nbsp; The source code for IronRuby is synced with RubyForge every so often, and patches to the source code can be submitted on the &lt;a href="http://rubyforge.org/tracker/?atid=16800&amp;amp;group_id=4359&amp;amp;func=browse"&gt;RubyForge
project here&lt;/a&gt;.&amp;nbsp; Before making any contributions to IronRuby a contributor
agreement must be electronically signed.&amp;nbsp; John Lam's post to the IronRuby mailing
list can be found &lt;a href="http://rubyforge.org/pipermail/ironruby-core/2007-September/000005.html"&gt;here&lt;/a&gt;,
and the actual agreement is available at: &lt;a temp_href="http://www.ironruby.net/contributor.pdf " href="http://www.ironruby.net/contributor.pdf%20"&gt;http://www.ironruby.net/contributor.pdf &lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The agreement appears to be pretty staight forward, the main point worth attention
is that you grant Microsoft all rights to the contribution.&lt;i&gt;
&lt;br&gt;
&lt;/i&gt;&lt;blockquote&gt;&lt;i&gt;For good and valuable consideration (including without &lt;/i&gt;&lt;i&gt;limitation
the opportunity to contribute to the Project), receipt and sufficiency of which is
hereby &lt;/i&gt;&lt;i&gt;acknowledged, Assignor hereby assigns and agrees to assign to Microsoft
its entire right, title, &lt;/i&gt;
&lt;br&gt;
&lt;i&gt;and interest (including all intellectual property rights) in the Contributions&lt;/i&gt;.&lt;br&gt;
&lt;br&gt;
&lt;/blockquote&gt;Microsoft then licenses the contribution back to you to do with it as
you wish.&lt;br&gt;
&lt;blockquote&gt;&lt;i&gt;Microsoft grants You a non-exclusive license under the rights assigned
to Microsoft in Section 3 to use, reproduce, modify, license or otherwise distribute,
and exploit the Contribution as You see fit. &lt;/i&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/blockquote&gt;If you're interested in contributing you need to send an email to ssiadmin
at microsoft.com requesting to be added as a contributor to the IronRuby project.&amp;nbsp;
I sent an email this morning so I'm not sure what happens next, but I'm assuming the
electronic signing of the contributor agreement will be the next step.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=863d922d-6c8a-409f-b9b6-ce630b7d6462" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,863d922d-6c8a-409f-b9b6-ce630b7d6462.aspx</comments>
      <category>ironruby;ruby</category>
    <feedburner:origLink>http://iqueryable.com/2008/04/20/ContributingToIronRuby.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=4052c502-212e-490e-88a4-a8d51a27d3b5</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,4052c502-212e-490e-88a4-a8d51a27d3b5.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,4052c502-212e-490e-88a4-a8d51a27d3b5.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4052c502-212e-490e-88a4-a8d51a27d3b5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I've been digging around <a href="http://www.ironruby.net">IronRuby</a> a
bit lately, checking out the source, the specs, and writing very minimal code into
rbx to see if it works as expected.  Over the next couple weeks I'm going to
try and dig a little deeper into IronRuby in an attempt to get a better feel for where
it is, what I might be able to use it for, as well as to experiment with some ideas
I've had over the last couple months.  
<br /><br />
When I first downloaded IronRuby I did so on my Mac in hopes that I'd be able to cruise
around the source in TextMate, compile with Mono, and avoid having to fire up a VM
whenever I wanted to experiment.  My initial attempts, albiet not very focused,
were a failure.  Fortunately within the last week or two I came across<a href="http://sparcs.kaist.ac.kr/%7Etinuviel/download/IronRuby/HOWTO"> Seo
Sanghyeon's IronRuby on Mono How to</a>.<br /><br />
The first step is to <a href="http://www.go-mono.com/mono-downloads/download.html">download</a> and
install Mono 1.9.  Once you have Mono installed you need checkout the <a href="http://ironruby.rubyforge.org/">IronRuby
source from RubyForge</a> and then download and apply <a href="http://sparcs.kaist.ac.kr/%7Etinuviel/download/IronRuby/patch-mono-r93">this
patch</a> that Seo created.  Finally run: rake compile mono=1 and assuming everything
goes well you'll be greeted with another command prompt which you can use to fire
up rbx (aka IronRuby's irb) and begin experimenting.<br /><pre>svn co http://ironruby.rubyforge.org/svn/trunk ironruby<br />
cd ironruby<br />
patch -p0 &lt; patch-mono-r93<br />
rake compile mono=1<br />
mono build/mono_debug/rbx.exe<br /></pre><p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=4052c502-212e-490e-88a4-a8d51a27d3b5" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/273565621" height="1" width="1" /></body>
      <title>Setting up IronRuby on a Mac with Mono</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,4052c502-212e-490e-88a4-a8d51a27d3b5.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/273565621/SettingUpIronRubyOnAMacWithMono.aspx</link>
      <pubDate>Sat, 19 Apr 2008 13:56:03 GMT</pubDate>
      <description>I've been digging around &lt;a href="http://www.ironruby.net"&gt;IronRuby&lt;/a&gt; a bit lately,
checking out the source, the specs, and writing very minimal code into rbx to see
if it works as expected.&amp;nbsp; Over the next couple weeks I'm going to try and dig
a little deeper into IronRuby in an attempt to get a better feel for where it is,
what I might be able to use it for, as well as to experiment with some ideas I've
had over the last couple months.&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
When I first downloaded IronRuby I did so on my Mac in hopes that I'd be able to cruise
around the source in TextMate, compile with Mono, and avoid having to fire up a VM
whenever I wanted to experiment.&amp;nbsp; My initial attempts, albiet not very focused,
were a failure.&amp;nbsp; Fortunately within the last week or two I came across&lt;a href="http://sparcs.kaist.ac.kr/%7Etinuviel/download/IronRuby/HOWTO"&gt; Seo
Sanghyeon's IronRuby on Mono How to&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
The first step is to &lt;a href="http://www.go-mono.com/mono-downloads/download.html"&gt;download&lt;/a&gt; and
install Mono 1.9.&amp;nbsp; Once you have Mono installed you need checkout the &lt;a href="http://ironruby.rubyforge.org/"&gt;IronRuby
source from RubyForge&lt;/a&gt; and then download and apply &lt;a href="http://sparcs.kaist.ac.kr/%7Etinuviel/download/IronRuby/patch-mono-r93"&gt;this
patch&lt;/a&gt; that Seo created.&amp;nbsp; Finally run: rake compile mono=1 and assuming everything
goes well you'll be greeted with another command prompt which you can use to fire
up rbx (aka IronRuby's irb) and begin experimenting.&lt;br&gt;
&lt;pre&gt;svn co http://ironruby.rubyforge.org/svn/trunk ironruby&lt;br&gt;
cd ironruby&lt;br&gt;
patch -p0 &amp;lt; patch-mono-r93&lt;br&gt;
rake compile mono=1&lt;br&gt;
mono build/mono_debug/rbx.exe&lt;br&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=4052c502-212e-490e-88a4-a8d51a27d3b5" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,4052c502-212e-490e-88a4-a8d51a27d3b5.aspx</comments>
      <category>ruby;ironruby</category>
    <feedburner:origLink>http://iqueryable.com/2008/04/19/SettingUpIronRubyOnAMacWithMono.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=89174ba8-ee05-4d9e-8ca6-0b713bbf72a4</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,89174ba8-ee05-4d9e-8ca6-0b713bbf72a4.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,89174ba8-ee05-4d9e-8ca6-0b713bbf72a4.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=89174ba8-ee05-4d9e-8ca6-0b713bbf72a4</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">A couple nights ago I was up reading blogs
and browsing the web.  I had made my way through all my unread items and was
contemplating hitting the sack when I decided to do one more "r" within google reader
to see if anything new was available.  Surprisingly one new item appeared. 
The one new item was from <a href="http://www.jpboodhoo.com/blog/">Jean-Paul Boodhoo</a>,
and was entitled "<a href="http://www.jpboodhoo.com/blog/TheDreamGiver.aspx">The Dream
Giver</a>".<br /><br />
After reading JP's post I figured I'd drop him a comment since I like reading, and
I like free stuff.  As I went to bed I figured I had a strong chance of being
one of the first three to contact him since I'm pretty sure I was reading his post
while his mouse button was still pressed on the "post" button.  As I thought
about it some more, I realized that I'd actually prefer NOT to win since I would have
picked up the book anyway, and I figured there might be some others who responded
who wouldn't purchase the book if they didn't win a copy from JP.  Not surprisingly
the next day I received a Amazon Gift Certificate from JP to cover the cost of the
book.<br /><br />
When I got home that night I mentioned the above to my wife, and told her that I felt
bad accepting the gift certificate from JP given the circumstances.  She said
I should accept his charity, so that's just what I did.<br /><br />
Over the last two days I made my way through <a href="http://www.amazon.com/gp/product/159052201X?ie=UTF8&amp;tag=steveeichert-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=159052201X">The
Dream Giver</a> by Bruce Wilkinson.  The book starts with a parable about an
Ordinary guy living in a Familiar place who realizes he has a Big Dream.  As
this Ordinary guy thinks about his Big Dream he realizes that he doesn't want to ignore
it any longer.  Thus begins his journey.  <br /><br />
As I read The Dream Giver I started to think a lot about my dreams.  As life
goes by we often lose sight of our dreams, and get caught up in the comforts of life. 
The Dream Giver has me thinking about my dreams again.  I found the story of
Ordinary following his dream, as well as the encouraging words and advice offered
by the author inspiring.  Life is full of obstacles, roadblocks, naysayers, and
will provide you with endless reasons not to follow your dreams.  The Dream Giver
offers hope, encouragement, and guidance.  Following a dream isn't easy. You
can't do it alone.  However, the journey can make you stronger, happier, and
more fulfilled.<br /><br />
Are you ready to begin your journey?<br /><br /><strike>Following in JP's footsteps....the first 3 people to email me with interest
in this book will receive an amazon gift certificate in the amount required to purchase
the book. 
<br /><br /><i>Note: you can email me by clicking on the little envelope in the right hand navigation
of my site.<br /></i></strike><i><br />
Sorry they are all gone!</i><strike><i><br /></i></strike><p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=89174ba8-ee05-4d9e-8ca6-0b713bbf72a4" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/258694795" height="1" width="1" /></body>
      <title>The Dream Giver - are you following your dream?</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,89174ba8-ee05-4d9e-8ca6-0b713bbf72a4.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/258694795/TheDreamGiverAreYouFollowingYourDream.aspx</link>
      <pubDate>Thu, 27 Mar 2008 02:03:14 GMT</pubDate>
      <description>A couple nights ago I was up reading blogs and browsing the web.&amp;nbsp; I had made my way through all my unread items and was contemplating hitting the sack when I decided to do one more "r" within google reader to see if anything new was available.&amp;nbsp; Surprisingly one new item appeared.&amp;nbsp; The one new item was from &lt;a href="http://www.jpboodhoo.com/blog/"&gt;Jean-Paul
Boodhoo&lt;/a&gt;, and was entitled "&lt;a href="http://www.jpboodhoo.com/blog/TheDreamGiver.aspx"&gt;The
Dream Giver&lt;/a&gt;".&lt;br&gt;
&lt;br&gt;
After reading JP's post I figured I'd drop him a comment since I like reading, and
I like free stuff.&amp;nbsp; As I went to bed I figured I had a strong chance of being
one of the first three to contact him since I'm pretty sure I was reading his post
while his mouse button was still pressed on the "post" button.&amp;nbsp; As I thought
about it some more, I realized that I'd actually prefer NOT to win since I would have
picked up the book anyway, and I figured there might be some others who responded
who wouldn't purchase the book if they didn't win a copy from JP.&amp;nbsp; Not surprisingly
the next day I received a Amazon Gift Certificate from JP to cover the cost of the
book.&lt;br&gt;
&lt;br&gt;
When I got home that night I mentioned the above to my wife, and told her that I felt
bad accepting the gift certificate from JP given the circumstances.&amp;nbsp; She said
I should accept his charity, so that's just what I did.&lt;br&gt;
&lt;br&gt;
Over the last two days I made my way through &lt;a href="http://www.amazon.com/gp/product/159052201X?ie=UTF8&amp;amp;tag=steveeichert-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=159052201X"&gt;The
Dream Giver&lt;/a&gt; by Bruce Wilkinson.&amp;nbsp; The book starts with a parable about an
Ordinary guy living in a Familiar place who realizes he has a Big Dream.&amp;nbsp; As
this Ordinary guy thinks about his Big Dream he realizes that he doesn't want to ignore
it any longer.&amp;nbsp; Thus begins his journey. &amp;nbsp;&lt;br&gt;
&lt;br&gt;
As I read The Dream Giver I started to think a lot about my dreams.&amp;nbsp; As life
goes by we often lose sight of our dreams, and get caught up in the comforts of life.&amp;nbsp;
The Dream Giver has me thinking about my dreams again.&amp;nbsp; I found the story of
Ordinary following his dream, as well as the encouraging words and advice offered
by the author inspiring.&amp;nbsp; Life is full of obstacles, roadblocks, naysayers, and
will provide you with endless reasons not to follow your dreams.&amp;nbsp; The Dream Giver
offers hope, encouragement, and guidance.&amp;nbsp; Following a dream isn't easy. You
can't do it alone.&amp;nbsp; However, the journey can make you stronger, happier, and
more fulfilled.&lt;br&gt;
&lt;br&gt;
Are you ready to begin your journey?&lt;br&gt;
&lt;br&gt;
&lt;strike&gt;Following in JP's footsteps....the first 3 people to email me with interest
in this book will receive an amazon gift certificate in the amount required to purchase
the book. 
&lt;br&gt;
&lt;br&gt;
&lt;i&gt;Note: you can email me by clicking on the little envelope in the right hand navigation
of my site.&lt;br&gt;
&lt;/i&gt;&lt;/strike&gt;&lt;i&gt;
&lt;br&gt;
Sorry they are all gone!&lt;/i&gt;&lt;strike&gt;&lt;i&gt;
&lt;br&gt;
&lt;/i&gt;&lt;/strike&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=89174ba8-ee05-4d9e-8ca6-0b713bbf72a4" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,89174ba8-ee05-4d9e-8ca6-0b713bbf72a4.aspx</comments>
      <category>books</category>
    <feedburner:origLink>http://iqueryable.com/2008/03/27/TheDreamGiverAreYouFollowingYourDream.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://iqueryable.com/Trackback.aspx?guid=eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa</trackback:ping>
      <pingback:server>http://iqueryable.com/pingback.aspx</pingback:server>
      <pingback:target>http://iqueryable.com/PermaLink,guid,eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa.aspx</pingback:target>
      <dc:creator>Steve Eichert</dc:creator>
      <wfw:comment>http://iqueryable.com/CommentView,guid,eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa.aspx</wfw:comment>
      <wfw:commentRss>http://iqueryable.com/SyndicationService.asmx/GetEntryCommentsRss?guid=eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">We've been using <a href="http://www.ayende.com/projects/rhino-mocks/downloads.aspx">Rhino
Mocks</a> as our mocking framework for the last year and have had some good success
with it.  Previously, we were writing our mocks by hand, which was a major pain
in the ass.  While Rhino Mocks offers a lot of great features and has aided our
testing efforts in many ways, it has also caused us some pain.  I've recently
been hearing a lot of "buzz" about <a href="http://code.google.com/p/moq/">Moq</a>,
a new mocking framework developed by <a href="http://www.clariusconsulting.net/blogs/kzu/">kzu</a>. 
This morning I read Daniel's "<a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/17/WhydoweneedyetanotherNETmockingframework.aspx">Why
do we need another .NET mocking framework</a>" post and I'm convinced that I need
to give Moq a try.  A lot of the points in his article ring true to me, and make
me wonder if I would prefer Moq over Rhino Mocks.  The interesting thing with
trying a new mocking framework when you're involved in a large project that has already
made a considerable investment in another mocking framework (Rhino Mocks) is how you
go about trying it, and what you do if you prefer it to what we're currently using. 
Ah the joys of software development.<br /><br />
I found the following links on the Moq google code homepage interesting:<br /><ul><li><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/17/WhydoweneedyetanotherNETmockingframework.aspx" rel="nofollow">Why
you will love Moq (with screenshots!)</a></li><li><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/02/02/NewMoqfeaturesformockverificationandcreation.aspx" rel="nofollow">New
Moq features for mock verification and creation</a></li><li><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/27/48594.aspx" rel="nofollow">Mocks:
by-the-book vs practical</a></li><li><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/26/48177.aspx" rel="nofollow">What's
wrong with the Record/Reply/Verify model for mocking frameworks</a></li><li><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/21/StateTestingvsInteractionTesting.aspx" rel="nofollow">State
Testing vs Interaction Testing</a></li><li><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/21/47152.aspx" rel="nofollow">Mocks,
Stubs and Fakes: it's a continuum</a></li></ul><br /><p /><img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/SteveEichert/~4/258308913" height="1" width="1" /></body>
      <title>Mocking with Moq</title>
      <guid isPermaLink="false">http://iqueryable.com/PermaLink,guid,eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa.aspx</guid>
      <link>http://feeds.feedburner.com/~r/SteveEichert/~3/258308913/MockingWithMoq.aspx</link>
      <pubDate>Wed, 26 Mar 2008 12:58:54 GMT</pubDate>
      <description>We've been using &lt;a href="http://www.ayende.com/projects/rhino-mocks/downloads.aspx"&gt;Rhino
Mocks&lt;/a&gt; as our mocking framework for the last year and have had some good success
with it.&amp;nbsp; Previously, we were writing our mocks by hand, which was a major pain
in the ass.&amp;nbsp; While Rhino Mocks offers a lot of great features and has aided our
testing efforts in many ways, it has also caused us some pain.&amp;nbsp; I've recently
been hearing a lot of "buzz" about &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt;,
a new mocking framework developed by &lt;a href="http://www.clariusconsulting.net/blogs/kzu/"&gt;kzu&lt;/a&gt;.&amp;nbsp;
This morning I read Daniel's "&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/17/WhydoweneedyetanotherNETmockingframework.aspx"&gt;Why
do we need another .NET mocking framework&lt;/a&gt;" post and I'm convinced that I need
to give Moq a try.&amp;nbsp; A lot of the points in his article ring true to me, and make
me wonder if I would prefer Moq over Rhino Mocks.&amp;nbsp; The interesting thing with
trying a new mocking framework when you're involved in a large project that has already
made a considerable investment in another mocking framework (Rhino Mocks) is how you
go about trying it, and what you do if you prefer it to what we're currently using.&amp;nbsp;
Ah the joys of software development.&lt;br&gt;
&lt;br&gt;
I found the following links on the Moq google code homepage interesting:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/17/WhydoweneedyetanotherNETmockingframework.aspx" rel="nofollow"&gt;Why
you will love Moq (with screenshots!)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/02/02/NewMoqfeaturesformockverificationandcreation.aspx" rel="nofollow"&gt;New
Moq features for mock verification and creation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/27/48594.aspx" rel="nofollow"&gt;Mocks:
by-the-book vs practical&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/26/48177.aspx" rel="nofollow"&gt;What's
wrong with the Record/Reply/Verify model for mocking frameworks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/21/StateTestingvsInteractionTesting.aspx" rel="nofollow"&gt;State
Testing vs Interaction Testing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/12/21/47152.aspx" rel="nofollow"&gt;Mocks,
Stubs and Fakes: it's a continuum&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://iqueryable.com/aggbug.ashx?id=eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa" /&gt;</description>
      <comments>http://iqueryable.com/CommentView,guid,eb2b7c7e-b74c-4d2b-8991-a6b120e2a1aa.aspx</comments>
      <category>.net;tdd</category>
    <feedburner:origLink>http://iqueryable.com/2008/03/26/MockingWithMoq.aspx</feedburner:origLink></item>
  </channel>
</rss>
