Sunday, December 7, 2008

Getting Up and Running With Adhearsion

As many of you know, I'm extremely interested in developing applications that use the open source telephony project called Asterisk. You also might know that I'm a HUGE fan of the open source project started by Jay Phillips called Adhearsion. It aims to make developing VoIP applications in Asterisk, object oriented, easier to maintain, integrates with Rails and makes the process of developing VoIP applicatons FUN once again.

In this screencast, I show how you can get up and running with Adhearsion in a just a 10 minutes. Sit back and I hope you enjoy the presentation. Please let me know if there are other screencasts in the area of new technology that you might be interested in learning more about. I have a lot f fun doing these (when I have the time) and have a few sample applications (one of the them is a click-to-call service), which I'm planning to do screencast on this the coming weeks. Enjoy!

Sunday, September 28, 2008

Asterisk Screencast

I've been learning and working with Asterisk for approximately the last 10 months. It's quite an amazing piece of software and I truly believe that it will change the way telecommuncations is done in the future. Along with Asterisk, I have been playing around with two very cool projects that interface with Asterisk - Adhearsion and Asterisk-Java. Both of the projects are aiming to solve similar, but yet very different problems in the VoIP space.

I submitted a screencast to the Adhearsion project showing how you configure and install Asterisk. If you are interested in learning more about Asterisk, you can watch my screencast! I had a lot of fun doing it and know that I'll be doing more in the near future.



If you are curious, I used screencasting software called ScreenFlow. It's hands-down one of the most fun pieces of software to use when doing screencasts. Look for more screencasts coming in the next few months on whole range of technology topics!

Thursday, May 22, 2008

Little Brothers Website Launches

As I blogged about a few months ago, I was a part of a local development competition called the F1 Web Challenge. The competition was held back in March and was a 24 hour competition where 10 teams of 8 technologists worked together to build a website for a different non-profit. Our team was Ruby.MN and our non-profit was Little Brother's Friends of the Elderly.

After the 24 hours was completed, we did have a "functioning website". However, there were still some things that had yet to be completed in terms of bugs, a few minor features and the "D" word.. deployment. I ended up taking on this task of working with Kathleen from Little Brother's.

Tasks

1. Setup and configure the website on a place that would host if for them.
2. Work on fixing any bugs that we outstanding in the code.
3. Working with other developers on the team to complete the implementation of some of the features.
4. Keep a central point of communication for people at the non-profit to deal with the changes on the website until we went live.

Well, I'm safe to say that we've finally made it!

http://www.littlebrothersmn.org


Over the past 2+ months, it's been a little slow going as I've been the main person taking on the responsibility along with running my software business. As it's been for a non-profit, this has all been work that doesn't pay me anything. I do wish to say that I tremendously appreciate the help that I have gotten since the competition from a few of the members of our team. Even though I took on most of the work, launching the site myself, there is no way I would have been able to get it completed without help from a few key people. Thank you.

Configuration/Deployment

A few things I wanted to note in my configuration and deployment.

Setting up the hosting was not a trivial as one would think. First, LBFE had an existing website that we could not take down as it's accepting online donations. It was hosted on GoDaddy and actually involved an SSL certificate, so the new site had to support SSL for online donations. GoDaddy likes to say that they support Ruby on Rails, but at last check that support Rails 1.1. That was not going to work for us.

VISI.com offered to host the site for 1 year for free as being part of the competition. After communicating with their support staff however, I got the feeling that they had never hosted a Ruby on Rails application. Hosting Rails is actually very easy, but we decided maybe we shouldn't be the guinea pig for VISI. Also, we had no information as to how expensive the costs might be next year. I think VISI is a great company for large companies, hosting large applications. They do good work, but they are not cheap. Thus, I would assume they would be out of the price range for your typical non-profit.

I have used RailsPlayground before in development and it was suggested by another person on the team that we look at using them. For ease of use and expertise on running Rails, we decided to go with RailsPlayground. I setup a "test" subdomain for us to use to test, since their "www" site should not be disturbed, get a new SSL certificate created at RailsPlayground (you can't transfer SSL certificates), and configure their DNS to make this all work, while not upsetting their email and existing website. Pretty basic stuff that I have done in my business, so it wasn't technically difficult, just time consuming.

Hosting Specifics

1. RailsPlayground supports using Mongrel, so we setup Mongrel to serve the site through Apache proxy.
2. RailsPlayground offers shell access, so I setup capistrano for the deployments.
3. Setup TRAC if needed for the bug repository and WIKI if in the future LBFE needs to submit bugs or create documentation.
4. I setup Subversion to manage all of our source code.
5. Created a nightly cron job to dump the database and backup all of the binary resources for the site.
6. Using Montastic to monitor the uptime of the website.
7. Made all of the DNS changes and worked with support to get the SSL certificate installed and working properly.

Just one note on RailsPlayground: I was a little weary of using them since I have actually used their services for a few years now for quick development applications on public facing sites that I didn't want to setup on my own Linux Virtual Server. To be honest, from my past experience I would not host a large scale production application with them. Their servers seem bogged down and run slow (even using mongrel and a few users) and I have had issues with major outages in the past. However, as it is with all virtual hosts, it depends on the machine you site is on. or more importantly who is bogging down the server. I can say though I have been pleasantly surprised running the LBFE site through them. In the past few months, the site has responded well and I been very happy with their lack of downtime.

Overall, this has been a great experience I think for everyone involved and I'm very happy with the outcome. I think it's a win/win for everyone. I've made some new friends through the process, learned more about Ruby on Rails development while working with some very bright teammates and a non-profit got a great looking new website out of the deal. Not a bad deal!

Sunday, April 13, 2008

IP Phone Install

Yesterday at our local Twin Cities Asterisk User's Group ( TCAUG.net ) we had the opportunity to do a real world, hands on, IP phone install at the client's business of the meeting organizer. What a great experience! The client is deploying 160, Polycom Soundpoint 301's at a newly acquired space within the same building.

In most cases, setting up an IP phone network is very straight forward. You can with DHCP and the default VLAN setting have the telephones actually download their configuration files from a local TFTP server. However, there was a bug in the boot-rom with these phones, so we had to do some manual configuration to get the system updated. The steps we took were.

  • Unpackage the IP phone
  • Boot the phone and select a static IP
  • Tell the phone the TFTP server to use.
  • Tell the phone the VLAN to use.
  • Reboot the phone and allow it to update itself.
  • Reboot the phone and reset it to DHCP.
  • Reboot the phone one final time and make sure it was assigned an IP correctly.
I actually had the opportunity over the past couple of day to help Eric do some of the line patching and installation of a plugs at the employee workstations. It was an awesome experience to get out in the field and work hands on with some new cutting edge IP phone technology. This install is using Asterisk on a 10 gigabit network. After we got the phone registered, our group played around with paging around 50 phone at the same time to see what sort of response from the Asterisk server. It turns out it didn't even break a sweat! Asterisk can scale very well in small to medium sized businesses. I'm looking forward to continuing to help Eric when I can with future projects, just to continue and round out my VOIP technology experience. I continue to see areas and new ideas of places where software can be used in these new IP based systems, but getting the chance to work, hands on with the phone and running hte lines is a lot of fun and something I have having a great time learning and working in.

Wednesday, April 9, 2008

Join Me At TCLUG

I'm bad at getting these messages out ahead of time, but wanted to let people know that I'll be presenting tonight, alongside two friends of mine, Jason and Eric, at the Twin Cities Linux User's Group (TCLUG). We'll be talking about Asterisk and the history/future of telephony using VOIP.
I'll be trying to hold my own in the conversation, since those guys are wizards when it comes to this VOIP stuff and deal with Asterisk everyday and run the Twin Cities Asterisk User's Group. I'll be talking more about the software integration that is possible with Asterisk using Adhearsion and Telegraph. Hopefully we'll have a good turn out. I really enjoy talking about VOIP and telecommunications and I see a great potential for all sorts of both client side and server side applications.

Here more information on the event and a link to the meeting page. Here's all the details.

When:
Wednesday, April 9, 2008, 7:00pm - 8:30pm

Where:
University of Minnesota Minneapolis campus, EE/CSci Building , Room: 3-115 (Room change!!) 200 Union St SE, Minneapolis 55455

Who:
Justin Grammens : Localtone Interactive, LLC
Localtone Interactive is a Minneapolis, MN based internet application development company focusing on using Ruby on Rails, Java, Linux and Open Source technologies to provide business solutions to our clients.

Jason Brockman : OneNet USA
OneNet USA is a Communications Solutions Provider offering integrated network solutions for voice, data, IP, and video to a diverse clientele

Eric Osterberg : Sound Choice Communications, LLC
Founded in May of 2001, Sound Choice Communications offers competitive telecommunications services in Minnesota including highspeed DSL, local VoIP dialtone, private data circuits, and VoIP long distance service.

Hope you can join us!

Friday, April 4, 2008

Emerging Digiterati

I just got back from presenting Localtone Radio at Emerging Digerati earlier this morning. It was held at the Wiesmann Art Museum on the University of Minnesota Campus. What an awesome event! I actually had never heard of this event, but my business partner Phil I think got the skinny on this event from our good friend Garrick.

Emerging Digerati is basically a showcase of emerging technology related to art - and I use art in the broad sense of the term. From everything related to video, audio, installation, design, etc. I talked with the people who have been running this event for the past 7 years and learned a little about the mission and goals of the event. This year was the first time that they tried doing a full week long event with presentations. I was blown away to see all of the different presentations people gave and all of the ways technology is emerging. A few take-aways that I do see in emerging technology were:
  • Trusted Friends - Some people call this social networking, but those are kind of loaded words, since they encompass a lot of concepts. Basically, the thought that there is so much content out on the internet, that people only have time to visit sites and keep on things that are recommended by their trusted friends. It's not so much to just network with people, but to use their suggestions in content you consume. I have some thoughts about how to add these concepts into Localtone Radio.
  • Interactivity - The days of the boring static website I would predict will be coming to a close. With Flash and technologies such as Ajax/Javascript, more desktop type interfaces are going to be demanded in the browser.
  • Video - We all know video is popular, but seeing a number of the presentations today solidifies this point and more sites will incorporate some form of video or pulling in video from other services in the future.
  • RSS Feeds - With the sharing of more information on the web, RSS feeds are becoming more well known as a way to distribute content to people. I was surprised at the knowledge and ideas people had related to sharing and using RSS feeds. RSS is something that I had kind of viewed as being beyond many consumers and was not a big deal in Localtone Radio. After today however, I'll be looking at ways to add them.
  • Passion - As with all artists, it's the passion of what you are working on that drives you. In all of the presentations today, you could tell that these were projects and technology that people truly felt passionate about. People often work on these projects for little or no money and instead are not driven by dollars, but by pure motivation.
I want to say a big thank you to Aaron and Anne from the Institute for New Media Studies the opportunity to be a part of this event. I'm looking forward to next year, if not to present, just to show up and take in what everyone else is up to. It was a great way to spend half a day (I unfortunately couldn't stay the whole time due to other meetings) and I'll be sure and be there next year.

Thursday, April 3, 2008

Turn Off The Lights

This past Saturday evening, Becky and I participated in Earth Hour. If you have not heard of this event, it's where everyone is encouraged to turn off all of the lights in their house for 1 hour, between 8 and 9pm their local time. A number of large companies here in Minneapolis turned off the lights in their buildings in observance of the event. I also noticed a number of homes in my neighborhood that went dark during this time as well.

Besides cutting down on energy consumption, I found it to be a very relaxing time and a good way to spend quality time with the person I love. Becky and I lit candles and sat and talked in the kitchen of our house. It was great way to force us to get out of the daily grind and never ending tasks and just spend time together. There is a wide range on what people believe in global warming, but I'd like to suggest people try and do this more often, both for the sake of the helping environment, but also as a way to spend quality time with your family.

Earth Hour probably never intended to have this consequence, but try turning off the t.v. and the lights for even 15 minutes every week and talk with each other more often. Life goes by far too fast and those days of sitting at home and using candles to read a story or talk about what is going on in each other's lives will be gone before you know it. Just something to think about.

Sunday, March 9, 2008

F1 Web Challenge


Last weekend I volunteered my time for a non-profit charity website programming event. It was one of the most fun events I've been a part of and would do it again in a heartbeat. Here's the scoop on what happened.

Story

A local consulting company named Sierra Bravo decided to sponsor an event that would bring 10 teams of 8 technology people together with 10 non-profits. They made a competition out of the event pitching it as "24-hours of overnight programming". Each technology team could use any programming language and/or system they wanted to, but after the 24 hours the programming was to stop and a panel of judges would decide who created the best website. The winning team won some small prizes, but the big deal was that they won "bragging rights" as the F1 Web Challenge Winner for 2008. The event was 24 hours of programming time, but with breaks, time to setup and tear down and presentations I was awake for 36 hours straight!

Oh, also the plan was originally to have 10 teams and 10 non-profits, but because of overall demand it was decided to "take it to 11" and another team and non-profit would be added.

My team

My team was name Ruby.MN, a collection of local Twin Cities developers who met at our local Ruby Users of Minnesota (RUM) meetings. We had two designers who are not programmers and one person who specializes in Quality Assurance. We had a "dream team" - some really solid rock-stars covering all area of technology and design.

Our non-profit

Our non-profit randomly chosen was "Little Brother's Friends of Elderly" and we were designing and implementing the MN chapter. We were very excited to get a chance to work with this non-profit. They do some amazing work combating loneliness and working with elderly citizens when it comes to both mental and physical health and well being. Kathleen was the person from the organization that we worked with and she was a real trooper. She stayed with us the whole time and was one of the best clients I've ever worked with. Very open and understanding of our limitations in the timeframe we were under and she was very excited that she was working with the Ruby.MN team!

Photos from the event









My schedule for the 36 hours went as follows:
  • 6:00 AM - Wake up.
  • 6:45 AM - I arrive to the place where the event is being held (St. Paul, U of M campus). I get signed in and set up at our tables. They provided us some breakfast.
  • 7:30 AM - Non-profits are matched up with team, rules are explained and coding commences.
  • 12:00 PM - We stop for a break and lunch from BW3's.
  • 1:00 PM - Coding resumes.
  • 6:30 PM - Break for dinner from Chipolte.
  • 7:00 PM - Coding resumes.
  • 8:30 PM - Break for prizes to be given out (I win an HD-DVD of a National Geographic Special)
  • 8:45 PM - Break for playing "Rock Band". Ruby.MN comes in 2nd place on the applause-o-meter.
  • 10:30 PM - We had a clown show especially for the Ruby.MN team!
  • 12:00 AM - Midnight snack from Dominoes.
  • 3:00 AM - All are feeling very tired. A few take a break for some sleep. I continue to stay awake and work.
  • 6:30 AM - Breakfast is brought in. Bagels, doughnuts.. lots of energy drinks!
  • 12:00 PM - Coding stops.
  • 12:30 PM - Lunch is served. Chinese buffet.
  • 1:30 - Presentations are performed in front of all of the teams and the judges.
  • 2:30 PM - Event is complete and the winner is crowned.
  • 3:00 PM - Clean up my stuff and call Becky to be picked up.
  • 3:30 PM - Becky and I go on a walk up to the store.
  • 6:00 PM - I fall asleep on the couch after being awake for 36 hours.
This was an awesome experience and one in which I feel like I learned as much as shared. One of the other guys on the team I heard say something like, "This is something that more conferences should do, instead of sitting in a room and listening to one person ramble on." I completely agree. Usually when you go to technology conferences (or probably any conference I would argue), it's all about sitting in a room and letting one person present and trying to learn from them in 45-90 minute increments. Some sessions very in time, but they all are basically the same. One presenter and many attendees. How about doing a programming exercise for the conference - one where all the attendees of the conference build something? The F1 Web Challenge was a competition, but it really was a technology caucus. People who knew each other, shared ideas even across teams and all of the work and positive energy was directed towards the non-profits, as opposed negative energy towards each other.

Final Verdict

Well, after the sites were all judged and all of the points were tallied, only one winner could be awarded... I'm sorry to say however it was not Ruby.MN who was crowned the winner. To be honest, it was nearly impossible to choose one winner in this event. All of the teams created some beautiful and useful websites for their charity. Great job job everyone!

Anyway, check out the links below for the information on the event and a "live blogging" one of my teammates did during the event. Once the site we built is fully functional and live, I'll be sure and post an update here with the all of the details. Here's some simple "before" and "after" screenshots.

Before



After



Additional Links

Live Blogging By Samuel Schroeder

Official F1 Web Challenge Website

Tuesday, February 12, 2008

Ruby and VOIP - Continued

I completed my presentation this past weekend of Ruby and VOIP to the Twin Cities Asterisk User's Group. It went very well and I had a great time talking about Ruby and how I see Adhearsion and Telegraph being used in this emerging technology space. There were some great questions from the group and I think they had fun seeing my demonstrations as well. Plus, this time I had 2 hours to present, so I was able to get through all of my demos!

Contrasting this presentation with the one I did a few weeks ago at RUM, it was an interesting difference in groups that I presented to. Both groups are extremely technical people and include collegues that I have a great deal of respect and admiration for. It was interesting to me that there wasn't much crossover exposure of technology between the groups. Many people at the RUM group, had heard of Asterisk, but I think only 1 person raised their hand when I asked if anyone had download or run it. Likewise, the Asterisk folks had heard of Ruby, but none of them had written a script before. I had however planned for this and modified my slides slightly since the Ruby User's Group needed some background information Asterisk and the Asterisk User's Group needed some context on what Ruby is. If you are curious, you can download my modified slides here.

<SOAPBOX>
What is so interesting in VOIP as I see it coming from a software background, are the applications that we can develop and put online. Bringing the ideas of Web 2.0 to VOIP makes these frameworks a disruptive technology - and disruptive in a good way. The status quo in telecom hopefully is not going to cut in any longer and being able to write applications to interface voice and web in some ways I see as the next frontier in internet application development. Additionally, with these two isolated camps of software developers and hardware telecommunication experts, I see the market needing more people that can bridge that gap and create some really kicking applications.

</SOAPBOX>

And at the end of the day though, what I enjoy most about working with both of these frameworks is that they are FUN to use. They allow you to be innovative. Go ahead, think up a new feature or application and have at it!

Friday, February 1, 2008

Ruby and VOIP

I've been doing a some work in the VOIP area recently, using Ruby and Open Source PBXes such as Asterisk and decided it would be fun to present at the Ruby User of Minnesota ( RUM ) meeting earlier this week. My topic was on Ruby and VOIP and it seemed to have been pretty well received. I have great respect for people who are comfortable and confident speakers. I still have a lot of work to do to get the jitters out, but I do enjoy taking the time to put together presentations and share what I have learned or created with other people in the technology world. Here is a link to my presentation - 32 slides of Ruby and Asterisk goodness!

I was able to show a few of the demos that I created, but I unfortunately ran out of time and didn't get a chance to show my "Who Wants To Be A Billionaire" Application. It's an application that allows you to be a contestant of a game show using your phone. You create and manage the questions using your web browser and when people call in, the system uses text to speech to speak you the questions. It keeps track of your point total and you can call back later and resume the questions if you wish. It's pretty cool and wasn't hard to do in Ruby using Adhearsion. Besides Adhearsion another cool framework for VOIP and Ruby is Telegraph. Telegraph provides some slick integration with Rails and allows you to integrate voice response directly into your controllers.

I'll be doing this same presentation for the Twin Cities Asterisk Users Group in a few weeks so I'll need to tweak the presentation slightly as most of the slides are currently explaining Asterisk. The guys at the Asterisk Users Group will need more of a background of Ruby as they work with and understand Asterisk. Wish me luck!

As I've written in a previous post, I see the interaction between voice and the internet being more and more blurry as time goes on (in many way with VOIP it already is pretty blurry), but where they come together I see an opportunity for new products, services and small business like myself to create some really cool stuff. And all the time, having fun while doing it!

Resources:
For those that saw the demo and are curious how you might get a hosted Asterisk solution, here's some providers that I am working with who do great work. I'd be more than happy to put you in contact with the right people at either of these organizations.

OneNetUSA - http://www.onenetusa.com
Arretta Communications - http://www.aretta.com

If you have hardware and want to host it yourself, Trixbox is a fully bundled ISO that contains everything you need to be up and running in minutes. I highly recommend it if you need to get a PBX up and running quickly.

TrixBox - http://www.trixbox.org

Monday, January 28, 2008

Ruby, Rails, Groovy, Grails, What's a programmer to do?

I'm doing some prototyping on a possible project for a client and have been getting my feet wet with the Grails Framework. I feel like know my way around Rails fairly well as I've done a few different small web applications in the framework and although there was a learning curve and Rails does have it warts, overall Rails really has saved me a TON of time and made me write better and well tested code.
For this project with my client, I'll be leaving it in their possession and feel that selling them on Groovy and Grails was a slightly easier sale as they already are a 100% Java shop. I think making the switch to writing Groovy, using their existing IDE (IntelliJ) and deployment in a J2EE container, would make them a little more comfortable than having to learn Rails. The JRuby guys are doing awesome work and if it was entirely up to me, I'd take the Rails route and consider using JRuby for production deployment if needed. But, getting them even to consider another framework was enough of a strain and if I told them I was leaving them an application in Ruby, I think I would most likely have been shown the door.

So, alas, I walk the Grails line. I must admit, it has been an interesting experience so far and one that I'd like to write more about in a future posting. I did however come across this blog posting in my research and have found it sums up very well some of the feelings I have for the whole Grails / Rails debate I see ensuing. I'd highly suggest reading the article.

Overall, I think each has it's place. I would agree that with Grails I find myself spending more time learning the framework because of poor or outdated documentation, and picking p Groovy the language relatively quickly. Where with Rails, I find myself learning the framework quickly, but taking more time to learn Ruby. It might however have to do with the fact that I learned Rails first and in some ways have to break my mind of some of the differences between what I learned in Rails and how it's done in Grails.

Regardless of which side you land on, I think it's worth your time to atleast investigate and learn about these frameworks as these are going to become more and more popular methods in developing applications as time marches on.

Tuesday, January 1, 2008

Upgrade to Rails 2.0

Well, to usher in the New Year, I bit the bullet today and tried upgrading one of the applications I built for my client to Rails 2.0 . The process to do the upgrade was relatively painless. The whole idea of Rubygems is awesome and is something I feel that the Java community is horribly lacking.
Installing Rails 2.0.2 was a simple as:

>sudo gem install rails

And then changing the line in the environment.rb to:

RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION

The issues though came in when I actually tried to run the application. Here's a brief rundown of the refactoring that I had to do and some gotchas that maybe other will run into.

1. Pagination - I had heard all of the warnings that the default pagination was going to be taken out of Rails 2.0, but like more programmers I am somewhat lazy ( or too busy ) to implement changes until I really NEED to. Well, if you upgrade to Rails 2.0 and you use the default pagination functions in Rails 1.2, you will NEED to do something else. It has been ripped out for Rails 2.0. I must say I agree with the the idea to pull it out as pagination is something that really should be done by a plug-in. After some searching I found a two options for people in my same situation.

a. classic_pagination - This is the plugin that will give you the same functionality of the old Rails 1.2 pagination. Many in the Rails community frown on the use of the old code for performance reasons, flexibility and good object oriented design.

b. will_paginate - This is the plugin that is seems like the Rails community is backing going forward for pagination. It offers some advantages of the old pagination methods and doesn't require too much refactoring to implement. Here is a good screencast on using it.
I decided to go with will_paginate since this is more the standard and new projects going forward this is what I will probably use, so it made sense for me to get aquainted with how it works. It turned out to be actually very easy to make the changes. He is an example of a change in the controller that I needed to make for "Jobs".

This:
@job_pages, @jobs = paginate(:jobs, :order => 'deadline')

Was changed to:
@jobs = Job.paginate(:page => params[:page], :order => 'deadline')

and in my view this code:
Page Number: <%= pagination_links(@job_pages, :params => {'job[filter]', @job_filter }) %>

was changed to simply:
<%= will_paginate @jobs %>

Much easier to read, understand and maintain. I'd suggest watching the screencast I mentioned above to learn more.

2. Nested RESTful routes - This was very annoying and was a little difficult for me to find much information on how to fix it. It seems like when you define a nested route in the routes.rb in Rails 2.0, the helper methods that are created don't behave the same or work the same as they did under Rails 1.2 This is what I had previously.

We have a relationship with jobs containing artifacts. So in our routes.rb:

map.resources :jobs do |job|
job.resources :artifacts
end

and in the a show.rhtml view had:

artifacts_path(@job)

When running under Rails 1.2 this works fine and generates the url

/jobs/1/artifacts URL.

Under Rails 2.0 we get an error:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.to_sym

Annoying. Well it turns out you have 2 options.
a. Modify your routes.rb to be

map.resources :jobs do |job|
job.resources :artifacts, :name_prefix => nil
end

b. Change the call to artifacts_path to instead be:

jobs_artifacts_path(@job)

There is information on this helper methods here. Thank god I found this reference. That is one thing that I do find frustrating about Rails is the lack of the documentation I was able to find when going through an upgrade. It seems like this issue I ren into should have beein BIG BOLD letters warning people that old RESTful methods don't work the same with out the changes that I mention. Anyway, I digress. I decided to go with the more simpler change of adding :name_prefix => nil to my routes.rb since I was worried about making sure I found all of the helpers. Hopefully this is the right choice and will work in all my cases. It seems to work for the time being.

3. Running unit tests in Textmate - It seems like there is some issues with a file called Builder.rb and it conflicting with Builder.rb in Rails 2.0. I couldn't run my tests in Textmate until I did what was described here. Not a big deal, but again... annoying and nothing that I have seen other documentation. With 75% of the Rails community using TextMate I'm surprised that at the very least DHH didn't mention it in the release notes for Rails 2.0

4. Capistrano - Capistrano 2 is what is now used by default with Rails 2.0. I tried running a simple 'cap deploy' after upgrading an have been getting some odd errors. I need to track down exactly what is going on. I had thought that deploy.rb was backward compatible, but I guess not. For now I have been doing `cap _1.4.1._ deploy` and forcing it to use the old version for now. I'll track this down shortly.

5. Flash.now - So, I re-ran by functional tests and started getting failures. I have the following line in my application.rb

flash.now[:error] = "You are not authorized."

When running under 1.2.3 and my functional test I have an assert to validate that the error returns in the flash.

assert_equal "You are not authorized", flash[:error]

However, when running under Rails 2.0.2, THE FLASH IS NOT RETURNED! Why is that?

If I change the line in the application.rb and remove the .now to be

flash[:error] = "You are not authorized."

THE TEST PASSES! Not sure why this is in the case. I haven't seen anything in the release notes that mention an upgrade would cause this. Maybe I'll send a post to the RUM group to see if others have seen something similar.

All in all though, the upgrade to 2.0.2 hasn't been too bad. I guess I was hoping that it would be trivial, but I guess what can I expect? I did come from 1.2.3 all the way to 2.0.2 and I can't expect everything to just automatically work right out of the box. I has however only been 8 months since I started work on this system and am surprised the versions that we are up to in Rails. I'm excited to see where things are in at in another 8 months!