Facebook API error: “Unsupported get request.”

I discovered this “unsupported get request” error yesterday and its a fun one, as always with the Facebook API. You get this error when you try to get http://graph.facebook.com/coorslight.

At first glance this makes absolutely no sense. A seemingly arbitrary page gives you some vague error, but other pages like http://graph.facebook.com/cocacola work just fine.

Turns out this same error happens for any beer page. Facebook blocks public access of these pages because they are marked alcohol related.

Facebook Page Age restrictions

If you access this page as an authenticated user such as http://graph.facebook.com/coorslight?access_token=ABC123 then it works as expected. Instead of giving you a useful error, you can some really vague and unhelpful response.

Just another really annoying thing about the Facebook API to add to my list. If you search google for this error, this isn’t the only place that it shows up. According to this bug, it’s “by design”.


A Need For Quiet Time

It’s a Friday night and I’m at home, alone on the couch with my 10 week old puppy Clifford. As a TV show I want to watch is downloading incredibly slow, I notice it’s quiet, really quiet.

I start thinking to myself, “when was the last time it was this quiet?”. I don’t know.

With everything that has been going on in my life lately, it feels like I haven’t been able to stop and smell the roses. Feels like my brain has been constantly “on” and I’ve finally been able to turn in off. Turn off all the distractions like tv, internet, people, etc, and just reflect. Just think about everything you have going on and take it all in. Smell the roses.

I think some quiet time to be alone with your thoughts is important. I think this should be a regular thing.

The BigQuery Gem

We’ve been using Google’s Big Query a fair amount in the last month or so at StockTwits. It’s great for analyzing large datasets with very little cost. The main issue I have with it is that like many other Google API’s, they aren’t the easiest things to get up and running. Examples seem to be lacking (particularly for ruby) and it takes a while to figure it all out.

To solve my own problem, I made the BigQuery ruby gem.

The gem is still in a pretty rough state, but the basics of authenticating, uploading, and querying are there. My goal of all this is to make working with BigQuery a lot nicer and hopefully provide a good example of integrating the BigQuery api.

Here’s a quick example to get a list of tables in a dataset. Currently only service account authentication is supported:

See the readme on github for more information.

Open up Google Calendar with Alfred

I felt that typing “calendar.google.com” in Alfred was way more tedious than it should be. I want to be able to open up my calendar just by typing “gcal” so I put together a simple Applescript in Alfred that will do this for me.

Then just create a new Applescript extension in Alfred with the keyword “gcal” (or whatever you want to use) and you’re good to go.

Do note that this does require the Alferd power pack, but the same script should work in Quicksilver too.

Fixing Postgres “invalid primary checkpoint record” in OSX

I recently upgraded my mid 2009 Macbook Pro with double the ram (8gb) and a new SSD. After I restored my machine via backup from Time Machine, I was running into an issue trying to start Postgres up.

This is what showed up in the log:

LOG: database system was interrupted; last known up at 2012-06-14 11:55:12 PDT
LOG: unexpected pageaddr 0/2BBE000 in log file 0, segment 4, offset 12312576
LOG: invalid primary checkpoint record
LOG: invalid secondary checkpoint record
PANIC: could not locate a valid checkpoint record
LOG: startup process (PID 2753) was terminated by signal 6: Abort trap
LOG: aborting startup due to startup process failure

After a quick googling, turns out all you need to do to fix this is reset the transaction log. Since this is just my development machine and the data doesn’t matter too much to me, I have no problems forcing a reset. This can be accomplished with pg_resetxlog.

pg_resetxlog -f /usr/local/var/postgres

Commenting with a hotkey in VIM

Sometimes commenting a block of code via regex in VIM can be a bit tedious and verbose at times.

Typing  something like :3,7s/^/#/ is annoying.

There are a couple of ways to get around this. First way would be to add a simple macro with a hotkey.

This will map - to comment and _ to uncomment.

The issue with this is it’s hardcoded to one file type. A better thing to do would set the comment type by file type.

Heres an example that enables – and _ to comment on ruby and vim files.

There are also some plugins out there that accomplishes all this for a wider range of file types. I generally only edit a few kinds of files, so the solution above works well for me.

Keep is really simple

Less bloat, fewer features, and less moving parts. These are all things that I think the KISS principle encompasses. Bloated software is expensive, buggy, unstable and tends to not be very user-friendly. All this is caused because you aren’t able to focus 100% on specific parts because there’s a hurricane of other things going on.

You know why Google got to be the best search engine and still is today? They had a laser focus on search. They made it the absolute best.

Do the same with your own products. Pick out a few features to really nail down and get right, release them to the wild then iterate.

Focus and iterate.

Another employee, a programmer, thought his online chats were eating into his work time. So he tested the theory: He looked at how long he spent chatting during certain periods, then looked at how much code he wrote during those times. But in fact, the more he talked, the more code he wrote. Gabbing online with colleagues and customers helped his work.

Sync files with lftp

LFTP is a nifty tool that is kind of like rsync, but uses ftp instead. I use it to automatically sync files from my seedbox to my home server with this script. It runs every 5 minutes in a cron job.


  • —delete will delete any local files when they get deleted on the remote server
  • —only-missing will only transfer files that are missing from the local machine

When I first open sourced my Assembla Timer app, Assembla reached out and contacted me about it and wanted to write a blog post about it:

Assembla Timer is a handy third-party Mac application that tracks time spent on tasks. You can time your work on a digital stop watch and then post the time to an Assembla project, or directly to a specific ticket.Until recently, Assembla Timer was $0.99 in Apple’s App Store, but the app’s creator,Adam Bronte, has decided to make it free and open source. The source code for the app is availablehereand a compiled version ready for install is availablehere.I installed the application, and the setup was a breeze. You simply enter your Assembla username and password, then click the ‘Start’ button to begin counting off time. You can stop and start as many times as you like – the app keeps a cumulative sum. When you’re done working, type in a description of the work completed and select an Assembla project workspace. You can also associate the time with a specific ticket. When you click ‘Save’ your information is stored in your Assembla project.Those familiar with Assembla’s time tracking capabilities know that there is a field on every ticket for “Worked Hours,” and a “Time Expenditure” tab on each ticket shows the total hours worked for a task. Assembla’s optional Time tool shows time worked across all tasks. The Time tool provides filterable reporting and is exportable for accounting and billing purposes. The Assembla Timer app makes it easier to feed accurate timing information into these reports.Assembla Timer is simple to use and allows you to focus on your work while a lightweight desktop application takes care of recording and posting your time to Assembla.

I’m glad the app may get some use out of it now. I’d like to thank Adam Feber for reaching out and writing the blog post.