Category: Ruby

Ruby Denial of Service (DoS) Vulnerability Options

A potentially harmful vulnerability was found in all pre-Ruby 1.9.1 version of Ruby.  The issue was reported on the Ruby-lang web site and says it effects:

1.8 series

  • 1.8.6-p368 and all prior versions
  • 1.8.7-p160 and all prior versions

Ruby 1.9.1 does not suffer from this problem but seems apparent JRuby does have this issue and has been tested to prove it.

The Problem

The issue is pretty simple to reproduce.  BigDecimal, when asked to parse an overly large number, causes segmentation faults.  The following will reveal the problem:

BigDecimal("9E69999999").to_s("F")

Solutions

There are quite a few solutions to this problem and most involve patching an existing installation of Ruby.  The Ruby web site offers links to download Ruby source for both 1.8.6 and 1.8.7:

Please upgrade to 1.8.6-p369 or ruby-1.8.7-p173.

There are various things to consider when doing an update like this and building from source.  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.  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.  I probably won’t be effected by this issue as I have not yet but I would rather be safe, especially for my customers.

Having used a package manager, Ruby is installed in:

/usr/bin

The options at this point is to download and build Ruby from source.  Building Ruby from the Ruby website will by default but Ruby in:

/usr/local/bin

I won’t get into installing Ruby from source here, there are many good tutorials including one from FiveRuns, Compiling Ruby, RubyGems and Rails on Ubuntu.  You can use this tutorial for either of your flavors of Ruby.  Keep in mind you may need to adjust the PATH setting in your bash script to point to the right Ruby instance.  The post above states Ubuntu already has this set already, a quick check of my PATH and it indeed has this set.

One additional option that seems particularly attractive is Ruby Enterprise Edition (REE) from Phusion, the Passenger folks.  This group keeps on top of Ruby updates and is constantly updating their code.  They posted the DoS vulnerability fix almost right away and offer the source download or an Ubuntu package for 32 and 64-bit.

This is the option I am taking.  I have been wanting to move to REE for some time and I think it now the right time.  REE does by default install to the:

/opt/ruby_enterprise

directory, so a change to the bash environment is necessary.  The Phusion site has some good docs on how to install and configure REE:

Then follow the instructions that the installer gives you.

1.6. Configuring REE as the default Ruby interpreter

It is possible to configure REE as the default Ruby interpreter, so that when you type ruby, gem, irb, rake or other Ruby commands, REE’s version is invoked instead of the system Ruby’s version.

To do this, you must add REE’s bin directory to the beginning of the PATH environment variable. This environment variable specifies the command shell’s command search path. For example, you can do this on the command-line:

$ ruby some_program.rb    # <--- 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    # <--- some_program.rb will now be run in REE!

Invoking export PATH=... 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/etc/environment instead. On Ubuntu Linux, /etc/environment looks like this:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

Add REE’s bin directory to the PATH environment variable, like this:

PATH="/opt/ruby-enterprise-x.x.x/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

This will give me both better memory usage and the added security of fixing BigDecimal.

This does effect Ruby on Rails and there is a patch to Rails as a quick workaround.

Conclusion

It is great to have options and open source gives us the ability to have many.  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.  This only applies if the Ruby path is changed to which Ruby is being used.

Strange Restful_Authentication Plugin Issue

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 Rick Olson’s awesome restful_authentication plugin.

I had some migration updates so I can the usual:

cap deploy:migrations

During the stream of text output by Capistrano I received an error:

uninitialized constant User::Authentication

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).

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.  This application was working just fine on Rails 2.2.2 in development so I was confident it was not the issue.

I finally came upon a post by Brent Collier of Intridea who had the same issue as I experienced.  I had installed this plugin as I do with other plugins hosted on Github with the command script/plugin install git://github.com/technoweenie/restful-authentication.git.  The plugin installed this way is a local git repository from the one stored on Github.  Taken from Brent’s blog, the way the restful_authentication plugin appears in the Github repository was the same as was appearing in mine:

github-brent

The solution I needed to do was a bit different than the one described by Brent but close.

  1. Started off by deleting the vendor/plugin/restful_authentication directory manually.
  2. Did a commit/push of my project to Github and verified the folder was gone in the Github repo.
  3. I downloaded the tarball of the restful_authentication plugin from Github. 
  4. Once extracted, I copied the folder to vendor/plugins and named the folder restful_authentication.
  5. Did a commit/push again to Github and looked at the folder in the repo to see if it looked like all the others.  Indeed it did.
  6. Finally, ran cap deploy:migrations and all was good.

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.  If anyone has an explanation and fix, I will update this post to reflect it.

What can the Rails Maturity Model do for me?

Ever since the introduction of the idea of the Rails Maturity Model I find myself thinking about it and some questions come to mind;

  • Why was the idea even conceived?
  • Who is going to benefit?
  • Who will care about it?

I don’t really know why I think about this idea at all.  Maybe because I run a small Rails shop and I try to envision how my company might be part of it but there is not a single compelling reason at this point in time.  I do respect Obie Fernandez for all he has done for Rails, the great book and all the times I have heard him speak and always take something away from each talk.

I have to admit HashRocket seems to be doing a great business in an economy that is less than stellar.  The folks at HashRocket seem to really love to work there, so something is being done right.

So it comes back to my original three questions, the first being Why was the idea even conceived? I have looked over RailsMaturityModel.com and I can only seen companies who have jumped on the bandwagon and raising their hands to each practice they claim to follow.  It is really by the honor system since there is no way to know each company actually does these things.  Guess who is the first in each category…Hashrocket.  This seems a bit too convenient to me.

Now looking at who will benefit, it is really unclear to me.  If I was going to apply to a job with any of the companies on the web site I guess if Pair Programming is important to me then I can find out who follows the Pair Programming practice.  For me it comes down to what benefit can I get out of being part of RMM.  I can’t think of a single one.  My clients won’t care.  People looking to hire me will have never heard of RMM and won’t care that my company is on the list either. 

The only folks who I have seen who remotely care about this publicly is Hashrocket.  Even the companies on the bandwagon have not blogged (that I have seen) about how they feel about it.  I would like to hear feedback from them.

I have however seen some feedback from companies who do NOT believe in RMM;

Both are interesting opinions on the subject and worth a read. 

I wanted to get my thoughts out and finally put this behind me.  I have thought more than my share about it and have to say it doesn’t seem to have any value to either my clients or future clients.  I think my clients are the most telling of just how my consultancy stacks up against others by the value I add to their business.  Not a single client of mine will care if I have consultants in the same room or across the planet nor do they care that I pair program. 

It is interesting to look at the endorsements on the site, who appear to be either principals of the firms or buddies of the firms owners, employees or groupies.  I did not see an endorsement from a professional client. 

I think this is the last I have to say about RMM, oh except..I really hate the name.  The whole RMM really has nothing to do with Rails or maturity.  It is just a collection of practices determined to be useful by a bunch of consulting companies.  These companies could be doing PHP or Python and use the same practices, so Rails should not be in there.  Maturity…well, seems like the practices are really an evolution of practices used by past developers. 

Maybe I just don’t get it.  Enough said.

Technorati Tags: ,,

Learning Sinatra from a New Found Source

sinatra-logo

Sinatra is a relatively new DSL written in Ruby for creating web applications.  I only recently started working with Sinatra as an alternative to Ruby on Rails for the applications which are smaller and don’t need all the overhead of Rails.

The Sinatra web site has wealth of information on what Sinatra is, including a great wealth of documentation on many aspects of this DSL:

Options and Configuration

Detailed documentation on all of Sinatra’s built-in options and using set, enable, and disable to configure them.

Testing with Sinatra

Guide to testing Sinatra apps. Includes information on integrating Sinatra’s test helpers with test/unit, RSpec, Bacon, and test/spec.

Writing Extensions

How to add new functionality to Sinatra using the extension APIs.

API Documentation

Generated from Sinatra’s source with RDoc. The Rack API docs should also be consulted.

Also available with an alternate template at http://railsapi.com/sinatra.

Although the site is well put together and includes details which can help an experienced developer create new applications, the basics seem to be addressed a bit thin. A solution is in the works from a couple Sinatra folks, Bryan Woods and Markus Prinz, who are writing the Sinatra Book and doing so with an open audience on GitHub.  Up until a few days ago I was unaware of the book until a tweet by Bryan.

The book is obviously a work-in-progress but is a great start, as can be seen in the hyperlinked Table of Contents.  I haven’t gone through the book in its entirety but it is looking good and already proved its worth to me.  I wanted to point it out to the growing Sinatra fan base.

Technorati Tags: ,,

Rails Immaturity Model

Unless you have been living under a rock in the Rails world you have certainly not missed the latest, a presentation at the Golden Gate Ruby Conference a couple weeks ago by Matt Aimonetti titled CouchDB + Ruby: Perform Like a Pr0n Star raised many eye browse.

Although I did not attend this conference it was widely known that Matt’s presentation featured women in thongs to drive some of Matt’s points home.  Since Rails is mainly a male audience, the content didn’t offend the males but for the number of women, it was tasteless.  I won’t try to find my own quotes from women as _why has done a great job already, but for example:

Amy Newell: I understand that the ruby community prides itself on its un- or anti-professionalism. But some professional norms exist for very good reasons: because they make it easier for people of different backgrounds and life experiences to come together and work productively and respectfully. One doesn’t have to be an uptight square to suggest that aggressive displays of sexual content at programming conferences perhaps decrease, rather than increase the ability of those attending to learn and focus on the technology itself. Titillation is certainly good marketing, but frankly, if you can’t find a way to make your presentation interesting that doesn’t include thonged asses, your presentation isn’t interesting. Not everyone responds to tits and ass, but everyone can respond to honest, creative, intelligent command of the material and eagerness to share it.

Denise: Only six women at the conference… it explains everything, off course the majority liked it! […] the issue is not about censorship and freedom of speech, the issue is about mutual respect, there are no rules or laws for this, only human judgment.

I have to admit when I heard of Matt’s presentation I just had to shake my head and wonder why he thought it was acceptable to use those images in what was supposed to be a respected presentation.  The real issue here was not really Matt’s lack of judgment but the reaction by DHH.

  dhh-pr0n-is-great

He finds this totally acceptable and lauded it.  DHH is the spokesperson for Rails, the poster-child if you will, and I would certainly expect better values from him.  Sure, Rails is supposed to be edgy, but there has to be limits.

I have spent many years doing Microsoft development and still do it today and you would NEVER find such total lack of judgment used by community leaders in the Microsoft camp.  You would never find Scott Hanselman or others using thonged women in their presentations.  It would never be acceptable and would never be expected.

Reddit has some good feedback on the debacle, comment Rails is still a ghetto.   Matt is part of the Rails Activists team and should have had better common sense than he used.  This lapse in judgment lead to the resignation of Mike Gunderloy, long-time .NET and now Rails developer, from the Rails Activist team.

But unfortunately for me, in parallel to the public discussion there have been private ones. I can’t reveal details without breaking confidences, but suffice it to say that a significant number of Rails core contributors – with leadership (if that’s the right word) from DHH – apparently feel that being unwelcoming and “edgy” is not just acceptable, but laudable. The difference between their opinions and mine is so severe that I cannot in good conscience remain a public spokesman for Rails.

So, effective immediately, I’m resigning my position with the Rails Activists.

This is truly a sad result of this fiasco.  Mike has been a pillar of the Rails community, bringing in years of experience outside of Rails.  I think this sums up the current true state of the Rails community.  There are too many thoughtless, hapless cowboys leading a great community of developers that it is a shame.  There are many folks who are very thoughtful, not the cowboy type and are in this to build a strong, mature community.  These folks are overshadowed by the few with poor values and are too immature to lead.

A very strong business leader and Rails community figure, Obie Fernandez, posted a very good post to the Rails Activist group showing his distaste for the debacle.  His suggestions should only be the beginning:

So as to not complain without offering solutions, here is my list of
what I think should happen (for discussion):

1) Matt should resign from the Rails activist group
2) If Matt does not understand why what he did and subsequent
non-apology was wrong, then we should be kind enough to explain it to
him
3) With all due respect to DHH and notwithstanding his desire for
Rails to remain "edgy" I think he should apologize for implicitly
endorsing Matt’s behavior

These are very good suggestions, will they be followed?  I guess we will see if any maturity exists at the top of the Rails pyramid. 

My Improved Rails Development Environment on the Mac

I use Apache and Phusion Passenger for my production Ruby on Rails applications, it has worked well and the deployment story couldn’t be any easier.

Most Ruby on Rails developers probably are familiar with running either WebBrick or Mongrel on their development system with the usual script/server command in a terminal session and access their application in the browser with http://localhost:3000.

This works fine in most circumstances but it does really mimic how I setup a web server in a production environment.  One application I have been working on recently makes pretty heavy use of subdomains, such as customer1.myapp.com, customer2.myapp.com, etc. and implementing this on my Mac, where I do development, is not as trivial as I had hoped.  It seems creating wildcard domains on the Mac is not possible and something strange has been going on relating to sessions and ports other than 80.

Since Apache2 is already running on my Mac I decided to investigate running Passenger Phusion alongside Apache as I do in production.

Passenger Setup

Setting up Passenger is pretty straightforward, just need to install the gem and create a configuration file.  Installing the gem:

sudo gem install passenger

Once the gem is finished install then I installed the required Apache module:

sudo passenger-install-apache2-module

Passenger uses configuration files much like those used by Apache2.  I needed to create a configuration file for Apache to use to load up mod_passenger when it started along with my virtual host information.  My file is called passenger.conf and is kept in /etc/apache2/other directory. The main apache2 configuration file (/etc/apache2/httpd.conf) has a command to load all files ending in .conf from the other directory to be processed.  My setup looks like this:

#/etc/apache2/other/passenger.conf
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.1.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.1.3
PassengerRuby /usr/local/bin/ruby
# Set the default environment to development
RailsEnv development
# Which directory do you want Apache to be able to look into for projects?
<Directory "/Users/rbazinet/rails_apps">
Order allow,deny
Allow from all
</Directory>
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/Users/rbazinet/rails_apps/myrailsapp/public"
ServerName myrailsapp.dev
ServerAlias myrailsapp.dev *.myrailsapp.dev
</VirtualHost>

I decided to put the virtual host info in here instead of using something like Passenger Preference Pane.  This option would be cleaner and easier to manage but it didn’t work for me, seemed to just hang and then lose all of my virtual host setup.  After several attempts it hardly seemed worth the pain, maybe your mileage will vary.

After the configuration file is in place, a restart of Apache will load up the configuration file:

sudo apachectl restart

Name Resolution

One issue that needs to be addressed is how our local, customer domain will be resolved.  One approach is adding entries to the /etc/hosts file to represent domains and subdomains I have, something like this:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1    localhost mywebapp.dev company1.mywebapp.dev
255.255.255.255    broadcasthost
::1             localhost
fe80::1%lo0    localhost

This seems to work just fine but thanks to gem named Ghost:

This gem is designed primarily for web developers who need to add and modify hostnames to their system for virtual hosts on their local/remote web server. However, it could be of use to other people who would otherwise modify their /etc/hosts file manually and flush the cache.

Ghost is a nice little gem used from the command line that lets me add host names, list them, delete etc. without modifying the hosts file.  A simple command such as:

ghost add customer1.mywebapp.dev

Is all that is needed to be able to browse to customer1.mywebapp.dev, without any resolution issues.  It’s easy to added and delete right from the command-line with Ghost.  The projects GitHub page says this works with Linux too.

Conclusion

This setup has solved my problems as far as getting these domains to resolve on my development system.  There are probably many ways to solve this problem but the overall solution worked and now has me using Passenger, which is on my production systems.  I have always believe developers should be writing software on the software they use for production and Apache with Passenger has me a whole lot closer.

I have not addressed debugging Rails apps in this configuration yet but I did find a plug-in called socket-debugger on GitHub.  It appears to allow debugging in the style we are used to with WebBrick or Mongrel.  I would love to hear with others are using to debug Rails apps on the Mac using Passenger.

There are also a couple other good resources for running Passenger in this configuration.  The first is from Railscasts called Passenger in Development, which I found after I setup my environment.  The other is a screen cast from Peepcode.

 

Change Databases in Rails with YamlDb

I have a few small Rails web sites I run and use SQLite3 for my database.  SQLite3 is the default Rails database provider and works great, but there are times when you outgrow or anticipate a need to change databases.  Perhaps a change to MySQL or PostgreSQL is in order.  This could be a tricky task, especially in a production environment with existing data.  I had this scenario where I had an existing SQLite3 database and wanted to move it over to MySQL but I had a fairly large amount of data I needed to move as well.

Thanks to Twitter and @hassan on a great Rails plug-in recommendation from Adam Wiggins called YamlDb, which is hosted on GitHub.  This handy little plug-in helps when you want to move from one database platform to another, say SQLite3 to MySQL.

Installation is just a simple little plug-in install, so on Rails 2.1

script/plugin install git://github.com/adamwiggins/yaml_db.git

The plug-in simply uses the database.yml file from the Rails project to determine which database to connect and dumps data to a file, db/data.yml.

Since I really needed to do this in a live environment I needed to see figure how to minimize downtime and maximize my success, which with YamlDb was pretty trivial.  A few steps did the trick, based on the the instructions for the project on GitHub.

  1. Backed up my production.sqlite3 file to production.sqlite3.bak.
  2. Ran the command rake db:dump (dumped all data and schema out to db/data.yml).
  3. Verified db/data.yml contained data instead of some 0K file.
  4. I had already had MySQL setup on another node on my Linode account with a new, empty database created.  If this didn’t exist it would have to be created.
  5. Changed my config/database.yml file to point to the new database on MySQL.
  6. Ran rake db:load.
  7. Tested application and all was working.
  8. Removed SQLite3 database from db directory in Rails application.
  9. Tested application again to make sure still works. 

This handy little plug-in saved me a lot of time and effort and worked flawlessly.

 

The Rails Maturity Model (RMM) – Who will be the Gatekeeper?

I debated a bit about writing a blog post about Obie’s idea for a Rails Maturity Model (RMM) but in the end decided to post my opinions and general thoughts.  I didn’t want to come across as just a gripe about it but a little bit more level-headed. 

Those readers not on the Rails Business list may not have seen the post can do so in the Rails Business Google Group.  I was going to repost parts of the original post here but didn’t want to have something interpreted out of context.  I interpreted the post as talking about certifications for Rails developers, which apparently is not how Obie meant to present the idea.

I was not the only one which took the original idea as a bit put off, Obie responded with Apology for a Rails Maturity Model and after some additional thought posted a video from the Hashrocket world headquarters – RMM Behind the Scenes.

Fabio Akita posted Rails (Im)maturity Model? as synonymous to CMMi.  I have been involved with CMMi and it is a pile of corporate red tape which is exactly what we should be trying to avoid here with Rails.

Many Questions

So, who is RMM intended to help?  This is the question that baffles me for the most part.  See, the Rails community is a community of good developers who follow best-practice, test-driven development (TDD) methodologies and we have a reputation for delivering good, maintainable and scalable software.  In my mind, I can only imagine that RMM will be a benefit to organizations like Obie’s company, Hashrocket.  If they set the standard for which others strive to, who benefits?  Hashrocket does and they will be the gold standard which everyone else will be compared to when a company is shopping for a Rails solution.

How does this benefit small shops like myself and they boatload of others out there?  I don’t think it does.  I may be wrong here but I can only see HashRocket putting itself up on a pedestal that looks down on everyone else.  I have gotten to know Obie a bit and I don’t get this from his personality at all, so what am I missing?

What part of the way Rails shops do business is currently broken?  I think the old adage “If it isn’t broke, don’t fix it” applies here.   Robert Dempsey posted some opinions and thoughts about having some standards.  I agree 100% here, just like running any business where we take strides to be the best we can be by doing the right things for clients.  In the end the client is the one who tells us we are doing right by them.

Not About Certification

All of the recent controversy about RMM in the past week has brought one idea that RMM is not, it’s not about certifications.  Obie states this very clearly.  So it is not about certification, per se, but if RMM is similar to CMMI then it is about certification or proving you are following standards. 

I can only think about the days of striving to be a Microsoft Partner and having to run my business the way Microsoft said I should if I wanted their support and having to have a certain number of certified people on staff.  After abiding by these ridiculous rules for so many years I finally got tired of the BS and handed in my MS badge.  I can never once attribute having this certification/badge/label to getting a project, not even once.  I can’t recall MS ever sending work my way because of it, not even once.  So what was the point then?  It was so MS could say I was doing what they thought was right in running my business.  I dropped all things MS because I was tired of their attempts at telling me how to do things, charging for information that should be free ($2000 a year for Microsoft Developer Network access).

It is clear the word certification should not be used here but regardless of the word used I will be expected to live up to standards to be at the top of the Rails food chain.  The original post says it is so:

…set guidelines for what the characteristics and measurements that set apart a successful and disciplined Rails shop apart from the unwashed masses. Rather than trying to certify individuals (too easy to game!) I think it would be useful to have a certification process for organizations that involved an actual extensive interview process and audit of code and practices, with associated scorecards and registration in some sort of official directory. Yes, you would have to pay handsomely to get this certification, and the result would not necessarily be what you
expect.

I obviously have more questions than I do answers here but I wanted to get others thinking about this and come to their own conclusions and hopefully educate me at the same time.

Obie promises to post a more detailed follow-up about his ideas.  It will be a hard sell for me how ever it is presented but I will keep an open mind.

Technorati Tags: ,

acts_as_conference 2009 in the Rear View Mirror

aac2009

I attended the second annual acts_as_conference 2009 on February 6th and 7th and had such a great time.  The conference was put on by Robert Dempsey and company from Atlantic Dominion Solutions.  The venue this year was different than last year, it was the Ramada Orlando Celebration & Convention Center.

The two-day event is packed with a bunch of great speakers filled with great content.  I attended last year as well and think this years talks were even better than last year.  The single-track event included a variety of topics from Rails (of course) to software engineering and running a successful Rails-based business:

 

Day 1 – Friday, February 6, 2009

 

Day 2 – Saturday, February 7, 2009

The room where the sessions were this year had a much better screen to see the session slides and was more comfortable in general.  You can see the picture above what I am referring to.  The photo isn’t too bad either, considering it was from the back of the room via my iPhone.

One of the great things about conferences these days is the availability of the sessions online after the conference.  It’s a great service to those who cannot attend and gets the word out of the speakers even further.  Confreaks was on-site and recorded all the sessions and has them available already up on their site.

Summary

AAC 2009 was well-worth the time to come down from CT and get to mingle with some really great folks.  I had planned on writing up a pro-and-con list for the even but it would be mostly pros and very few cons.  The only thing I would change, for me personally, is the venue.  I didn’t find anything displeasing with it other than the fact of not being within walking distance of a place to get a cup or coffee or dinner.  Last year was really close to so many things.  I would be will to pay more for the event if it was centered around a busier area and in a single, modern building.  Granted, this is a very minor criticism of the event, which should go to show how good it was.

One other little minor thing would be to have time between sessions for a little more “hall talk”.  The two-days of the event were packed full of content so I don’t know how this would really be possible other than starting the day earlier and/or making it run later.

I really like these single track conferences so much more than the larger ones.  Each type has its place but with a single-track you get to take in everything.  I find myself gravitating toward talks more geared toward running a business, such as the one from Steven Bristol or more philosophical ones from Dan Benjamin and Nathaniel Talbott, which are truly thought provoking.

I hope there will be an AAC 2010 and I plan on attending if it happens.  Maybe next year I will submit a talk proposal but I find it relaxing just to sit back and listen to everyone else.

Nice Ruby on Rails Tutorial List

I found out about a really good list of Ruby and Ruby on Rails tutorials for those just starting out or looking to brush up on their Ruby from eConsultant:

Helpful Ruby on Rails tutorials.

  1. AJAX powered chat in 3 hours on Ruby on Rails : Tutorial on creating simple Web chatroom
  2. Ajax on Rails : at ONLamp
  3. Beginner’s Guide to Rails, part 1 : series of tutorials at GodBit
  4. Building Ruby, Rails, LightTPD, and MySQL on Tiger : at Hivelogic
  5. Create a To Do List with Ruby on Rails – Beginner’s Tutorial : at thehua
  6. Distributing Rails Applications – A Tutorial : by Erik Veenstra
  7. Fast-track your Web apps with Ruby on Rails : at IBM
  8. Four Days on Rails : Tutorial in PDF at HomeLinux
  9. Getting Your Feet Wet With Ruby on Rails : at Webmonkey
  10. Installing Ruby on Rails with Lighttpd and MySQL on Fedora Core 4 : at DigitalMediaMinute
  11. Instant Rails : preconfigured Rails software
  12. Introduction to Ruby : for Perl programmers at SixBit
  13. Introduction to Ruby for Mac OS X : at IO
  14. Learning Ruby : by Daniel Carrera
  15. Many to Many Tutorial for Rails (PDF) : at JRHicks
  16. ObjectiveView Ruby on Rails Introduction (PDF) : at Ratio
  17. Really Getting Started in Rails : at Slash7
  18. Rolling with Ruby on Rails (Part1) : at ONLamp
  19. Rolling with Ruby on Rails, Part 2 : at ONLamp
  20. Ruby on Rails : at RegDeveloper.co.uk
  21. Ruby on Rails on Oracle: A Simple Tutorial : at Oracle
  22. Ruby on Rails Screencasts : at RubyOnRails
  23. Try Ruby : Try Ruby in the browser at Hobix
  24. Tutorial : a basic tutorial at RubyOnRails
  25. Really Getting Started in Rails : Despite being written back all the way back in January 2005, Amy Hoy’s short and sweet intro still manages to be relevant
  26. Rails for Designers : by Kevin Clark
  27. Ruby QuickRef : quick reference guide.
  28. Ruby Tutorials : at Tutorialized.com
  29. Using Ruby on Rails for Dev on Mac OSX : at Apple
  30. How to Build a Ruby on Rails Engine: In-depth Start-to-Finish Tutorial : at AlterLabs

Related Posts:

  1. Ruby on Rails Basics (9 links) : Software / services to help in PHP.
  2. Ruby on Rails Blogs (10 links) : Blogs featuring articles, codes and discussions on Ruby.
  3. Ruby on Rails Demos Exampls Code Samples (29 links) : s
  4. Ruby on Rails Hosts (238 links) : Web hosts supporting Ruby.
  5. Ruby on Rails Official Sites (3 links) : Official sites for Ruby developers.
  6. Ruby on Rails Projects Sites (346 links) : Projects and sites developed using Ruby.
  7. Ruby on Rails Tutorials (29 links) : Helpful Ruby on Rails tutorials.

I thought I would share this as it may be helpful to other Ruby developers.  Included is a list of Related Posts from the article which may also be of use.

Enjoy!

Technorati Tags: ,