An Odd Reason Why I Like Google Wave
Others have noted reasons why Google might have decided Wave is a failure, but for me the most significant reason is that when it was announced at Google I/O 2009, it needed to be open to all interested parties. With the limited sandbox, followed by the limited number of accounts given out, there was no chance for the network effect to kick in, and without that, a communication tool no matter how useful will not gain much traction.
I still use Google Wave, along with several of my co-workers. Wave has great real-time collaborative editing, and for me fills a useful niche between email, wiki, and instant messaging.
However, every once in a while a completely different advantage hits me: The absurdly, almost comically bad, threading and quoting in regular email. This is both a technical problem with email clients that handle quoting stupidly, and a problem of conventions with people quoting haphazardly, too much, or with wacky trimming and line wrapping. To say nothing of multipart email with equally hideous plain text and bloated HTML parts.
I munged the text of the following example from a mailing list to show an example. It’s not the most egregious mess of quoting, and had …
community
Learning Spree: 10 Intro Tips
In climbing the learning curve with Spree development here are some observations I’ve made along the way:
-
Hooks make view changes easier — I was surprised at how fast I could implement certain kinds of changes because Spree’s hook system allowed me to inject code without requiring overriding a template or making a more complicated change. Check out Steph’s blog entries on hooks here and here, and the Spree documentation on hooks and themes.
-
Core extensions aren’t always updated — One of the biggest surprises I found while working with Spree is that some Spree core extensions aren’t maintained with each release. My application used the Beanstream payment gateway. Beanstream authorizations (without capture) and voids didn’t work out of the box with Spree 0.11.0.
-
Calculators can be hard to understand — I wrote a custom shipping calculator and used calculators with coupons for the project and found that the data model for calculators was a bit difficult to understand initially. It took a bit of time for me to be comfortable using calculators in Spree. Check out the Spree documentation on calculators for more details.
-
Plugins make the data model simpler after learning what they …
ecommerce rails spree
Hopefully Useful Techniques for Git Rebase
I recently had to spend a few hours merging Git branches to get a development branch in line with the master branch. While it would have been a lot better to do this more frequently along the way (which I’ll do going forward), I suspect that plenty of people find themselves in this position occasionally.
The work done in the development branch represents significant new design/functionality that refactors a variety of older components. My preference was to use a rebase rather than a merge, to keep the commit history clean and linear and, more critically, because the work we’re doing really can be thought of as being “applied to” the master branch.
No doubt there are a variety of strategies to apply here. This worked for me and perhaps it’ll help someone else.
Some Key Concerns for a Big Rebase
Beyond the obvious concern of having sufficient knowledge of the application itself, so that you can make intelligent choices with respect to the code, there are a number of key operational concerns specific to rebase itself. This list is not exhaustive, but it is not an unreasonable set of key considerations to keep in mind.
Rebase is destructive
Remember what you’re doing! While a merge …
git testing
Backcountry.com, CityPASS, and Zapp’s in the news
I want to call attention to a few of our clients who have been in the news lately.
Today, Backcountry.com’s CIO Kelly Phillipps spoke at the NRFtech 2010 conference in California on cultivating community and encouraging user-contributed content, and why Backcountry.com invests so much in building its community.
About a month ago, CityPASS was featured in a spot on the Today Show about hostess gifts. A lot of viewers visited the website as the spot aired in each of the U.S. time zones!
Finally, we were sad to learn that Zapp’s Potato Chips founder Ron Zappe passed away in June. He had quite an adventure building his two companies, first in oilfield services in Texas, then in 1985 with his potato chips company focused on spicy Cajun chips. Their online store is simple—their products are excellent!
clients
Ruby on Rails Typo blog upgrade
I needed to migrate a Typo blog (built on Ruby on Rails) from one RHEL 5 x86_64 server to another. To date I’ve done Ruby on Rails deployments using Apache with FastCGI, mongrel, and Passenger, and I’ve been looking for an opportunity to try out an nginx + Unicorn deployment to see how it compares. This was that opportunity, and here are the changes that I made to the stack during the migration:
- Apache 2.2.3 to nginx 0.7.64
- Passenger 2.2.1 to Unicorn 1.1.2
- PostgreSQL 8.3.8 to 8.4.4
- Ruby on Rails 2.2.2 to 2.3.8
- Typo 5.3 to 5.5
I used the following packages from End Point’s Yum repository for RHEL 5 x86_64:
- nginx-0.7.64-2.ep
- ruby-enterprise-1.8.7-3.ep
- ruby-enterprise-rubygems-1.3.6-3.ep
The rest were standard Red Hat Enterprise Linux packages, including the new RHEL 5.5 postgresql84 packages. The exceptions were the Ruby gems, which were installed locally with the gem
command as root.
I had to install an older version of one gem dependency manually, sqlite3-ruby, because the current version requires a newer version of sqlite than comes with RHEL 5. The installation commands were roughly:
yum install sqlite-devel.x86_64
gem install sqlite3-ruby -v 1.2.5
gem install unicorn
gem …
hosting redhat ruby rails
Creativity with fuzzy string search
PostgreSQL provides a useful set of contrib modules for “fuzzy” string searching; that is, searching for something that sounds like or looks like the original search key, but that might not exactly match. One place this type of searching shows up frequently is when looking for peoples’ names. For instance, a receptionist at the dentist’s office doesn’t want to have to ask for the exact spelling of your name every time you call asking for an appointment, so the scheduling application allows “fuzzy” searches, and the receptionist doesn’t have to get it exactly right to find out who you really are. The PostgreSQL documentation provides an excellent introduction to the topic in terms of the available modules; This blog post also demonstrates some of the things they can do.
The TriSano application was originally written to use soundex search alone to find patient names, but that proved insufficient, particularly because common-sounding last names with unusual spellings would be ranked very poorly in the search results. Our solution, which has worked quite well in practice, involved creative use of PostgreSQL’s full-text search combined with the pg_trgm contrib module.
A trigram is a …
open-source postgres search
End Point turns 15 years old
End Point was founded on August 8, 1995, so yesterday was its 15th anniversary! (Or is it a birthday? I’m never sure which it is for a company.) End Point’s founders Rick Peltzman and Ben Goldstein have been friends since grade school, and this wasn’t the first business they started together—in college they painted houses together.
Nearly 20 years later, sensing the huge potential of the newly commercialized Internet as a medium for mass communications and commerce, they joined forces again. They founded End Point to offer Internet and ecommerce consulting and hosting services. That was back before the Internet became heavily hyped, before the tech bubble of the late ’90s, and like most new companies, it took a lot of hard work, hope, patience, skill, and a little luck.
End Point has grown from those humble beginnings to our present staff of 21 employees located in 13 states. We work with wonderful clients, old and new, who in many cases have become very close partners and friends as we’ve worked together to grow their businesses over the years.
If we worked together in one office, we’d certainly celebrate with a large birthday cake, but since we’re a distributed company, we’re …
company
Tail_n_mail and the log_line_prefix curse
One of the problems I had when writing tail_n_mail (a program that parses log files and mails interesting lines to you) was getting the program to understand the format of the Postgres log files. There are quite a few options inside of postgresql.conf that control where the logging goes, and what it looks like. The basic three options are to send it to a rotating logfile with a custom prefix at the start of each line, to use syslog, or to write it in CSV format. I’ll save a discussion of all the logging parameters for another time, but the important one for this story is log_line_prefix. This is what gets prepended to each log line when using ‘stderr’ mode (e.g. regular log files and not syslog or csvlog). By default, log_line_prefix is an empty string. This is a very useless default.
What you can put in the log_line_prefix parameter is a string of sprintf style escapes, which Postgres will expand for you as it writes the log. There are a large number of escapes, but only a few are commonly used or useful. Here’s a log_line_prefix I commonly use:
log_line_prefix = '%t [%p] %u@%d '
This tells Postgres to print out the timestamp, the PID aka process id (inside of square …
monitoring open-source perl postgres