My first rails project completed

Hi all,

First, this is a longer than normal read but I hope that you get through
it all and can learn from my experiences.

So, I wanted to talk about my experiences with my first rails project
now that I’ve completed it for the beginning of the football season.
First, here’s the link:

http://ncaastatpages.com

I used to work as a Windows System A. for Charles Schwab,
working out of a U.S. Trust regional area before they sold the company
to Bank of America. After the transition, my fiance and I moved to
Plymouth, MA to be closer to her family and I figured finding work would
be easy in Boston or Providence. However, with the market conditions,
finding infrastructure jobs worsened for everyone, including myself.

So, I had some extra time and I had two hard choices before me. I could
either work on finishing up some certifications, MCSE or CCNA etc. or I
could work on development, a side of life I really enjoy immensely. I
chose the latter.

I’ve always wanted to learn Ruby and Ruby on Rails is a great framework,
in addition. My former ncaastatpages.com site was solely driven on PHP
and had numerous issues.

So, approx. 9 weeks ago, knowing absolutely nothing about ruby or ruby
and rails, I purchased 4 books (1-ruby, 2 - rails, and 1 enterprise
rails) and started to read. I took on a new project which included
upgrading my site and getting familiar with all that rails had to offer.
I went through a lot of hoops and hurdles but I’m happy to say that I
learned a great deal from working with the project, and from this
mailing group / boards.

So many of you have helped me over the past 9 weeks that I feel I’m
sharing a project that’s been touched by many. I really want to thank
those of you who shared your wisdom, your understanding, and your
patience with me.

=======================
My first baby steps

The first thing I did really, was go out and purchase a giant dry eraser
board. I nailed it right next to my computer and started to draw out
diagrams for how everything in my site was currently working. I saw a
lot of huge mistakes right from the start and since I was starting over,
I figured I could -erase- them and begin anew.

My database wasn’t normalized to 3NF (3rd normal form) and that’s where
I wanted to begin. Making sure that my database was organized properly
was important. I drew out my own schema which changed so many times, I
used up an entire pen drawing and erasing it out.

=======================
Components

I needed to figure out what components I wanted to use with my site. I
knew I needed the following:

Authentication
Pagination for tables

I started with just a few things - restful authentication and will
paginate. I quickly realized that I needed more than this but started
to get lost in the shuffle. I needed some hand holding and found that
Ryan B.’ railscasts site and the Learning Rails site from Michael
Slater and Christopher Haupt helped me out immensely, showing how to
create and manage my site with some baby steps.

I worked like a mad man, approx. 11 - 13 hours a day every day for 9
weeks to get my site ready for the season.

=======================
Hey n00b, yes you…

There were times I felt like a real newbie, even a little embarrassed to
have to ask some questions that might show that my skill with rails was
quite dismal. However, I have a photographic memory and retain
information like a sponge. I learn incredibly fast and no one here made
me feel embarrassed to have asked any question. I want you to know that
if you are new to rails that any question that goes unanswered for you,
will only make things worse.

Measuring skillsets with rails really comes down to how many questions
you have left to ask. Each day I had at least 100 questions. Today I
can probably count my entire list of questions on two hands.

=======================
Expand and Test

Creating tests was probably at times more difficult than creating my
site. It took me a long time to understand how to build a test criteria
and once I learned it, it became easier and easier. When I first
started, I thought, nope - no testing, not going to do it. It isn’t
necessary because I’m thorough. The more I added to my site the easier
it was to overlook something simple, even with as thorough as I had
been. I couldn’t put it off and so I started to write tests for
everything.

Lo, and behold, what’s that? Some of your database date columns are
float columns! What’s this? Some of your associations aren’t really
associated…

I think you can understand the point I’m making. Testing adds the most
important layer to your application, in that it won’t get tired. It
will not get lazy. If you cannot write a test failure for your code,
then you should find out why and fix that. Don’t be lazy. Make it
work.

=======================
Seeing the whole picture

About a week ago I started to relax a bit. I took a deep breath and
started to look over the whole picture. What had I really accomplished
with my project in the 9 weeks I began to work on it?

Full Authentication
User Authentication Mailers
Subscription Mailers
News Mailers
Encrypted Payment Gateway with IPN
CMS style in-text editing on dynamic pages
Fully normalized database, indexed, optimized for speed
Full collegiate statistics tables
TSRS Ratings System converted from php to rails
Head-2-Head Virtual Matchups (game comparisons)
Team clubhouse pages
Trends Analysis Support for teams
Flash and non-flash support
Scripting and non-scripting support
Browser testing with all major browsers
… etc… etc…

=======================
Going to Production

My site uses Linux, Apache2, Passenger, Capistrano + Github and my
experience with all of those could be summed up with the following
number (4%). I had about 4% experience with any of those pieces before
I started working with Rails. In 2 months, my experience with all 4 is
now around (75%).

My site had some hiccups but I fully administrate it on slicehost
myself. I’m the designer, the administrator, the creator of my world.
It’s not that difficult when you figure out that there are IRC channels
out there that can help with everything:

http://webchat.freenode.net/ (hit #RoR for ruby on rails, #Github for
github, #httpd for apache support, #Capistrano for Capistrano support,
passenger for passenger support)

=======================
Humble Confidence

I will say with a humble confidence that if you set your mind on a task,
believe in yourself (even if no one else does) you can do great things.
I believe that the harder road is the one that provides the path to
greater wealth and wisdom. If you do things that are easy, you receive
a lesser reward.

Always have faith and be patient, even in the darker hours when you feel
you are alone and no one is there to catch you as you fall into a dark
abyss. When you get there, step back, get some rest and tomorrow is
another day.

I’ve learned over this tumultuous 9 weeks that Rails is a fantastic
framework and Ruby is a fantastic language. I’ve learned that others
out there believe the same thing and that many of you who have helped
me, stand by these thoughts.

=======================
In Closing

Don’t be afraid to learn. Don’t be afraid to help others, especially
since you probably needed help at one time too. Be consistent and learn
from your mistakes. Take great notes and document your application
properly. If you leave your app for 1 year you should be able to come
back and understand where everything is and why it’s there.

I love Ruby and Rails. I put a “Riding on Rails” link on my site out of
tribute to the community and to the framework. I hope you enjoy my
site. A lot of positive things are coming out of it already and
hopefully this season it takes off.

Take care and many blessings.

JD.

On Thu, Aug 20, 2009 at 7:43 PM, Alpha
Blue[email protected] wrote:

http://ncaastatpages.com

http://ncaastatpages.com/tsrs_ratings?name=tsrs

You need to add a custom route to get rid of those question marks in the
urls.

Something like this should work:

map.connect ‘tsrs-ratings/:name’,
:controller => ‘tsrs_ratings’,
:action => ‘index’,
:requirements => { :name => /[\w-]+/ },
:name => nil


Greg D.
http://destiney.com/

Alpha B. wrote:

Hi all,

First, this is a longer than normal read but I hope that you get through
it all and can learn from my experiences.

So, I wanted to talk about my experiences with my first rails project
now that I’ve completed it for the beginning of the football season.
[…]

Hey, great post! (Although, as you know, your app will probably never
be “completed” – you’ll always be thinking of further improvements.).
I’m very impressed with how fast you learned all this stuff, and I’ll
have to check out your site. I’m so glad your experience thus far has
been so rewarding!

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Marnen Laibow-Koser wrote:

Hey, great post! (Although, as you know, your app will probably never
be “completed” – you’ll always be thinking of further improvements.).
I’m very impressed with how fast you learned all this stuff, and I’ll
have to check out your site. I’m so glad your experience thus far has
been so rewarding!

Thanks Marnen,

You’ve helped me probably the most out of everyone on the boards. I
remember you telling me that I probably bit off more than I could chew.
Secretly, when you said that, it drove me to push harder, hehe. So, in
a way you gave me the greatest pep talk of all.

Your wisdom and advice in a lot of my project creation have been greatly
appreciated.

Hi Greg,

It was designed that way. I created a page management system so that
many of the pages are dynamically driven, not statically driven with
routes. Routing is fine with hard controllers but some of my pages have
no controllers and are stored directly in the database.

On Thu, Aug 20, 2009 at 8:20 PM, Alpha
Blue[email protected] wrote:

Hi Greg,

It was designed that way. I created a page management system so that
many of the pages are dynamically driven, not statically driven with
routes. Routing is fine with hard controllers but some of my pages have
no controllers and are stored directly in the database.

What is a “hard controller”? Is that different from a “controller” in
some way? I believe I own most every Ruby and Rails book ever
published and I’ve never heard of a “hard controller” before. Do
tell.

I understand the pages are dynamic, the question marks in the URLs
make that fairly obvious. Adding the route I posted will make your
urls appear to be static while the content remains dynamic. There’s
no reason to have any non-seo-friendly urls (question marks or
ampersands) on your site when developing with Rails, content being
dynamic or static, pages being database driven or other.


Greg D.
http://destiney.com/

Thanks for the feedback Greg, I’ll look into cleaning up the URLs.

Greg, that’s really neat mate. Learned something new and didn’t realize
you could do that with dynamic content through routes. My worry was
that if I decide to change the routing in page management, I’d have to
change the same routing in my routes file, making it more static than
dynamic.

On Thu, Aug 20, 2009 at 10:02 PM, Alpha
Blue[email protected] wrote:

I’d have to
change the same routing in my routes file, making it more static than
dynamic.

Is it really that difficult to experiment and see?

/me gives up

Have a nice site. :slight_smile:


Greg D.
http://destiney.com/

great post and, although this is a bit cheezy, an inspiration.
I wonder if you have done a blog of your travails - something the rest
of us could follow (those too embarrassed to ask the dumb questions we
would really like to ask but don’t want to make a tit of ourselves in
public).
Well done.

Hi Blue Alpha,

This is very impressive and encouraging. Just wanted to know which
IDE you used?

Thanks
VJ

On Aug 21, 5:43 am, Alpha B. [email protected]

Your app looks good, but it definitely took more than 9 weeks for a
total newbie to get to this state, or you weren’t alone :wink:

Vijaykumar S Pawar wrote:

Hi Blue Alpha,

This is very impressive and encouraging. Just wanted to know which
IDE you used?

Thanks
VJ

On Aug 21, 5:43�am, Alpha B. [email protected]

I started with a simple editor, SciTe, which I customized further for
output and wrappings. I’ve been using SciTe with AutoIt for years so I
was comfortable with that to start with. But, it wasn’t enough. I went
to Netbeans 6.5 and then later upgraded to Netbeans 6.7. NB 6.7 is a
fantastic IDE, though some might not like all that it has to offer.
Since I program in multiple languages, and use it for more than just
ruby and ruby and rails, it works great for me. The newer 6.7 has a
special aloha template that looks exactly as Textmate when you include
the Monaco font.

BenR wrote:

great post and, although this is a bit cheezy, an inspiration.
I wonder if you have done a blog of your travails - something the rest
of us could follow (those too embarrassed to ask the dumb questions we
would really like to ask but don’t want to make a tit of ourselves in
public).
Well done.

Hi Ben,

I did keep and retain notes throughout everything. I didn’t have a blog
site to post on but I plan on doing some screencasts in the future about
some of the issues I ran into. I have adobe captivate and have been
meaning to try it out.

I also bookmarked every site, and organized every bookmark into its
proper area. So, I have roughly 200 bookmarks that include links like
Tutorials - Rails - HABTM, or Tutorials - Rails - Associations etc. for
about 50 of those links. I thought about passing on what things I
learned and encountered, or sharing the bookmarks somewhere.

I made a new to rails post and put some of what I was learning in there
at the time.

http://www.ruby-forum.com/topic/191189

Also, I went back to my exact project creation date and I was actually a
bit incorrect. It took me exactly 10 weeks, 4 days to finish. When I
first started, I thought I had been using it for approx. 6 weeks, but
that wasn’t correct.

So now, you’re gonna give back to this community, right?
Newbs like me could use you. :slight_smile:

Aldric G. wrote:

So now, you’re gonna give back to this community, right?
Newbs like me could use you. :slight_smile:

Hi Aldric,

I usually spend about 90 minutes each day browsing the boards and
answering questions that I can answer.

But, I’d like to do more. I think screencasts did me more good
throughout my learning process over anything. Seeing something being
built, hearing words of encouragement from the mentors/teachers as they
teach you something went a long way. So, I’d like to do some
screencasts. I won’t be as knowledgeable as some, but I can definitely
help out people that are starting out.

I’m thinking about what areas I want to work with more:

Authentication
Mailers
Payment Gateways
Databases

All 4 areas I’m very familiar now with rails. I’m even starting to work
on my first plugin, a gateway plugin for Boku/Paymo (mobile phone
payment system).

Let me know and I’ll get to work on it.

Fernando P. wrote:

Your app looks good, but it definitely took more than 9 weeks for a
total newbie to get to this state, or you weren’t alone :wink:

Hi Fernando,

It took me exactly 9 weeks and I was absolutely alone. When I started
the most I knew about Ruby and Ruby on Rails was that it showed up in
google.

If you’ve followed any of my posts when I first started, it will show.

The first book I read, I read all 16 chapters in one day: Ruby From
Novice to Professional. What I enjoyed about the book was that I
immediately understood the idea of objects and classes. I’m extremely
logical and it fit well with the way my brain works.

I then started on Foundation Rails 2 which helped me out immensely with
how things work with Rails but I soon found it was starting to get a bit
outdated and so I went to Agile Rails 3. When I got to Agile Rails 3, I
was about 2 weeks into my project. I started to encounter database
issues so someone told me I should go read one of the enterprise rails
books to learn more about database association with rails.

Like I said, I have a photographic memory and soak things up like a
sponge. I learn incredibly fast. I already had knowledge of CSS, html,
some ajax, and had been working with PHP for about 5 years. I’m an avid
programmer in C++, AutoIt, and Actionscript and have been using flash
for about 5 years (swishmax2 is my current fun app to work with). I
have been designing sites with dreamweaver for awhile now, and used DW
CS4 for much of the site templates, transferring the outlines over to
rails.

If you work hard at things, good things come. Ruby API, Rails API, and
many screencasts sites out there help with any problems at hand. If I
encountered a specific issue, I simply searched available screencasts
sites, watched a few casts and learned something new, played with it,
implemented it, and tested it.

On Fri, 2009-08-21 at 15:59 +0100, Colin L. wrote:

2009/8/21 Aldric G. [email protected]:

So now, you’re gonna give back to this community, right?
Newbs like me could use you. :slight_smile:

I think AB has already given back a lot and I hope he continues to do so.

thanks for that

+1

Joel,

You asked earlier, I think, for suggestions on contributions looking
forward. You write well. I’d recommend taking a look at possibly
contributing to Rails Guides.

Best regards,
Bill

2009/8/21 Aldric G. [email protected]:

So now, you’re gonna give back to this community, right?
Newbs like me could use you. :slight_smile:

I think AB has already given back a lot and I hope he continues to do
so.

thanks for that

Colin

Alpha B.:

Nicely done… your post as well as the site. I find your ‘cupcake’
notation immensely entertaining.

But your stats do not reflect well on my Alma Mater (who shall remain
nameless)… please fix or do sumfink!