Since my visit to RailsConf in June I have been pursuing various topics to write about for InfoQ. I have been particularly interested in DataMapper and the fact that version 1.0 has been released.
I had the chance to talk with Dan Kubb, the lead on the project, about version 1.0 and it went out this morning on InfoQ, titled DataMapper Reaches 1.0 Milestone. It was interesting to see the details of this project while thinking how Rails uses ActiveRecord.
One of the more impressive aspects of this project is the number of plugins available. From the DataMapper web site:
Resource Plugins
These plugins modify the behavior of all resources in an application, adding new functionality to them, or providing easier ways of doing things.
DM-Validations
This provides validations for resources. The plugin both defines automatic validations based on the properties specified and also allows assignment of manual validations. It also supports contextual validation, allowing a resource to be considered valid for some purposes but not others.
DM-Timestamps
This defines callbacks on the common timestamp properties, making them auto-update when the models are created or updated. The targeted properties are
:created_atand:updated_atfor DateTime properties and:created_onand:updated_onfor Date properties.DM-Aggregates
This provides methods for database calls to aggregate functions such as
count,sum,avg,maxandmin. These aggregate functions are added to both collections and Models.DM-Types
This provides several more allowable property types.
EnumandFlagallow a field to take a few set values.URI,FilePath,Regexp,EpochTimeandBCryptHashsave database representations of the classes, restoring them on retrieval.Csv,JsonandYamlstore data in the field in the serial formats and de-serialize them on retrieval.DM-Serializer
This provides ’
to_*’ methods which take a resource and convert it to a serial format to be restored later. Currently the plugin providesto_xml,to_yamlandto_jsonDM-Constraints
This plugin provides foreign key constrains on has n relationships for Postgres and MySQL adapters.
DM-Adjust
This plugin allows properties on resources, collections and models to incremented or decremented by a fixed amount.
is Plugins
These plugins make new functionality available to models, which can be accessed via the
ismethod, for exampleis :list. These make the models behave in new ways.DM-Is-List
The model acts as an item on a list. It has a position, and there are methods defined for moving it up or down the list based on this position. The position can also be scoped, for example on a user id.
DM-Is-Tree
The model acts as a node of a tree. It gains methods for querying parents and children as well as all the nodes of the current generation, the trail of ancestors to the root node and the root node itself.
DM-Is-Nested_Set
The model acts as an item in a ‘nested set’. This might be used for some kind of categorization system, or for threaded conversations on a forum. The advantage this has over a tree is that is easy to fetch all the descendants or ancestors of a particular set in one query, not just the next generation. Added to a nested set is more complex under the hood, but the plugin takes care of this for you.
DM-Is-Versioned
The model is versioned. When it is updated, instead of the previous version being lost in the mists of time, it is saved in a subsidiary table, so that it can be restored later if needed.
DM-Is-State_Machine
The model acts as a state machine. Instead of a column being allowed to take any value, it is used to track the state of the machine, which is updated through events that cause transitions. For example, this might step a model through a sign-up process, or some other complex task.
DM-Is-Remixable
The model becomes ‘remixable’. It can then be included (or remixed) in other models, which defines a new table to hold the remixed model and can have other properties or methods defined on it. It’s something like class table inheritance for relationships
![]()
Adapters
These plugins provide new adapters for different storage schemes, allowing them to be used to store resources, instead of the more conventional relational database store.
DM-CouchDB-Adapter
An adapter for the JSON based document database couch-db. The adaptor has support for both defining models backed by a couch-db store and also for couch-db views.
DM-Rest-Adapter
An adapter for a XML based REST-backed storage scheme. All the usual DataMapper operations are performed as HTTP GETs, POSTs, UPDATEs and DELETEs, operating on the URIs of the resources.
Integration Plugins
These plugins are designed to ease integration with other libraries, currently just web frameworks.
merb_datamapper
Integration with the merb web framework. The plugin takes care of setting up the DataMapper connection when the framework starts, provides several useful rake tasks as well as generators for Models, ResourceControllers and Migrations.
rails_datamapper
Integration with Rails. It provides a Model generator and also takes care of connecting to the data-store through DataMapper.
Utility Plugins
These provide useful functionality, though are unlikely to be used by every project or assist more with development than production use.
DM-Sweatshop
A model factory for DataMapper, supporting the creation of random models for specing or to fill an application for development. Properties can be picked at random or made to conform to a variety of regular expressions. dm-sweatshop also understands has n relationships and can assign a random selection of child models to a parent.
DM-Migrations
Migrations for DataMapper, allowing modification of the database schema with more control than
auto_migrate!andauto_upgrade!. Migrations can be written to create, modify and drop tables and columns. In addition, the plugin provides support for specing migrations and verifying they perform as intended.DM-Shorthand
This plugin eases operations involving models across multiple repositories, allowing wrapping in a
repository(:foo)block to be replaced with aMyModel(:foo).some_methodcall.DM-Observer
Observers watch other classes, doing things when certain operations are performed on the remote class. This can be anything, but they are commonly used for writing logs or notifying via email or xmpp when a critical operation has occurred.
DM-CLI
The
dmexecutable is a DataMapper optimized version ofirb. It automatically connections to a data-store based on the arguments passed to it and supports easy loading of DataMapper plugins, models from a directory as well as reading connection information from a YAML configuration file.DM-Querizer
This provides alternate syntax for queries, replacing the hash which DataMapper uses with a more ‘ruby-ish’ use of
&&,==and=~.DM-Ar_Finders
ActiveRecord style syntax for DataMapper. This includes functionality such as
find_by_name,find_or_createandfind_all_by_title.
DataMapper puts a lot more of the responsibility of the model right in the model definition, similar to Django and other frameworks. The nice part about this is everything is in one place and we remove the need for migrations when creating new models. Currently, migrations are needed to change a model but that may change too.
I am looking forward to using DataMapper more.
I know more and more people who are buying iPads almost daily. I get asked what applications I recommend for the device.
First, I don’t use a tool because of cost, I use it for it’s usefulness to me. Free is great, but never the top requirement when searching out a piece of software for my iPad. So, here is the top 10 applications I use:
- TweetDeck (Free) – I use Twitter a lot and use this software exclusively from my laptop and the iPad version functions the same so it is a nice extension from the MacBook Pro. Note: at this time the software is not without one annoying flaw; when opening links from a tweet, the app will often crash, other times not but it can be a pain.
- NetNewsWire ($9.99) – I keep up with a fair amount of RSS feeds and this software syncs with Google Reader which I use daily on my laptop. It is a nice rich-client which keeps Google Reader up-to-date and has a nice UI to boot.
- GoodReader ($0.99) – I read a lot of books, which is one reason I bought the iPad. This utility makes reading PDF’s enjoyable. Dropbox integrates nicely with it to, allowing me to keep my PDFs on Dropbox.
- SimpleNote (Free) – This does just what it says, simple notes. This is like having a little notepad always ready but the beauty is it syncs to an online service to get your notes from any browser.
- iSSH ($9.99) – It’s really nice to have the iPad 3G to have connectivity almost anywhere and when accompanied by a great SSH utility like this I can SSH into all of my servers with ease. One more reason not to carry the laptop.
- BlogPress ($2.99) – I don’t write long emails or blog much from the iPad but this tool integrates nicely with Wordpress and makes those short post really easy. Lots of features for the regular blogger.
- Penultimate ($2.99) – Great utility for mocking up ideas, taking notes or just a brain dump. Drawing on the iPad surface with my finger is super easy and no delays.
- Instapaper ($4.99) – This is a great service which is used in all of my browsers to bookmark web pages I want to go back and read later. The iPad version makes reading on the device really slick.
- BeejiveIM ($9.99) – A great way to keep in touch with remote workers and other contacts is of course IM and unfortunately I am on a few but this tool keeps them all in one place with the exception of Skype which I hope gets added soon. A runner-up to this tool is IM+ ($9.99, Free Lite Version) which does offer Skype IM integration but the UI is not as refined.
- Things ($19.99) – I use this to-do list on my MacBook Pro, iPhone and now the iPad to manage projects with a nice clean interface. The mobile devices sync back to the MBP and keeps everything in order. I have to say the entire suite is a bit pricey compared to other iPhone and iPad applications out there but for something I use all the time, worth it.
Bonus - Netflix (Free) – this is really the only entertainment type application on this list and after a long day of working it is often nice to pull up a movie or TV episode. The quality of video is exceptional.
I can’t think of a replacement for any of these tools just yet. I have tried their competitors but these stick as my favorites and most useful.
My appetite for podcasts is always growing but my interests routinely change. I don’t listen to many .NET-specific podcasts any longer, but more along the lines of software craftsmanship, Mac/iPhone, Python and Ruby development. I hike about an hour a day to try to stay somewhat fit and always have my iPhone loaded up with podcasts to pass the time.
I am always searching for new podcasts and from time-to-time that I come across new ones I consider worth sharing. It has been a while since I have shared any, so now seems like as good a time as any. My last update from a few years ago titled Software Development Podcast List has seen a few additions.
General Coding, Ruby on Rails, .NET
- coderpath podcast with Miles Forrest and Curtis McHale – mainly interviews with Ruby on Rails community folks, great dialog.
- Teach Me to Code podcast with Charles Max Wood – covers a wide variety of topics and interviews with community members from Agile to Ruby and everything in between. Very good detailed discussions, highly recommended.
- The Dev Show with Dan Benjamin and Jason Seifer – news covering JavaScript, Python, Ruby, Java, PHP and more.
- The Ruby Show with Dan Benjamin and Jason Seifer – good review of the latest Ruby and Rails news, with a side of hate for MongoDB (just kidding). Most episodes are 20-min or so in length.
- The Changelog with Adam Stacoviak – very detailed interviews and discussions on more obscure subjects in Open Source including JavaScript, iPhone, Sinatra, node.js and others. This podcast exposes listeners to subjects not really heard elsewhere. Good stuff.
- Herding Code Podcast with K. Scott Allen, Kevin Dente, Scott Koon and Jon Galloway – originally mainly a Microsoft-centric podcast, lately they have been expanding into many great areas such as iPhone development, Ruby, Ruby on Rails, jQuery and more. Great interviews by people really focused on technology.
- Startups for the Rest of Us with Rob Walling and Mike Taber – not a developer podcast per se but a podcast about going out on your own from two software developer. Truly valuable episodes if you are thinking about starting a software company or even if you have an idea for a product and wonder what to do.
- Ruby5 with Gregg Pollack and Nathaniel Bibler – great source of Ruby news in very short episodes (5-6 minutes).
Open Source
- FLOSS Weekly with Randal Schwartz – interviews with leaders in open source. Great insight into great projects.
Mac and iPhone/iPad
- Core Intiution with Daniel Jalkut and Manton Reece – includes many aspects of Mac development.
- The Mac Developer Network – covers a wide range of development topics for Mac, iPhone and iPad development.
Screencasts
Even though I don’t put screencasts on my iPhone, I do watch these in my free time on my Mac. These are really good, so I wanted to share. I didn’t really have enough to put in their own categories, so everything is just lumped together.
- RailsCasts with Ryan Bates – short (6-15min) screencasts covering very specific topics of Ruby on Rails development. This is great for beginners and experienced developers alike who want to come up-to-speed on new topics like Rails 3 (222 episodes as of the time of this writing).
- web pulp tv with Josh Owens – very detailed interviews with many high-profile tech companies talking about how they approach a tech stack and make thing scale.
- Teach Me to Code with Charles Max Wood – great how-to videos on various aspects of Rails, including Rails 3, RSpec and others. These are very well done and worth watching for the latest.
I am always looking for any other podcasts or screencasts covering unique topics. Please leave a comment here with some I may not be including here and may enjoy. Thank you.
Google announced a new product today, App Inventor for Android. This is a development environment for creating applications on Android, only you don’t need to be a developer, says Google:
You can build just about any app you can imagine with App Inventor. Often people begin by building games like WhackAMole or games that let you draw funny pictures on your friend’s faces. You can even make use of the phone’s sensors to move a ball through a maze based on tilting the phone.
But app building is not limited to simple games. You can also build apps that inform and educate. You can create a quiz app to help you and your classmates study for a test. With Android’s text-to-speech capabilities, you can even have the phone ask the questions aloud.
To use App Inventor, you do not need to be a developer. App Inventor requires NO programming knowledge. This is because instead of writing code, you visually design the way the app looks and use blocks to specify the app’s behavior.
Here is App Inventor in Action:
Is this the new Visual Basic?
I think we saw this before with Microsoft’s introduction of Visual Basic. Visual Basic was an environment for just about anyone to create applications for Microsoft Windows. Sure, it was used a TON and created a rich marketplace but it also created a lot of really bad software with really poor code bases which were hard to maintain. I think a few readers probably still have their fair share of VB 6 code out in the wild.
I saw so many applications created by dragging-and-dropping controls on a form by business people, farm-hands and anyone else who cared to pick-up a mouse. These applications were often toys created by mort.
Dave Winer of Scripting News, agrees this may not be the thing for the marketplace. He certainly has seen technology come and go:
This idea of a once-and-for-all development tool is like the Divining Rod of the Olde Days. Perpetual Motion. The goose that laid the golden egg. The fountain of youth. Shangri-la. Bigfoot. The Loch Ness Monster. Cold fusion. The Singularity!
Jeff Jarvis and The Quark of Programming also offers an interesting perspective:
Will App Inventor yield lots of crappy apps? Of course, it will, just as Quark enabled sinful design and Blogger wasted bits. That is true of all such technologies that lower the barrier to entry to a former domain of priests. That’s precisely what the printing press did. As much as the web breaks down priesthoods, it created new ones. Developers are merely the latest. They say that mortals can’t do what they do. But what if they could? What if they could translate a thought not just into words and design but into action?
I imagine Marc Benioff of Salesforce.com going positively batshit over this, enabling businesses to create apps for, say, their sales teams to manage and share information about and with clients. I imagine small businesses using App Inventor to create apps like Chipotle’s that enable customers to make burrito orders before they arrive. I imagine teachers being able to make exercises and quizzes in apps (forget the electronic textbook; give me the electronic workbook!).
I think Jeff is right, there will be a lot of crappy applications created. This could be a huge problem too. Let’s say the Android app store skyrockets to 1,000,000 applications, how would you ever filter out the junk from the good? It would be nearly impossible. As it is, Apple has a pretty stick policy to filter apps fro there store and it is still hard to find an application never mind a good one.
On the other hand, from a business perspective, this is a potential great move by Google to create a ton of new applications for their store. In one fell swoop they can have developers and non-developers creating applications for their store. I speak from experience, it is not trivial to create iPhone applications, certainly not something a non-developer could easily tackle.
I would love to see a tool like this succeed, but I have seen others fail. Why should App Inventor be any different?
As an individual entrepreneur it is sometimes hard to get things done with our limited time in a day and limited financial resources. I find it helpful to have a large base of contacts which I know well and can reach out to when I need a hand, but timing may not always be right.
Derek Sivers had a great post recently titled "How to hire a programmer to make your ideas happen". Derek discusses some great points when looking to bring your idea to fruition and suggests using services such as oDesk, elancer, guru.com and vworker:
Go to the following sites to open an account at each: elance.com, guru.com, odesk.com, vworker.com
Post this short project at each site. Use their escrow service. Location of provider doesn’t matter – they can work from anywhere. Don’t pay for a highlighted listing. Pay by the hour. Set the bidding time limit to 7 days. Most bids will come in the first 3 days.
You’ll get many offers, but if they don’t have your magic phrase at the top (“I AM REAL” or whatever), delete them. This is very hard to do, since you’ll feel thrilled that so many people are offering to help, saying things like, “We have looked at your project and would be glad to complete it immediately,” but trust me and delete those. If they didn’t read something marked as VERY IMPORTANT already, you don’t want to work with them.
Also important: Only go for providers who have great reviews from many past customers. This shows they are used to working this way through this site. Decline bids from providers without many great reviews.
Don’t aim for the lowest bid. Use these sites to find someone that seems great and capable, even if they are twice as much as the lowest bid, they might work 10 times faster and better.
Each of these sites has its quirks, so sorry I can’t recommend specifics for everyone. But be considerate and nice, once they’ve mentioned your VERY IMPORTANT phrase to prove they really read your requirements. That’s cold enough. Once they’ve passed that test, be very responsive and friendly.
I have worked with a couple of these sites and have had the best experiences with oDesk, of course your mileage may vary. Taking slow, careful steps when working with these resources can lead big jumps toward your goals.
Personal Experience
I am not a proponent of companies laying off local developers and outsourcing work to save money, I despise the idea. If you have profitable business and can afford the full-time efforts a local developer, do it. Sometimes when bootstrapping your business and keeping the bills paid, outsourcing what you can may help get a kickstart to idea.
I try to find people on oDesk who are individual freelance developers setting out on their own or supplementing the income they already have. It is not always easy working with developers from these sites, but I have found a few rules I try to stick to which has helped:
- Reasonable Time zone – this is one of the biggest that has bitten me in the past. When working with developers on these sites fine a time zone you are comfortable within. I have hired developers both in India and other locations 12+ hours difference in time zone from myself and it does not work very well. It seems when I needed to talk with them they were sleeping and we only conversed over email, making things hard. It often took days to discuss an issue. I require developers to be willing to either work in my time zone or overlap some number of hours from mine to theirs.
- Reliable Commitment – some of the developers you will find often are supplementing their income with some side work. It is hard to work a 40 hour a week job and commit to any substantial side work. If the developer has a full-time job make sure to ask what they can actually commit with regards to hours. I have personally experienced developers committing to 20 hrs a week but barely making 10, which at that point they make themselves scarce and the project suffers even more. So, ask for the commitment and reiterate the need for a realistic commitment and monitor closely.
- Code Quality Monitor – it’s hard to get a real idea of the quality of code coming from an offshore resource. I monitor all commits to GitHub and make sure code is up to par, for now..I can always refactor later but the goal is to get the job done.
It has taken me a while to be better able to choose a good developer through oDesk. It certainly can be done but takes some trial and error to see what best works for you.
The Long Term
Hiring local developers is my long-term goal for my business but until I can afford the commitment to hire full-time, I will use freelancers I can afford. I have hired before and had to lay them off, it is not a fun thing to do.
Brining on these inexpensive contractors can allow you to try out an implementation of an idea long before you hire and gets it to market that much faster and so much cheaper. It is very hard to go wrong indeed.
Using these type of outsourced resources are applicable to both those full-time freelancers trying to get an idea developed but the idea of doing it on the side just never works. This also works for someone with a full-time job trying to do the same thing, get something going on the side during those “extra” hours that never seem to appear.
Coming from the Microsoft development world I have gotten really accustomed to using their Consolas font in Visual Studio. When moving over to the Mac I wanted to have the same font in Xcode. A bit of searching around the web I found a great resource, Install Microsoft’s Consolas Font on Mac OS X.
The gist of it is:
-
Download the Open XML File Format Converter for Mac from the Microsoft Mactopia download page.
-
Double click the disk image if it wasn’t automatically mounted. You will see an Open XML File Format Converter meta package (.mpkg). This is an installer package comprised of several sub-installer packages. One of which is the fonts I was after.
-
Run the Open XML Fonts Installer package. Running the following in the Terminal will achieve this in a typical Mac OS X install: open “/Volumes/Open XML File Format Converter for Mac 1.1.5/Open XML File Format Converter for Mac 1.1.5.mpkg/Contents/Packages/OpenXML_all_fonts.pkg”
-
Follow the prompts and you’re done. You can now configure you text editor and Terminal to use Consolas.
The instructions were a bit dated but the only difference from the original source was moving the version from 1.0.2 to 1.1.5.
Once this is installed you can go to Xcode->Preferences->Fonts & Colors and in the selected theme you select your font and can see Consolas and others added.
I recently visited the Apple store in Farmington, CT because I was having a problem with my iPhone 3GS. I own many Apple products and happy with them all. The area we live is not located near any Apple store so I buy my Apple products from the Apple web store. Up until recently, have had no problems with any of them, this was the first trip to an Apple store.
I am not trying to come off as an Apple fanboy here, but I think my first impression of experiencing Apple retail can be translated to how everyone can better deal with customers and how to convey company culture.
First Impressions
There is an old cliché that says you have one chance to make a first impression. Those of you who are long-time Apple customers who visit an Apple store on a regular basis then you probably take it for granted how the store works and have long since forgotten your first time to one of these stores. I can only say it was an great experience and a completely positive one. Had this first experience to the store been negative, I probably wouldn’t be writing this now.
I had contacted Apple Support via their web site and made an appointment to see an Apple Genius about my iPhone. This reminds me of making a doctor’s appointment.
As I arrived at the Apple Store in the Westfarms Mall and several things came to my attention immediately. I think we can apply Apple Store design to application design:
- Large and spacious – the store itself, unlike many retail stores in the mall, had plenty of room. I didn’t have to bump into customers or employees. As with many web applications I see, clutter is the norm – full of ads and jamming as much content as possible in a small place. Well designed web application have plenty of white space and don’t give me the impression I am at the carnival. My favorite applications are cleanly designed, like lessaccounting.com.
- Very bright – the store was very well-lit with lightly colored walls. Comparing other stores in the mall, some are dimly lit and painted with dark colors. I guess it is better to hid a poor product until the customer has left the store. I like to apply design to my applications the same way, keeping colors light which are easy on the eyes. I don’t like my users to have the experience they are visiting a dungeon.
- Lots of iPads, iPhones, MacBooks and iMacs with which to play – Apple wants you to experience and appreciate their products. When visiting the store you aren’t faced with endless glass display cases like you are visiting a computer museum, you get to actually touch and try-out any product you want. My first experience with the iPad was at the store and this experience determined whether or not I was going to buy. If users can’t try out your application how can they decide if they want to use it? It is my policy to give users a full 30-days to try out my software before deciding if they want to continue. Many sites give limited access to features until you cough up money.
- Genius bar looks like a bar, including bar stools – upon entering the store and briefly looking around, I immediately knew where I needed to go to see my Apple Genius. The store, as I mentioned, is laid out very cleanly with the Genius Bar (an actual bar as you recognize in any lounge) in the far back of the store, separated visually and physically from the rest of the store. This makes it very clear where someone needs to go to get help. This is exactly how web applications should be designed, make it very clear where users need to click to sign-up, cancel, get help, contact and any other function they may need. How many times have you been to a web site and had to struggle to find an email address so you can contact someone at a site? It is annoying and does not make me want to do business; keep the links and information readily available so [potential] users can find it.
- Lots of people to help you out - who also carry iPads to check-in people with appointments. Nice way to demo the new iPad platform. I think “eating your own dog food” is essential. If you don’t use the tool you create, how can you really know how people use it? Apple uses their iPads to let the Geniuses know when an appointment has arrived or add folks who are just walk-ins to the queue. This is free advertising for one; customers get to see people actually using an iPad for something other than a “big iPod Touch”. This also gives Apple feedback from the field for both the software, operating system and hardware perspective. Brilliant! Use the applications you create.
- Don’t make me wait – Wait time was small even with a lot of people and dealing with the Genius was simple, no hassles and out in minutes.
These were my initial impressions when visiting the Apple Store, all positive. I can take away so much from the experience which I can then apply to my own business, my own products. Apple has spent countless hours and piles of money to offer the experience they offer. Why not take some lessons from them?
Customer Service
Beyond my first impressions about the look and layout of the store, I think the real win in my mind was the great customer service experience. I had in my mind, since my issue was not exactly reproducible on-demand, that Apple may tell me there was nothing wrong with my phone and send me on my way. They could have just as easily pointed blame at one of the applications on the phone. I was well-prepared to visit the Verizon Store in the mall and walk out with a new Motorola Droid running Android and say good-bye to the iPhone and AT&T forever.
My overall wait time was only about 10 minutes after checking in upon arrival to the store. The process was really very simple:
- Called up to Genius Bar
- Genius takes phone, asks a few basic questions.
- Runs diagnostics on the phone, finds nothing.
- Offers to give me a new phone.
There was no griping from the Genius, he instructions were clear, just make the customer happy. I came expecting a fight and left with a new iPhone and a smile on my face.
Isn’t this how we should treat all of our customers? Customers have choices, they can buy our product or service from suppliers other than us. It takes much effort to attract and keep people willing to give us their hard-earned money, so why not just agree to do whatever it takes to keep them. This is a rule meant to be broken, we all have those customers that no matter what you do you cannot make them happy, these will always exist. We do have plenty that are happy and just want good service, so think about it next time when you are just thinking of saving a buck and refuse service to your existing customer. They will eventually go somewhere else.
Finally
There are plenty of lessons to be learned here and not just from Apple. Number one, first impressions are important, so please make your web application, store front or company presentable. Make it reflect on you and how you want to be viewed, put your heart into it. Number two, treat people and customers the way you want to be treated. It is easy to think of the bottom line at a very superficial level and I think this will hurt your bottom line in the long run.
RailsConf 2010 was this past week in Baltimore, MD. I decided to make the trip down from CT since it was only about 5 hours by train. Many people have already covered the conference around the interwebs and I am not doing it here.
I had a great time, meeting many new friends and catching up with some old ones. I arrived on Sunday evening and attended the Ignite RailsConf event. This event had excellent content and was well attended with about 200 people coming out.
Monday came and we had a full schedule of 3-hour tutorial sessions. These were good but the unfortunate thing about multi-track events is missing some sessions I would like to see. It appears the keynotes were the only sessions being recorded, which is too bad.
Keynotes
The keynotes were really one of the highlights of the event for me. I get the most out of these as they are typically by members of the software development community which are not necessarily Ruby or Rails related. The exception here was really Gary Vaynerchuck, which I missed because I was traveling home. Thankfully, O’Reilly was recording these sessions and I can watch when I have the time.
Anyone who did not attend RailsConf should check out the recorded keynote sessions from DHH, Yehuda Katz, Derek Sivers, Robert Martin, Gary Vaynerchuck, Michael Feather, Neal Ford and Evan Phoenix.
Sessions
The sessions were overall pretty good and I enjoyed the ones I attended, but I wish I could see other sessions than just the ones I attended. I think we should petition O’Reilly to record all talks.
Attending all these sessions during the week were really exhausting. As I write this on Saturday I still feel tired and imagine I won’t feel rested for a few days.
Hallway Chatter and Meeting New Friends
I have come to learn that the real value of any conference is not the knowledge acquired while attending the sessions but the friends and acquaintances we see and the new relationships formed.
I met many people who I knew only from the online world, interacting on my blog or Twitter. I was fun to see how the people looked different than their Twitter pictures, many look very different.
Finally
I did have a good time at RailsConf but it was exhausting. As I write this today I am still really tired from the 5 days I was away.
I find it interesting how people take in a conference, how they spend their time. As I attended talks I looked around the room to see a sea of Apple logos of the MacBooks in the audience. I noticed people with their MacBooks spending the session writing code, surfing the web or using Twittering. I repeatedly wondered why people make the effort to attend a session yet do something other than pay attention to the speaker.
I have been to both large and small conferences and especially after this RailsConf, I keep think that smaller single track conferences are the way to go if you want the chance to have a richer environment. I missed several people I wanted to meet but never ran into them, which goes to show the size of the group. Smaller conferences typically have 100-200 people and gives attendees a better chance of seeing everyone.
I am looking forward to attending more computer science and engineering related conferences this year as well as some business-specific ones such as BizConf. I think these are the types of conferences I will gain more value from, rather than simply Ruby-specific. I hope to see you at a conference soon.
The release of the web framework, Ruby on Rails 3, may lead to some pretty interesting decisions for current Rails developers.
The description of Rails 3 from the Agile Web Development with Rails 4th Edition (beta) book from the Pragmatic Programmers web site sums it up pretty well:
Rails 3 is a major release—the changes aren’t just incremental, but structural. So we decided to follow suit. This book isn’t just a mild reworking of the previous edition to make it run with the new Rails. Instead, it’s a complete refactoring.
Rails 3 introduces many new things, many new conventions. Version 3 looks more like a new framework, rather than just a version upgrade. Previously, the amount of effort to move from one Rails version to another was pretty small and unit tests helped reveal problems. We still rely on our unit tests for this purpose but the effort is not as small.
Rails 3 does offer many fantastic new features and the new architecture attempts to fix problems and areas where the current Rails framework falls short, but at what cost? I have heard people say over and over, moving to Rails 3 is difficult. Will this prevent migrating projects to Rails 3?
Jeremy McAnally has written a great ebook titled Rails 3 Upgrade Handbook where he outlines the tasks developers will face when moving existing Rails applications from version 3. To quote Jeremy from the book about moving applications to Rails 3:
The new features, performance improvements, and API changes aren’t incredibly drastic, but they do present great opportunities (and challenges) to those looking to upgrade existing code to the newest version.
Jeremy also has a plugin that became an official Rails plugin that helps guide the developer through the upgrade process.
I know with certainty there are Rails developers concerned up moving existing code to a new Rails, new conventions. One of Rails strengths are the convention it employs and as developers we learn the intricacies of our framework the hard way. Rails 3 will require an education to learn the new conventions.
Could this be a point in time where faithful Rails developers move on to a different framework? I doubt devotees won’t, but maybe some.
Active Server Pages
Case in point, Microsoft Active Server Pages.
I have witnessed and been involved with this before when Microsoft created a web framework named Active Server Pages, referred to ASP. After a much successful growth of ASP developers, Microsoft decided to create ASP.NET which is their current web framework based on webforms.
The problem was that even though the product names were very similar, the truth was they were drastically different. Developers were faced with:
- No upgrade path – code written with what we refer to today as “Classic ASP” could not moved to ASP.NET. It required a complete rewrite since the programming model was different than ASP.
- Big learning curve – Classic ASP uses a scripting language where there was a single page with logic in the page, ASP.NET moved to a page with a code-behind page in either C# or VB.NET. The two are very different and someone versed in Classic ASP had to learn everything from the ground up
Developers were faced with making the jump to ASP.NET or deciding to move on to something else, leaving behind the gripes of Microsoft. Some moved to PHP, as it resembled ASP more than ASP.NET. Some moved to legacy ASP project to Rails, the views looked more like ASP than ASP.NET
Rails
Up until this point, Rails has been a pretty smooth transition from version to version, even when applications were running older versions of Rails such as 1.2.x and moving to 2.x was pretty straightforward. I moved many Rails 1.2.6 applications to 2.x and faced little major issues, certainly not a rewrite.
This is not the case when moving to Rails 3, there is no smooth upgrade path and users will be forced to rewrite significant parts of their applications.
The architecture of Rails has changed in a big way, mostly by Yehuda Katz of Merb fame. Rails 3 takes the good from Merb in many ways, as I would expect. The view from 50,000’, Rails 3 does not closely resemble Rails 2.x as we know it today.
A Fork in the Road?
As was the case with Classic ASP, I think developers either bit the bullet and rewrote their applications with pain and learning, stayed put and are still there today or moved to a different web framework, maybe Rails, maybe PHP.
I think we are at this point with Ruby on Rails. Developers are faced with the task of moving to Rails 3 and making that technical leap, not to a new programming language as with ASP.NET, but a new framework. Rails 3 is different enough from any previous version that moving existing application will not be a rewrite but a change enough to be a considerable effort. Rails developers are well versed in how the framework functions, Rails 3 is very different.
An Opportunity?
This may be an opportunity for other frameworks to gain some traction. New developers considering Ruby on Rails 3 have a bigger challenge with the framework, it is not exactly the framework DHH developed only a few years ago.
Other frameworks worth considering:
- ASP.NET MVC – from Microsoft, allows developers to use C# and VB.NET to create scalable web applications pretty easily. It also has good community support.
- Django – a Python-based web framework which has many great features and productivity points. Django has been around for a few years now and gaining a good amount of traction.
- Sinatra – a Ruby-based framework with a simple, yet powerful implementation.
I could be wrong here but I think the advantage Rails had with an easy-to-learn framework, great productivity and easy upgrades will be a bit strained in Rails 3.
This will surely be a great opportunity for developers well-versed in Rails 3 to start or expand consulting career helping companies with existing Rails code bases upgrading to Rails 3. I think these folks will be in high demand.
Conclusion
So what will happen? I don’t know. Rails is a great framework but converting a large code base is going to be a challenge and Rails 3 is the future, not the 2.3.x code base.
I know I have asked more questions than I have answered. I hope the powers that be in the Rails leadership understand the concern.
UPDATE: As comments have pointed out, if this sounds Rails-negative, it is not meant to be. I see this a call for people with knowledge of Rails 3, bits of experience with upgrading projects of any size to share the knowledge. Blog about what you did, even the most mundane details and share what you know so jump ship DOES NOT happen.
UPDATE: Rob Conery posted a great overview of using MongoDB at Tekpub. The InfoQ post also stirred up some discussion on Hacker News.
I had the opportunity over the past week to talk with Rob Conery (ex-Microsoft) and James Avery about TekPub, one my favorite training sites on the web, for a detailed case study for InfoQ.
The interview was particularly interesting as it covers Tekpub moving from ASP.NET MVC to Ruby on Rails and ASP.NET MVC is the subject of a book Rob Conery co-authored. This says a lot about the position Microsoft puts small companies in when trying to build a product. It also says a lot about the advantages open source gives to these small companies.
As often is the case, cost is a big factor. Please give it a read. The interview is up now – Architecting TekPub – Moving from ASP.NET MVC to Ruby on Rails.
