I Am Making Progress

documenting a new internet venture from day one

December 31, 2011
by admin
0 comments

Initialize Method for New Instances of Classes Using Datamapper

The holidays and a one day bout with food poisoning did slow me down more than I expected. I am in Atlanta for New Year’s and the following week which has also slowed my work somewhat. I have a pile of technical posts I want to write, this is the first.

I’m not certain how obvious this is to Ruby veterans or people that regularly use Sinatra and datamapper, but I figured this out on my own. I learned how to set up classes with datamapper and use them with Sinatra from this nettuts tutorial. Prior to discovering Sinatra I had learned some basics about Ruby from several sources. There were some differences between the way the netuts tutorial directed me to create a new instance of a class and how I learned to do that from other Ruby documentation and tutorials. It actually took a couple weeks before I really put “two and two” together and realized the discrepancy. It’s a pretty simple solution and again, maybe it’s obvious to you guys, but it wasn’t to me for a couple weeks.

Essentially it boils down adding a method into your class definition called initialize(). I realize that you do not need parenthesis when calling methods in Ruby, but I will use them when referring to methods in the body my posts to make it easier to identify them. Apparently initialize() is some sort of special or protected method name which Ruby looks for anytime you call the new() method on a class. In the nettuts tutorial the author sets up a class using the datamapper syntax as such:

class User
  include DataMapper::Resource

  property :id, Serial
  property :name, String
  property :created_at, DateTime

end

In the netuts tutorial they were setting up a class called “Notes” with some added properties, but none of that is important for the purposes of this post. This User class is enough. The Sinatra code to create a new instance of the User class using the same structure as netuts would be:

post '/' do
  u = User.new()
  u.name = params[:name]
  u.created_at = Time.now
  u.save
end

Each property is filled directly in the code block in the Sinatra code. This “params” array is data passed from the HTML form with the action attribute set equal to ‘/’. If this is confusing, just look through the nettuts tutorial for the explanation of how to use HTML forms with Sinatra.

As I was beginning to develop my site I realized that there could be more than one place I want to add a new instance of a class from and this would require me to rewrite this block of code multiple times. Additionally, it just makes this “routing” Sinatra file more difficult to read in my opinion, containing details of the classes that really have nothing to do with the routing of URL requests.

I experimented with defining a method in my class definition called initialize(). To my delight, after I defined initialize() for a class, it became the method that was called when creating a new instance of a class. Now my User class definition looks like this:

class User
  include DataMapper::Resource

  property :id, Serial
  property :name, String
  property :created_at, DateTime

  def initialize params
    self.name = params[:name]
    self.created_at = Time.now
    self.save
  end

end

and the Sinatra code looks like this

post '/' do
  User.new params
end

For this super-simple example this change doesn’t seem to get you much aside from keeping model details completely inside of the model definitions. When you are dealing with more complex models with lots of properties and detailed logic governing their creation and also having your application creating them for different locations, it is a good bit better to use the initialize method. Also, this is the standard way for defining classes in Ruby, so you might as well stick with it when using Sinatra and datamapper.

One technical post down with some unkown number more to go. I plan on writing a post about the details of the following/follower logic. I may write a post about the geolocation features in EventReview so that the events are filtered based on your location or a location you search. I have a pretty cool form for inputting new events where I use a bunch of jQuery and jQuery-UI in concert with Sinatra and datamapper, the details of which some people would find interesting. Finally, I will most likely write a post about the technical details and philosophy behind the incentives and community moderation features I recently added.

Until then, have a happy new year.

-pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 23, 2011
by admin
1 Comment

Following initiated

I know I promised some technical posts, but I wanted to drop this quick one on you guys. The ability to follow or “favorite” other users is now in place for the millions of hypothetical users of EventReview.com (ER). The details of how this was accomplished will definitely be covered in a soon to come technical post as I had a great deal of trouble with the documentation for adding this functionality to my models using datamapper. But it’s done and all looks to be working fine.

The number of followers and the number of users that a particular user has favorited are now included in the stats listed on their profile. I still haven’t decided how to present the stats in the spirit of incentivizing users to desire to improve their statistics or reputation. You can also click on the number of followers or favorites to get the actual list. A future feature will be some sort of feed showing the latest activity by your favorited users, not sure if I will add that pre-launch or wait til after.

Pretty straight forward, I just wanted to keep documenting the progress. The list of major pre-launch additions is shrinking quickly! I still need to add the image upload functionality, community moderation infrastructure and beef up security before I finally get into the design.

Morale is pretty high inside my head. I am traveling to my Mom’s house for Christmas tomorrow where my work will continue unaffected by even this biggest blockbuster of holidays. :-)

-pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 21, 2011
by admin
0 comments

Geolocating and interacting with humans

EventReview.com (ER), now with geolocation information! I mentioned in my last post that I added geolocation “stuff” to ER and that was truth. When a user signs up for a new account their location is determined by an address they submit or simply their IP address. This is saved and will be updated if a user changes their address. All the location calculation magic is done by the ‘geokit‘ gem in Ruby. All venues added to ER also have their geolocation data calculated from their address. You will not be able to submit a new venue without a minimum of city/state or zip code. Now a user navigating to ER only sees events within a certain radius of their location. If the user isn’t logged in their IP address will be used to determine an approximate location. Before launch I will add the ability to search different locations as well. This aspect of the site is very similar to Yelp (and any other that has this “national-local” paradigm). I really like national-local style sites, they take advantage one of the key aspects of the internet that makes it so great. I’m lagging more and more behind with the technical posts, there are a number in the que. One of those will be about the details of geolocation which I presume will be interesting to some.

The other work on the site has been internal modifications to the code. Cleaning it up, making it “tighter”, more conventional by Ruby standards and more readable. The details of this will be covered in a technical post.

I’ve been making strides with regards to networking. Gabriel Weinberg hosted “Philly Startup Hacker Meetup XL” at the offices of Duck Duck Go. The two of us didn’t talk much, but I think it’s important even to just show up and gain some modicum of recognizability with others in this world. More progress has been made in my technical networking than non-technical. I’ve attended the last three events that Philly.rb has had, two were just “hack nights” where we all sit around the offices of Neomind Labs and work on our projects. I like these guys, they are really helpful since I’m a noob but a few of them are genuinely interested in Sinatra as they have mainly Rails experience.

That just about brings you up to date. My next post and possibly next several will be technical posts. I’ll go over the details of how I’m setting up the classes using datamapper including what I believe to be the proper way to define the method for creating a new instance of the class. There will also be a post on geokit. At some point I will dedicate a technical post to “associations” between classes in datamapper. I’m still working out the final details for setting up associations between users for “following” or “friending.” Once I’ve done that, I will discuss how all the different classes are tied together in ER. For the non-tech reader, “association” in this context is a very loaded term. :)

Merry Christmas!

-pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 16, 2011
by admin
0 comments

The beginnings of incentives

I have installed the basics for incentivizing the EventReview.com (ER) users to write reviews and add content (in particular “good” content). Essentially the incentives boil down to publishing the contribution statistics for each user on their page. Coupling these public statistics with a user community seems to be the basics for driving a crowd sourced site such as ER. I can show top users and I will also publish the number of friends as well as show statistics describing the feedback users receive on their reviews. I will certainly develop the incentives further than the current stage, but the later development will almost completely come out of the statistics that I am now set up to collect.

Today I added in tracking for each user, storing what content they add (content meaning events, artists or venues) and how many reviews they have submitted. I further keep a tally of how may reviews the content they are adding receives. Some sort of sum total metric will be created that will serve as a “reputation” for the user. But simply showing the number of reviews their content receives really shows if they are adding “good” content. I may also add some sort of modifier for the average rating that the content receives, but I’m not sure that is necessary. Any content which is receiving a lot of reviews is probably valuable even if the reviews are not good. I am worried that I am leaning too heavily on “good” content, because I really want the site to have as close to a complete listing of shows as possible. A “complete listing” would include shows that don’t get many reviews. Let’s just call this a work in process, but the heavy lifting is now complete.

I will leave the technical details to a later post, but it mostly was just a matter of saving the “id” of which ever user creates content and making sure that the “id” is passed through the review and event adding processes.

Take a gander at the most recent version of a user profile. Again, literally no CSS or design what-so-ever has been done aside from a little bolding of text, line breaks and a few horizontal lines. By the way, I also have the geo-location stuff working, so a user only sees events and venue in their vicinity. I’ll leave that for another post.

i’m OUT.

-pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 13, 2011
by admin
0 comments

Starting to look like an actual website??

I was feeling pretty fired up tonight, so I wanted to put up a quick post about the current status of things. I’m going to categorize this both as “technical” and “non-technical,” this post should be of interest to both camps.

I have the basic, core functionality of the site essentially complete. A user can add a profile. When logged in with a profile, the user can add events, artists or venues. The user can review the events and edit any content that has already been listed. An event is required to have a date, headliner artist and a venue. The headliner artist and venue must already be in the database or you will be prompted to add that information before being able to submit the new event. This is by far the most complex bit of logic I’ve added to the site. It is a mystical brew of jQuery, jQueryUI and Ruby which allows the user to enter the event and have all the validation completed without having to navigate to any other during the process. It took me about a day and a half to get that form working completely (maybe I’ll dedicate a post to how it works?). Every page that has events separates them by whether they are “today’s”, “upcoming” or “past” events and only allows a user to review a past event. The other two categories of events have the reviews of any previous events with the same headliner artist injected into their event pages. If you are viewing an artist’s page you see all the past reviews of events they performed along with a calculated rating which is the average of all ratings they have received. The user profiles show a list of all the reviews that user has submitted. Although extremely rough around the edges, this represents the core of the idea I set out to complete.

Of course there’s still tons of work to be done. Some big pieces that need to be completed are the user “incentives” for adding content and making reviews, some sort of location calculations so that you only see events and venues that are in your area, the database structure and logic for being able to add friends and follow people, adding tools for community moderation, and adding the infrastructure to handle image uploads. Eventually I’ll get to the CSS work and a finally security; try to make my site hacker proof. :)

Later down the road I will include more functionality like adding videos and other media to artist pages, making it possible for users to review specific bands in an event (right now they are implicitly attaching any review to the headliner) adding a deeper and more thorough way to categorize artists. I want to allow the users to really fine tune the descriptions and categorizations with some large but standardized set of tags. I believe that the more opportunity I give the users to add useful data the more engaged they will become. This will most likely be a slow, steady process. I may even start off only dealing with music events and slowly expand from there.

So that’s where I’m at. Take a gander at the attached image of the homepage. It’s almost starting to look like a real site! I’ve been thinking a little bit about the CSS and design of the site. I have been toying with the idea of going the super minimal craigslist route. One, I think that content and ease of use trump fancy design. Clean layout and only putting things on the page if they are actually useful is the key in my mind. Two, if you don’t have a whole lot of fancy design than you don’t have to pay nearly as many designers to keep that part of the company moving forward.

I’m gonna hit the hay. Hope all is well out there in the world.

-pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 11, 2011
by admin
0 comments

“Launch It.” – Gabriel Weinberg

On Thursday I had a brief meeting with Gabriel Weinberg at the new offices of Duck Duck Go. I follow Gabriel on Twitter and have found him to be very responsive, helpful and enthusiastic. He posted “open office hours” at the site Ohours.com and I jumped at the opportunity to meet him. I had about 15 minutes with Gabriel and got a chance to discuss who I was and what I was doing. I got a bit of advice and the question of investing never came up.

Gabriel is the founder/CEO of Duck Duck Go (DDG) a search engine which now handles about 10 million searches per month. Has founded and ran DDG almost entirely himself until he recently took an investment round of approximately $3 million (Mixergy 2011). He also has a some previous startups under his belt, one with a $10 million exit which I suppose is what allows him to do some angel investing now.

I was running late which is a huge problem of mine. It’s amazing how I repeat this bad behavior over and over, it’s so disrespectful to the person waiting. Running late had me very worried as this man was offering his time to help me out and I was tardy. Seven minutes late to a twenty minute meeting I ran up the steps to the DDG offices. I was met by a not so friendly dog, growling in the stairwell and a DDG employee who did not acknowledge me. Upon entering Gabriel walked out of an office with a blow-up mattress held to his mouth for a new crib he was assembling for his baby. He brought me back into the office where the infant was lying on the floor looking up at me and his other son played on a tablet on the sofa. Gabriel said he didn’t mind about my tardiness and that seemed to be true judging by his body language. The kids + dog + crib assembly made for an uber-casual vibe and put me at ease with regards to the natural nervousness I had plus the additional bad feelings I created within myself by being late. Hah! I bet I really sound like a head case?? You probably wouldn’t guess any of that unless I told you though. On to the meeting…

I gave a few moments of pause to see if Gabriel was going to take the lead and he didn’t. I decided to start with a brief summary of my background. I chose this approach on the spot partially because the words of Mark Suster popped in my head about how he normally starts these types of meetings by finding out about the person’s background before going into the actual details of the startup. I think it’s a good idea for me especially since my background as a physicist is not the norm for this situation (or any situation really unless you are at CERN or something). Gabriel has a bachelors degree in physics and he is from Atlanta so that got him asking questions and we had some good engagement right away. I then moved the discussion to my motivations for the idea and my first website www.hearthescene.com. Finally, I got to the basic idea for ER and the current status of my work.

His response was positive. He said he liked the idea and he also expressed his pasion for growing the tech community in Philadelphia, a passion I share as well. We talked some about the details of the site but we didn’t dwell on that. He seemed to get on my wavelength with it pretty quickly. As time was running out (he had some gentlemen from New York waiting to meet) I asked if he had some advice. He said “launch it.” And he also said I should come to a Philly Hacker Meetup XL at DDG next week. I will happily take both pieces of advice.

My goal was to meet Gabriel Weinberg and start to form what will hopefully be a fruitful relationship. Making connections in this community is huge and I have almost none. Beyond just “networking” I really think Gabriel would be a great mentor type person for me. I relate very much to the way he writes and thinks about things at least from reading his blog posts and watching some interviews with him. Our first in person meeting has bolstered this feeling. He seems very honest, hardworking and straight-forward. He’s all about the bootstrap too which if successful leaves the founder ultimately with a larger piece of the pie.

This is technically the second angle investor I’ve met since I moved back to Philly. A friend of mine introduced me to Jim Young, one of the founders of www.hotornot.com. I was in the very early stages of HTS at that point and he felt that adding the events manually was going to be a bottleneck and ultimately he was correct. Sometime in the next month or so I will try to link back up with Jim Young, but now my focus is on getting ER up and running and hitting the various tech meetups around the city.

I feel the only real strategy for someone in my situation is to keep putting one foot in front of the other with the actual technical progress and try to take advantage of any opportunity to meet with investors and successful entrepreneurs. From what I’ve read, finding someone that is respected in the community to champion you and your idea is a very tried and true path to having doors open for you. I can’t just manifest that directly in one or two small steps. I need to make progress on the things I can control which are the actual site, clarifying the vision and continuing to not be shy and put myself out there in the community.

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 8, 2011
by admin
0 comments

I’ve been busy! => Sinatra, DataMapper – actually writing code!

This past week has been great! Finding out about Sinatra really was a breakthrough for me. I’ve actually started writing code! Using Sinatra I’ve written a bunch of basic url routing directions for my site. Up to this point I have nothing but praises to sing for Sinatra. I’m also using DataMapper an Object Relational Mapper (ORM). It basically allows you to manage your database using objects in Ruby and does all the nitty gritty behind the scenes work to store the data in a relational database. Using all this together I’ve concocted an uber-beta version of EventReview.com (ER).  Here is a snapshot of the homepage for ER.

If this site really takes off, I wonder if this picture will float around the internet as the original version of the site. :) It isn’t as this just resides on my hard drive.

So what’s going on in this uber-beta version of ER? Users can sign up for the site and make a profile. If you have a profile you can add events and review/rate the events. If you don’t have a profile you can view the events and profiles. All of the reviews a user has written are displayed in their profile and all the reviews for a given event are displayed on the event page. Reviews are associated with a single user and a single event at this point. I actually added the model for artists as well and created the associations to the reviews but I haven’t tied it into the site yet. Ultimately a review will have to be associated with a user and then either an event, artist or venue. If a user reviews an event which has associated artist and venue profiles, the review will be associated with the artist and venue sort of “through” the event. I actually think that is how “many to many” associations are done in practice?

Right now there is almost no CSS styling. At some point, layout will become a fundamental part of this process, but right now I am just trying to design the data structures and the various relationships between them. In due time I will start fumbling with the design.

I mentioned the term “model” previously. A model is basically a class definition in Ruby. And a class is an object. :) Again, don’t shoot me if I’m wrong here, I’m still a Ruby Nuby. A model defines all the attributes and methods (functions) that a class (object) will have in it. DataMapper allows for a really intuitive syntax for setting this up and simultaneously creating the table in the database. Here’s the current state of my models for ER.

# dm_models.rb
require 'data_mapper'

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/event_review.db") 

class User
  include DataMapper::Resource

  property :id, Serial
  property :email, String
  property :password, String
  property :user_name, String
  property :birthdate, Date
  property :city, String
  property :state, String
  property :zip, String
  property :bio, Text
  property :created_at, DateTime
  property :updated_at, DateTime
  property :views, Integer

  has n, :reviews

end

class Event
  include DataMapper::Resource

  property :id, Serial
  property :headliner, String
  property :supporting_artists, String, :lazy => true
  property :venue_name, String
  property :date, Date
  property :time, String
  property :price, String
  property :event_name, String
  property :notes, Text
  property :created_by, String
  property :created_at, DateTime
  property :updated_at, DateTime
  property :edited_by, String
  property :views, Integer

  has n, :reviews
end

class Artist
  include DataMapper::Resource

  property :id, Serial
  property :name, String

  has n, :reviews
end

class Review
  include DataMapper::Resource

  property :id, Serial
  property :rating, Integer
  property :body, Text
  property :created_at, DateTime
  property :updated_at, DateTime

  belongs_to :user
  belongs_to :event
  belongs_to :artist
end

DataMapper.finalize.auto_upgrade!

I put all my classes in one file. I did have them in separate files originally but with the various “belongs_to” and “has” methods, I thought it would be more intuitive if they were together. First you say which database file you want these classes to be stored in. Each class is a separate table in that database. Each field in the table is defined by calling DataMapper’s “property” method. There are a bunch of supported data types like Integer and String and a whole slew of customizable options for defining each table (class). Isn’t this nice? Accomplishing all this using PHP would have taken me a while. While I’m no PHP expert and I’m sure there are some great plugins for PHP which help with this stuff, the bottom line is that I used PHP for 6 months and don’t know how to do what I’ve learned in a single month using Ruby.

The other piece to this is using Ruby to inject data into HTML templates. I’m using erb for HTML templating. Like many things I use, I chose it because I followed a tutorial which explained some details and it just makes sense to me. Finally, I’ve even added a little jQuery into the site. When a user adds an event they pick the date using the jQuery UI plugin called “datepicker.” Not sure if I’ll be including much jQuery UI stuff in the actual release, I just wanted to get some practice using javascript in my new framework of tools and jQuery UI is familiar to me and simple to implement.

That’s a rough summary of the technical progress I’ve recently made. I have a meeting with Gabriel Weinberg the founder of DuckDuckGo tomorrow! I’ll definitely report how that meeting went in my next post. Maybe he’ll give me some $$$$$$$???? Honestly, I’m really looking for some advice and maybe a mentor if he’s willing.

adios.

-pat

 

 

 

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 3, 2011
by admin
2 Comments

Sinatra – my Ruby “framework” of choice?

As I’ve previously written about my planned move from PHP to Ruby where I also discussed why I am NOT using Rails. I have been learning the basic Ruby syntax and structure via some very nice tutorials at netuts. I am using the Rack web interface for Ruby but had planned on not using any “framework.” I’ve found progress to be slowed immensely by this decision. I think this is mainly a result of only using Rack rather than any issue with learning Ruby itself. Yesterday I did some reading on Sinatra which is a “domain specific language” for Ruby. I believe I have found my starting point with Sinatra but I still have some questions.

Using Rack in its bare form requires you to write handlers for HTTP requests. You have to respond with a status code, the format of your message, the length and the actual body of the response. For example, here’s one way to write a “Hello World” web page.

app = lambda do |env|
  body = "Hello, World!"
  [200, {"Content-Type" => "text/plain", "Content-Length" => body.length.to_s}, [body]]
end

run app

While understanding the details of the HTTP request/response process is good to know, it is only adding to the large pile of new information I need to learn to implement ER. I am sure there are Rack plugins I could download to handle the basic routing and well that is essentially what Sinatra seems to do.

In walks Sinatra, singing a simple tune.

get '/' do 
 "Hello World!"
end 

This is how you write a “Hello World” web page using Sinatra. When I first read this on some page describing Sinatra it just “clicked” with me immediately. I can easily see how to write a single routing file to manage the flow of my webpage. It all makes sense to me. I went through a nice tutorial where I created a simple web app for leaving notes, including editing and deleting. It seems Sinatra has finally got me to the stage of actually writing some code for ER!

I do have a couple questions/concerns. Several times I have read that Sinatra does not follow the Model-View-Controller structure. I believe the explanation is just that Sinatra doesn’t impose any structure. Hopefully that is the case as I prefer to keep that MVC structure. It seems that Sinatra is often recommended for small web apps or testing ideas. Is there something fundamental to Sinatra apps that hinders their scalability? I believe that the reason people look at Sinatra as a great choice for testing is because of the lack of plugins, widgets and other automated features of frameworks like Rails. For me this is a plus. I really love the simplicity and would rather pick and choose what packages I want to include in ER.

Ok, I’m gonna get back to the netuts tutorials and learning more Sinatra!

-pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

December 2, 2011
by admin
0 comments

Real life networking – attempt #1 – Philly Tech Meetup

Tonight I went to the Philly Tech Meetup, it was a very cool experience. The night was sponsored by Twillio and had four new startups that presented as well: pledge4good, snapline, thatrunk and docphin. Up to this point I have read about a thousand blog posts, watched countless episodes of ThisWeekInVentureCapital and various round table discussions and presentations at events like Google I/O. By the way, I love This Week in Venture Capital. I used to think the host Mark Suster was kind of an ass, but he’s really grown on me. I’ve learned a ton from him and he has no problem saying exactly what’s on his mind to his guests; feels very honest. This Philly Tech Meetup was the first time I saw any of these types of presentations live and in person. I even asked a question of Todd McNeal during his SnapLine presentation. It felt good to get out of the house!

During the presentations I sat with Leslie Wilderson from Soup of the Day Search and Mitchell Golner from Tangramix an Israeli startup accelerator company. After the presentations we all headed down to the bar where I met a bunch of great folks. I got to talk to Todd from SnapLine for a while and met Jon Gos who does the design work for metaLayer. metaLayer is a Dreamit Ventures company and Jon suggested I stop by and check out the Dreamit Ventures digs. I will definitely take him up on that offer!

I’m glad to have made some headway meeting local tech people. This past week was the first time I even realized that there is a healthy community of hackers, entrepreneurs and investors here in Philly. There is Dreamit Ventures, First Round Capital and angels like Jim Young (of hotornot.com) and Gabriel Wineberg (great blog!). I’m sure our community is tiny compared to San Francisco’s but it’s a lot better than I ever would have suspected.

Networking is something I didn’t even begin to do with Hear The Scene and I plan to not make that mistake again. It would be wonderful if I could find a mentor type person to guide me a bit. Obviously I need to meet investors as well but I think I need guidance more than money at this point. I’m making such a big leap from physics to an internet startup, I’m sure there’s tons of things I’m completely ignorant about. I feel like a sponge, just soaking up every last drop of info these people are willing to pour out.

til next time,

pat

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS

November 28, 2011
by admin
0 comments

Ruby, rack, not rails

A pretty major decision I made was to program the backend of EventReview.com (ER) using Ruby and not PHP. It is a little questionable considering I have very little experience with Ruby and have already developed a previous website (HTS) using PHP. ER is going to be significantly more complex than HTS and I think that the object-oriented (OO) structure that pervades Ruby in its entirety will help in keeping things more organized. There are several other reasons which doing a google search of “Ruby vs. PHP” will give you an idea as to my thinking.

Another choice that does appear to be going against the grain is my choice to not use Rails. It seems any search I do for Ruby and especially rack related content always yields Rails results. I’ve had some guidance in this choice and there are two reasons for making it. One is that I am just learning Ruby and it seems that jumping to Rails immediately would be more confusing than helpful. The other is I feel that what makes Rails great (the auto-generated code) might also be what makes it not so great for some applications. Almost my entire history of programming has been designing applications from scratch, so plugging into this pre-determined structure that is Rails seems constrictive and unappealing to me. I realize that coding in a vacuum is not the best practice and I’m slowly opening up to using other people’s plug-ins, but a full-blown framework like rails…well I’m just not ready for that yet.

I’m think that Ruby is much more than just Rails but mention ‘Ruby’ in any company of tech people and I bet whatever response you receive will contain ‘Rails’ in it. It is too bad in real life we can’t say “Ruby -rails.” I absolutely could be wrong, obviously I’m going off more feeling than fact with this, but the whole Rails phenomenon feels a bit lemming-like.

Share and Enjoy

  • Facebook
  • Twitter
  • Digg
  • StumbleUpon
  • RSS