Blog

Ranting Considered Useful

Posted: Dec 30, 2008 by Billy Gray Tagged rails, ruby, zedshaw, rants, essays, community

In contrast there are masters in the martial arts who learned their art as a means of survival and became masters in a realistic and hostile environment. We don’t have anyone like this in the programming profession, or at least I haven’t met any. I believe that my generation of developers will produce the kind of masters forged in the real professional world. ~ Zed Shaw

I think that’s probably a prescient assessment of things in the hacker profession right now, and it takes a certain amount of audacity to make such a declaration. Zed Shaw is one of those people who seems to really have his finger on the pulse of things in the tech world, and he doesn’t mince words. I tend to think that his rather contrarian views in the various Ruby circles are mostly a result of an unwillingness to accept gospel over logic, and while some folks see this sort of thing as peeing in the mailbox, it really never hurts to have someone around who’s willing to stand up and call bull when he sees it.

Stephen and I were talking yesterday morning about Zed Shaw’s recent blog post wherein he declared that he is retiring from the ranting-on-ruby scene, and I thought maybe we should put something up here taking notice, because Zed has been an important voice in the Ruby-centric tech community. You may not like his over-the-top style, he may have you given you the finger at some point, but you may have deserved it, too. We generally keep our distance from the spats that seem to break out in the Ruby community (it’s a sport not unlike watching train wrecks, and we’re pretty busy people), and often wonder where some of these folks find the time. So I’m guessing that kind of thing wears on you as a real critic in the thick of it, and I’m not surprised if Zed is getting bored. However, Stephen suggested something this morning that bears repeating:

“Indirectly [Zed’s rants] served as jump off points for a lot of other people to say, you’re right this is screwed up, gave people a way to question the core team, who, by most measures are held up as infallible technology gods. By taking such an unpopular and extreme view he opened a lot of middle ground for people to take up well-thought-out positions that were contrary to the core of the Rails community elite. He kind of made it ok. That is a function that will be missing now, especially with the approaching Rails / Merb love fest.”

I tend to think that more criticism is always better than less, and that’s sort of the point of open-source development. So, if Zed is retiring from the rant stage, I’m hoping that maybe we can look forward to seeing more of his essays, which are really informative, well-written, and considered writings in that style of his:

After reading that first one I found myself engrossed in a historian’s letters on the subject of the popularly accepted but likely fictional accounts of Myamoto Musashi. The second had me learning this cool statistics programming language and graphing toolkit I’d never heard of called ‘R’.

I think we can expect to see more of this, but I hope others have gotten as much out of Zed’s ranting as we have, it’s been a fun read.

Deep Thought

Posted: Dec 30, 2008 by Billy Gray Tagged deepthought, sun, palm, vaporware

Isn’t it time for Sun to buy Palm and just get it over with already?

Data Pr0n

Posted: Dec 23, 2008 by Billy Gray Tagged

The newest version of the Statistical Abstract of the United States for 2006-2009 is now available online from the US Census Bureau over here. Invaluable data reference. Murders! Price indexes! Agricultural output! Metropolitan Statistical Areas! Prison counts! Per capita income! Banking and financial stuff! The list goes on.

I was that kid who read history textbooks for fun, so I hope you’ll excuse the geeking out.

Service Announcements

Posted: Dec 22, 2008 by Billy Gray Tagged pingme

We’ll be interrupting service quite briefly on Tempo and PingMe tonight to push some service updates, around 10pm EST.

  • PingMe: Greatly improved reliability on Twitter follow-backs
  • Tempo: Fix to that nagging issue with Basecamp project imports
  • Tempo: Reverting to context-scoping of tags displayed in Include and Exclude drop-downs

We’re using our own version of the Twitter Ruby gem that has some additional support for exception handling that we needed. Caveat emptor, but it works pretty well for us, solves the issue of being able to respond accordingly to errors as the come back from the Twitter API. Not all 403’s are the same, that kind of thing. You can check it out over here. At some point I’ll get a blog post together describing how it works. Bit busy right now.

Darn Good Website - WNYC.org

Posted: Dec 22, 2008 by Billy Gray Tagged

I just want to quickly point out what a great website they have over at WNYC.org, a radio feed that I usually leave running all day while I’m hacking away. Aside from the fantastic programming, they have a really keen integration between their on-air programs and the website. While you’re listening to their shows you can hop on over to a thread of the particular segment you’re listening to and interact with other users in the comments. Simple thought there, nothing really new technology-wise, just expertly positioned and well-made.

Someone Who Gets It

Posted: Dec 16, 2008 by Billy Gray Tagged pingme, buzz

The brevity of PingMe’s current syntax isn’t for everybody, but once in a while we run into somebody who totally gets it!

This is crazy week where we try to get an absurd amount of work done before the holiday. More blogging to follow, stay tuned.

Tempo Updates: Timer Display and Widget

Posted: Dec 13, 2008 by Billy Gray Tagged tempo

We made a quick update to Tempo today, will make this brief:

  • Display of start and stop times in entry notes is now a user preference.
  • In addition, you can specify append or prepend for timer display.
  • There’s a new API field ‘timer-sessions’ on the entry resource
  • Dashboard Widget prevents double-submission of an entry.
  • Dashboard Widget is a little bit taller.

You can download the updated Dashboard Widget for Mac OS X here.

The timer-sessions field presents the start and stop times one after the other, semi-colon delimited. It looks like this:

  <entry>
    <id>99999</id>
    <command>posting about new changes @blogging</command>
    <is-timing>true</is-timing>
    ...
    <timer-sessions>11:16 AM - 11:16 AM; 03:56 PM - 03:57 PM</timer-sessions>
    ...
  </entry>

Yet Another Deep Thought

Posted: Dec 12, 2008 by Billy Gray Tagged deepthought

Zetetic is too big to fail.

Deep Thought

Posted: Dec 12, 2008 by Billy Gray Tagged deepthought

::You can never have too many user preferences::

The trick seems to be displaying them in such a way that it is easy for the user to identify what she is looking for with minimal effort.

Zetetic.net Launch!

Posted: Dec 10, 2008 by Billy Gray Tagged zetetic, logo, redesign, website, ngenworks

Welcome to the re-designed home of Zetetic! While the company has always been named Zetetic, most of our big clients have known us through our DBA, Identicentric. We decided that one awesome brand is better than two, and as part of our consolidation we had nGen Works come up with a new logo for us, and a whole new website design.

For those of you reading the RSS feed, I encourage you to click on over, check out the site, and leave us your thoughts in the comments. It’s not quite so hid anymore, I promise. Here’s the new logo, that has us really stoked:

One thing I really love about it is that it tells you how to pronounce our name. The badge is actually green on the site, although I think it will be white background when printed without color. But I digress!

We’ve only got the basics up right now: home page, blog, contact. Soon we’ll have the rest of the pages up, including documentation and links for our various resources, products, consulting services, and open-source projects.

Introducing Tempo: Analyst

Posted: Dec 09, 2008 by Billy Gray Tagged tempo

Today is the day we unveil the newest release of Tempo: Analyst!

It’s been quite a few months in the making, built on our own experiences using Tempo to do our time tracking and billing, and from the constant feedback of our users and beta testers. I can’t stress enough that good communication with our users has been just as valuable as elbow grease. If you’re used to the old interface, you will find the change a bit jarring at first, but we are positive that once you make the switch you really won’t want to go back (for the past three months we’ve used the Analyst interface exclusively and can’t bring ourselves to use the old interface).

For new and old users alike we’ll take a fresh look at Tempo, its unique approach to both tracking and reporting, and show off the new interface along the way. There are a lot of time trackers out there. Many claim to be the simplest; triumphs of design over functionality. Others are top-heavy in functionality but oblivious to how real people work and bill their clients. Our focus with Tempo has always been to make the act of tracking time so natural that it doesn’t interrupt your workflow while providing the powerful reporting you need to keep your business on track and manage your billing cycle.

Simple time entry



Tempo supports quick text entry for logging time or starting timers so you don’t have to track time yourself. You can specify tags using common @tag @notation, and you can specify a #project, #too, or Tempo will figure it out based on your previous billing.

Veteran users will notice a new feature in that screen clip above – quick stats on your personal reporting for easy reference.

Multiple methods of entry – work your way

Why should you have to fire up a whole web app just to log time? We want you to be able to quickly fire off a timer or time log without interrupting your workflow. To achieve this, Tempo supports input via Twitter, E-mail, a Dashboard widget for Mac OS X, a bookmarklet, mobile and iphone-optimized entry screens, and the web app itself. Typing any of the following will log time or start timers:

45m meeting with clients in NYC #conglomo @meetings @onsite

1h debugging evil NullPointerException @maintenance

1:30 full test of single sign-on system #konstrux @testing

working on blog post about Tempo:Analyst! #tempo @blogging

building encryption into iPhone app #internal @discovery

Notice those last two – they start timers! Just leave the time off the beginning of the string and off they will go (more examples). Each new timer you start will stop any other running timer and the time you spend on a task is automatically calculated for you.

Powerful Reporting



Our reporting interface didn’t just get a make-over – it got far more powerful, and faster to boot! For veteran users the major changes are obvious: we moved the controls up top and made the data report wide-screen. But there’s more to it than that:

  • The controls don’t submit on click, which was very annoying with large reports
  • Stream-lined drop-down options and easy-to-read display of selected options
  • Pagination! This is an incredible boon when you’ve got a lot of entries in a report
  • Optional HH:MM formatting, so you don’t have to think in decimal anymore ;-)
  • Sortable columns in the report! Imagine that!
  • An exclude option for tags! This makes our tag based reporting incredibly dynamic

Clearly, I’m so excited that I can’t stop typing!!!!1



With the new Exclude filter you can pull up all your entries tagged “development” and exclude anything tagged “design”, or “oracle”, for instance. We’ve always preferred tagging as a more realistic means for categorizing billed time in an effective way, and being able to exclude entries with a certain tag from a report adds the missing dimension. I don’t think you will get more dynamic reporting from any other time tracker out there.

Being able to quickly dial in your report options makes analyzing your data even easier because in Tempo…

What you see is what you get!

When you go the Reports screen, you are looking at a living, breathing…report, the Current Report. All of our charts, exports, and analytics are based on the current report, like the Heads-Up Display:

It gives you fast metrics to help you determine how things look, and each of the metrics can be clicked to bring up the appropriate chart. Here we can see that I’m at 90% utilization – the percentage of the workday that I spend actually billing time. Win!

Let’s step through Tempo’s reporting so you can get an idea of how this all works together:

1. Dial in a report

Here we see our heroic fictitious contractor Keith Kogane pulling all of his billable projects:

2. Save it!

He saves it for later – you’d normally do this for your Monthly, but here he saves it as Billable YTD:

3. Run it again at any time

Our hero needs to run that report again! Quickly now!

Clicking a saved report is like activating a saved set of filter controls. The new report appears with your settings already dialed-in.

4. View charts

Because Keith has pulled up a saved report, the Current Report displays the entries in the data view, but also modifies all the charts to this report. Keith needs to see a visual break down of hours per project, so he clicks the Project pie-chart icon and gets a modal chart display (that he can print!):

Ah, looks like this year’s bread and butter for Keith is that Conglomo project! He suspected as much, but being able to pull up a pie chart to visually confirm saves him from running a report on each project, writing down the total hours and comparing them. Here he can see visually how much his Conglomo work dwarfs the smaller projects like Konstrux. This kind of insight is important in deciding where to take your business and what priority to give your projects.

5. Export data

Like any smart fellow, Keith doesn’t want to be tied to one product forever, he needs to be able to access the very records that are the life blood of his business. In addition to an XML API, Tempo provides exports for your data:

Clicking the Time Log CSV will give you an Excel-ready export of your data:

Usually you need to export to Excel to hook into your invoicing solution. However, if you already use Blinksale or Quickbooks, you can use Tempo to…

6. Generate invoices!

There’s not much to tell here except that it’s a real nice time saver for us and a lot of the other Tempo users.

Playing to Win

There are a lot of time trackers out there, we know. But we think most of them got it wrong. Tempo is simply the best tool out there for freelancers, boutiques, and small to mid-sized consultancies. No other system makes it as easy to track your time and gives you tools to analyze what you’ve done so far and where you’re going.

Feel free to sound off in the comments, or e-mail us.

Deep Thought

Posted: Dec 09, 2008 by Billy Gray Tagged tempo

It’s not often you get to see a merge this awesome:

155 files changed, 9382 insertions(+), 918 deletions(-)

\m/ >_< \m/

New version of Tempo is live! We’ll have more to say about it here tomorrow morning.

Check it out

FAILCamp Continued: Word List Fail

Posted: Dec 08, 2008 by Billy Gray Tagged pingme, tempo

Over the Summer, Stephen and I attended the excellent RubyFringe conference in Toronto, hosted by Unspace. One of the best events was FAILCamp, hosted by Joey Devilla. In FAILCamp we all shared our stories of failure, big and small. It was an interesting way to get to know everyone and to share strategies for working through screw-ups and taking something decent away from them.

So, in keeping with that experience, we’re going to share a bit of FAIL; today’s story is brought to us by the PingMe Address generator.

When we need to provide a user with a remote e-mail address on one of our services, we usually want it to be somewhat obscure to that it would be difficult to guess, like red99ballons@gopingme.com. The user can change it, but we set an initial one for her as a convenience, and include it in the welcome e-mail. The design goal was to ensure the address was somewhat random, but somewhat easy to remember, so we’ve been using a big word dictionary to smash two words together with a number in between. We do this as a security measure to prevent attacks that would try to deliver spam using PingMe’s messaging transports

Now, as you might expect, we did go through the dictionary to take out some words that would pose obvious problems. But we missed a really obvious one and weren’t as imaginative as our address generator can be, and as a result we got a pretty angry letter yesterday:

I won’t be using your sevice as it lacks professionalism. Scroll to the bottom of this e-mail and look at the generated pingme e-mail address. – Frank [not real name]

Ouch! Fail! Apparently Frank had been assigned asshole38dirks@gopingme.com, something that we really ought to have caught.

Taking a real close look at our word list I started seeing lots of possibly problematic combinations with regular words in the dictionary: “closet55bugger”, “douche44monger”, “goat11fakir”. Now some folks are probably fine setting their own address, or clicking the “suggest another” button, but some folks are bound to be a tad more sensitive.

So I started going through the word list looking for any classic cusses that we might have missed, but also things that might be sensitive to some folks and are just best avoided. While I was doing this, two important things occurred to me:

  1. I need an intern.
  2. I can’t guess at every potentially disastrous or offensive word combination in the dictionary. No way.

Everyone’s got different quirks and different cultural backgrounds, and I honestly make a poor censor. The chances of me personally (or even a team of three of us) knocking out every word that might lead to disastrous results in a list of thousands are very poor indeed. I’m willing to bet that this is an NP problem, but I’m not about to draw up a proof.

I don’t think the problem here is that we are using a large dictionary, nor do I think we really should have to cleanse the list. The trick is to get the obvious offending words out of the way, and to also provide the user with a bit more context. In Frank’s case, he doesn’t know that these are two random words, he didn’t have any exposure to the process by which it was selected. Adding something like this to our welcome message will probably cut down on this lack of understanding in the future (I hope):

If you’d like to create Pings on the road, add luft99balloons@gopingme.com to your mobile’s contacts and your e-mail address book. This address was generated randomly to protect you from SPAM. If you find it undesirable you can change it at any time on your profile page in PingMe.

You can’t make everyone happy (would that be NP-Complete?), but a little clarification can go a long way.

So that’s our story of fail. Perhaps we can make a meme of this – have you any stories you want to write-up and share? Feel free to post links in the comments.

Update: Question to our users: Would anyone like to see purely random addresses like we generate for Tempo? There we use use a pretty long series of random numbers converted to Base26, so they end up looking like “nadxtk@gopingme.com.”

Later Update: I almost forgot: the FAIL address assigned to the user was asshole38dirks@gopingme.com.

PingMe Updated

Posted: Dec 08, 2008 by Billy Gray Tagged pingme

Tonight we made the following adjustments to PingMe:

  • When you specify a ping without a year, and the date has already passed this year, the parser assumes you mean next year and adjusts the schedule accordingly.
  • Our follow-back code for Twitter should be a bit more reliable.

More to come in the weeks ahead, stay tuned.

Service Announcements

Posted: Dec 05, 2008 by Billy Gray Tagged pingme, tempo

On Sunday, Decemeber 7th at 9:00pm EST we’ll be performing a maintenance and reliability update on PingMe, so the web interface will be temporarily unavailable, possible until 10pm EST, although we expect things to go a bit quicker than that.

On Monday, December 8th at 9:00pm, we’ll be moving the beta version of Tempo to the main site so that it will be come the default interface. The web interface will be temporarily unavailable and any existing sessions will be closed, requiring you to login the next time you visit the site.

We’re very excited about that second one, been a long time coming! After months of vetting and feedback from our users, the new user interface for Tempo will become the default.

PingMe is getting a patch to take care of setting dates in the next calendar year without having to specify the year, and code that improves our follow-backs on Twitter.

Just a suggestion

Posted: Dec 05, 2008 by Billy Gray Tagged business

Don’t publish API documentation in PDF and then disable copy & paste.

But if you do, please don’t use images for the code examples on your web documentation.

A tip for O2 users on PingMe

Posted: Dec 03, 2008 by Billy Gray Tagged pingme

When setting up a mobile target in PingMe, customers of the UK service O2 usually run into a snag – they need to first enable their phone’s e-mail to SMS service (which is how we send SMS messages). I’m not an O2 customer myself, but after working through the issue with a number of users, the process I outline below seems to be correct.

Note: many of the carriers, including O2, have been making noise about charging a little bit of extra for each email to SMS message. I’ll skip the editorializing and just say that you should check with your carrier about charges. I believe O2 customers can dig into this issue over here.

Update: One of our users has kindly looked this up and reported that it costs 10 pence per message! Not cool at all. Beginning to wonder if we should only provide e-mail and Twitter targets. Paying for an actual SMS gateway is cost-prohibitive.

Now then, for O2 users:

  1. Send the message ON to the number 212
  2. You will get an e-mail back on your phone congratulating you and telling you the new email addy for your phone
  3. It will look something like +441234567899@mmail.co.uk
  4. Use that to setup your mobile target in PingMe

You can either set the carrier to ‘Other’ and drop that whole address in there, like so:

Or you can set the carrier to O2 and just drop the number in the box, like so:

I realize that it’s more than 10 digits! Obviously, I need to update the display on there, but for now trust that it will allow you to add more than 10 numbers in the field.

Feel free to e-mail us with questions or share your results in the comments.

As a tip to everyone looking for SMS interaction – the most reliable thing to do is probably to set up a Twitter target, as they run over actual SMS (the big bucks!)

Using PingMe with Dial2Do

Posted: Dec 01, 2008 by Billy Gray Tagged pingme

One of our new users who just came over from Sandy sent us a really in-depth how-to on using the Dial2Do service to call your reminders into PingMe. There are a couple of tricks to getting it going, and we haven’t actually had a chance to run through this, so caveat emptor, but it looks really cool and is apparently a very useful alternative to doing the same with Jott for our international users.

So, here’s how to do it according to Japanese translator Dougal Phillips. Thanks again, Dougal, for working this out and sending it in.

This is an explanation of how I use GoPingMe and Dial2Do to create reminders by speaking into my mobile phone here in Australia.

The reason I don’t use Jott is because it’s not available here in Australia. Dial2Do, however, offers a local number here (and in other countries as well) – very handy. After a bit of trial and error, I got it working so I thought I’d share what I did.

Set Up

  • Sign up at http://www.dial2do.com/home
  • Click on the green “Do More” tab at the top
  • Click on the purple “Make your own command!” tab on the top right
  • In the say field, type “Ping me” (or whatever you prefer)
  • In the “Do what?” field, select “Record and email”. This will change the final field to “Email who?”
  • In the “Email who?” field, put in your private GoPingMe address
  • Click on the grey “add” button

Using Dial2Do & GoPingMe

  • Ring the Dial2Do number
  • The voice says, “What would you like to do?”
  • You say, “Ping me”
  • The voice says, “Ping me. Okay please record your message. [beep]”
  • You record your message (see below)
  • The voice says, “That’s done.”
  • You hang up

The Sticky Bit

You need to say the word “space” after the initial time and again after the repeat/pester me etc instruction. For instancy, say you want to remind yourself to ring your dad in 10 minutes and to pester yourself every 10 minutes until you do. Say: “10 minutes space ring dad p colon 10 space”. Dial2Do will transcribe this as: “10 minutes ring dad P:10 .” (A fullstop is added, but not directly after the number.) You’ll then get the message “ring dad” to your GoPingMe email/mobile repeatedly every 10 minutes. Very nifty.

If you don’t say “space,” it won’t work!

If you don’t say space after the time and the repeat/pester instruction, Dial2Do inserts a fullstop as the very next character. GoPingMe doesn’t recognise the time or repeat/pester instruction if there’s an extra fullstop straight after, and so you get an error message.

E.g. In my first attempt, I said: “two minutes does this repeat reminder arrive p colon 7”. This was transcribed: “2 minutes. Does this repeat reminder arrive. P:7.” – notice the fullstop immediately after the “minutes” and “7”. I then got an “Need help? Sorry I couldn’t do this.” message from GoPingMe. So looks like you need the spaces.

Anyway, thought I’d say g’day as you’re my iwantsandy replacement now, and Lifehacker people, thought others might like to know since I want Sandy will soon be defunct, and Dial2Do people, thanks again for the cool app.

Cheers,
Dougal