
Scout, our server monitoring service, has grown quite a bit in 2009.
We’ve documented 2 big lessons we’ve learned on the Scout Blog.
If you find it helpful, give us a vote on Hacker News.
The Highgroove blog. Sit pit-side with us to learn how we work. Sometimes technical, sometimes business-oriented, but always focused on simple solutions.
You are browsing posts by derek. Check out all posts on our blog.

Scout, our server monitoring service, has grown quite a bit in 2009.
We’ve documented 2 big lessons we’ve learned on the Scout Blog.
If you find it helpful, give us a vote on Hacker News.
It hurts – it feels like giving up. You’re stuck on a problem and do the last thing that makes sense – stop thinking about it. And the minute you forgot about the problem the solution comes into focus. Sometimes it’s a shower, for others it’s a long walk or playing a video game.
The Eureka Hunt – Why do good ideas come to us when they do?, an article by Jonah Lehrer published in the the July 28th issue of the New Yorker, covered scientific research on moments of insight. There were a couple nuggets on provoking insights:
If you’re in an environment that forces you to produce and produce, and you feel very stressed, then you’re not going to have any insights…Concentration, it seems, comes with the hidden cost of diminished creativity.
John Kounious, Cognitive Neuroscientist, Drexel University
The drowsy brain is unwound and disorganized, open to all sorts of unconvential ideas. The right hemisphere is unusally active.
Jung-Beeman’s latest paper investigates why people who are in a good mood are so much better at solving insight puzzels (On average, they solve nearly twenty per cent more C.R.A. problems.)
Andre, Charles, and myself leave for RailsConf Thursday.
If you want to discuss Rails monitoring, Javascript, the business of Rails, biking, camping, or dogs, talk to us!
I’m the tall, skinny scarecrow-like figure with the big head. Charles looks like he might belong to a hipster boy band. Andre…well he looks completely normal. Just look for the scarecrow and the hipster – Andre will be the other one in our group.
You need to be in the Bay Area. You shouldn’t be in the Bay Area.
You need to work crazy hours. You shouldn’t work more than 4 days a week.
You need to raise as much money as you can. You shouldn’t raise money.
The topics above never seem to get old and I think it’s unfortunate.
Just run your business the way that feels right. The majority of your time during the week is spent working. Whether you’re working for yourself or for someone else, if you’re not working the way you want to, it won’t last.
Scout, our server monitoring and application, is now available for public consumption.

Scout is for the 95% of us that either gave up on installing & maintaining monitoring applications or used the old fashion monitoring method – an email from a customer when your web application is down. I’m not calling you out, it’s simply that monitoring used to be more painful than not monitoring. We think Scout changes that in a beautiful way.
Scout makes it easy to bring all of your data together – from the monitoring standbys (url monitoring, server load, memory usage, etc) to modern day analytics (the number of user accounts on your web application, unique visitors, inbound links, etc). It’s all done through an easy plugin system that you configure through our web interface – you never have to login to each of your servers and install or edit monitoring scripts. You’re not limited to the plugins we built – you can roll your own with a couple of elegant lines of Ruby code.
We’ve used Scout for several months internally. Along with Colloquy, Google Docs, Basecamp, and Skitch, it’s one of the few apps I use every day.
We think this makes Scout a better service – we’re not watching Scout from a third-person perspective. However, sometimes things sneak through – the type of things that don’t bother you after using an application for months but can be hurdle to others when getting started.
There were 2 nagging issues that stood out in the Scout user experience. I’ll cover how I addressed the first one here.
We recently sat down with Geoffrey Grosenbach for the Ruby on Rails Podcast and talked about Scout, PlaceShout, working as a remote team, and balancing client work with internal projects.
We thought you’d like Scout – but we didn’t expect to reach our 100 account limit in about an hour and a half.
We’re already collecting feedback and gearing up for the next launch.
Don’t worry if you didn’t get in this time – we’re collecting lots of feedback for our full launch.
If you’re need some more help getting Scout configured, have some feedback, want help writing a plugin, or just want to chat about Scout, drop by our public chat room or forums.
Thanks, and stay tuned for the launch!
Andre and I will be at SF Beta tonight demoing PlaceShout, our short-form local reviews service.

We’re among 10 companies showing off their latest innovations (view the full list).
More information on tonight’s event is here.
Hope to see you there!

We’re using Scout, our monitoring and reporting application, to graph the performance of our Rails applications and servers.
I’ve uploaded a video that looks at how one of our applications, PlaceShout, impacts the server load and Mongrel memory usage. I also compare PlaceShout’s footprint to another server.
Watch the video:
Graphing in Scout
(1 min 47 sec)
Past Videos on Scout:
Installing the Scout Client
(1 min 39 sec)
Installing the Rails Requests Plugin
(1 min 55 sec)
Signup for our launch email list
We’ve started emailing invites to Scout. Signup on our homepage, and we’ll give you access to Scout before the public launch.

Better = more work. Tools that “make better easier” are rare.
I heard a radio advertisment for Safeway’s FoodFlex Program this morning. When you purchase groceries at Safeway and use your Safeway Card, Foodflex analyzes your purchases and suggests healthier alternatives. The program is accessed through the Safeway website.
Dieting often means counting calories. It makes dieting more work than not dieting. Foodflex can do the counting for you. Sure, Foodflex can’t track meal-by-meal, but you get a reasonable overview of your eating habits based on your grocery purchases. A couple of healthier suggestions a month is an easier, more sustanable path to eating better than religiously counting calories.
We’re working on our subscription plans for Scout. While working on the plans,
we took a look at what other subscription-based services are charging for access.
There are some definite similarities, but a couple of peculiar differences.
Below is a quick sampling of what we found:
|
Service |
Plan Options* |
Credit Card Required?^ |
Free Plan Generosity |
|---|---|---|---|
|
Project Management |
Free |
Yes |
Gives you a solid overview. You’re walled into 1 project, can’t upload any files, |
|
Contact Management |
Free |
Yes |
Very limited. 2 users, no file storage, and a single case (a way to group items together). It’s difficult |
|
Invoicing |
Free |
Yes |
Very nice. Only major limitation is 3 invoices per-month. |
|
Family email, photo gallery, and archive |
Free |
No |
Free Plan is pretty open – 4 family members, 10MB of storage, 100 photos. |
|
HTML Form Builder |
Free |
Yes |
It’s enough. You’re limited to 3 forms, 3 reports, and 10 fields per/form. No file storage. |
|
Bug Tracking |
$25 per/user |
No |
N/A |
|
Web Analytics Visualization |
Free |
Yes |
Very generous. Track 4 pages, limited number of visits. Stats are updated in real-time, limited tracking and sharing. |
* - All prices per/month ^ - Only applies to paid plans
All of the services but BlinkSale and Wufoo are dramatically more useful with more people. Why then does Highrise’s
free plan only allows 2 users (initially it was a single user)? 37Signal’s older product on the list, Basecamp, has unlimited users on
the free plan.
37Signal’s pricing model is widely copied (free/$12/$24/$49).
FamSpam and FogBuzz on Demand allow you to signup for a paying plan without supplying a credit card. I assume after 30 days you need
to enter credit card information. It’s an interesting idea because sometimes you don’t know if you need an advanced feature until you try it. The
tricky part about this strategy is handling accounts that don’t decide to pay. Do you suspend all functionality or just parts of the application
that paid plans can’t access? How to you handle access to data they may no longer have access to on a free plan?
On the surface, CrazyEgg appears to be the most generous with their free plan. Many people may only want heat maps on a couple of pages anyway and
how often the data is gathered may not be a major factor. There are a lot of people that could use their free plan perpetually.
Being too generous isn’t necessarily a good thing. It takes time and resources to support free accounts, and that can take away from
enhancements and service offerings to paying customers. Blinksale may have the best balance. You get most of the features, and if you’re willing
to pay for an invoicing solution, you’re probably sending more than 3 invoices a month.

Tracking the results of your blatant self-promotion campaign can be a time-consuming effort. You might be using Google Analytics for web traffic and FeedBurner for blog subscribers. You’re probably checking link referrals. You’re querying the database for usage statistics (user signups, logins, etc.), etc.
Scout is an honest friend that gives it to you straight. Our friendly retriever will track, mash, and graph all of this data in real-time.
For example, below is a graph generated by Scout. It shows the FeedBurner circulation of this blog (in red) vs. unique visits from Google Analytics on our Highgroove homepage (in blue):
It doesn’t look like there’s a huge correlation there. What about unique visitors on PlaceShout (in red) vs. unique visitors on our Highgroove site (in blue)? Data via Google Analytics:
There’s a correlation there. Traffic to PlaceShout appears to drives traffic to Highgroove.
Currently, 3 Scout Plugins exist for grabbing external data:
Seeing this data is extremely useful for answering questions that take quite a bit of work to find out manually (and can’t be updated in real-time):
The great thing about these reports is they don’t require any updates – Scout continually grabs new data and updates the graph.
Signup for our launch email list
We’re launching Scout this winter – click here to signup for our launch notification. We’ll email that list before the public launch.
Get Immediate Access to Scout
I’d like to create a plugin to report back the number of people linking to a url on del.icio.us, but haven’t had time yet. Want to create this plugin? Shoot me an email at (derek at highgroove dot com) and I’ll give you immediate access.
Past posts on Scout:
When something bad happens you want to find out about it as quickly as possible.
You’re probably notified of uncaught exceptions. What about slow web requests, which can be just as annoying to a user?
Find about about slow web requests (and what might be causing them) in near real-time using Scout and the Ruby on Rails Request Monitoring Plugin.
Here’s how it goes down:
1. Install the Scout Client
watch a video (1 min 39 sec)
2. Install the Plugin
watch a video (1 min 55 sec)
…that’s it – you’re no longer a performance slacker.
3. Scout reports back data
Every 10 minutes, Scout collects information:
If you have a slow request, an alert is generated. You can view the offending requests and their request times:
You can easily graph this data as well with Scout’s built-in graph builder:

Compare to other Rails applications
…but that’s not all. You probably have multiple Rails applications. You can compare their performance on a single graph as well:

Look for trends against other data
…we’re not done yet though…how about comparing the average request time vs. the size of the mongrel threads through the Process Usage plugin?
Since it’s easy to plot different data stats on Scout, you can quickly rule out possible reasons for slow performance. That’s half the battle.
Signup for our launch email list
We’re launching Scout this winter. Signup on our homepage, and we’ll give you access to Scout before the public launch.
I’ve been researching ways to consolidate bank account information into a single, automatically updating view. There are a couple of new web-based options – most notably Wesabe and Mint – but those have a consumer focus. I’m more interested in viewing trends in our business – a real-time financial dashboard.
Open Financial Exchange (OFX) Standard
In January of 2007, the Open Financial Exchange standard was announced by Microsoft and Intuit. Many financial institutions provide support for a portion of the standard, namely the portion used by Quicken.
The best list of OFX connection settings is here. A bank information generator is also available that retrieves connection data from the Microsoft Money website.
Retrieving OFX data
Once you obtain the OFX connection details for a financial institution, you can then connect to it to retrieve financial transactions. Getting to this point often isn’t straight forward. For many banks, the online login information isn’t the same as the data needed for the OFX connection. Some banks, like Wells Fargo, charge a monthly fee for OFX access. Finally, chances are your bank’s customer support line won’t know anything about OFX. Your best bet is to ask how to enable Quicken access (which uses the same OFX standard).
There are a couple of libraries available for retrieving OFX data:
In general, retrieving this data isn’t a straight forward process. OFX connection details are scattered, some banks haven’t made it easy to enable OFX, and there isn’t much information available on building an OFX client. It’s definitely primitive.
Additionally, OFX transactions can be cryptic – a large part of Wesabe’s value is in its ability to provide better transaction formatting.
How are others doing it?
Wesabe and Mint are 2 fairly new web startups that automate the process of collecting account transactions. How they collect the data is very different.With Wesabe, you record a Firefox browser session, walking through the download process. You can then re-run the session and Wesabe then updates your account data using the script.
Mint provides the most seamless experience. You simply provide your bank details (even PayPal works) and it grabs your transactions. Mint uses “Yodlee” to actually connect with financial institutions. Yodlee has been doing this for a while – they have a service called MoneyCenter that is remarkably similar to Mint – it actually has more features but lacks Mint’s visual appeal. My guess is Yodlee charges a pretty hefty licensing fee.
The Future
I wouldn’t bet on banks making it any easier to automate data retrieval. Erick Schonfeld of Techcrunch recently wrote a post that covered the API landscape very well – which types of companies are most likely to offer APIs and why companies that push APIs are very careful with what they are actually opening up. Opening up a core component of your business can spur some pretty dramatic changes – it will take a younger, upstart bank to spur progress.
While it’s not here yet, I’d pay for a service that:
I’ve added 2 videos to the Scout homepage – they demonstrate 3 things:
Watch the video (1 min 39 sec)
Watch the video (1 min 55 sec)If you’re looking for an easier way to monitor your servers and web apps, check out the videos. There’s a launch notification form on the Scout homepage as well – we’ll email people on this list before publically launching Scout.
One issue we face with PlaceShout, our short-form local reviews site, is that many of the shoutouts may not be relevant to you. If you haven’t been to Nihon in San Francisco, you can’t agree or disagree with Natasha’s shoutout: “Swanky whiskey bar/restaurant. Food was good-small plate Japanese and sushi”.
We recently implemented “Shoutouts You Might Be Interested” functionality to make it more relevant.
Nightly, we scan our database looking for places you’ve been. We find any shoutouts created at those places. These shoutouts are displayed on your personalized homepage, and you can quickly agree, disagree, or pass on each of the shoutouts. There’s a great chance you’ll have an opinion on these places since you’ve already voiced your thoughts on each of them in the past.
Once per week, we email 3 of these shoutouts to you. Directly from the email, you can agree, disagree, or pass:
So far, it’s been very successful. 38% of users have voted on a shoutout from an email. This increased the number of votes on shoutouts by 27% (real-time voting from Scout):
It’s had a great impact for 2 reasons — it keeps our users informed of activity at places they’ve been and it makes browsing and searching PlaceShout better. The most accurate (and least accurate) shoutouts now have significantly more votes.
In just 4 years, Detroit Tigers General Manager Dave Dombrowski turned one of the worst franchises in professional sports into one of the best. I thought this portion of a recent Detroit Free Press column really summed up why:
Early in Dave Dombrowski’s tenure as Tigers general manager, I asked him about the importance of having a clear plan, which I thought was lacking under the Randy Smith regime. His response was telling — more telling than I realized then. He shifted the conversation away from the word “plan.”
“It comes down to making good decisions,” he said.
Last week, I had the single best neighborhood cafe experience of my life. Amazing service. Gorgeous interior. Spotless. Plenty of unhidden power outlets. A luxurious back patio. Reasonable prices.
Axis Cafe in the Potrero Hill neighborhood of San Francisco seemed too perfect. Like how an urban cafe might feel in an over-the-top daytime soap opera. Later, I found out that Axis Cafe was affiliated with re{NEW}, a ministry of Christian City Church San Francisco. 100% of the cafe’s profits support the Axis Community Project (ACP), which sponsors programs for the families of Potrero Hill.
My favorite high school teacher preached: “show, don’t tell.” Axis Cafe does a great job of this – I couldn’t find any mention of the relationship at the cafe and I was never approached about anything related to the church, but the entire experience reflects very well on the people in charge.
It’s similar to what Jackson Fish Market is doing with their suite of small web applications. Each of their applications is sponsored by a single brand, but the brand isn’t force-fed to you. It’s joining you on the experience. The well-executed web apps reflect highly on the brands that fund the web sites.
Advertisements on many popular web sites seem to shout “hey, look at me”. It’s to everyone’s advantage to see less invasive forms of advertising work.
BTW, If you are in Atlanta and looking for something similar, I’d suggest Octane. It’s a frequent work location for Charles.
Cormac McCarthy, author of No Country for Old Men, is a man that isn’t afraid to break away from the accepted structure of English language:
In a previous novel, when a Spanish-speaking character spoke, he didn’t translate to English.
His style makes the story of a drug deal gone bad in a remote desert location come alive. An author going through the motions might write long passages describing the scenery, the characters motives, their backgrounds, etc – but that doesn’t capture the confusion that would really occur in this situation.
It struck home to me when thinking about building software – sometimes we go through the motions when solving a problem. We don’t focus on the problem itself. It’s asking ourselves “How can I build this RESTfully?” before really thinking about the end-user’s interaction. Perfect technical execution of an inferior solution is worse than breaking a pattern to better solve a problem.
This American Life recently profiled Harold Washington, the first black mayor of Chicago. The episode featured one of the most stiring sound bites in my recent memory – a portion of a debate that served as Washington’s coming-out party. It was easy to imagine myself listening to the minute-long segment on the radio and knowing instantly that whether I liked it our not, this longshot is going to win.
I love these moments – when I hear/see/do something new, and know instantly that I won’t return to the old way. They are the reason I build web applications. Getting an email from someone that used one of our applications and experienced this is amazingly gratifying. It’s easy to forget that this happens regularly for many of us in the web industry, but other professions experience this much less frequently.
Why do you build web applications?
When getting a shuttle to the airport, I came across this great idea immortalized in clipart.
Andre and I recently finished the initial launch of Placeshout’s Facebook application. There are several “getting started” tutorials available on building Facebook applications with Ruby on Rails, but there were quite a few issues we ran into that are beyond a “How To” blog entry.
If you are building your first Facebook application, expect very slow going at the start. I’d take your time estimate and double it. Here’s why:
In the end, it felt a lot like traveling to a non-English speaking country – at the start it’s difficult to get basic things accomplished. Once you get in a groove though, you enjoy the scenery and forget that at one time, you didn’t throw up when drinking tap water.
There’s a very easy way to ensure that your project won’t be quoted by a quality, not-starving-for-work web development firm: make the firm sign a Non-Disclosure Agreement (NDA) before you provide an overview of the project.
We care about confidentially and security, but we don’t sign an NDA until we hear an overview of the work. There’s too great of a chance that something you want done is currently living in one of our current projects. We don’t want to get involved in a legal gray area.
So now for the real reason.
In my life, I’ve never overhead an original, compelling idea that I could act upon better than the person who thought it up (this doesn’t discount the idea that I’m just not as smart as everyone else…but that’s another blog post).
If Mark Twain gave me an outline of The Adventures of Huckleberry Finn and said “there’s everything – go ahead and write it!”, the book would have been better suited for kindling than English class. I don’t have the skills to put together a great novel (let’s be honest – I don’t have the skills to write a poor novel).
Smart people know this. It’s not the idea – it’s execution, domain knowledge, and leadership.
Sometimes our Ruby on Rails apps work perfectly with test data, but when they go to production, errors creep in. Debugging errors on a production server is a pain and a bit dangerous.
Here’s what we do to quickly and safely debug issues on our production servers:
1. Add the following capistrano task to create an SQL dump of your data. If it’s a large database, it may be worthwhile to compress the SQL dump as well.
desc "Exports the production db to the home directory of user"
task :db_dump, :roles => [:app, :db] do
run("mysqldump -u #{database_username} --password=#{database_password} #{application}_production > production.sql")
end
2. Create the following rake tasks to grab database dump and import the data locally.
namespace :db do
desc 'Grab a dump of the production database on the server and places it in db/production.sql.'
task :get_production do
`cap db_dump`
`scp DEPLOY_USER@SERVER_NAME.slingshothosting.com:production.sql #{RAILS_ROOT}/db/production.sql`
end
desc 'Imports the database dump of file db/production.sql into development.'
task :import do
`mysql -u root app_name_development < db/production.sql`
end
desc 'Grabs a dump of the production database from the server and imports the data into the local development database.'
task :get_import => [ :get_production, :import ]
end
3. Install the Firefox plugin Server Switcher to make it easy to switch between the production and local server in your web browser.
4. Disable mail in your development box – it’s not a good feeling when you realize you’ve emailed several thousand users while testing out a newsletter script.
config.action_mailer.delivery_method = :test

At the Bovine Bakery in Point Reyes Station, CA, there’s a custom shelf on the wall that holds a collection of coffee cups. I thought it was a nice decoration, but then I read the posted notes – people can leave a coffee cup and use it instead of a throw-away paper cup. It’s a win for the Bovine Bakery, the environment, and the Point Reyes community.
Why I love this idea:
Bill Siggelkow and James Mitchell of the Atlanta Ruby Users Group have put together Ruby Roundup, a solid podcast highlighting the news around the Ruby community.
It’s difficult keeping up with Ruby news. Listening to the podcast is a productive way to do it.
Recently I moved from San Mateo to San Francisco. Like any move, it involved a couple phone calls to utility companies.
I was really impressed with Pacific Gas & Electric. When a company has a dominating position in their industry, it’s pretty easy to see why customer service can drop down the priority list.
When I called PG&E to setup service at my new address, the call started like any other – the typical “we are experiencing an abnormally large call volume” message. But after that announcement, PG&E offered to call me back when an opening occurred.
It worked perfectly – I received a call a bit later and was instantly connected to an operator.
I’d argue that 99% percent of the time, it’s people and not technology that result in better customer service (here’s a great story about Best Buy and cookies). It’s great to see it work the other way.
Call centers are a particularly interesting area. They won’t overstaff to just handle the peak times, but the service still needs to be adequate when things get busy. PG&E’s callbacks work great, but I’m also excited to see if companies like liveops can make an impact as well.
If you’re like me and have been putting off RESTful routing in Rails (in other words – the future), checkout Andre Lewis and his presentation on RESTful routes at Thursday’s Silicon Valley Ruby on Rails Meetup.
Andre is a great presenter and the author of Beginning Google Maps Applications with Rails and Ajax .
John Adams. George Selkirk. Steve Ballmer. Charles Brian Quinn.
The people above have something in common – they followed in the footsteps of an icon. For Highgroove Studios’ Charles Brian Quinn, it’s taking over Ruby on Rails training at Big Nerd Ranch from David Black, author of Ruby for Rails and leader of RubyCentral, and Marcel Molina Jr., member of Rails core and part of the team at 37Signals.
If you’re looking at diving head-first into Ruby on Rails, this is the way to do it. The class, which is being held February 12-16, gives you a chance to be totally immersed in Ruby on Rails for a solid week (plus stay at a great hotel and receive some gourmet meals – don’t worry, Charles doesn’t do the cooking).
Besides his great teaching ability and fun personality, one of the special things Charles will bring to the training class is real-world experience. He’s not dabbling in Rails – Charles has been building, deploying, and maintaining Rails applications for over a year at Highgroove Studios. If you’re looking for the complete Rails picture, Charles will give it to you.
1. Java hearts Ruby
The JRuby team gets assimilated into Sun. So what does JRuby do? Check out Jeremy Voorhis’ Hello World application and this presentation.
2. J2EE RESTful support – not for the faint of heart
Compare RESTful development in Java with Ruby on Rails. Wow – no wonder I’m happier getting up in the morning now. Scraped from Labnotes (pun intended).
3. WebStats: Predator Edition
In the Schwarzenegger flick Predator_, the alien could only see infrared light. Turns out it’s also useful when reviewing usage patterns on your website. Checkout the latest useful Rails application, CrazyEgg.
Six kids, and still has time for Rails. Bob Silva takes a look at what Rails 1.2 brings to the plate.
5. Finally – an elegant way to test your HTML code
Assaf Akin becomes the first Ruby news maker to make our list twice in one week. The prize – with food, water, and all vaccinations – will arrive tomorrow. Take a look at Assaf’s assert_select when you need to check your HTML output in functional tests.
Here’s a look at the most thought-provoking Ruby on Rails news items of the week as determined by the always unbiased (but not beyond bribes) team at Highgroove:
1. The Enterprise Rails Debate
The best result of the latest “is Rails/Ruby ready for the enterprise debate” (see Joel Spolesky’s and DHH’s original cross-fire) was Justin Gehtland’s clarification of enterprise software. Frankly, Highgroove wouldn’t be in business (and growing) if Rails wasn’t a good choice in building software for the enterprise.
*2. Ruby God Jamis Buck emerges from Idaho, releases Capistrano 1.9.1
*
Everyone’s favorite Rails Deployment tool, Capistrano, gets a major update. Jamis also clears up any confusion on the future development of Capistrano.
3. Are Mocked Models the New Testing Trend?
RubyConf Speaker Kevin Clark looks at a way to speed up your tests in an article on mocking models rather than using fixtures. We’re Test-Driven-Development (TDD) addicts here (it’s true – my recovery group class meets tonight), and faster-running tests is perhaps the greatest way to encourage TDD. Fixtures are great, but when refactoring is needed on a large application, they can be a major pain.
4. Class Variables in Rails
CNET Rails Guru Chris Wanstrath takes a look at class variables in Ruby and in Rails. Class Variables in Rails are often a constant source of confusion for many developers – take a look at this post for some clarity. James thinks Chris should have come right out and said: “Don’t use class variables. Use instance variables of the class instead.”
5. Embrace the CRUD (sounds like a good name for a t-shirt)
This is a little old, but worth noting. Scott Raymond gives a full report on the process of embracing the CRUD and becoming RESTful with a report on refactoring IconBuffet.com to REST. This is the most useful article we’ve seen because it walks through the conversion process rather than starting from scratch.
I’ve been lucky enough to work on many client projects that make me (and my friends) generally excited. Blurb, a Highgroove client and a recently launched Ruby on Rails application, is one of those projects.
Blurb makes it look like your portfolio, travel journal, fiction novel, or any other creative print piece belongs in a Borders bookstore with its own SKU. I’m already working on my first book, and I’m confident my creations will be some of the most unique Christmas presents this year (I sure needed it – I don’t even want to talk about my gift-giving history).
Hats off to to Konstantin Gredeskoul, Brent Baker, and the rest of the Blurb team on a job well done.
There’s plenty of ways to scope and develop a web application. But frankly, it’s not that different than planning and implementing any other type of project. A recent San Francisco Chronicle article looked at Chicago and how rapidly the city moves on urban initiatives compared to San Francisco. The similarities between Chicago’s city planning philosophy and agile software development are uncanny.
Former San Francisco planner Sam Assefa, now director of policy for Chicago’s planning department, had this to say about Chicago Mayor Richard M. Daley:
Daley’s “innovations don’t come as this grandiose plan or vision,” Assefa said. "It’s about doing the small things well and working up incrementally. He says ’Here’s an idea. If it works, we’ll set policy and require it citywide.’ "
And more great chunks of information on a San Francisco Sustainability Plan (sound at all like functional requirements?):
Consider the 150-page Sustainability Plan for San Francisco approved in 1997 by the Board of Supervisors. Of the 15 sections, one on “energy, climate change and ozone depletion” was crafted by a 32-member “drafting group” that spells out 62 recommended actions such as “establish neighborhood energy-planning groups” and a vague directive to “create high-visibility demonstration projects.”
Just another great example that the key to better projects isn’t more planning or acronym-filled design philosophies, but small, simple steps.
Using a subdomain as an account key (ie – highgroove.heartbeathq.com where “highgroove” is the account key) is a great way to personalize a web application. Rails has a nifty plugin written just for this, but the implementation information is a bit scattered. Here’s a step-by-step guide for implementing, testing, and simulating this powerful feature.
Microsoft has declared victory over J2EE, and is now setting their sites on Ruby on Rails.
I think I’ve got a case of Deja Vu.
Salesforce, the large Customer Relationship Management tool, and Ruby on Rails, the elegant web development framework, seem like an awkward pair. About as awkward as dipping a Wendy’s french fry in a frosty.
Salesforce is large, often times confusing, and is a tool built for handling lots of different jobs. Rails is lean, elegant, and designed specifically for making web development easier. While Salesforce and Rails are dramatically different, they actually work very well together (much like a Wendy’s french fry dipped in a frosty – trust me).
This unlikely pairing is sparked by ActiveSalesforce, a Ruby on Rails connection adapter to Salesforce-managed data. This Ruby Gem makes working with Salesforce data about as easy as the Rails-MySQL combination.
Highgroove Studios is working on a Salesforce-Rails application, and one of the things we have to do is synchronize a local MySQL database with Salesforce. This is needed because the connection to Salesforce is slower than when working with a local database, and several parts of the application are time-sensitive.
Here’s a look at how we designed the application to synchronize data between the local database and Salesforce.
Realizing that hitting “talk” on my phone dialed the previous number. Figuring out that the arrow next to my fuel gauge showed which side the car fuel door is on. Tab completion.
A couple of times a month, I’ll have a “wow – that’s so useful and so simple” moment. One of the first times I experienced that with Ruby was with #method_missing.
Metaprogramming is your secret identical twin that likes doing all of the things you don’t. Need to take out the trash? Just tell your twin. Need to program in Java? Send your twin an email.
Metaprogramming, defined as writing code that writes code by Why The Lucky Stiff, makes scaffolding, associations, validations, and the many magical parts of Rails possible. Implementing metaprogramming techniques can drastically eliminate duplicate code, making your applications far easier to maintain and build. It also lets your code do the work – not you.
CampusSync.com, a client project of ours, is a collaboration site for college students. It has several administration areas that are almost identical, but not a good fit for Rail’s standard scaffolding. The solution to eliminating duplicate code: roll our own metaprogramming solution.
The demo is up – take Heartbeat for a spin.
It’s a single-web page control panel that lets you run any rake task within your application’s directory, from deployment to tests to migrations. If you can write a rake task, Heartbeat can execute it! Additionally, you can use it to monitor the uptime of your URLs.
The app makes extensive use of RJS templates and AJAX.
Heartbeat was built by myself (Derek Haynes) and Charles Brian Quinn of Highgroove Studios during the 24-Hour coding marathon that was Rails Day 2006.
We’ve got big plans for Heartbeat, especially as it relates to Slingshot, our Rails Business Hosting Service. Stay tuned.
Auto-Complete is a great tool when it provides possible results BEFORE you finish typing. Unfortunately, using Rails’s included AJAX helpers to query the database as you type often results in a large delay before matches are returned.
However, there is a lightning-quick option: pre-fetch the results in a Javascript array.
In a client project, users can add labels to events on their calendar. To prevent users from creating variations of the same label name (i.e. – “favorite” vs. “favorites”), we needed to provide faster auto-complete functionality than that available through Rails’s provided AJAX helpers.
We created a simple helper method for this case (special thanks to Chad Fowler and his Rails Recipes book for the inspiration).
"Take a look at the local_auto_complete_field helper method. TXT (editor’s note: no longer available)
To call the function from your views:
<%= local_auto_complete_field(‘name’,@labels) %>
In the above example, we are adding JavaScript-powered auto-complete functionality to the 'name' text field. The JavaScript array is generated by calling #name on each element in the @labels array. To override this behavior:
<%= local_auto_complete_field('name',@labels,
:method => 'description') %>
Here’s to faster auto-completion!
Another San Francisco Ruby Meetup. Another record-breaking attendance mark (has any Ruby group in the world brought together more than 110 people?).
Here’s the slides from my presentation on how Highgroove Studios molds its team and development process to utilize Ruby on Rails:
Atlanta Technology Executive (and recent friend) Scott Burkett blogged recently on what Atlanta can do to emulate the entrepreneurial environment of Silicon Valley. Having lived in both areas, I’ve had a chance to meet and work with many remarkable entrepreneurs.
I think Scott hit many of the comparisons between Atlanta and Silicon Valley on the head. Atlanta is full of smart engineers, isn’t as forgiving to entrepreneurial failures, and like Silicon Valley, does a great job celebrating entrepreneurial heroes.
However, I don’t think the key to sparking innovation in Atlanta is tied to things like tax exemptions, venture funds, and cheap office space. When a company can start worrying about those things, they are already on their way. Innovation comes much earlier on in the process.
What are the biggest differences I’ve seen between Silicon Valley and Atlanta?
We love Ruby on Rails – since 2005, all of our applications have used the web framework. But we don’t enjoy deploying Rails applications.
Announcing Slingshot – simple hosting for Ruby on Rails business applications. Why is Slingshot better than traditional hosting for Rails applications?
Take a look at our plans, and feel free to contact us with any questions!