Speaking of the bubble in the housing market, Jason Kottke has this link for us from the New York Times, graphing the price of American houses since 1890 adjusted for inflation.
Insane, is all I have to say.
Speaking of the bubble in the housing market, Jason Kottke has this link for us from the New York Times, graphing the price of American houses since 1890 adjusted for inflation.
Insane, is all I have to say.
Alexender Kjerulf is a friend who’s been blogging for a few years, plateaued roughly around the same amount of traffic I have. That is, until recently, when he finally cracked the nut of growing his audience exponentially through Reddit and Digg.
What he found was that by tweaking a few things and leaving the essence of his writing unchanged, he suddenly got a major league hit. And from that first hit, he was quickly on to the next.
Thankfully, he took some time to share with me some of his tips for what got dim dugg and redditted, which I now pass on to you.
1. Frame your stories negatively. It’s easier to catch people’s attention when talking about something that sucks than when offering constructive advice. You can still be constructive, but you need to get their attention with a negative spin in the title and intros.
2. Write in a top 10 format. Or top 5 or 7 or whatever. It’s a good way to frame your idea, and it provides the reader with a structure, and a clear idea of the size and scope of what you’re writing.
3. Add something visual. A photo, an illustration, something to help people get sucked in and emotionally engaged. Kathy Sierra masters this to perfection. Use iStockPhoto or something similar.
4. Begin with a story. Then give us your message. Again, a story is the best way to communicate what problem you’re talking to, and to engage your readers.
5. Stick to a topic. Your blog should be on a single topic, because it is more respectful of your readers’ time. You can still have a personal blog about everything you, but the large audiences are in the ones that stay on topic.
6. Submit to Reddit/Digg at the time when most people are about to leave work, which is when they’ll usually do some gratuitous web surfing. Around 7pm eastern/4pm western should match fairly well.
7. Make the title stand out. In particular on Reddit which doesn’t have the description field. Not as in “BEST LINK EVER!!!”, but something intriguing and informative that pulls people in.
Now go do it for yourself.
It seems somebody took down the wiki page I put up at caboose, so let’s try this again.
If you’re going to RailsConf Europe 2006, add your dates, hotel, and contact info to my new wiki page.
I still haven’t bought tickets or hotel or anything, so I’m curious to see where the rest of you are staying.
It’s great to hear a sane voice in the intellectual property debate. Inc. Magazine has an article titled Relax. Let Your Guard Down, where they make the point that a company’s edge doesn’t hinge on a single big-bang innovation, but on a constant stream of smaller innovations.
“A lot of people think they’re in the invention business, but they’re really in the application business,” says Shader. “They confuse innovation with patents, and that’s a classic mistake.” Profitable innovation comes not from inventing a new product, he maintains, but from having a team of smart employees who figure out how to do a better job every time they interact with customers. “That sort of innovation will do a lot more for your company than a piece of parchment,” he says.
Patents are supposed to encourage innovation, by giving the incentive of having the exclusive right to the invention for 20 years. When the patent holder fails to build a sustainable business other than that of licensing their patents, and when other people routinely violate their patents without even knowing about it, you know that the system has failed its purpose.
An update 83 days after my first stake in the ground on the housing inventory. Back then, 40,875 units were on the market. Today, that number is 47,021. That is 6,146 more units for sale, or 74 additional unsold units per day since June 6.
In the anecdotal evidence department, I know of several people with attractive apartments in good locations, which have gone unsold since April or earlier with hardly any interest and not even a low-ball offer. The market is definitely on the fence.
UPDATE: Thomas Madsen-Mygdal has dug up the historic numbers going 6 years back. Just saw this now.
UPDATE 2: And the rate is still the same: On October 8th, the number is 49,982, which makes 73 per day since June 6. Tracing all the way back to Feb 22, which marks the low point of 31,946, it’s 79 additional units per day.
One more thing I learned while in the bay area is that Fat Tire is a damn fine beer. It has now officially dethroned Sierra Nevada Pale Ale as my favorite beer. Fat Tire is made by New Belgium Brewing Co, based in Colorado. Rock on.
Something else I learned on my recent trip to the US is that salsa is now outselling ketchup. That was quite a surprise to me, albeit a pleasant one.
It wasn’t until now, however, that I discovered that the dethronement apparently took place more than 14 years ago! Wow!
I’m back from a 8-day stay in Silicon Valley with a stop-over in Chicago. It’s been a fun trip full of new knowledge.
For example, I learned that an airplane can be a nasty place to be when your immune system is already on its knees; I caught pneumonia as a secondary infection and had to be treated with antibiotics. However, that’s where I learned that Echinacea has no effect (which, incidentally, Wikipedia could have told me). The jury is still out on whether Airborne is any different—no evidence that it works as of yet.
I started the trip with a short overnight stop in Chicago to meet with David Heinemeier Hansson including his girlfriend, parents, and a few other folks, and then hopped on to SFO/Silicon Valley to spend the week with my business partner, Christina Wodtke.
Christina had arranged for us to meet with some amazing people, including Harry Max, Luke Wroblewski, Dave Shen, and Jeff Veen. Lots of new information and insights have been loaded into my brain.
UPDATE: Airborne is number 2 on the Inc. 500 list of fastest-growing private companies. Impressive.
It looks like I had the pleasure of doing the last airborne video chat and web application deployment that anyone will do for the foreseeable future.
What a shame, I really enjoyed the service, and I did in fact choose my airline and connections specifically so I could get onboard wifi. It’s the perfect place to get some focused work done (when not video chatting with your one year-old).
It was noteworthy, however, that I seemed to be the only passenger on the plane using it. For the first few hours it didn’t work, and I had to ask the purser repeatedly to do something about it, until she finally fixed it by rebooted the system.
I’m sure it’ll only be a matter of time before we’ll have this again, though it might be a fair amount of time, because others will be put off by the Boeing’s failure.
UPDATE: No, it’s still on. The first reports said it was discontinued immediately, but others said it would continue till the end of the year. It seems the latter is correct.
I’m looking for a part-time Rails developer to work on a project on a part-time basis, preferable based on the east coast to make face time with the client easier.
Shoot me an email if you’re interested, and we can talk through the specifics.

I like this clean and simple email to a friend feature from UrbanDictionary. Two fields and you’re done. And it sends the email and gives you feedback instantly without leaving the page, leaving the box open for you to send to another. There’s also a delicious link. Nice and clean, no fuss.
In case you’re behind kind of firewall, or gem install just doesn’t work for you, here’s the direct links to the gems you need to upgrade to 1.1.5 and get the security patch.
ActiveSupport wasn’t updated.
Google Analytics is the first web app I’ve seen that does time zone by country.
It’s easier to navigate than a long list of time zones. And it lets you use the keyboard more easily, because you can type the first letter of your country name to select. In a select box where all entries start with “(GMT …”, the keyboard isn’t much help.
Boxes and Arrows has launched a brand spanking new events calendar.
It’s quite exciting, because there’s a hole in the market for a targeted web-related events calendar. We hope to fill that hole. If you want to stay up-to-date on interesting web-related events, this is the place to subscribe.
You can subscribe by RSS feed, by iCalendar feed, and you can also get everything in XML format or iCalendar format so you con do your own dashboard widget, processing, or syndicate the listing elsewhere.
We launched last night, and we’ve already launched the first batch of updates based on people’s feedback.
It’s also exciting from a technical stand-point, as it’s built using the latest RESTful and HTTP Accept code in Edge Rails, which makes it trivial to offer XML and iCalendar versions of everything.
A few months back I mentioned that Wagamama was opening in Copenhagen. They have now, and I finally got a chance to pay it a visit tonight. Here’s my unsolicited review.
The good is great as ever. It’s filling, nourishing, fresh, tastes great, is served in minutes, and leaves you full without the bloat. The decor and cantina atmosphere is great, if you’re into that kind of thing (I am).
The service … uhmm … not so much. We had to wait 5 minutes to get any attention, and then another 5 to be seated, even though it wasn’t busy and there were 3 waitresses right next to us. We were told a dish wasn’t spicy and our 1-year old could eat it, when in fact it was spicy. We had to wait longer for a glass of water than for our entrees. The waitresses were walking around stepping on each other’s toes in seeming chaos.
It’s odd, because in Amsterdam, the service was just as well executed as the rest of the experience. I’m starting to see a pattern here. A friend of mine spoke to Per Bruun, head of luxury deli chain Emmery’s. He related how his biggest problem was getting quality, motivated staff.
Could it be that it’s generally difficult to get people here to take service seriously? To take pride in serving well and knowing every last detail about the food you’re serving? It seems like it. Is it because we don’t tip? That’s probably a contributing factor, though I suspect it runs a bit deeper than that.
One final gripe: Why is the green tea free but you have to pay DKK 5 for a glass of tap water?
For dinner when you’re not into spending fortunes, and when you’re sick of the typical café fare, it’s the perfect choice. I’m definitely going to be a frequent visitor, and I hope they get the service sorted. Soon.
What’s the deal with MyISAM vs. InnoDB for Rails? Here’s what I know and think I know so far:
Reasons to use MyISAM:
Reasons to use InnoDB:
I’m leaning towards using InnoDB, because:
Is there an official recommendation? What do some of the big-site folks out there do?
I was just reminded of this quote from Alan Cooper (and I’m quoting from memory):
No matter how great your interface, it would be better if there were less of it.
Amen.
I love this little nugget from orbitz.com. Who on this planet does not prefer non-stop flights? “Oh, not me, I’d rather have seven layovers, that’s seven times as many opportunities to lose my luggage, hell yeah, where do I sign?”
What they don’t tell you is what consequences that tick box has. Will they just show non-stop flights on top? Will they not show any flights that aren’t non-stop?
All else being equal, everybody prefers non-stop. It’s a matter of price. So a better question would be “How much more are you willing to pay for a direct connection?”
But it’s not quite that simple, either. It depends on how much time it adds to the trip, how convenient the airport is, whether it’s in the beginning, the end, or the middle of the trip, and what time of day it is.
What’s certain is that the question on orbitz.com is meaningless without more context.
I’ll be in the Bay Area from Friday August 18 through Thursday August 24.
if you want to meet up (or have a place for me to crash).
A while back, I asked your advice on how to produce PDF, DOC, and RFT output from a web app, something I needed for isabont.com, which we launched a few weeks ago.
Thanks to your help, I figured it out, and now I want to share what I learned.
First, I ended up using OpenOffice 2 to do it. We produce 3 formats natively: HTML, Text, and OpenOffice. Since the OpenOffice format is just a zip of a bunch of XML files, that’s easy to create programmatically.
To produce the XML files, I use Rails’ ERb templates, which are like ASP or PHP files, just plain HTML (or in this case XML) with inline <% ... %> tags that let you do conditionals, loops, insert variables, etc.
What I do in practice, is create the document in OpenOffice, save it, unzip it, and pull out the XML files. Some of them I can just include verbatim, others, like content.xml, I need to make dynamic.
Next, I invoke OpenOffice, calling a macro that converts the document I’ve produced. The macro is adapted from an article on xml.com:
' Save document as an Acrobat PDF file.
Sub SaveAs(inFile, outFile, FilterName)
oDoc = StarDesktop.loadComponentFromURL(ConvertToURL(inFile), "_blank", 0, Array(MakePropertyValue("Hidden", True),))
oDoc.storeToURL(ConvertToURL(outFile), Array(MakePropertyValue("FilterName", FilterName),)
oDoc.close(True)
End Sub
Sub SaveAsPDF(inFile, outFile)
SaveAs(inFile, Left(inFile, Len(inFile) - 4 ) + ".pdf", "writer_pdf_Export")
End Sub
' Save document as a Microsoft Word file.
Sub SaveAsDoc(inFile, outFile)
SaveAs(inFile, Left(inFile, Len(inFile) - 4 ) + ".doc", "MS WinWord 6.0")
End Sub
Function MakePropertyValue( Optional cName As String, Optional uValue ) _
As com.sun.star.beans.PropertyValue
Dim oPropertyValue As New com.sun.star.beans.PropertyValue
If Not IsMissing( cName ) Then
oPropertyValue.Name = cName
EndIf
If Not IsMissing( uValue ) Then
oPropertyValue.Value = uValue
EndIf
MakePropertyValue() = oPropertyValue
End Function
This is where it starts to get annoying. You would hope that OpenOffice was actually reasonably scriptable, having come from and SUN, but no. In order to get OpenOffice to suck up this macro, you have to start it, select Tools, Macros, and then enter this macro somewhere. That’ll give it a special path, in my case macro:///Standard.Isabont.
To invoke it, I execute this shell command:
/usr/lib/openoffice/program/soffice.bin -display :10 -headless macro:///Standard.Isabont.SaveAs(/path/to/ooo/file.odt,/path/to/output/file.doc,Name of Filter)
The filters can be one of:
I managed to find a macro that would spit out all the names of the filters in your installation into an OpenOffice document, but I forget where. It’s an ugly long list of filters, and it’s hard to figure out how well they’d work.
What the above command does is actually load up OpenOffice, which is big, so it takes a little while, invoke that macro, and then shut it down again. If another OpenOffice process is already running, it’ll just stop. If it crashes, it leaves a little lock file around in /home/youruser/.openoffice.org2/.lock, which you need to delete to get it to start again.
In order to make sure it only runs once, and in order to not tie up resources waiting for it, I use Ezra Zygmuntowicz’s excellent BackgrounDRb in Rails. This makes it run in a background thread, with the browser just polling every second to see if it’s done. It works.
What would be better, of course, is to just keep one OpenOffice process running and send messages to it. There’s something called an UNO bridge, but it seems to be only half working and maybe a quarter documented.
The good thing about this setup is that even though there’s the odd problem, like bullets showing up weird in the Word DOC output, it’s entirely reproducible, you can go from Word back to OpenOffice, unzip, and look inside, and you can actually get to the bottom of things.
An equally annoying thing about this setup is how poor OpenOffice works on the Mac, and how slow it is. That means that development cycles go from the usual 2-second process of editing and running unit tests, or reloading the browser, becomes an order of magnitude slower, which means you have to change your style of working. Frustrating, and less productive.
Let me take a moment for an unsolicited rant …
All in all, my expeience with OpenOffice is that I like the format, but hate the software. The format is faily clear and easy to work with, although at 706 pages, the specification is still a bit too verbose for my taste. Also, like Dave Winer is fond of saying about RSS and OPML, it works because there’s software that implements it. It would be impossible to work with it based on the spec alone, without OpenOffice.
But boy, is OpenOffice the software a bloated piece of crap! Microsoft needs have no fears about it. Instead of trying to do something new, it’s just a really poorly executed clone of MS Office.
Microsoft is widely criticized for featuritis, something they get into because of their need to sell upgrades. OpenOffice doesn’t have that problem, so they could’ve differentiated themselves by having less, but better features.
Another obvious differentiation would be scriptability. Microsoft is no fan of the command line, so they tend to take the big and clumsy approach of building a whole language and IDE into the application itself. It would be great if OpenOffice had found a way to leverage existing scripting languages, like Python, or, heck, just build in a simple webserver and offer a RESTful API and let people use any language at all.
Alas, they haven’t, and now we’ll have to put our faith in things like Writely to solve the desktop office problem going forward. That doesn’t solve the problem of outputting documents from the server, of course.
Ok, back on track.
Other options to consider are Prince XML if you’re only looking to do PDF output. It converts directly from HTML, and understands CSS reasonably well, so you don’t need to produce the OpenOffice format at all. That should save some time. Downside is, it costs real money for commercial use ($3800). Or you could produce the OpenOffice format, but not do the conversion, and rely on the latest version of Word being able to read that format. That way you can avoid polluting your servers with OpenOffice.
So there you have it. Bottom line: It’s doable, it works, but it isn’t not much fun. Good luck!
I have a client that categorizes their documents.
Great, you think. Well, they categorize their documents in one or more of almost 3,000 categories. That’s something that’s hard to build a nice, simple interface for.
Here are some possible approaches that I and the few people I’ve asked have come up with:
1. Present a single page with all 3,000 categories, displayed hierarchically, each with a checkbox next to it. Yeah, that’s what we have today. Let me just say that it doesn’t work great, and that we didn’t start out with 3,000 categories.
2. Let people navigate to the category first (think the Yahoo! directory) and add the document there. We have that, too, but that only helps you choose the first cateogry, not the additional ones.
3. Present a series of drop-downs. First we show you one with the top-level. When you choose there, we show you another one with the subcategories of your first choice. We keep doing that until there are no children or you choose “Add category”. Yes, documents can be added to any category, including those that have subcategories.
4. A variant of this is to use multi-select boxes instead of dropdowns, mimicking the OS X finder interface.
5. Use a dynamic Windows Explorer-style tree, like XLoadTree.
6. Live substring-based search. Good if you know what you’re looking for, not good for browsing. And it short-circuits the structure, searching just the categories and not their relationship. This seems useful, but it’s an add-on to another solution, not a solution in itself.
I’d like to ask your advice. Please send me your suggestions. Screenhots or links to interfaces that solve this well, whether web or not, would be fantastic. Post in the comments or email me, and I’ll put it up and share.
On the rails-core maililng list, Josh Susser dropped the term “syntactic vinegar” to mean the opposite of syntactic sugar: Deliberately making the syntax uncomfortable when straying from the golden path. David throws his weight behind the term.
If you search for the term you’ll find it’s not completely new, but there’s only 60 hits as of this writing. So not in widespread use. We’ll see if that changes.
My friend Nikolaj Nyholm, of O’Reilly fame, is looking for a lead web services engineer for a fascinating face recognition startup he’s involved in.
He’s looking to fill the position immediately, for this month and September. Keep in mind that this is the perfect place to be this time of the year, when it’s too hot down south. This summer has been fantastic so far.
So do consider taking the offer, even if you don’t live in the region.
I was still stuck in the web 1.0 world of Expedia, but thankfully Nikolaj Nyholm recently fixed that by pointing me to Kayak.com, which is so much more useful—lets you quickly narrow by number of stops, airlines, find nearby airports, all without leaving the page. Very handy.
I’d like to be able to also see what city the layover is in without having to click on the details, but that’s a minor gripe. It’s a huge step up from Expedia and its ilk.
Am I the only one who finds the upcoming.org user experience frustrating? More than anything else., what I want is to subscribe to an RSS feed of events in my selected metro areas, tagged with one or more of my favorite tags. It would be useful to be able to restrict to events in a language I understand as well, but I doubt that’s an immediate problem.
Am I missing something? When I filter by metro, I see all events, most of which I don’t care about. If I filter by tag, I see the whole world, which is also a bit much.
The other obvious search to do is for when you’re traveling: Show me all events, or all events with certain tags, in this metro, between these two dates. In a nice, printable format that I can carry with me, or just save on my hard drive so I can get to it when offline.
Am I the only one having this problem? What other events listing sites are there out there that people use?
I missed out on the real RailsConf, so now I’m considering going to the Europe one, except it seems nothing’s happening: There’s no buzz, there’s no notice that it’s about to sell out, no sense of urgency.
Realistically, since all the material from the other RailsConf is available online, there’s really no reason to go other than to get to know people in the community. But that only works if other people are showing up.
The larger problem here is with European “light” versions of original US conferences. EuroOSCON is another. How do you get people to show up for these, if all the momentum is with the “real” one in the US? To me, that makes original European productions like Reboot much more compelling. Reboot gets to be its own thing, with its own vibe, and its own testicular displays.
So, back to RailsConf Europe: Can we get a show of hands? Which of the caboosers are coming? Core team? Other folks? Does the conference have a participants list? Head on over to the Caboose wiki and let us know if you’re coming—or if you’re just thinking about coming, let us know, too.
UPDATE: David responds on the Rails blog.
UPDATE 2: Ok, now that I’ve decided I’m going, my interest has shifted to where people are staying and when they arrive/leave. I’ve updated the wiki page to reflect this. Go update your entries.