<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Accidental Technologist</title><link>http://accidentaltechnologist.com/</link><description>Musings about Technology, Software Design and Development</description><generator>Graffiti CMS 1.2 (build 1.2.0.2308)</generator><lastBuildDate>Tue, 07 Jul 2009 11:49:00 GMT</lastBuildDate><geo:lat>41.971403</geo:lat><geo:long>-71.998725</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/AccidentalTechnologist" type="application/rss+xml" /><item><title>Kicking Your Coding into High Gear</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/ulmI2iPWyXk/</link><pubDate>Tue, 07 Jul 2009 14:49:00 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/programming/kicking-your-coding-into-high-gear/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>9</slash:comments><category domain="http://accidentaltechnologist.com/programming/">Programming</category><description>&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/KickingYourCodingintoHighGear_9625/kicking_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 5px 5px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="kicking" border="0" alt="kicking" align="right" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/KickingYourCodingintoHighGear_9625/kicking_thumb.jpg" width="240" height="202" /&gt;&lt;/a&gt; I finished reading the great book by &lt;a href="http://chadfowler.com/"&gt;Chad Fowler&lt;/a&gt;, &lt;a href="http://www.pragprog.com/titles/cfcar2/the-passionate-programmer"&gt;The Passionate Programmer&lt;/a&gt;. This is a fantastic read and got me thinking about various aspects of my professional life. One of the best pieces of advice in the book which too few developers actually follow is from &lt;strong&gt;Chapter 15: Practice, Practice, Practice&lt;/strong&gt;.&amp;#160; The premise of the chapter is that developers should always be practicing their craft and honing it into a fine instrument.&amp;#160; We don’t become a professional simply because we have a job,&amp;#160; but by the attention we pay to our individual skills.&lt;/p&gt;  &lt;p&gt;It is common for a developer to go out and buy a book on a new programming language they want to learn and go through the book’s examples, only to come away feeling a bit empty.&amp;#160; We as developers do not learn best this way, we learn by doing.&amp;#160; When professionals are asked what they recommend in order for people to become proficient in a new programming language, they say create “something”.&amp;#160;&amp;#160; Go out and pick an idea and create that application.&lt;/p&gt;  &lt;p&gt;This was how college courses teach programming; concepts and language constructs are shown and then a problem is given to be solved.&amp;#160; This is the perfect example that we learn best by doing.&lt;/p&gt;  &lt;p&gt;What if you don’t have any ideas which seem reasonable to start?&amp;#160; The idea of just setting out to create “something” can be a barrier to entry in itself.&lt;/p&gt;  &lt;p&gt;Thankfully, there are several great web sites with the sole purpose of exercising our minds and helping us become better programmers.&amp;#160; The web sites present the reader with problems to solve with a range of difficulty.&lt;/p&gt;  &lt;h3&gt;Ruby Quiz&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://rubyquiz.com"&gt;Ruby Quiz&lt;/a&gt; has been around for a while and includes 156 puzzles with at least one but often multiple solutions for each problem.&amp;#160; Although it appears RubyQuiz has not published a new problem since February 2008, it is still a great source of problems to solve.&amp;#160; RubyQuiz is designed to provide solutions in Ruby but the problems are solvable with any language which might make a good exercise to see which language creates the most elegant or beautiful solution.&lt;/p&gt;  &lt;p&gt;Some of my personal favorites are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://rubyquiz.com/quiz19.html"&gt;Yahtzee&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://rubyquiz.com/quiz43.html"&gt;Sodoku Solver&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://rubyquiz.com/quiz48.html"&gt;Math Captcha&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://rubyquiz.com/quiz42.html"&gt;Scheduling&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://rubyquiz.com/quiz107.html"&gt;Word Search&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://rubyquiz.com/quiz139.html"&gt;IP to Country&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I like these because the provide some practical value and are interesting.&amp;#160; Thanks to &lt;a href="http://twitter.com/batasrki/"&gt;Srdjan Pejic&lt;/a&gt; for pointing out that Ruby Quiz is &lt;a href="http://rubyquiz.strd6.com/"&gt;still alive and continuing to be updated&lt;/a&gt;.&amp;#160; The current count is at 212 quizzes.&lt;/p&gt;  &lt;h3&gt;Code Kata&lt;/h3&gt;  &lt;p&gt;Chad recommends &lt;a href="http://codekata.pragprog.com/2007/01/code_kata_backg.html"&gt;Code Kata&lt;/a&gt; which was done by &lt;a href="http://pragdave.pragprog.com/"&gt;Dave Thomas&lt;/a&gt; of the Pragmatic Programmers and is explained as:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Code Kata is an attempt to bring this element of practice to software development. A &lt;em&gt;kata&lt;/em&gt; is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long). Some involve programming, and can be coded in many different ways. Some are open ended, and involve thinking about the issues behind programming. These are unlikely to have a single correct answer. I add a new kata every week or so. Invest some time in your craft and try them.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The Code Kata series, consisting of twenty-one problems of varying complexity, addresses problems we might face in our daily lives as developers.&lt;/p&gt;  &lt;p&gt;One interesting example and clever approach to presenting a problem is &lt;a href="http://codekata.pragprog.com/2007/01/kata_nine_back_.html"&gt;Kata Nine: Back to the Checkout&lt;/a&gt;.&amp;#160; This Kata requires the developer to create a checkout that might be used in a grocery store.&amp;#160; Dave gives the reader what the input data might look like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;Item   Unit      Special
       Price     Price
--------------------------
  A     50       3 for 130
  B     30       2 for 45
  C     20
  D     15&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;What the interface needs to be:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The interface to the checkout should look like: &lt;/p&gt;

  &lt;pre&gt;   co = CheckOut.new(pricing_rules)
   co.scan(item)
   co.scan(item)
       :    :
   price = co.total&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And a set of unit tests so the developer knows what the code should do:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;class TestPrice &amp;lt; Test::Unit::TestCase

    def price(goods)
      co = CheckOut.new(RULES)
      goods.split(//).each { |item| co.scan(item) }
      co.total
    end

    def test_totals
      assert_equal(  0, price(&amp;quot;&amp;quot;))
      assert_equal( 50, price(&amp;quot;A&amp;quot;))
      assert_equal( 80, price(&amp;quot;AB&amp;quot;))
      assert_equal(115, price(&amp;quot;CDBA&amp;quot;))

      assert_equal(100, price(&amp;quot;AA&amp;quot;))
      assert_equal(130, price(&amp;quot;AAA&amp;quot;))
      assert_equal(180, price(&amp;quot;AAAA&amp;quot;))
      assert_equal(230, price(&amp;quot;AAAAA&amp;quot;))
      assert_equal(260, price(&amp;quot;AAAAAA&amp;quot;))

      assert_equal(160, price(&amp;quot;AAAB&amp;quot;))
      assert_equal(175, price(&amp;quot;AAABB&amp;quot;))
      assert_equal(190, price(&amp;quot;AAABBD&amp;quot;))
      assert_equal(190, price(&amp;quot;DABABA&amp;quot;))
    end

    def test_incremental
      co = CheckOut.new(RULES)
      assert_equal(  0, co.total)
      co.scan(&amp;quot;A&amp;quot;);  assert_equal( 50, co.total)
      co.scan(&amp;quot;B&amp;quot;);  assert_equal( 80, co.total)
      co.scan(&amp;quot;A&amp;quot;);  assert_equal(130, co.total)
      co.scan(&amp;quot;A&amp;quot;);  assert_equal(160, co.total)
      co.scan(&amp;quot;B&amp;quot;);  assert_equal(175, co.total)
    end
  end&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Each Kata is not only a different problem but each also teaches different aspects of real-world programming whether it be unit tests, decoupling or multiple approaches to a problem.&amp;#160; &lt;/p&gt;

&lt;h3&gt;Project Euler&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://projecteuler.net"&gt;Project Euler&lt;/a&gt; is yet another set of problems for developers to solve with code. The web site describes Project Euler as:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are a total of 252 problems with a range of difficulty with all being mathematical or computer science in nature.&amp;#160; These types of problems exercise our math skills along with our abilities to create algorithms.&amp;#160; Each problem lists now many people solved each problem:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/KickingYourCodingintoHighGear_9625/ProjectEuler_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProjectEuler" border="0" alt="ProjectEuler" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/KickingYourCodingintoHighGear_9625/ProjectEuler_thumb.jpg" width="507" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Each problem has a very brief description or requirement, Problem #7 – Find the 10001st prime:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/KickingYourCodingintoHighGear_9625/EulerProblem7_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="EulerProblem7" border="0" alt="EulerProblem7" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/KickingYourCodingintoHighGear_9625/EulerProblem7_thumb.jpg" width="640" height="217" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As you can see, you won’t be mired in requirements but only a simple and brief description of the problem at hand.&amp;#160; These problems seem to take longer than the others as they are more involved but worth it.&lt;/p&gt;

&lt;h3&gt;Top Coder&lt;/h3&gt;

&lt;p&gt;Another way to flex your coding muscle is by competing against others while learning from others.&amp;#160; &lt;a href="http://www.topcoder.com/"&gt;Top Coder&lt;/a&gt; has been around for a while and offer many types of competitions open to the public or customized for a company.&lt;/p&gt;

&lt;p&gt;One of their contests is the annual TopCoder Open which is already over for 2009 but you can an idea of what is all about from the &lt;a href="http://www.topcoder.com/tco09"&gt;contest web site&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Rails Rumble&lt;/h3&gt;

&lt;p&gt;An additional coder competition is &lt;a href="http://r09.railsrumble.com/"&gt;Rails Rumble&lt;/a&gt; which you probably guessed uses &lt;a href="http://rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt;.&amp;#160; &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The Rails Rumble is a 48 hour web application development competition. As a &lt;strong&gt;contestant&lt;/strong&gt;, your team gets one weekend to design, develop, and deploy the best web property that you can, using the awesome power of &lt;a href="http://ruby-lang.org"&gt;Ruby&lt;/a&gt; and &lt;a href="http://rubyonrails.com"&gt;Rails&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Contestants, as they are called, enter from varying skill levels and can come as a team to compete by creating a web application over a two-day period.&amp;#160; This is a great way to learn from others who are more experienced as well as meet many great developers which could result in a long-term relationship.&lt;/p&gt;

&lt;p&gt;Rails Rumble 2009 is in August so get going on entering.&lt;/p&gt;

&lt;h3&gt;Source Code&lt;/h3&gt;

&lt;p&gt;Although coding problems are great for sharpening the skills you have there are other ways to build skills.&amp;#160; I think the single best way to improve ones code is by looking at the code of other people.&amp;#160; There is virtually an unlimited supply of code out in the open source world just free for educating yourself.&amp;#160; Just go to &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; and start searching and poking around what’s there, pull down some projects and see what others are doing.&amp;#160; You will learn a lot doing this very simple exercise.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.enlightsolutions.com/"&gt;Dan Pickett&lt;/a&gt; points out that a great way of improving ones coding skills would be to get involved in an open source project.&amp;#160; Fellow contributors make great reviewers who can help improve your code.&amp;#160; I could not agree more.&lt;/p&gt;

&lt;h3&gt;Finally&lt;/h3&gt;

&lt;p&gt;I think the best way to learn is by doing, and these are some good places to start.&amp;#160; I am sure there are plenty of other sources of challenge like this on the web, please pass them along in comments and I will update the post.&lt;/p&gt;

&lt;p&gt;My personal preference is the coding problems like those in Ruby Quiz, Code Kata and Project Euler.&amp;#160; They give a wide selection of problems that can be solved right at home when the time is available. &lt;/p&gt;

&lt;p&gt;I have been doing some of these problems in my spare time but being reminded how important the exercise is from &lt;a href="http://www.pragprog.com/titles/cfcar2/the-passionate-programmer"&gt;The Passionate Programmer&lt;/a&gt; made me want to write this post.&amp;#160; This is an important book and every developer should read it to give ideas about your careers or reinforce the ideas you have already.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e1458369-d84f-4b28-a2b6-7aab92f31af3" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Top+Coder" rel="tag"&gt;Top Coder&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Project+Euler" rel="tag"&gt;Project Euler&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Code+Kata" rel="tag"&gt;Code Kata&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby+Quiz" rel="tag"&gt;Ruby Quiz&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/programming/"&gt;Programming&lt;/a&gt; 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/ulmI2iPWyXk" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/programming/kicking-your-coding-into-high-gear/</feedburner:origLink></item><item><title>InfoQ: Rescuing Your Ruby on Rails Projects</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/_ifboikCOro/</link><pubDate>Thu, 02 Jul 2009 15:17:27 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/infoq/infoq-rescuing-your-ruby-on-rails-projects/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>0</slash:comments><category domain="http://accidentaltechnologist.com/infoq/">InfoQ</category><description>&lt;p&gt;Just a quick note:&amp;#160; I recently purchased the &lt;a href="http://www.railsrescuebook.com/"&gt;Rails Rescue Handbook&lt;/a&gt; by &lt;a href="http://afreshcup.com/"&gt;Mike Gunderloy&lt;/a&gt; from his web site.&amp;#160; The book gives a lot of great tips and best approaches to taking on a Rails project that may not be up-to-par.&lt;/p&gt;  &lt;p&gt;I think the book addresses many of the areas we face as Rails consultants on daily basis and should guide us in our own coding efforts and reviewing and refactoring the code of others.&lt;/p&gt;  &lt;p&gt;Mike talked with me about the book in an interview for &lt;a href="http://www.infoq.com/news/2009/07/rails-rescue-handbook"&gt;InfoQ&lt;/a&gt; to give folks a better understanding of where problems and bad code can occur and what to do about it.&amp;#160; &lt;/p&gt;  &lt;p&gt;Please take the time to check out the interview - &lt;a href="http://www.infoq.com/news/2009/07/rails-rescue-handbook"&gt;Rescuing Your Ruby on Rails Projects&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5e777485-b264-49d7-a068-123b6243612e" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Ruby+on+Rails" rel="tag"&gt;Ruby on Rails&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Rails+Rescue+Handbook" rel="tag"&gt;Rails Rescue Handbook&lt;/a&gt;,&lt;a href="http://technorati.com/tags/InfoQ" rel="tag"&gt;InfoQ&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/infoq/"&gt;InfoQ&lt;/a&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/general/2008-another-year-gone-by/"&gt;2008 - Another Year Gone By&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/book-reviews/book-review-foundations-of-programming-by-karl-seguin/"&gt;Book Review : Foundations of Programming by Karl Seguin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/general/figuring-out-what-rsquo-s-important/"&gt;Figuring Out What&amp;rsquo;s Important&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/_ifboikCOro" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/infoq/infoq-rescuing-your-ruby-on-rails-projects/</feedburner:origLink></item><item><title>Reflections on Ruby for Projects</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/YIWl_2087fY/</link><pubDate>Mon, 22 Jun 2009 13:00:00 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/ruby/reflections-on-choosing-ruby-for-projects/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>1</slash:comments><category domain="http://accidentaltechnologist.com/ruby/">Ruby</category><description>&lt;p&gt;&lt;a href="http://rethink.unspace.ca/2009/6/12/ruby-at-thoughtworks"&gt;Martin Fowler recently published an article&lt;/a&gt; recently looking back at projects which ThoughtWorks chose to use Ruby as the programming language.&lt;/p&gt;
&lt;p&gt;The article reminded me of path I have traveled, coming from a background in C/C++ but moving to using ASP.NET/C# and &lt;a href="http://rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; for various projects.&amp;nbsp; Running a small software consultancy I don&amp;rsquo;t always have the opportunity to choose the platform or language to use, the decision is often made by the technology the company has standardized on, which could be Windows or Linux.&lt;/p&gt;
&lt;p&gt;Many of Martin&amp;rsquo;s points ring true in what I have found working on projects in Ruby versus other languages.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s often the case that projects we take on have very small teams, sometimes 2-3 developers, sometimes 1.&amp;nbsp; When teams are small it can be hard to feel like huge leaps in progress are being made.&amp;nbsp; The tools and frameworks we use at &lt;a href="http://stillriversoftware.com"&gt;Still River Software&lt;/a&gt;, often are what makes the difference.&lt;/p&gt;
&lt;p&gt;Over the years of creating websites for clients we initially used ASP.NET and C# as our tool of choice because of its broad support and my personal experience.&amp;nbsp; This has changed over the past couple years with us moving projects to Ruby on Rails.&amp;nbsp; As Martin puts it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When people are asked about why Ruby should be used on a project, the most common answer is for increased productivity. One early indicator was an assessment of a project that suggested that Ruby would have yielded an order of magnitude improvement in productivity.&lt;/p&gt;
&lt;p&gt;As a result it seemed obvious to survey the project technical leads and ask them about productivity - had ruby increased productivity and if so, by how much. I asked them to compare this to a mainstream (Java or .NET) project done in the most productive way they knew how.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/ReflectionsonRuby_9AEB/rubyProductivityBar_2.jpg"&gt;&lt;img height="508" width="565" border="0" style="border-width: 0px; display: inline;" title="rubyProductivityBar" alt="rubyProductivityBar" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/ReflectionsonRuby_9AEB/rubyProductivityBar_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You should take these result with some salt. After all there is no way we can objectively measure software productivity. These are just the subjective, qualitative assessments from the technical lead of each project. (I didn't get a response from all projects.) However they are still suggestive that there's a real productivity boost going on.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The results, on average, were 2X improvements in productivity.&amp;nbsp; As Martin points out these results are subjective and are hardly scientific evidence but the results are interesting all the same.&lt;/p&gt;
&lt;h3&gt;Personal Results&lt;/h3&gt;
&lt;p&gt;The most interesting result to me from Martin&amp;rsquo;s summation is the productivity of the teams.&amp;nbsp; We all know the arguments of Ruby&amp;rsquo;s speed and other such topics, I won&amp;rsquo;t get into those.&lt;/p&gt;
&lt;p&gt;We do find development using Ruby and in particular, Ruby on Rails, to be more productive but I won&amp;rsquo;t try to put the gains into a number.&amp;nbsp; Comparing development using Ruby on Rails vs. ASP.NET some particular aspects stand out in a big way.&amp;nbsp; We can go from idea to prototype in a matter of days using Rails compared to a much longer time using ASP.NET.&amp;nbsp; A complete change in direction is much easier and a lot less wasted effort.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Decision Making&lt;/strong&gt; &amp;ndash; the Ruby on Rails (RoR) framework is referred to &amp;ldquo;opinionated&amp;rdquo; and for good reason.&amp;nbsp; Many of the decisions that need to be made when using ASP.NET (including ASP.NET MVC) are made for us in RoR.&amp;nbsp; When a new Rails application is created there is almost nothing that has to be decided in order to start creating an application right now.&amp;nbsp; Using ASP.NET, decisions are aplenty, from how the application will be architected to how the database will be accessed (i.e. ADO.NET, LINQ, NHibernate).&amp;nbsp; Using Rails for the most part assumes what the architecture and data store will look like over the life of the application.&lt;/p&gt;
&lt;p&gt;This is not a knock on ASP.NET.&amp;nbsp; ASP.NET allows the developers and architects wide open flexibility as to how their applications will be structured.&amp;nbsp; I have spent many meetings discussing how this new ASP.NET application will be organized and structured.&amp;nbsp; Even though I have had a lot of experience in this aspect of system building, it seem the same topics are addressed with every project.&amp;nbsp; These same issues are not talked about using Rails and this saves a considerable amount of time not only in planning but in implementation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plugin and Gem Support&lt;/strong&gt; &amp;ndash; There is a huge amount of Ruby Gems and Rails Plugins available for just about any aspect of a Rails project that we may need to build, such as authentication or integration with a credit card processing facility.&amp;nbsp; All are open source and most actively developed and supported.&lt;/p&gt;
&lt;p&gt;ASP.NET has little support for this, even though the community is growing the ability to easily grab third-party open tools is very limited.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deployment&lt;/strong&gt; &amp;ndash; the deployment story on Rails is pretty much one-sided using &lt;a href="http://www.capify.org/"&gt;Capistrano&lt;/a&gt;.&amp;nbsp; Capistrano is a great tool to allow developers to create scripts in Ruby to manage all deployment aspects with a simple command.&amp;nbsp; The script takes a bit to create but a wide range of examples are easily available.&lt;/p&gt;
&lt;p&gt;Deploying an ASP.NET application has always been painful and way too manual for my taste, maybe I am doing it wrong.&amp;nbsp; If there existed a tool like Capistrano I would have used it.&lt;/p&gt;
&lt;h3&gt;Finally&lt;/h3&gt;
&lt;p&gt;The parts of Rails which make us more productive starts from the decisions made for us to the parts available to us to build our systems.&amp;nbsp; These neatly package components bundle functionality so we can simply drop in place.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This not a Ruby on Rails vs. ASP.NET argument and I don&amp;rsquo;t want to turn it into one, so please..no comments saying I am wrong and ASP.NET is the only thing that matters.&amp;nbsp; We still have clients using ASP.NET and we enhance their software and support them.&amp;nbsp; They will not be moving to Rails, ever.&amp;nbsp; The point of the little post here was just reflecting on some of the areas we have been more productive with Ruby and why I feel this is the case.&amp;nbsp; Your mileage may vary.&lt;/p&gt;
&lt;p&gt;Martin&amp;rsquo;s article raises some very good and healthy points as it stands today.&amp;nbsp; The conversation may change in 5 years, who knows, but today the story is very clear to us, using Ruby on Rails we can get results to our clients faster.&amp;nbsp; Faster to convey intent, faster to iterate and faster to deploy, all for less money because we are spending less time on things that shouldn&amp;rsquo;t matter.&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b9b3f5b-c6e2-4426-9e55-5ee1a6d3a547" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby+on+Rails" rel="tag"&gt;Ruby on Rails&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ThoughtWorks" rel="tag"&gt;ThoughtWorks&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/ruby/"&gt;Ruby&lt;/a&gt; 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/YIWl_2087fY" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/ruby/reflections-on-choosing-ruby-for-projects/</feedburner:origLink></item><item><title>Introducing CustomerFu</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/6NlB5tPyWWs/</link><pubDate>Fri, 19 Jun 2009 17:30:00 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/customerfu/introducing-customerfu/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>6</slash:comments><category domain="http://accidentaltechnologist.com/customerfu/">CustomerFu</category><description>&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/CustomerFu-logo_2.jpg"&gt;&lt;img height="53" width="236" border="0" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/CustomerFu-logo_thumb.jpg" alt="CustomerFu-logo" title="CustomerFu-logo" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have been spending a lot of my free time lately working on a new web application that I wanted to announce today, &lt;a href="http://customerfu.com"&gt;CustomerFu&lt;/a&gt;.&amp;nbsp;&amp;nbsp; CustomerFu is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CustomerFu is the simple solution for tracking customer complaints. A central place where all your complaints can be entered, actioned, monitored and closed.&lt;/p&gt;
&lt;p&gt;Easy to use for anyone in your organization, CustomerFu will bring new discipline to your customer complaint management, enabling you to turn complaining customers into return customers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;CustomerFu can be used by many different types of industries, for example, the restaurant industry to track customer complaints by a central office by each of its locations.&amp;nbsp; The system guarantees a complaint will not be lost.&amp;nbsp; The system is designed to be simple and easy to use, yet powerful as outlined by the various parts.&lt;/p&gt;
&lt;h3&gt;Dashboard&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/cf_dashboard_sm_2.jpg"&gt;&lt;img height="338" width="644" border="0" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/cf_dashboard_sm_thumb.jpg" alt="cf_dashboard_sm" title="cf_dashboard_sm" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Users of CustomerFu have a centralized dashboard to track complaints coming in from each branch.&lt;/p&gt;
&lt;h3&gt;Reporting&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/cf_reports_sm_2.jpg"&gt;&lt;img height="401" width="644" border="0" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/cf_reports_sm_thumb.jpg" alt="cf_reports_sm" title="cf_reports_sm" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Easy Administration&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/cf_categories_sm_2.jpg"&gt;&lt;img height="267" width="644" border="0" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/IntroducingCustomerFu_E7A6/cf_categories_sm_thumb.jpg" alt="cf_categories_sm" title="cf_categories_sm" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please email me at &lt;a href="mailto:rbazinet@customerfu.com"&gt;rbazinet@customerfu.com&lt;/a&gt; with questions or more details.&amp;nbsp; Free accounts are available on the &lt;a href="http://customerfu.com/"&gt;CustomerFu.com&lt;/a&gt; web site.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d08538da-e05b-4a73-abdc-409812f56867" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/CustomerFu"&gt;CustomerFu&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Customer+Complaints"&gt;Customer Complaints&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Rails"&gt;Rails&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/customerfu/"&gt;CustomerFu&lt;/a&gt; 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/6NlB5tPyWWs" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/customerfu/introducing-customerfu/</feedburner:origLink></item><item><title>Ruby Denial of Service (DoS) Vulnerability Options</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/67PUKsXPi4Y/</link><pubDate>Wed, 10 Jun 2009 14:09:06 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/ruby/ruby-denial-of-service-dos-vulnerability-options/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>0</slash:comments><category domain="http://accidentaltechnologist.com/ruby/">Ruby</category><description>&lt;p&gt;A potentially harmful vulnerability was found in all pre-Ruby 1.9.1 version of Ruby.&amp;#160; The issue was reported on the &lt;a href="http://www.ruby-lang.org/en/news/2009/06/09/dos-vulnerability-in-bigdecimal/"&gt;Ruby-lang web site&lt;/a&gt; and says it effects:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;strong&gt;1.8 series&lt;/strong&gt;&lt;/h4&gt;    &lt;ul&gt;     &lt;li&gt;1.8.6-p368 and all prior versions &lt;/li&gt;      &lt;li&gt;1.8.7-p160 and all prior versions &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;Ruby 1.9.1 does not suffer from this problem but &lt;a href="http://jira.codehaus.org/browse/JRUBY-3744"&gt;seems apparent&lt;/a&gt; JRuby does have this issue and has been &lt;a href="http://gist.github.com/126922"&gt;tested to prove it&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;The Problem&lt;/h3&gt;  &lt;p&gt;The issue is pretty simple to reproduce.&amp;#160; BigDecimal, when asked to parse an overly large number, causes segmentation faults.&amp;#160; The following will reveal the problem:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;BigDecimal(&amp;quot;9E69999999&amp;quot;).to_s(&amp;quot;F&amp;quot;)&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Solutions&lt;/h3&gt;

&lt;p&gt;There are quite a few solutions to this problem and most involve patching an existing installation of Ruby.&amp;#160; The Ruby web site offers links to download Ruby source for both 1.8.6 and 1.8.7:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Please upgrade to 1.8.6-p369 or ruby-1.8.7-p173.&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;a href="ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p369.tar.gz"&gt;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p369.tar.gz&lt;/a&gt; &lt;/li&gt;

    &lt;li&gt;&lt;a href="ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p173.tar.gz"&gt;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p173.tar.gz&lt;/a&gt; &lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are various things to consider when doing an update like this and building from source.&amp;#160; I am an Ubuntu user and installed Ruby with the aptitude package manager so I could easily update to a later version of Ruby when it was released.&amp;#160; The problem here is the package sources won’t be updated right away and I will be stuck with the vulnerability until new packages are created and put out.&amp;#160; I probably won’t be effected by this issue as I have not yet but I would rather be safe, especially for my customers.&lt;/p&gt;

&lt;p&gt;Having used a package manager, Ruby is installed in:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;/usr/bin&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;The options at this point is to download and build Ruby from source.&amp;#160; Building Ruby from the Ruby website will by default but Ruby in:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;/usr/local/bin&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;I won’t get into installing Ruby from source here, there are many good tutorials including one from FiveRuns, &lt;a href="http://blog.fiveruns.com/2008/3/3/compiling-ruby-rubygems-and-rails-on-ubuntu"&gt;Compiling Ruby, RubyGems and Rails on Ubuntu&lt;/a&gt;.&amp;#160; You can use this tutorial for either of your flavors of Ruby.&amp;#160; Keep in mind you may need to adjust the PATH setting in your bash script to point to the right Ruby instance.&amp;#160; The post above states Ubuntu already has this set already, a quick check of my PATH and it indeed has this set.&lt;/p&gt;

&lt;p&gt;One additional option that seems particularly attractive is &lt;a href="http://www.rubyenterpriseedition.com/index.html"&gt;Ruby Enterprise Edition&lt;/a&gt; (REE) from Phusion, the Passenger folks.&amp;#160; This group keeps on top of Ruby updates and is constantly updating their code.&amp;#160; They &lt;a href="http://blog.phusion.nl/2009/06/10/ruby-enterprise-edition-186-20090610-released-fixes-bigdecimal-dos-vulnerability/"&gt;posted the DoS vulnerability fix almost right away&lt;/a&gt; and offer the source download or an Ubuntu package for 32 and 64-bit.&lt;/p&gt;

&lt;p&gt;This is the option I am taking.&amp;#160; I have been wanting to move to REE for some time and I think it now the right time.&amp;#160; REE does by default install to the:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;/opt/ruby_enterprise&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;directory, so a change to the bash environment is necessary.&amp;#160; The Phusion site has some &lt;a href="http://www.rubyenterpriseedition.com/documentation.html"&gt;good docs on how to install and configure REE&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;Then follow the instructions that the installer gives you.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h5&gt;1.6. Configuring REE as the default Ruby interpreter&lt;/h5&gt;

  &lt;p&gt;It is possible to configure REE as the default Ruby interpreter, so that when you type &lt;em&gt;ruby&lt;/em&gt;, &lt;em&gt;gem&lt;/em&gt;, &lt;em&gt;irb&lt;/em&gt;, &lt;em&gt;rake&lt;/em&gt; or other Ruby commands, REE’s version is invoked instead of the system Ruby’s version.&lt;/p&gt;

  &lt;p&gt;To do this, you must add REE’s &lt;em&gt;bin&lt;/em&gt; directory to the beginning of the &lt;tt&gt;PATH&lt;/tt&gt; environment variable. This environment variable specifies the command shell’s command search path. For example, you can do this on the command-line:&lt;/p&gt;

  &lt;pre&gt;&lt;tt&gt;$ ruby some_program.rb    # &amp;lt;--- some_program.rb is being run
                          #      in the system Ruby interpreter.

$ export PATH=/opt/ruby-enterprise-X.X.X/bin:$PATH
$ ruby some_program.rb    # &amp;lt;--- some_program.rb will now be run in REE!&lt;/tt&gt;&lt;/pre&gt;

  &lt;p&gt;Invoking &lt;tt&gt;export PATH=...&lt;/tt&gt; on the command-line has no permanent effect: its effects disappear as soon as you exit the shell. To make the effect permanent, add an entry to the file&lt;tt&gt;/etc/environment&lt;/tt&gt; instead. On Ubuntu Linux, &lt;tt&gt;/etc/environment&lt;/tt&gt; looks like this:&lt;/p&gt;

  &lt;pre&gt;&lt;tt&gt;PATH=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games&amp;quot;
LANG=&amp;quot;en_US.UTF-8&amp;quot;
LANGUAGE=&amp;quot;en_US:en&amp;quot;&lt;/tt&gt;&lt;/pre&gt;

  &lt;p&gt;Add REE’s &lt;em&gt;bin&lt;/em&gt; directory to the PATH environment variable, like this:&lt;/p&gt;

  &lt;pre&gt;&lt;tt&gt;PATH=&amp;quot;/opt/ruby-enterprise-x.x.x/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games&amp;quot;
LANG=&amp;quot;en_US.UTF-8&amp;quot;
LANGUAGE=&amp;quot;en_US:en&amp;quot;&lt;/tt&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;This will give me both better memory usage and the added security of fixing BigDecimal.&lt;/p&gt;

&lt;p&gt;This does effect Ruby on Rails and there is a &lt;a href="http://weblog.rubyonrails.org/2009/6/10/dos-vulnerability-in-ruby"&gt;patch to Rails as a quick workaround&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;It is great to have options and open source gives us the ability to have many.&amp;#160; If building from source is the way to go then keep in mind all of the RubyGems already installed in the system(s) need to be installed again for that new version of Ruby.&amp;#160; This only applies if the Ruby path is changed to which Ruby is being used.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0be621ba-8819-4e1c-96eb-e3c4e5639921" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby+Enterprise+Edition" rel="tag"&gt;Ruby Enterprise Edition&lt;/a&gt;,&lt;a href="http://technorati.com/tags/REE" rel="tag"&gt;REE&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JRuby" rel="tag"&gt;JRuby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Rails" rel="tag"&gt;Rails&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DoS+Vulnerability" rel="tag"&gt;DoS Vulnerability&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/ruby/"&gt;Ruby&lt;/a&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/replicating-rails-project-setup-on-development/"&gt;My Improved Rails Development Environment on the Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/ruby-on-rails/setting-up-sqlite3-for-ruby-on-rails-development/"&gt;Setting up SQLite3 for Ruby on Rails Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/technology/dell-mini-bios-upgrade-without-windows-xp-installed/"&gt;Dell Mini BIOS Upgrade without Windows XP Installed&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/67PUKsXPi4Y" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/ruby/ruby-denial-of-service-dos-vulnerability-options/</feedburner:origLink></item><item><title>InfoQ Interview with Jeremy McAnally - Ruby in Practice</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/StEtKp4dW4g/</link><pubDate>Wed, 03 Jun 2009 16:14:00 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/infoq/infoq-interview-with-jeremy-mcanally-ruby-in-practice/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>0</slash:comments><category domain="http://accidentaltechnologist.com/infoq/">InfoQ</category><description>&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/InterviewRubyinPracticewithJeremyMcAnall_AB07/mcanally_cover150_2.jpg"&gt;&lt;img width="150" height="188" border="0" align="right" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/InterviewRubyinPracticewithJeremyMcAnall_AB07/mcanally_cover150_thumb.jpg" alt="mcanally_cover150" title="mcanally_cover150" style="border: 0px none ; display: inline; margin-left: 0px; margin-right: 0px;" /&gt;&lt;/a&gt; Just wanted to point out my interview with Rubyist, &lt;a href="http://www.jeremymcanally.com/"&gt;Jeremy McAnally&lt;/a&gt; is up on InfoQ.&amp;nbsp; The interview covers Jeremy&amp;rsquo;s new book, &lt;a href="http://manning.com/mcanally/"&gt;Ruby in Practice&lt;/a&gt;.&amp;nbsp; I really love talking to other Rubyists and my role at InfoQ let me do this.&amp;nbsp; I usually learn a few things from every interview, whether it be the perspective they see in Ruby, the future of Ruby or some obscure feature I wasn&amp;rsquo;t aware of before.&amp;nbsp; In this case I really like Jeremy&amp;rsquo;s perspective of Ruby in the enterprise.&lt;/p&gt;
&lt;p&gt;The interview also includes exclusive access to &lt;a href="http://www.infoq.com/resource/articles/ruby-in-practice/en/resources/RiPChapter5.pdf"&gt;Chapter 5 : Web Services&lt;/a&gt; from the book.&amp;nbsp; Readers interested in how to make best use of RESTful web services, SOAP and legacy system integration with Ruby should give it a read.&lt;/p&gt;
&lt;p&gt;Read the interview in its entirety on the InfoQ web site &amp;ndash; &lt;a href="http://www.infoq.com/articles/ruby-in-practice"&gt;Ruby in Practice with Jeremy McAnally&lt;/a&gt;.&amp;nbsp; Any feedback is surely welcome.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:762ce40e-960a-4893-a206-a53a0e7e8746" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/Ruby"&gt;Ruby&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/InfoQ"&gt;InfoQ&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Ruby+in+Practice"&gt;Ruby in Practice&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Jeremy+McAnally"&gt;Jeremy McAnally&lt;/a&gt;&lt;/div&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/infoq/"&gt;InfoQ&lt;/a&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/infoq/interview-with-david-a-black-the-well-grounded-rubyist/"&gt;Interview with David A. Black, The Well-Grounded Rubyist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/book-reviews/book-review-foundations-of-programming-by-karl-seguin/"&gt;Book Review : Foundations of Programming by Karl Seguin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/programming/the-long-tail-of-learning/"&gt;The Long Tail of Learning&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/StEtKp4dW4g" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/infoq/infoq-interview-with-jeremy-mcanally-ruby-in-practice/</feedburner:origLink></item><item><title>Interview with David A. Black, The Well-Grounded Rubyist</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/zIG1_PidTFg/</link><pubDate>Wed, 27 May 2009 17:18:23 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/infoq/interview-with-david-a-black-the-well-grounded-rubyist/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>1</slash:comments><category domain="http://accidentaltechnologist.com/infoq/">InfoQ</category><description>&lt;p&gt;&lt;a href="http://www.manning.com/black2/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="black2_cover150" border="0" alt="black2_cover150" align="right" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/InterviewTheWellGroundedRubyist_871E/black2_cover150_3.jpg" width="150" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I recently had the opportunity to review a copy of &lt;a href="http://dablog.rubypal.com/"&gt;David A. Black’s&lt;/a&gt; new book, &lt;a href="http://www.manning.com/black2/"&gt;The Well-Grounded Rubyist&lt;/a&gt;.&amp;#160; I interviewed David for InfoQ, &lt;a href="http://www.infoq.com/articles/interview-david-black"&gt;which is now live on the site&lt;/a&gt;.&amp;#160; Please take a moment to give the interview a read, I think it was pretty insightful.&lt;/p&gt;  &lt;p&gt;David covers many topics including how he got started with Ruby, suggestions on how developers should learn Ruby to his views on moving to Ruby 1.9.1:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I'm afraid that, with all due respect to the core Ruby development team, I'm not a believer in 1.8.7. It's been described as a stepping-stone to 1.9, and that, together with some of the birth pains of 1.9 as a stable version, has provided a kind of safe haven for people who want some 1.9-era features but are skittish about 1.9. That's kind of unfortunate.&lt;/p&gt;    &lt;p&gt;I'd encourage people very strongly at least to install 1.9.1, and see what problems you come up against. I don't think that making 1.8 more like 1.9 is the answer. It sends the message that there's a reason to avoid 1.9 -- and while that may have been true before 1.9.1, as far as I can tell it's now stable and on as solid a footing as any such release before it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Although the piece is an interview and not a review of the book, I had to hold back my personal views.&amp;#160; I think this book is a definite read and should be in every Ruby developer’s library.&amp;#160; If you are new to Ruby or experienced, this book holds a lot of great information and is a great reference to how Ruby works, the standard libraries and best-practices.&amp;#160; When I review books I normally are sent printed review copies or PDF versions of they exist, I liked this book so much I bought my own copy.&lt;/p&gt;  &lt;p&gt;I will likely give a detailed review at another time so look for it here in the future.&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:864f8ee6-954c-46a5-8d83-f90c363b7071" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Well-Grounded+Rubyist" rel="tag"&gt;Well-Grounded Rubyist&lt;/a&gt;,&lt;a href="http://technorati.com/tags/David+A.+Black" rel="tag"&gt;David A. Black&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/infoq/"&gt;InfoQ&lt;/a&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/book-reviews/book-review-foundations-of-programming-by-karl-seguin/"&gt;Book Review : Foundations of Programming by Karl Seguin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/ruby-19-released-should-you-use-it-today/"&gt;Ruby 1.9 Released - Should you use it today?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/10-alternative-ruby-web-frameworks/"&gt;10 Alternative Ruby Web Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/zIG1_PidTFg" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/infoq/interview-with-david-a-black-the-well-grounded-rubyist/</feedburner:origLink></item><item><title>Learn iPhone Development for Free</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/tbMiU--7lN8/</link><pubDate>Wed, 20 May 2009 13:06:00 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/iphone/learn-iphone-development-for-free/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>1</slash:comments><category domain="http://accidentaltechnologist.com/iphone/">iPhone</category><description>&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: I have been adding new sessions below as they have been posted from Stanford.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/LearniPhoneDevelopmentforFree_9802/stanford-learning_2.png"&gt;&lt;img height="170" width="174" border="0" align="right" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/LearniPhoneDevelopmentforFree_9802/stanford-learning_thumb.png" alt="stanford-learning" title="stanford-learning" style="border-width: 0px; display: inline; margin-left: 0px; margin-right: 0px;" /&gt;&lt;/a&gt; My recent journey to learn some iPhone development, like what seems to be half the population of the planet, I came across a great resource for learning.&amp;nbsp; Many universities are putting their courses on-line and making them free these days and Stanford University is no different, offering a totally free course on iPhone development aptly titled &lt;a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.2024353965.02024353968"&gt;iPhone Application Programming&lt;/a&gt;.&amp;nbsp; The &lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/syllabus.php"&gt;syllabus is available for the 10-week course&lt;/a&gt; on the Stanford site as well.&lt;/p&gt;
&lt;p&gt;As the time I am writing this there are 13 lectures available to download from the iTunes store:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Introduction to Mac OS X and Cocoa Touch&lt;/strong&gt; : Evan Doll provides an overview for the Stanford Computer Science department course, iPhone Application Programming.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Using Objective-C, Foundation Framework&lt;/strong&gt; : Alan Cannistraro provides an overview of object oriented programming, the objective-C programming language, and common foundation classes.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Custom Classes, Memory Management, and ObjC Properties&lt;/strong&gt; : Evan Doll discusses custom classes, object lifecycles, autorelease, and properties.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Interface Builder, Controls, Target-Action&lt;/strong&gt; : Alan Cannistraro discusses the interface builder, controls, and target-action.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Views and Drawing, Animations&lt;/strong&gt; : Alan Cannistraro covers views, drawing, and animation.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;View Controller Basics&lt;/strong&gt; : Evan Doll outlines designing iPhone applications, goes on to discuss the model-view-controller paradigm, and explores view controllers.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Navigation Controllers&lt;/strong&gt; : Evan Doll covers navigation and tab bar controllers.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Table Views&lt;/strong&gt; : Guest lecturer Jason Beaver from the Apple User Interface Kit (UIKit) team covers scroll views and table views.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Dealing with Data: User Defaults, SQLite, Web Services&lt;/strong&gt; : Evan Doll discusses data in your iPhone application.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Performance and Threading&lt;/strong&gt; : Alan Cannistraro covers application performance.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Text Input, Presenting Content Modally&lt;/strong&gt; : Evan Doll covers text input and presenting content modally.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Address Book: Putting People in Your App&lt;/strong&gt; : Alex Aybes discusses interfacing with contacts in the address book.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Debugging Tips, Searching, Notifications, KVC/KVO&lt;/strong&gt; : Alan Cannistraro covers searching and notifications.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Touch Events and Multi-Touch&lt;/strong&gt; : Steve Demeter shares his experience in creating the popular game applications, Trism. Josh Shaffer follows with a overview of touch-events and multi-touch.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;iPhone Device APIs: Location, Accelerometer &amp;amp; Camera, Battery Life &amp;amp; Power&lt;/strong&gt; : Justin Santamaria, from the iPhone Software Engineering team, provides an overview of the iPhone device APIs.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Audio APIs, Video Playback, Displaying Web Content&lt;/strong&gt; : The lecture today covered audio, video and web APIs available on the iPhone. We  also touched on settings bundles and some additional view transitions.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Creating New Expressive Social Mediums on the iPhone&lt;/strong&gt; : Ge Wang, co-founder of Smule and developer of Ocarina and Leaf Trombone, spoke at length today on metaphors for the iPhone and creating expressive social mediums for the phone.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Unit Testing, Localization &amp;amp; More :&lt;/strong&gt; Evan covered unit testing, how to have some fun (and either impress your friends or crash your app) with Objective-C, localization and some common questions that we've been asked&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have gone through several of these and they are really very good.&amp;nbsp; We are fortunate to have a resource like this without cost.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A few bonus talks were also included from some folks who already have iPhone applications developed:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Loren Brichter on Tweetie&lt;/strong&gt; : Loren Brichter shares his experience in developing Tweetie, the most successful paid social networking application.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;How to Build an iPhone App that Doesn't Suck! (In 10 Easy Steps)&lt;/strong&gt; : Steve Marmon discusses the iPhone User Interface guidelines and proposes ten steps for the application development process.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;From Upstart to Startup to Grownup: Lessons Learned in the First Year of an iPhone Company&lt;/strong&gt; : Jessica Kahn, the Director of Engineering at Tapulous, describes her experience at an iPhone application development company.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Optimizing OpenGL for iPhone&lt;/strong&gt; : Tim Omernick from the popular gaming company, ngmoco, provides a broad overview of OpenGL on the iPhone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of the materials from the course are available from the &lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/index.php"&gt;class site at Stanford&lt;/a&gt;.&amp;nbsp; This seems like a great resource to anyone starting out in iPhone development and either cannot get the time away.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:67d7c325-61d3-49b5-a4ab-fc34288c3604" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/iPhone"&gt;iPhone&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Training"&gt;Training&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Stanford"&gt;Stanford&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/iphone/"&gt;iPhone&lt;/a&gt; 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/tbMiU--7lN8" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/iphone/learn-iphone-development-for-free/</feedburner:origLink></item><item><title>RubyMine Interview on InfoQ</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/0uQxQelR6ZE/</link><pubDate>Tue, 19 May 2009 15:11:05 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/infoq/rubymine-interview-on-infoq/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>0</slash:comments><category domain="http://accidentaltechnologist.com/infoq/">InfoQ</category><description>&lt;p&gt;&lt;a href="http://www.jetbrains.com/ruby/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="RubyMineLogo" border="0" alt="RubyMineLogo" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/RubyMineInterviewonInfoQ_9A7B/RubyMineLogo_3.jpg" width="275" height="100" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have to admit I have tried using various IDE’s to build Ruby on Rails applications, Aptana RadRails and NetBeans are two, yet have come back to TextMate each time.&amp;#160; I can’t say any of what I have tried were particularly bad, actually they were pretty good, but seemed a bit hefty for the work at hand.&amp;#160; Recently, &lt;a href="http://blogs.jetbrains.com/ruby/2009/04/meet-jetbrains-rubymine-10-&amp;mdash;-a-brand-new-ide-for-ruby-and-rails/"&gt;JetBrains released RubyMine 1.0&lt;/a&gt; as their entry into Ruby IDE’s.&amp;#160; I started using it for a couple of Rails projects I have been working on and I have to say, I am impressed with it so far.&amp;#160; I plan to write up a further review or result of my work later here and on InfoQ but I need to work with it a bit more.&lt;/p&gt;  &lt;p&gt;In the meantime, I had the opportunity to speak with the lead developer of &lt;a href="http://www.jetbrains.com/ruby/"&gt;RubyMine&lt;/a&gt;, Dmitry Jemerov, about RubyMine and the direction they are taking.&amp;#160; It seems they are listening intently to their users.&amp;#160; I can say this because as a RubyMine beta tester I had issues and they were promptly addressed.&amp;#160; &lt;/p&gt;  &lt;p&gt;The future looks bright for this product and I intend to keep using it to give it a fair test.&amp;#160; Please take a few minutes to read my interview on InfoQ titled &lt;a href="http://www.infoq.com/articles/rubymine-dmitry-jemerov"&gt;Talking RubyMine with JetBrains Developer Dmitry Jemerov&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5d263c30-094a-4b97-8480-378ce799056a" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/RubyMine" rel="tag"&gt;RubyMine&lt;/a&gt;,&lt;a href="http://technorati.com/tags/InfoQ" rel="tag"&gt;InfoQ&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JetBrains" rel="tag"&gt;JetBrains&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby+on+Rails" rel="tag"&gt;Ruby on Rails&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IDE" rel="tag"&gt;IDE&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/infoq/"&gt;InfoQ&lt;/a&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/general/2008-another-year-gone-by/"&gt;2008 - Another Year Gone By&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/aptana-radrails-an-ide-for-rails-development-interview-up-on-infoq/"&gt;Aptana RadRails, An IDE for Rails Development, interview up on InfoQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/book-reviews/book-review-foundations-of-programming-by-karl-seguin/"&gt;Book Review : Foundations of Programming by Karl Seguin&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/0uQxQelR6ZE" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/infoq/rubymine-interview-on-infoq/</feedburner:origLink></item><item><title>Strange Restful_Authentication Plugin Issue</title><link>http://feedproxy.google.com/~r/AccidentalTechnologist/~3/QDvS5zcZ8mk/</link><pubDate>Fri, 15 May 2009 15:02:27 GMT</pubDate><guid isPermaLink="false">http://accidentaltechnologist.com/ruby/strange-restful-authentication-plugin-issue/</guid><dc:creator>Rob Bazinet</dc:creator><slash:comments>4</slash:comments><category domain="http://accidentaltechnologist.com/ruby/">Ruby</category><description>&lt;p&gt;I was working late last night trying to get a new user interface design implemented on one of my Ruby on Rails applications while at the same time getting an initial authentication bit done using &lt;a href="http://github.com/technoweenie/restful-authentication/tree/master"&gt;Rick Olson’s awesome restful_authentication plugin&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I had some migration updates so I can the usual:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;cap deploy:migrations&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;During the stream of text output by Capistrano I received an error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;uninitialized constant User::Authentication&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;My initial thought was that I must have missed some configuration setting on my server, but after looking around for a bit I could not find what I might have left off. The error indicated with was something to do with the restful_authentication plugin but testing in both development and production worked fine (of course).&lt;/p&gt;  &lt;p&gt;Some searching around the web revealed a few suggestions ranging from making sure the restful_authentication directory contained an underscore and not a hyphen to various Rails versioning issues.&amp;#160; This application was working just fine on Rails 2.2.2 in development so I was confident it was not the issue.&lt;/p&gt;  &lt;p&gt;I finally came upon a &lt;a href="http://acts-as-blogr.com/posts/-uninitialized-constant-userauthentication"&gt;post by Brent Collier&lt;/a&gt; of Intridea who had the same issue as I experienced.&amp;#160; I had installed this plugin as I do with other plugins hosted on Github with the command &lt;code&gt;script/plugin install git://github.com/technoweenie/restful-authentication.git&lt;/code&gt;.&amp;#160; The plugin installed this way is a local git repository from the one stored on Github.&amp;#160; Taken from Brent’s blog, the way the restful_authentication plugin appears in the Github repository was the same as was appearing in mine:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/StrangeRestful_AuthenticationPluginIssue_8DD3/github-brent_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="github-brent" border="0" alt="github-brent" src="http://accidentaltechnologist.com/files/media/image/WindowsLiveWriter/StrangeRestful_AuthenticationPluginIssue_8DD3/github-brent_thumb.jpg" width="518" height="308" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The solution I needed to do was a bit different than the one described by Brent but close. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Started off by deleting the vendor/plugin/restful_authentication directory manually. &lt;/li&gt;    &lt;li&gt;Did a commit/push of my project to Github and verified the folder was gone in the Github repo. &lt;/li&gt;    &lt;li&gt;I downloaded the tarball of the restful_authentication plugin from Github.&amp;#160; &lt;/li&gt;    &lt;li&gt;Once extracted, I copied the folder to vendor/plugins and named the folder restful_authentication. &lt;/li&gt;    &lt;li&gt;Did a commit/push again to Github and looked at the folder in the repo to see if it looked like all the others.&amp;#160; Indeed it did. &lt;/li&gt;    &lt;li&gt;Finally, ran &lt;code&gt;cap deploy:migrations&lt;/code&gt; and all was good. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This was a very strange exercise and I would really like to know why this happened and the proper procedure to manage plugins which are a git repo themselves.&amp;#160; If anyone has an explanation and fix, I will update this post to reflect it.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b48e1b4f-e053-482b-963c-4dec655ac9d7" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/restful_authentication" rel="tag"&gt;restful_authentication&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Rails" rel="tag"&gt;Rails&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Plugin" rel="tag"&gt;Plugin&lt;/a&gt;,&lt;a href="http://technorati.com/tags/GitHub" rel="tag"&gt;GitHub&lt;/a&gt;&lt;/div&gt;&lt;hr /&gt;
&lt;p&gt;
Posted to &lt;a href="http://accidentaltechnologist.com/ruby/"&gt;Ruby&lt;/a&gt; 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Similar Posts&lt;/strong&gt;&lt;br /&gt;
&lt;ol id="similarPosts" class="splist"&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/ruby-on-rails/ruby-on-rails-201-available-now/"&gt;Ruby on Rails 2.0.1 Available now&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/ruby/replicating-rails-project-setup-on-development/"&gt;My Improved Rails Development Environment on the Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://accidentaltechnologist.com/technology/converting-to-graffiticms-from-wordpress/"&gt;Converting to GraffitiCMS from Wordpress&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AccidentalTechnologist/~4/QDvS5zcZ8mk" height="1" width="1"/&gt;</description><feedburner:origLink>http://accidentaltechnologist.com/ruby/strange-restful-authentication-plugin-issue/</feedburner:origLink></item></channel></rss>
