<?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'><id>tag:blogger.com,1999:blog-25093835</id><updated>2009-07-25T13:47:23.469-07:00</updated><title type='text'>Living in code</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-25093835.post-5515750683059307450</id><published>2009-03-04T03:55:00.001-08:00</published><updated>2009-03-04T03:55:57.359-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dead'/><category scheme='http://www.blogger.com/atom/ns#' term='geekswithblogs'/><title type='text'>Geekswithblogs.net</title><content type='html'>&lt;p style="clear: both"&gt;this blog is pretty much dead. I started a new blog over at &lt;a href="http://www.geekswithblogs.net"&gt;geekswithblogs&lt;/a&gt;. &lt;a href="http://geekswithblogs.net/aschepis"&gt;Check it out!&lt;/a&gt; I will probably reproduce some of this content over onto that blog at some point, but i'm doing a decent job of keeping it updated so far :)&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-5515750683059307450?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/5515750683059307450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=5515750683059307450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/5515750683059307450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/5515750683059307450'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2009/03/geekswithblogsnet.html' title='Geekswithblogs.net'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-6453448946840749089</id><published>2007-10-09T17:53:00.000-07:00</published><updated>2007-10-09T17:57:58.954-07:00</updated><title type='text'>nilsimsa</title><content type='html'>&lt;a href="http://ixazon.dynip.com/%7Ecmeclax/nilsimsa.html"&gt;http://ixazon.dynip.com/~cmeclax/nilsimsa.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check this out.  I was pointed towards this the other day by a colleague of mine.  A nilsimsa code is very similar to a hash with one key difference.  The key attribute of a nilsimsa code is that when a small change occurs in the source data, only a small change occurs in the nilsimsa.  This is the opposite of what you'd expect in a good hash function.&lt;br /&gt;&lt;br /&gt;How is this useful?  Well take anti-spam for instance.  Two peices of text that are mostly the same but contain a few minor differences can be detected as being from the same origin with nilsimsa codes.  This way you could have a single code for an email that could detect a whole slew of auto-munged versions of the same mail.&lt;br /&gt;&lt;br /&gt;Challenge to the reader... How else could you use nilsimsa codes?  I can think of some cool applications...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-6453448946840749089?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/6453448946840749089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=6453448946840749089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/6453448946840749089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/6453448946840749089'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2007/10/nilsimsa.html' title='nilsimsa'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-8668423210718638350</id><published>2007-10-07T10:03:00.000-07:00</published><updated>2007-10-07T10:14:01.530-07:00</updated><title type='text'>This past week</title><content type='html'>I spent the past week out of town at an internal developer's conference for work.  I can't tell you how awesome it is to meet people who are passionate about what they do.  I got to meet the best and brightest at the company.  I took it as a tremendous learning opportunity, a chance to network, and also as a challenge to see how far I myself can take myself and just how good I can become.&lt;br /&gt;&lt;br /&gt;Some people write code for a living, but most of the people I met this week would be writing code even if they weren't getting paid for it.   Great stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-8668423210718638350?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/8668423210718638350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=8668423210718638350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/8668423210718638350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/8668423210718638350'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2007/10/this-past-week.html' title='This past week'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-5178149141469459464</id><published>2007-09-22T07:45:00.001-07:00</published><updated>2007-09-22T07:54:22.114-07:00</updated><title type='text'>Back on Track!</title><content type='html'>&lt;a href="http://www.symantec.com/norton360/"&gt;My work&lt;/a&gt; @ &lt;a href="http://www.symantec.com/"&gt;Symantec&lt;/a&gt; is going really well and is incredibly gratifying, but i'm really excited because i'm working on some extra-curricular projects using &lt;a href="http://rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt; again.  My last web development project was a PHP-based mess that I inherited from non-coders who had hacked together a social networking site.  The job was fun, but mostly because of the people, not the technology.  Building site with Rails is almost too easy and on top of it all, its really fun!  I love coding Ruby because it is the only language that I actually guess at syntax and usually end up being right.  Ruby is that intuitive.  Ok, enough gushing.   Here is a list of Rails plugins i'm using in this new project that i love&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://expressica.com/2007/02/06/simple-captcha-released-the-captcha-for-rails-applications/"&gt;SimpleCaptcha&lt;/a&gt; - A really simple, easy to integrate &lt;a href="http://en.wikipedia.org/wiki/Captcha"&gt;CAPTCHA&lt;/a&gt; plugin for Rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids"&gt;acts_as_taggable on Steroids&lt;/a&gt; - make any object taggable&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.juixe.com/techknow/index.php/2006/06/18/acts-as-commentable-plugin/"&gt;acts_as_commentable&lt;/a&gt; - make any object commentable&lt;/li&gt;&lt;li&gt;&lt;a href="http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated"&gt;acts_as_authenticated&lt;/a&gt; - secure authentication on rails&lt;/li&gt;&lt;li&gt;&lt;a href="http://technoweenie.stikipad.com/plugins/show/Acts+as+Attachment"&gt;acts_as_attachment&lt;/a&gt; - file uploads for rails&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-5178149141469459464?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/5178149141469459464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=5178149141469459464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/5178149141469459464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/5178149141469459464'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2007/09/back-on-track.html' title='Back on Track!'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-7514496126112245377</id><published>2007-08-21T18:35:00.001-07:00</published><updated>2007-08-21T18:35:29.065-07:00</updated><title type='text'>Coming up for air!!!</title><content type='html'>Symantec sure is keeping me busy!  coming up for air soon w/ some new content!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-7514496126112245377?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/7514496126112245377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=7514496126112245377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/7514496126112245377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/7514496126112245377'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2007/08/coming-up-for-air.html' title='Coming up for air!!!'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-114600151009839172</id><published>2006-04-25T14:24:00.000-07:00</published><updated>2006-04-25T16:58:46.240-07:00</updated><title type='text'>Python Challenge</title><content type='html'>I recently had the opportunity to learn Python as part of a very short term consulting job I took on.  Having also taken on Ruby recently this was an interesting task and I could spend a whole blog comparing the two (spoiler: I prefer Ruby); but I won't.&lt;br /&gt;&lt;br /&gt;What I want to blog about here is &lt;span style="font-weight: bold;"&gt;way&lt;/span&gt; cooler.  While I was looking up some python syntax I happened upon the &lt;a href="http://www.pythonchallenge.com"&gt;Python Challenge&lt;/a&gt;.  How cool is this!  The python challenge is a game where each level can be solved using a clever or little known bit of Python code.   I decided to take the challenge as a way to hone my newfound python skills.  This is a great way to learn a language and to learn the nuances of a language.  Of course, with my newborn Ruby (and Rails) passion I think we need a Ruby Challenge!  Does one already exist?  I think the python challenge format could pretty much be used but I would suggest one small change:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use the challenge as a tutorial.&lt;/span&gt;  Hear me out.&lt;br /&gt;&lt;br /&gt;The ruby challenge starts with the most simple ruby concepts.  Perhaps a sidebar or section at the top that always displays the ruby keywords, general syntax rules, etc.  Each challenge gets harder.  Eventually they reach a level where they are more puzzle than tutorial and at this point you start to learn the elegances of Ruby.  Problems are formed to be solved by Ruby's unique features.  So you learn Ruby, you learn more Ruby, and then you master Ruby all as part of a game.  Furthermore it would be great to keep track of users and how well they are doing in the challenge so you can have a top 10 board or something.  Millions of thoughts here.  Feedback?&lt;br /&gt;&lt;br /&gt;Nearly every language could use an involved, engaging tutorial/game like this.  This is worthwhile Edutainment.  I would love to work on this as a part time project.  If you're interested in helping me out or you know of something like this that already exists.  adaDONTSMAMMEPLEASEm.schepis@gmail.com or post a comment with contact info.  If you care about privacy you can find a link to my &lt;a href="http://gnupg.org/"&gt;GPG &lt;/a&gt;public key at the bottom of this page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-114600151009839172?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/114600151009839172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=114600151009839172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114600151009839172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114600151009839172'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2006/04/python-challenge.html' title='Python Challenge'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-114440518762673109</id><published>2006-04-07T03:10:00.000-07:00</published><updated>2006-04-07T06:42:11.786-07:00</updated><title type='text'>Rails won't become mainstream?</title><content type='html'>I was surfing digg this morning and came across &lt;a href="http://beust.com/weblog/archives/000382.html"&gt;this blog entry&lt;/a&gt; by entitled "Why Ruby on Rails won't become mainstream."  In it the author (Cedric) points out alot of the _potential_ barriers to Ruby (and Rails) becoming mainstream.  Hold Up!!  Before you let your indignation get the best and take off to rip him a new one please take note of you take this one little peice of information.  He's a Rails lover!  Cedric make's alot of good/valid points but I don't agree with his conclusion and as a VERY recent Ruby on Rails convert perhaps I can contribute a different perspective.  My comments below to his list of reasons&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Cedric says that one barrier is Ruby itself and getting it into the toolbox of the PHP/ASP crowd.  Ruby _DOES_ have some advanced idioms.  I'm still learning Ruby, but I can tell you from experience that I was able to take the Agile Web Development with Rails book and read it, go through the examples and when I was done doing so I was comfortable using Ruby.  I hit the API and language references alot and I'm planning on getting the Pickaxe book but once you start to "get" Ruby (which for me was almost immediately) it is straightforward to use&lt;br /&gt;&lt;br /&gt;2) Cedric thinks that Rails itself will hinder mainstream adoption because it is complex, does alot for you automagically, and is incredibly clever.  He isn't sure that the Web Development community (which, let's remind ourselves, isn't made up entirely of quality, trained software engineers) will ever be ready to embrace the cleverness and magic.  I'm not sure how I feel about this one yet except to say that I think Rails gives developers a better chance of building a product well within a reasonable schedule.  There are fewer pitfalls than starting from scratch w/ PHP or using other frameworks and languages.  Perhaps if we lead by example, they will follow.&lt;br /&gt;&lt;br /&gt;3) The author claims that Rails Still has no credible IDE.  This is the one point where Cedric is just plain wrong.  &lt;a href="http://www.radrails.org/"&gt;RadRails&lt;/a&gt; is an AWESOME Rails plugin for &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;4) Next, fanatacism.  Cedric thinks that the extreme fanatacism of some in the Rails community will hinder Rails.  Now I have to agree here to a certain extent.  We need to stop BASHING people who discount Rails and simply prove them wrong.  Actions speak louder than words!  Build some killing enterprise Rails apps.  &lt;a href="http://duckdown.blogspot.com/2006/03/more-thoughts-on-ruby-and-why-it-isnt.html"&gt;Don't insult James McGovern&lt;/a&gt;, disprove him.  The other danger with the ultra-fanatacism that I've pointed out before is that some people look at Rails as a hammer and everything that can possibly show up in a browser window a nail!  This is dangerous!  Read &lt;a href="http://livingincode.blogspot.com/2006/03/there-is-no-silver-bullet.html"&gt;my "no silver bullets" post&lt;/a&gt; to get my opinion on this.&lt;br /&gt;&lt;br /&gt;5) The author's next point is that by being so great so soon Rails will stifle innovation in the area of Ruby web frameworks and that because Rails is the only game in town Rails itself will be stifled. This NEVER crossed my mind and I think the reason for that is because I lump ALL web development frameworks into the same bucket regardless of language. I think others tend to do this as well. Although it's important to distinguish which languages and frameworks are good for particular types of problems I believe that if somebody does something REALLY cool in one language/framework it tends to make its way into others. Case in point &lt;a href="http://groovy.codehaus.org/Grails"&gt;Grails&lt;/a&gt;, &lt;a href="https://trails.dev.java.net/"&gt;Trails&lt;/a&gt;, &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt;, and &lt;a href="http://perlonrails.org/index.php/Main_Page"&gt;many&lt;/a&gt; &lt;a href="http://subway.python-hosting.com/"&gt;more&lt;/a&gt;. Rails has single handedly reinvigorated the web development platform and infused it with a fresh perspective! In the future Rails may benefit from the same effect caused by another framework&lt;br /&gt;&lt;br /&gt;6) Next Cedric points out that Rails' &lt;span style="font-size:100%;"&gt;Enterprise capabilities and scalability unclear.  This is a common concern and one that needs to be put to rest.  The Rails community needs to nail down the sweetspot of Rails once and for all in a mathematical way.  Can a Rails app handle the type of traffic that &lt;a href="http://slashdot.org"&gt;slashdot&lt;/a&gt; and &lt;a href="http://www.digg.com"&gt;digg&lt;/a&gt; see everyday?  If we built a peopleSoft type HR app for a company intranet with Rails could it scale when there are thousands of users worldwide constantly coming in and out and the server is seeing hundreds of transactions per second?  I have no idea. Let's find out where Rails breaking point is (if there is one... I have no clue.)&lt;br /&gt;&lt;br /&gt;7) Cedric's final point is &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Lack of support from Internet Providers.  On this one I'm sort of in the "If you build it, they will come" mentality.  Has PHP always enjoyed mainstream Internet Provider support?  Maybe in the short term we're going to have to host our own servers or get dedicated servers but there is already a &lt;a href="http://wiki.rubyonrails.com/rails/pages/RailsWebHosts"&gt;slew&lt;/a&gt;&lt;a href="http://wiki.rubyonrails.com/rails/pages/RailsWebHosts"&gt; of providers&lt;/a&gt; with support for rails hosting.&lt;br /&gt;&lt;br /&gt;Wow, a long retort!  In closing I guess I should thank Cedric for starting this conversation from the perspective of a Rails supporter!  The debate that will follow will surely be beneficial for the community.&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/25093835-114440518762673109?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/114440518762673109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=114440518762673109' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114440518762673109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114440518762673109'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2006/04/rails-wont-become-mainstream.html' title='Rails won&apos;t become mainstream?'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-114424599202948854</id><published>2006-04-05T06:53:00.000-07:00</published><updated>2006-04-05T07:52:12.746-07:00</updated><title type='text'>Killer code snippet!</title><content type='html'>&lt;span style="font-size:100%;"&gt;This is straight out of &lt;a href="http://www.pragmaticprogrammer.com/title/rails/"&gt;Agile Web Development with Rails&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;class Customer &lt;&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  has_many :orders&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  has_one :most_recent_order,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          :class_name =&gt; 'Order',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          :order =&gt; 'created_at DESC'&lt;br /&gt;e&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;nd&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; God damn this is beautiful!  And powerful!  The point is that the equivalent of this in other popular scripting languages used for building web apps includes you typing something like (pardon my horrendous psuedo code):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;query = 'SELECT o.* FROM orders as o, customers as c WHERE o.customer_id = c.id ORDER BY created_at DESC LIMIT 1'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;result = execute_query()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;row = get_row(result)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// do something with the data.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Whether you do it in your php code, or a stored procedure you're still typing a messy SQL statement for something that should be simple.  In Rails (or Ruby using ActiveRecord) you can simply do this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;customer = Customer.find(17)  # get customer by id&lt;br /&gt;puts "your last order was for #{number_to_currency(customer.most_recent_order)}"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And best of all, ZERO config.   The ability to infer objects based on the schema of the underlying database is powerful.  To then be able to define relationships that transcend that schema and fall into the realm of business logic (such as "your last order" and "orders pending shipment")&lt;/span&gt;&lt;span style="font-size:100%;"&gt; at the model level &lt;/span&gt;&lt;span style="font-size:100%;"&gt; is incredibly powerful particularly considering the amount of code you have to write.  This is a great example of Rails allowing you to assist you in solving your problems as opposed to other frameworks that get in your way.&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/25093835-114424599202948854?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/114424599202948854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=114424599202948854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114424599202948854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114424599202948854'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2006/04/killer-code-snippet.html' title='Killer code snippet!'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-25093835.post-114383783962595804</id><published>2006-03-31T10:50:00.000-08:00</published><updated>2006-04-04T18:06:22.846-07:00</updated><title type='text'>There is no silver bullet...</title><content type='html'>If you care about software engineering as a practice, and you care about being a g{ood,reat} software engineer then you have probably read &lt;a href="http://www-inst.eecs.berkeley.edu/%7Emaratb/readings/NoSilverBullet.html"&gt;Fred Brooks' seminal article&lt;/a&gt; on solving the essence of software engineering problems.  This article was written in 1987 and as I was reading it over again this afternoon it was as fresh to me as when I read it in college (&lt;a href="http://www.ProfessorWerner.com"&gt;thanks Professor Werner&lt;/a&gt;) in 2001, and still as fresh as it must have been in 1987.  To put this into perspective, in 1987 I was 6 years old and &lt;a href="http://www.computerhope.com/history/198090.htm"&gt;Microsoft released Windows 2.0&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That being said, the reason I was re-reading this article is because the other night I finally got a chance to spend some real time with &lt;a href="http://www.rubyonrails.com"&gt;Ruby on Rails&lt;/a&gt;.  I, as most people I have talked to, was blown away when I "got it."  Rails makes writing database backed web applications simple, straightforward, and alot of fun.  I hope it stays this way.  In my opinion the worst thing that could happen to Rails is for people to start looking at it as a hammer and every project they get put on a nail because, as Fred Brooks has pointed out, there is no silver bullet and there isn't likely to be one anytime soon.&lt;br /&gt;&lt;br /&gt;Rails can't/won't slay the Werewolf that is software projects but it is pretty adept at slaying one particular kind of beast. Rails is not &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;the "silver bullet" but for database backed web applications (with AJAX, I might add) it is &lt;span style="font-weight: bold;"&gt;golden&lt;/span&gt;. Writing software is more like taking on every mythical beast known to man than it is like slaying a werewolf.  So we could say that DB backed web apps are vampires, and Rails is the wooden stake that we can drive into its heart.  I think that's a fitting analogy for Rails because it does go straight to the heart of the problem you're trying to solve.  It's a little peice of our software engineering arsenal to be used in specific situations.  Kind of like how nearly every boss monster in nearly every single video game I played growing up, and I played quite a few, had a particular weakness that I could exploit to achieve victory.&lt;br /&gt;&lt;br /&gt;As software engineers the sooner we stop looking at all software engineering projects the same way the better off we'll be.  I'm not the first one to say these things.  We have to be actively on the lookout for more wooden stakes.  More weapons for our arsenal.  As creators we need to identify the applications we build time and time again and create frameworks like Rails to help us slay those beasts because if you've used Rails you know that when your project falls into the Rails sweet spot you've got a good opportunity to knock it out of the park &lt;span style="font-weight: bold;"&gt;EVERY SINGLE TIME&lt;/span&gt;.  The reason for this is that the less code we write, the more time we can spend on solving the essence of software systems as pointed out by Fred Brooks.  Now to quote from the article a bit&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;complexity&lt;/span&gt; - Software entities are more complex for their size than  perhaps any other human construct because no two parts are alike (at least above  the statement level). If they are, we make the two similar parts into a  subroutine--open or closed. In this respect, software systems differ profoundly  from computers, buildings, or automobiles, where repeated elements abound.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;conformity&lt;/span&gt; -  Software people are not alone in facing complexity.  Physics deals with terribly complex objects even at the "fundamental" particle  level. The physicist labors on, however, in a firm faith that there are unifying  principles to be found, whether in quarks or in unifiedfield theories. Einstein  argued that there must be simplified explanations of nature, because God is not  capricious or arbitrary. No such faith comforts the software engineer.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;changeability&lt;/span&gt; - The software entity is constantly subject to pressures  for change. Of course, so are buildings, cars, computers. But manufactured  things are infrequently changed after manufacture; they are superseded by later  models, or essential changes are incorporated into later-serial-number copies of  the same basic design. Call-backs of automobiles are really quite infrequent;  field changes of computers somewhat less so. Both are much less frequent than  modifications to fielded software.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;and invisibility&lt;/span&gt; - Software is invisible and unvisualizable. Geometric  abstractions are powerful tools. The floor plan of a building helps both  architect and client evaluate spaces, traffic flows, views. Contradictions and  omissions become obvious. Scale drawings of mechanical parts and stick-figure  models of molecules, although abstractions, serve the same purpose. A geometric  reality is captured in a geometric abstraction.  The reality of software is not inherently embedded in space. Hence, it has no  ready geometric representation in the way that land has maps, silicon chips have  diagrams, computers have connectivity schematics.&lt;/li&gt;&lt;/ul&gt;There you have it, straight from the horse's mouth.  To get back to how Rails fits into this lets look at what it does for the above issues:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;complexity - Rails &lt;span style="font-style: italic;"&gt;dramatically&lt;/span&gt; reduces the complexity of &lt;span style="font-style: italic; font-weight: bold;"&gt;database driven web applications&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;conformity - Rails' notion of convention over configuration gives us  guidance and a model to conform to.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;changeability - ActiveRecord's ability to introspect database tables and automagically update models when the underlying database schema changes reduces the impact of software change.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;invisibility - Not so sure Rails helps here, feel free to chime in and tell me how I'm wrong.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;3 out of 4 ain't bad!  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What is the single most important thing that we can take with us from Rails when we have to do something other than database driven web applications?  Find more weapons!  Build your arsenal!!  As &lt;a href="http://blogs.pragprog.com/cgi-bin/pragdave.cgi"&gt;Dave Thomas&lt;/a&gt; of the &lt;a href="http://www.pragmaticprogrammer.com/"&gt;Pragmatic Programmers&lt;/a&gt; has pointed out in his talks and books "Build your knowledge portfolio."  And as you do, be on the lookout for wooden stakes, clubs (to smash zombies heads w/), silver bullets (for when we DO run into werewolves), water (for the wicked witches), and whatever other mythical weapons you can find for solving the task at hand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/25093835-114383783962595804?l=livingincode.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://livingincode.blogspot.com/feeds/114383783962595804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=25093835&amp;postID=114383783962595804' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114383783962595804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/25093835/posts/default/114383783962595804'/><link rel='alternate' type='text/html' href='http://livingincode.blogspot.com/2006/03/there-is-no-silver-bullet.html' title='There is no silver bullet...'/><author><name>Adam Schepis</name><uri>http://www.blogger.com/profile/18159615789256514603</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13427304466330792311'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>