<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2992395479571416441</id><updated>2011-04-21T12:26:11.570-07:00</updated><category term='Rails Apps'/><category term='Please help me'/><category term='Community'/><category term='Movies'/><category term='Getting Started'/><category term='Installation'/><category term='Blogging'/><title type='text'>.NET Newbie on Rails</title><subtitle type='html'>comfort zones are for sleeping</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-5786168013538603745</id><published>2007-09-25T10:45:00.000-07:00</published><updated>2007-09-25T10:48:00.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails Apps'/><title type='text'>Depot App: Heads Down</title><content type='html'>&lt;span style="font-family:arial;"&gt;I really am coding the Depot app.  I promise.  I'm just not blogging about it right now.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This blog is as much for my use as anyone else's, so I fully intend to go back and document my thoughts as I worked through each Depot task.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Stay tuned.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-5786168013538603745?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/5786168013538603745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=5786168013538603745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/5786168013538603745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/5786168013538603745'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/depot-app-heads-down.html' title='Depot App: Heads Down'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-4979690778229088739</id><published>2007-09-20T20:54:00.000-07:00</published><updated>2007-09-20T21:02:22.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails Apps'/><title type='text'>Task A: Mea Culpa</title><content type='html'>&lt;span style="font-family:arial;"&gt;OK, so I got some stuff wrong. Sue me. The point of this blog is to show that a .NET programmer can learn the RoR way of creating web apps. That means I'm learning; that does NOT mean I already know this stuff.&lt;br /&gt;&lt;br /&gt;I had some questions about my Product class, specifically these lines:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="ident"&gt;validates_presence_of&lt;/span&gt; &lt;span class="symbol"&gt;:title&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:description&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:image_url&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_numericality_of&lt;/span&gt; &lt;span class="symbol"&gt;:price&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_uniqueness_of&lt;/span&gt; &lt;span class="symbol"&gt;:title&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_format_of&lt;/span&gt; &lt;span class="symbol"&gt;:image_url&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;                      &lt;span class="symbol"&gt;:with&lt;/span&gt;    &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;%r{&lt;/span&gt;&lt;span class="regex"&gt;&lt;span class="escape"&gt;\.&lt;/span&gt;(gifjpgpng)$&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;                      &lt;span class="symbol"&gt;:message&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;must be a URL for a GIF, JPG, or PNG image&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-family:arial;"&gt;Apparently Ruby likes to call these declarations, and they are executed when the class is instantiated. I'm still guessing about some things: in my head, I'm assuming that these are instance properties whose values get set by the constructor.  Then when the validate() method gets called as the object is saved, it checks the value of these properties as part of the base validate() logic.  Am I anywhere near right on this?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-4979690778229088739?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/4979690778229088739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=4979690778229088739' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/4979690778229088739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/4979690778229088739'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/task-mea-culpa.html' title='Task A: Mea Culpa'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-8039587963262789660</id><published>2007-09-15T17:48:00.000-07:00</published><updated>2007-09-20T20:54:12.176-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails Apps'/><title type='text'>The Depot App: Task A</title><content type='html'>&lt;p&gt;&lt;span style="font-family:arial;"&gt;In the spirit of my last post, I have decided to jump right in, dang the torpedos, and start writing the Depot app that's explained in Chapter 5 of the Hiney Book. As we move through the tutorial, Hiney pretends that we've got some chick sitting beside us telling what she wants (like they always do), and that we have the opportunity to RoR shine as a true Rapid Application Development platform, easily responding to her every whim as she reveals her inmost desires more and more while working through successive iterations. Turns out her inmost desires revolve around selling programming books, so apparently she's an uggo.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;This app needs a maintenance feature for adding, editing, and deleting products in the database - that's the feature that we'll create first, or rather, that's the feature we'll have Rails create for us first. Before we can do that we must create a new Rails app and a database for our product data.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;A while back, I told you guys I found an editor I like for Ruby on Rails programming. Well let me tell you what: RadRails makes what little RoR programming I've done so far dead simple. I won't go far into describing it; the main things I like about it are that it gives me a project-level view of the app I'm creating, formatted and color-coded editing for ruby code files and other types of files for my app, and easy non-console access to the various services I need while I'm creating a Rails app (WEBrick, MySql, etc.). You have to do a little bit of reading to get it set up and ready to use, but you're reading this so I assume you can read help files too. I told it I wanted a new Rails project called depot, and voila!, there it is, ready to start programming.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;The only thing I haven't figured out how to do in RadRails so far is create a new MySql database (I'm sure you can use RadRails for that, I just haven't figured out how). So I brought up a console window and typed this:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;:\&lt;/span&gt;&lt;span class="ident"&gt;rubysandboxdepot&lt;/span&gt;&lt;span class="punct"&gt;&gt;&lt;/span&gt; &lt;span class="ident"&gt;mysql&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;u&lt;/span&gt; &lt;span class="ident"&gt;root&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;p&lt;/span&gt;&lt;br /&gt;&lt;span class="constant"&gt;Enter&lt;/span&gt; &lt;span class="ident"&gt;password&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;********&lt;/span&gt;&lt;br /&gt;&lt;span class="constant"&gt;Welcome&lt;/span&gt; &lt;span class="ident"&gt;to&lt;/span&gt; &lt;span class="ident"&gt;the&lt;/span&gt; &lt;span class="constant"&gt;MySQL&lt;/span&gt; &lt;span class="ident"&gt;monitor&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt; &lt;span class="ident"&gt;Commands&lt;/span&gt; &lt;span class="ident"&gt;end&lt;/span&gt; &lt;span class="ident"&gt;with&lt;/span&gt; &lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="keyword"&gt;or&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;g.&lt;br /&gt;mysql&gt; create database depot_development;&lt;br /&gt;mysql&gt; create database depot_test;&lt;br /&gt;mysql&gt; create database depot_production;&lt;br /&gt;mysql&gt; grant all on depot_development.* to 'root'@'localhost';&lt;br /&gt;mysql&gt; grant all on depot_test.* to 'root'@'localhost';&lt;br /&gt;mysql&gt; grant all on depot_production.* to 'root'@'localhost';&lt;br /&gt;mysql&gt; exit&lt;br /&gt;&lt;br /&gt;&lt;span class="normal"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Then I created a .sql file called schema.sql and saved it to the db folder:&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;&lt;pre&gt;&lt;span class="ident"&gt;drop&lt;/span&gt; &lt;span class="ident"&gt;table&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;exists&lt;/span&gt; &lt;span class="ident"&gt;products&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="ident"&gt;create&lt;/span&gt; &lt;span class="ident"&gt;table&lt;/span&gt; &lt;span class="ident"&gt;products&lt;/span&gt; &lt;span class="punct"&gt;(&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;id&lt;/span&gt; &lt;span class="ident"&gt;int&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt; &lt;span class="ident"&gt;auto_increment&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;title&lt;/span&gt; &lt;span class="ident"&gt;varchar&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="number"&gt;100&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;description&lt;/span&gt; &lt;span class="ident"&gt;text&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;image_url&lt;/span&gt; &lt;span class="ident"&gt;varchar&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="number"&gt;200&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;price&lt;/span&gt; &lt;span class="ident"&gt;decimal&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="number"&gt;10&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;date_available&lt;/span&gt; &lt;span class="ident"&gt;datetime&lt;/span&gt; &lt;span class="keyword"&gt;not&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;primary&lt;/span&gt; &lt;span class="ident"&gt;key&lt;/span&gt; &lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="punct"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Actually, it was a little bit different than this when I first created it, but that's what it looked like at the end of all the iterations for Task A. I won't bore you with the details of the changes. The thing that really struck me was how easy and it is to change things in this environment - instant gratification.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Now to create the Admin feature, all I had to do was go to the generators tab in RadRails and tell it I wanted to generate a scaffold called Product Admin. That got me a "model" file called product.rb, a file to create unit tests for product.rb, and a bunch of views for doing CRUD on Products. I love how Rails assumes you're a big boy, and that you actually intend to write automated tests for your code - I've spent the last couple of years learning about TDD in .Net (among other things), and I'm very impressed that Rails has support for this built right in.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;So now the Product class - &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Product&lt;/span&gt; &lt;span class="punct"&gt;&lt;&lt;/span&gt; &lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Base&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_presence_of&lt;/span&gt; &lt;span class="symbol"&gt;:title&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:description&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:image_url&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_numericality_of&lt;/span&gt; &lt;span class="symbol"&gt;:price&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_uniqueness_of&lt;/span&gt; &lt;span class="symbol"&gt;:title&lt;/span&gt;&lt;br /&gt;  &lt;span class="ident"&gt;validates_format_of&lt;/span&gt; &lt;span class="symbol"&gt;:image_url&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;                      &lt;span class="symbol"&gt;:with&lt;/span&gt;    &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;%r{&lt;/span&gt;&lt;span class="regex"&gt;&lt;span class="escape"&gt;\.&lt;/span&gt;(gif|jpg|png)$&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;                      &lt;span class="symbol"&gt;:message&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;must be a URL for a GIF, JPG, or PNG image&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span class="ident"&gt;protected&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;validate&lt;/span&gt;&lt;br /&gt;    &lt;span class="ident"&gt;errors&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;add&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:price&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;should be positive&lt;/span&gt;&lt;span class="punct"&gt;")&lt;/span&gt; &lt;span class="keyword"&gt;unless&lt;/span&gt; &lt;span class="ident"&gt;price&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;nil?&lt;/span&gt; &lt;span class="punct"&gt;||&lt;/span&gt; &lt;span class="ident"&gt;price&lt;/span&gt; &lt;span class="punct"&gt;&gt;=&lt;/span&gt; &lt;span class="number"&gt;0.01&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.salable_items&lt;/span&gt;&lt;br /&gt;    &lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:all&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;br /&gt;         &lt;span class="symbol"&gt;:conditions&lt;/span&gt; &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;date_available &lt;= now()&lt;/span&gt;&lt;span class="punct"&gt;",&lt;/span&gt;&lt;br /&gt;         &lt;span class="symbol"&gt;:order&lt;/span&gt;      &lt;span class="punct"&gt;=&gt;&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;date_available desc&lt;/span&gt;&lt;span class="punct"&gt;")&lt;/span&gt;&lt;br /&gt;  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;I've got some questions I'm sure will be answered in due time as I learn about Ruby and about ActiveRecord, but for now there are some things that seem strange to me as I approach this from Redmond:&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Where are my properties? How does a Product know what information it needs to keep handy about itself? I imagine this is somewhere in the ActiveRecord pattern.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;All of those validates_* statements at the top of the class are static methods, I think. Are we overriding stuff in the base ActiveRecord class here? I know these things, along with the validate() method at the bottom of the class, are called when a product is saved. But what exactly is the mechanism that executes these methods?&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;The only other stuff we did in Task A was to tidy up the views a little - seems rather like old ASP code, but I'm sure there's a lot more stuff going on here.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-8039587963262789660?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/8039587963262789660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=8039587963262789660' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/8039587963262789660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/8039587963262789660'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/depot-app-task-in-spirit-of-my-last.html' title='The Depot App: Task A'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-2447707158701468304</id><published>2007-09-14T20:49:00.000-07:00</published><updated>2007-09-14T20:50:05.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails Apps'/><title type='text'>Let's Kill Something</title><content type='html'>&lt;p&gt;&lt;span style="font-family:arial;"&gt;I have two large posters hanging above my desk in my den of programming iniquity. One shows a fuzzy kitten dangling precipitously on a clotheswire by his claws, with the caption, "Hang in there!" The other shows two vultures, and one is saying to the other, "To heck with patience! Let's kill something!" I keep them where I can see them because I feel they represent the two sides of the coin that is my personality, the yin and the yang, if you will, of what makes me...well, me.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;You see, I could sit back and wait patiently, obedient to my supposed fate, and hope someone or something comes along to sever my bond of ignominy, whether it be the shame of my own fear and weakness in the face of seemingly insurmountable odds, or my exile to the shadows until the end that approaches us all overtakes some hapless soul, and I receive my carrion feast like crumbs from the table. Patience is indeed a virtue. But it becomes a tether when I know I could throw it to the wind, cast my lot with that impudent vulture, spread my leathery wings to fly off into the night's cold embrace, and eat my fill until the juice runs down my neck.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;I considered the message of both posters this evening as I sat in my dim parlor of digital ephemera, abuzz with the whir of heat sink fans, the clicking of hard drives, and the crackle of Tesla coils. Surrounded by hand-rubbed mahogony wainscot alive with the musk of decades worth of linseed oil, I eased back into my leather chair, and scratched my black jaguar Mr. Tinkles on the chin as he squinted, flattened his ears, and purred his familiar blessing. I took a slow, deliberate swig from my snifter of cognac and gazed deeply into the gems (rubies, ironically!) set deep in the eyesockets of the polished silver death's head mounted atop my ebony cane, as I pondered my decision. And then it came to me:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Let's kill something. Starting with a fuzzy kitten.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-2447707158701468304?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/2447707158701468304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=2447707158701468304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/2447707158701468304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/2447707158701468304'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/lets-kill-something.html' title='Let&apos;s Kill Something'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-3107410221632140988</id><published>2007-09-14T06:32:00.000-07:00</published><updated>2007-09-14T20:52:07.640-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Please help me'/><title type='text'>To whom it may concern</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color:#000000;"&gt;My machine is now back among the living. After re-seating the CMOS battery, and spending some time on the phone with the good people of the Dell support center (yes, you read correctly), I have video again. Among other things, I apparently inadvertently put my flat panel monitor into digital mode last weekend, but my motherboard video out is VGA. Laugh if you must.&lt;/span&gt; &lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Arial;color:navy;"&gt;&lt;span style="font-family:Arial;color:navy;"&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:arial;"&gt;A summary of the “help” I’ve received so far: &lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:arial;"&gt;“Dude, sounds like your motherboard’s fried.” &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:arial;"&gt;“Disconnect everything” &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:arial;"&gt;And my personal favorite, “Buy an iMac.” &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#000000;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;color:navy;"&gt;&lt;span style="font-family:Arial;color:navy;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color:#000000;"&gt;I see how you guys are. Don’t worry, you’ll get yours…&lt;/span&gt; &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-3107410221632140988?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/3107410221632140988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=3107410221632140988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/3107410221632140988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/3107410221632140988'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/to-whom-it-may-concern-my-machine-is.html' title='To whom it may concern'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-7850366453386303517</id><published>2007-09-11T11:04:00.000-07:00</published><updated>2007-09-11T11:14:16.238-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Please help me'/><title type='text'>A tale of woe, and a plea for help</title><content type='html'>Well, the worst has come to pass. I can only assume by your stunned silence that you have already guessed the source of my grief: that’s right, my graphics card on my home machine has died. This tragic event occurred last Thursday evening, and I have been basically without a machine to call my own ever since. For the bereft among you, I will bring the old board into my office tomorrow morning for a proper funeral. Viewing will be from 7:30 to 8:00 AM. In lieu of flowers, it is requested that donations be made to the .Net Newbie on Rails fund (cash only please, no personal checks). Needless to say, this is seriously cutting into my RoR programming and blogging. That ain't living, that's just barely surviving. Like a vampire eking out an existence on the blood of rats and birds he traps in the cemetery.&lt;br /&gt;&lt;br /&gt;The machine in question is a Dell Dimension E521 with onboard video, but I can’t get a video signal from the onboard video, not even during POST. Nothing, nada, zilch (and no, the monitor is not the problem). I got a new card (EVGA 7300 GT) from Fry’s this weekend and tried installing it. Here are the scenarios I’ve tried so far with little or no luck:&lt;br /&gt;&lt;br /&gt;1) Monitor hooked to fried card (well, obviously)&lt;br /&gt;2) Monitor hooked to onboard video, with fried card still installed&lt;br /&gt;3) Monitor hooked to new card&lt;br /&gt;4) Monitor hooked to onboard video, with new card installed&lt;br /&gt;&lt;br /&gt;Scenario #2 worked for a couple of hours on Sunday night, but it stopped working last night before I installed the new card – no idea why. None of the other scenarios has worked at all. Tonight I’ll try taking the new board out and going back to onboard video. Beyond that, I’m clueless as to what to do.&lt;br /&gt;&lt;br /&gt;Here’s where you come in: HELP!!! I welcome any advice on getting this solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-7850366453386303517?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/7850366453386303517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=7850366453386303517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/7850366453386303517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/7850366453386303517'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/tale-of-woe-and-plea-for-help.html' title='A tale of woe, and a plea for help'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-3763460974982117819</id><published>2007-09-11T11:00:00.000-07:00</published><updated>2007-09-11T11:14:30.976-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Austin on Rails meeting</title><content type='html'>Last night I went to the Austin on Rails meeting just for fun (I know, “Dude, you really need to get a life”). Man, this is where all the real nerds are: all hairy, poorly dressed, probably haven’t seen the sun in 3+ weeks, and all crazy smart. There was a lot of love in that room for people with poor grooming and few social skills.&lt;br /&gt;&lt;br /&gt;Cool stuff though. There was a guy there from Amazon presenting AWS, particularly their “infrastructure as a service” stuff. Talked a bit about their Simple Storage Service, which is flexible storage you can access via a webservice priced under a scaled fee-per-use model, as opposed to a subscription for a big chunk of storage you may not ever use. He also quickly covered the Simple Queuing Service – the name says it all.&lt;br /&gt;&lt;br /&gt;Then he went into the Amazon Elastic Computing Cloud service (EC2), which is basically a huge grid of virtual Linux servers that can be spun up dynamically via a webservice, again with a fee-per-service pricing model. This offers a pretty cool solution for apps with limited needs for bursts of scalability, as well as time-bound apps. You can set the servers to spin up on a particular schedule, or you can spin up new servers if your app’s performance characteristics pass some arbitrary threshold you specify. Some cool usages he mentioned were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A company in India is using EC2 to process payroll once a month for several thousand employees. &lt;/li&gt;&lt;li&gt;Stanford Law School uses EC2 to process OCR transcription of millions of old legal documents. &lt;/li&gt;&lt;li&gt;The guy who presented created a time-bound app called ThursDate – a social network that only operates between the hours of 5:00 – 8:00 on Thursday night. The idea is that you have three hours to log on, upload pictures, videos, etc on Thursday night to find a date for Friday night. When the 3-hour session is over, everything disappears, and the app reappears anew next Thursday with no persisted info from the previous session. He has a chron job that spins up an EC2 image at the appropriate time, and the floodgates open.&lt;/li&gt;&lt;/ul&gt;Anyhoo, if none of this sounds remotely interesting, and you can actually get a date, you are to be congratulated: I commend you. However if, like me, you have no social life, these guys could be a pretty good support group: &lt;a title="http://www.austinonrails.org/" href="http://www.austinonrails.org/"&gt;http://www.austinonrails.org/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-3763460974982117819?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/3763460974982117819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=3763460974982117819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/3763460974982117819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/3763460974982117819'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/austin-on-rails-meeting.html' title='Austin on Rails meeting'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-8441912039609476237</id><published>2007-09-03T21:15:00.000-07:00</published><updated>2007-09-03T21:17:40.121-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogging'/><title type='text'>Blogging Code</title><content type='html'>Anybody out there have any tips on blogging code?  I'm finding it more difficult than it should be to intermingle code and regular text, and make the formatting come out anywhere near where I want it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-8441912039609476237?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/8441912039609476237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=8441912039609476237' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/8441912039609476237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/8441912039609476237'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/blogging-code.html' title='Blogging Code'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-5792012574705870095</id><published>2007-09-03T21:02:00.000-07:00</published><updated>2007-09-03T21:21:39.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Getting Started'/><title type='text'>Hello, Rails! Part Deux: Season of the Witch</title><content type='html'>&lt;p&gt;OK, so dynamic-izing the Hello, Rails! app turned out to be a heck of a lot easier than I had assumed it would be. Well, not really - I mean I thought it would be pretty easy, after all this is just a Hello, World app, and RoR is advertised as high-productivity. But it was stinkin' easy, man.&lt;/p&gt;&lt;p&gt;Still in the Hiney book on chapter 4, I messed around with some code they said I should plug in here and there. I wanted to display the current time, plus link some pages together, no big deal. Here's what the code ended up looking like:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;u&gt;say_controller.rb&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class SayController &amp;lt; ApplicationController&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;def hello &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;@time = Time.now &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;end &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;def goodbye &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;end &lt;/p&gt;&lt;p align="left"&gt;&lt;u&gt;hello.rhtml&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier;font-size:85%;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Hello, Rails!&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;Hello from Rails!&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Addition: &amp;lt;%= 1+2 %&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Concatenation: &amp;lt;%= "Chew" + "bacca" %&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Time in one hour: &amp;lt;%= 1.hour.from_now %&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;% 3.times do %&amp;gt;Ho!&amp;lt;br/&amp;gt;&amp;lt;% end %&amp;gt;&lt;br /&gt;Merry Christmas!&lt;br /&gt;&amp;lt;p&amp;gt;It is now &amp;lt;%= @time %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Time to say &amp;lt;%= link_to "GoodBye!!", :action =&amp;gt; "goodbye" %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;goodbye.rhtml&lt;/u&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;html&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;head&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;title&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;See you later!&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;title&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;head&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;body&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;h1&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Goodbye!!&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;h1&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;p&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;It was nice having you here.&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;p&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;p&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Say &lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;color:#808080;"&gt; link_to "Hello!!", :action =&amp;gt; "hello" &lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; again.&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;p&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;body&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:85%;color:#a31515;"&gt;html&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;color:#0000ff;"&gt;&lt;span style="font-family:Courier;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;Now I've got two pages that link to each other through the controller using the link_to helper method. And the hello.rhtml file sits up and does a few interesting little tricks itself. I'll leave it to you to figure out exactly what each line does. Easy, breezy, beautiful, Cover Girl.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;What's next?&lt;/b&gt;&lt;br /&gt;I'm glad you asked. I think I'm going to put down the Hiney book for a few days and focus on learning a bit about Ruby itself. I got a copy of &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.amazon.com/Programming-Ruby-Pragmatic-Programmers-Second/dp/0974514055/ref=pd_bbs_sr_1/102-0064612-7922517?ie=UTF8&amp;s=books&amp;amp;qid=1188878235&amp;sr=8-1"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;the Pickaxe Book&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;, but I'm planning to go through &lt;/span&gt;&lt;a href="http://poignantguide.net/ruby/"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;Why's Poignant Guide to Ruby&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt; first. There's a dude here in town named &lt;/span&gt;&lt;a href="http://www.pettichord.com/"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;Bret Pettichord&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;, and when it comes to Ruby he's a &lt;/span&gt;&lt;a href="http://wm01.allmusic.com/cg/amg.dll?p=amg&amp;amp;sql=33:a9fwxxesld6e"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;major dude&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;. In fact, he was recently awarded a Certificate of Awesomeness by the Awesomeness Awareness Council. Anyway, Bret sez he picks up Why's Poignant Guide and reads through it from time to time. So I figure if he gets something out of it, a guy like me should get a lot out of it. &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-5792012574705870095?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/5792012574705870095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=5792012574705870095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/5792012574705870095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/5792012574705870095'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/hello-rails-part-deux-season-of-witch.html' title='Hello, Rails! Part Deux: Season of the Witch'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-8467482969979681825</id><published>2007-09-01T09:38:00.000-07:00</published><updated>2007-09-01T09:41:44.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Getting Started'/><title type='text'>A good RoR editor</title><content type='html'>Found a good editor for RoR.  It's called &lt;a href="http://www.radrails.org"&gt;RadRails&lt;/a&gt; - they mention it on the &lt;a href="http://www.rubyonrails.org/down"&gt;RoR download page&lt;/a&gt;, down towards the bottom.  Everything is falling into place...&lt;br /&gt;&lt;br /&gt;Now, if I could only find something that would make blogging code a bit easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-8467482969979681825?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/8467482969979681825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=8467482969979681825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/8467482969979681825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/8467482969979681825'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/good-ror-editor.html' title='A good RoR editor'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-1139394522937735229</id><published>2007-09-01T09:15:00.000-07:00</published><updated>2007-09-01T09:36:25.811-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Getting Started'/><title type='text'>Hello, Rails</title><content type='html'>&lt;span style="font-size:130%;"&gt;Well, it's here. The time has finally come for an actual RoR application. And since this is my first RoR application, I will follow the KISS principle: Gene Simmons is the coolest bass player ever. Granted, that's not really saying much. Bass players aren't exactly known for being cool, at least not the white guys anyway (have you seen Geddy Lee?). But I suppose being the coolest out of that crowd makes you worthy of some attention. And Gene always says, "Keep it simple, or I'll kick your Hiney!!" So I'm gonna dance the dance that's been passed down from father to son for generations of programmers: the time-honored Hello, World! app.&lt;br /&gt;&lt;br /&gt;When we last left our intrepid hero, he was pooped. He had just finished successfully installing Ruby, RubyGems, Rails, WEBrick, and MySql, and he had pulled the sample app that ships with RoR up in a browser. There was the press conference, the autograph hounds, the paparazzi... It was quite a day. But now I have to write a real RoR app, and I still don't know anything about Ruby, or how to compile a Ruby program, how to navigate and manipulate the Rails framework, or anything! I don't even know what editor would work best for Ruby programming! Woe is me!&lt;br /&gt;&lt;br /&gt;Never fear - Hiney's here! (Insert fanfare here) That's right, I'm back on the Hiney book (get your mind out of the gutter, Earl), chapter 4. Sez here Rails is an MVC framework. Let's not worry too much about what MVC is right now. Just know that in order to get Hello, Rails! up and running, we only need to worry about the V and the C, the View and the Controller. I want the app to say "Hello, Rails!" I need a view which will display stuff in a browser, and a controller whose job is to wake the view up and tell it what to do. RoR has a ton of stuff already built in to help us build each piece we need in a flash.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Say Controller&lt;/strong&gt;&lt;br /&gt;So back in my command window, in the demo directory, I type this to generate a controller called Say:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;c:\rubysandbox\demo&amp;lt;ruby script/generate controller Say&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;RoR thinks a minute, then spits out all this stuff:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exists app/controllers/ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exists app/helpers/ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create app/views/say &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exists test/functional/ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create app/controllers/say_controller.rb &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create test/functional/say_controller_test.rb &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create app/helpers/say_helper.rb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and then dumps me back out to a command prompt. Looks like it created some directories and files - whooptie-doo. Interesting filenames, though. There's a directory for views, another directory for controllers, the say controller file itself, another file apparently for unit testing the say controller, and something called say_helper.rb. Wonder what that is? Let's look at the controller - since I don't know what editor to really use, I'll just look at it in good ol' Notepad:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:130%;"&gt;class SayController &amp;lt; ApplicationControllerend&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;I think Notepad is choking on some funky whitespace character in there. I think it's really supposed to look like this:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;class SayController &amp;lt; ApplicationController&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;Ruby is a true object oriented programming language. This file contains a class called SayController that inherits all its behavior from another class called ApplicationController, kind of like the way I inherited my father's dainty hands and my mother's patchy facial hair. Thanks to modern medical science though, we don't have to accept nature's atrocities. Let's do some surgery on our class. We need to create an action, which the webserver will use respond to a url somebody types into the browser like this:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://localhost:3000/demo/say/hello"&gt;&lt;span style="font-family:courier new;font-size:130%;"&gt;http://localhost:3000/demo/say/hello&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Urls are a bit different in RoR apps then they are in .NET apps. In .NET apps, a url usually identifies a real physical resource residing somewhere on the webserver. In RoR, everthing in the url above up through and including &lt;/span&gt;&lt;/span&gt;&lt;a href="http://localhost:3000/"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;http://localhost:3000/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt; identifies the application we're trying to interact with. The say/ part identifies our say controller, and the hello part identifies the action we're about to add to the say controller. Here's what the SayController class looks like with the hello action added into it:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;class SayController &amp;lt; ApplicationController&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;def hello&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;I added a method to the SayController class called hello. There's nothing in that method right now, but that's ok. Remember, SayController inherits a lot of behaviour from ApplicationController.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;strong&gt;The hello View&lt;/strong&gt;&lt;br /&gt;A controller without a view doesn't do much. So let's create the hello.rhtml view and save it in the app/views/say directory:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Hello, Rails!&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;Hello from Rails!&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Pretty simple stuff. But what do you want? It's just a Hello, World! app. Remember, notepad likes to hang ".txt" on the end of your filenames. So take a look in the app/views/say directory and make sure that the filename for the view is hello.rhtml.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Putting it all together&lt;/strong&gt;&lt;br /&gt;So here's what will happen: Somebody (probably me) will come along and type &lt;/span&gt;&lt;/span&gt;&lt;a href="http://localhost:3000/say/hello"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;http://localhost:3000/say/hello&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt; into a browser on this computer. Assuming WEBrick is running, RoR will know it needs to look at the demo application and run the hello action on the say controller. The say controller will tell RoR to look in the app/views/say directory for a view called hello.rhtml - notice how all the names of various things are matching up (the say controller and the say views directory, the hello action and the hello.rhtml view, etc). RoR expects files and directories to be in standard locations, and for action and view names to match. When that happens, life is easy. RoR looks in the view directory, grabs hello.rhtml, and spits it back out to the browser.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;First, I have to make sure my webserver is running:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;c:\rubysandbox\demo&gt;ruby script/server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;and then I'll browse to &lt;/span&gt;&lt;/span&gt;&lt;a href="http://localhost:3000/say/hello"&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;http://localhost:3000/say/hello&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt; in Firefox. And whaddaya know, it works!! There it is, "Hello from Rails!" smiling right back at me in the browser!! Awesome.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;strong&gt;Next time&lt;/strong&gt;&lt;br /&gt;So what did we do this time? We learned about controllers and views, we created a controller and a view using RoR standards, and we got a static page we created to come up in the browser. That's good enough for today. Next time, we'll add a bit to Hello, Rails! to make it a bit more dynamic. But not today. I gotta go buy some paint.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-1139394522937735229?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/1139394522937735229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=1139394522937735229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/1139394522937735229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/1139394522937735229'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/09/hello-rails.html' title='Hello, Rails'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-4136881026759718427</id><published>2007-08-30T06:11:00.000-07:00</published><updated>2007-08-31T14:00:41.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Bourne Again</title><content type='html'>Trust me, this list really is about RoR, and my experiences with learning it. But from time to time I stop staring at this screen, and I stare at other screens. I recently went to see the Bourne Ultimatum. Here's my review. First, a plot summary:&lt;br /&gt;&lt;br /&gt;SPOILER ALERT&lt;br /&gt;If you don't want to know what happens in the movie, stop reading now.&lt;br /&gt;&lt;br /&gt;Ok, have you stopped reading now? Here's the summary:&lt;br /&gt;&lt;br /&gt;Jason Bourne gets mad&lt;br /&gt;There's an implausible car chase&lt;br /&gt;Some people get hurt&lt;br /&gt;&lt;br /&gt;My review:&lt;br /&gt;Pretty good.&lt;br /&gt;&lt;br /&gt;Next up in the Bourne series:&lt;br /&gt;The Bourne Proctoscopy&lt;br /&gt;(Matt Damon ain't getting any younger, you know)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-4136881026759718427?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/4136881026759718427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=4136881026759718427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/4136881026759718427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/4136881026759718427'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/08/bourne-again.html' title='Bourne Again'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-3188164543622991852</id><published>2007-08-26T20:08:00.000-07:00</published><updated>2007-08-31T20:11:05.839-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Installation'/><title type='text'>What to do?</title><content type='html'>Everything I'm discussing in this post is available at &lt;a href="http://www.rubyonrails.org/"&gt;http://www.rubyonrails.org/&lt;/a&gt;, but I'll post links to everything in case you're too lazy to click over there yourself. Good goober, it's just one click, you &lt;a href="http://www.realage.com/doctorCenter/YouOnADiet/entry1.aspx"&gt;fat load&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;What have I done so far to get started on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RoR&lt;/span&gt;&lt;/span&gt;? Nothing. Nada. Zip, zero, zilch. I mean it, not a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;dern&lt;/span&gt;&lt;/span&gt; thing. I took like a three-hour nap today, read a chapter of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Taran&lt;/span&gt;&lt;/span&gt; Wanderer by Lloyd Alexander, watched a rerun of America's Funniest Home Videos, and chased after my in-laws' two dogs who are staying with us for the weekend. I love my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;in-laws&lt;/span&gt; dearly, but for some reason our &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;seagrass&lt;/span&gt;&lt;/span&gt; floor coverings tend to make their dogs incontinent. Oh yeah, and I also ate a piece of cake.&lt;br /&gt;&lt;br /&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;RoR&lt;/span&gt; site makes it seem like you just install a couple of things and, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;badda&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;bing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;badda&lt;/span&gt;-boom, you're on the road to fame and fortune. I wonder if getting started with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;RoR&lt;/span&gt;&lt;/span&gt; is really as easy as advertised. Now that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;RoR&lt;/span&gt;&lt;/span&gt; has been around for a while, I feel like I'm coming in a bit late on the conversation. But all the cool kids are doing it, so off to &lt;a href="http://www.rubyonrails.org/down"&gt;the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;RoR&lt;/span&gt;&lt;/span&gt; download page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How do I know I've installed &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;RoR&lt;/span&gt;&lt;/span&gt; correctly?&lt;/strong&gt;&lt;br /&gt;In order to call myself successful in getting a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;RoR&lt;/span&gt;&lt;/span&gt; development environment up and running on my box (a &lt;a href="http://gizmodo.com/gadgets/laptops/another-dell-laptop-catches-fire-a-year-after-all-the-rest-293292.php"&gt;Dell&lt;/a&gt; Dimension E512 running &lt;a href="http://aspnetresources.com/blog/vista_sucks.aspx"&gt;Vista Premium&lt;/a&gt;), I want to see a functioning editor and compiler for Ruby, and an executing Hello World sample app. To get there, I assume I have to install a few things:&lt;br /&gt;&lt;br /&gt;1) &lt;strong&gt;Ruby&lt;/strong&gt; - the language itself.&lt;br /&gt;2) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;RubyGems&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt; - a Ruby 'package manager'.&lt;br /&gt;3) &lt;strong&gt;Rails&lt;/strong&gt; - a Ruby implementation of several really nice patterns, including &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;ActiveRecord&lt;/span&gt;.&lt;br /&gt;4) &lt;strong&gt;Brick&lt;/strong&gt; - a Ruby-based &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;webserver&lt;/span&gt;&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;RoR&lt;/span&gt;&lt;/span&gt; won't run on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;IIS&lt;/span&gt;&lt;/span&gt; or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Cassini&lt;/span&gt;&lt;/span&gt; (as far as I know), so you have to install a different &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;webserver&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;5) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;&lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;MySql&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt; - I don't really have to install this. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;RoR&lt;/span&gt;&lt;/span&gt; will indeed work with MS &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Sql&lt;/span&gt;&lt;/span&gt; Server. But the lion's share of the most readily available documentation centers on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;MySql&lt;/span&gt;&lt;/span&gt;, and it will be much easier later to find a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;web host&lt;/span&gt; for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;RoR&lt;/span&gt;&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;MySql&lt;/span&gt;&lt;/span&gt; rather than &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;RoR&lt;/span&gt;&lt;/span&gt; and MS &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;Sql&lt;/span&gt;&lt;/span&gt; Server. And since this little adventure is about charting new territory and claiming it for myself: Excelsior!!&lt;br /&gt;&lt;br /&gt;There are a few options for getting all this stuff up and running, so I'll follow my typical MO and take the path of least &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_26"&gt;resistance&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ruby and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;RubyGems&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;First I'm gonna use the &lt;a href="http://rubyforge.org/frs/?group_id=167"&gt;One-Click Ruby Installer for Windows&lt;/a&gt;. I used Version 1.8.5 because they told me to on the download page (they came up with this stuff, I figure they must know what they're talking about), the .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;exe&lt;/span&gt;&lt;/span&gt; download. Took all the defaults for installation. It took a few minutes to install, and it installed to c:\Ruby. This took care of items 1) and 2) on my list above.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;br /&gt;And now, I've run into my first problem. To install Rails, the download page says I need to run the following command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gem install rails --include-dependencies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But where do you run it? Do you just open up a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;cmd&lt;/span&gt; window and type that in? As it turns out: yes, you sure do. But then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;RubyGems&lt;/span&gt; starts asking a number of rather personal questions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Install required dependency rake? [&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Yn&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Install required dependency &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;activesupport&lt;/span&gt;? [&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;Yn&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Install required dependency &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;activerecord&lt;/span&gt;? [&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Yn&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;Install required dependency &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;actionpack&lt;/span&gt;? [&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;Yn&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;Install required dependency &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;actionmailer&lt;/span&gt;? [&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Yn&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Install required dependency &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;actionwebservice&lt;/span&gt;? [&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;Yn&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;font-size:130%;"&gt;I answered 'y' to all of these, but it seems a bit odd. I mean, I said 'include-dependencies' in the initial command, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;RubyGems&lt;/span&gt; is telling me these dependencies are required. Why doesn't it just go ahead and install them without asking permission again? Anyway...after a couple of minutes everything seems to be installed. Or, at least, I'm back to a command prompt. An eerie calm as fallen over my computer.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;&lt;strong&gt;Next: the Application or the DBMS?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;The next step the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;RoR&lt;/span&gt; download page tells me to do is to create the application skeleton. That doesn't seem right - I'm pretty sure the stuff I have just installed didn't include the development &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;webserver&lt;/span&gt;, and I'm very sure I haven't installed &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;MySql&lt;/span&gt; yet. So let's get &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;MySql&lt;/span&gt; installed first. I'll download it from &lt;a href="http://dev.mysql.com/"&gt;http://dev.mysql.com/&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;OK, I pulled this guy: mysql-essential-5.0.45-win32.msi down from dev.mysql.com and installed it. Vista didn't really want to let me, but after some arm twisting &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;MySql&lt;/span&gt; is up and running on my box - pretty easy, just run the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;msi&lt;/span&gt; and take the defaults.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;&lt;strong&gt;Now the Sample Application&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;So now I'm back to creating a sample app. rubyonrails.org/down tells me to do this:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:130%;"&gt;rails path/to/your/new/application&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:130%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;cd&lt;/span&gt; path/to/your/new/application&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:130%;"&gt;ruby script/server&lt;/span&gt;&lt;br /&gt;&lt;p&gt;I've got no clue here, so I'm switching over to a &lt;a href="http://www.amazon.com/Agile-Development-Rails-Pragmatic-Programmers/dp/0977616630/ref=pd_bbs_sr_1/102-0064612-7922517?ie=UTF8&amp;s=books&amp;amp;qid=1188268980&amp;amp;sr=8-1"&gt;book &lt;/a&gt;by David &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;Heinemeier&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;Hansson&lt;/span&gt; (his mother calls him "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;Hiney&lt;/span&gt;"). &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;Hiney&lt;/span&gt; says &lt;span style="font-family:courier new;"&gt;rails&lt;/span&gt; is a command-line tool that you use to construct each Rails app you write. According to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;Hiney&lt;/span&gt;, I need to pick out a directory on my machine and use &lt;span style="font-family:courier new;"&gt;rails&lt;/span&gt; to create an app called &lt;span style="font-family:courier new;"&gt;demo&lt;/span&gt;. So I'll make a new directory called c:\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;rubysandbox&lt;/span&gt; and navigate to it in a command shell. &lt;/p&gt;&lt;p&gt;All I have to do to create the app is type &lt;span style="font-family:courier new;"&gt;rails demo&lt;/span&gt;. &lt;span style="font-family:courier new;"&gt;rails&lt;/span&gt; thought about it for a couple of seconds, but then it spit out a bunch of &lt;span style="font-family:courier new;"&gt;create&lt;/span&gt; statements and dumped me back out onto a command prompt. Now when I list the contents of the c:\sandbox\demo there are 14 new directories, plus a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;Rakefile&lt;/span&gt; and a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;README&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;Hiney&lt;/span&gt; says there's a directory in there called &lt;span style="font-family:courier new;"&gt;script&lt;/span&gt;, and it contains a ruby script called &lt;span style="font-family:courier new;"&gt;server&lt;/span&gt;. The server script allegedly starts WEBrick - so I guess we did install the web server after all. Here's how you run it: &lt;span style="font-family:courier new;"&gt;c:\rubysandbox\demo&gt;ruby script/server&lt;/span&gt; . Once I run that, I can point Firefox to &lt;a href="http://localhost:3000/"&gt;http://localhost:3000/&lt;/a&gt;. When I do, I get a nicely formatted message saying: "Welcome aboard You're riding the Rails!"&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Yay me! It worked!!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;At this point I expected balloons and confetti to fall from the ceiling, and maybe a buxom spokesmodel would present me with one of those oversized grand prize checks. I'm kind of glad that didn't happen though. I think my wife would be mad. But let's accentuate the positive: I have successfully installed Ruby on Rails, with MySql as the DBMS. And I have proven to myself that my installation is successful, because I've seen the sample app come up in a browser. Very cool! I still have to get the development tools up and running and create a Hello, World! app, but I'll do that tomorrow.&lt;/p&gt;I'm pooped.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-3188164543622991852?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/3188164543622991852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=3188164543622991852' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/3188164543622991852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/3188164543622991852'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/08/what-to-do.html' title='What to do?'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2992395479571416441.post-5954756522775389589</id><published>2007-08-26T19:15:00.000-07:00</published><updated>2007-08-31T20:02:54.302-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Getting Started'/><title type='text'>Get Started, Start a Fire</title><content type='html'>I'm a .Net programmer. Some programmers say that with embarrassment or downright shame these days, but not me. Now, I'm sure good &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ol&lt;/span&gt;' uncle Bill and crew have engaged in some rather nefarious business practices over the years, but what major U.S. corporation doesn't have a few skeletons in the closet? Hey, programming the Microsoft way has fed my family for years. Frankly, I'm far too self-centered to spend my time developing political opinions about gay skeletons. So I have neither a war to wage nor an axe to grind against Microsoft. I'm fairly &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;satisfied&lt;/span&gt; with the .Net programming &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;opportunities&lt;/span&gt; available to me in the marketplace (that's in Austin, TX, by the way). I'm comfortable creating applications based on the .Net framework, and I will continue doing that professionally.&lt;br /&gt;&lt;br /&gt;So why bother with Ruby on Rails? The simplest answer is: &lt;strong&gt;I want to be a better programmer&lt;/strong&gt;. Like I said, I'm comfortable with .Net. But I readily admit that Microsoft's marketing plan does not necessarily lead programmers to create software using the highest degree of craftsmanship. It's time to be uncomfortable again. Even if I never use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RoR&lt;/span&gt;&lt;/span&gt; professionally, I want to broaden my understanding of my chosen profession.&lt;br /&gt;&lt;br /&gt;I will use every resource available to me to further my education and progress. This includes easily available stuff like &lt;a href="http://www.rubyonrails.org/"&gt;http://www.rubyonrails.org/&lt;/a&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RoR&lt;/span&gt;&lt;/span&gt; books, tons of online samples and tutorials, etc., as well as local resources like the Austin on Rails developer community. Hopefully, I'll be successful enough with my experiments to post some of them online, so that the world might gratefully acknowledge my genius by mailing me hundreds of cards and letters containing their good wishes, offers of moral support and prayers for my progress along this pilgrimage, and small honorariums (cashier's checks only please, no personal checks).&lt;br /&gt;&lt;br /&gt;So here we go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2992395479571416441-5954756522775389589?l=dotnetnewbieonrails.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetnewbieonrails.blogspot.com/feeds/5954756522775389589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2992395479571416441&amp;postID=5954756522775389589' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/5954756522775389589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2992395479571416441/posts/default/5954756522775389589'/><link rel='alternate' type='text/html' href='http://dotnetnewbieonrails.blogspot.com/2007/08/get-started-start-fire.html' title='Get Started, Start a Fire'/><author><name>dalesmithtx</name><uri>http://www.blogger.com/profile/02559663542862282396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
