Home
z_default
I haven't really seen this spelled out in a really clear manner on the web, so let me help out. YouTube's got useful programmatic feeds. You can specify a feed for a user's videos like:

http://gdata.youtube.com/feeds/base/users/communitychannel/uploads

You can also specify the order in which you want the videos.  Note the "orderedby" parameter in the urls that follow:

http://gdata.youtube.com/feeds/base/users/communitychannel/uploads?orderby=updated
http://gdata.youtube.com/feeds/base/users/communitychannel/uploads?orderby=published

So far, so great. Now, suppose you want to make a lifestream, and you want to include the videos that you've favorited. They've got a feed for that, too:

http://gdata.youtube.com/feeds/api/users/davidblume/favorites

But it's not right.  If you look at the data you get back, you see that it's not what you wanted. Those videos are going to be associated with the timestamp with which they were updated or published, not the time that you favorited them. And that's the time that matters to your lifestream! Given the way the programmatic feeds are organized, you'd think that there's a way to specify that, and that feed would be as follows, right? --

http://gdata.youtube.com/feeds/api/users/davidblume/favorites?orderby=favorited

Nope. After living with a workaround in my lifestream for months, only today do I learn that YouTube did create the feed I needed, but calls it this: v=2. Yeah, like that jibes with their feed explanation.

Lifestream writers, the favorites feed (ordered by time favorited) that you want is constructed like this:

http://gdata.youtube.com/feeds/api/users/username/favorites?v=2

(Replace "username" with your username, of course.)  Now I can go delete my workaround.

Three Things TODO After Vacation

  • Apr. 16th, 2009 at 12:14 PM
z_default
Gah! There's way too much to do, and so little time. All I can do at the moment is document what I need to get done before vacation. And even then, I was torn between documenting it here, or at my new experimental Habari blog at david.dlma.com. What am I going to do with that blog? (I treat it like some people treat their Moleskines. It's too special to write on. That domain name is the most me, so I've been protecting it.)

Anyway, in no particular order, here's what I want to get done:

  • Customize Twitter Friends Feed: I need to customize my twitter friends feed so that it won't spam my feed reader with @replies I don't care about. I need to set my preferences on a per-twitterer basis. I really enjoy all @replies from some of my friends, but not all.  Maybe I'll break down and find an app that already has the feature, but I prefer having just one place aggregate all the feed activity I'm interested in. [Edit: Biz is going to do this himself!]
  • Make a Dictionary Popup: I loved the DQSD mwd popup definition result. But merriam-webster.com has a history of changing the layout of their page so that maintaining the mwd.xml search became onerous. It's time to replace that popup definition with one from aonaware. Here's the API call I'm most interested in: DefineInDict, with "gcide" for the dictId. [Edit: Completed!]
  • iTunes library rsync with OpenTape: As originally hinted.

z_default
Did I really not post this before? I've had to set this up multiple times, and it bites me every time.

In my household, the four of us share some computers, and we all have our own accounts on them. Some of us use Gmail and the Gmail notifier, and some of us don't.

The problem: Gmail notifier installs for all users, no exceptions. So the accounts that don't use Gmail still get the annoying login screen every time the computer boots up. No one should ever have to deal with a modal dialog that doesn't enrich their lives.

My workaround is this: Use RegEdit to tweak the GMail startup behavior.

Remove the individual value from HKLM's Run:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"{<GMAIL'S GUID>}="C:\\Program Files\\Google\\Gmail Notifier\\gnotify.exe"


And for every user that wants it, add it to their particular HKCU's Run:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"{<GMAIL'S GUID>}="C:\\Program Files\\Google\\Gmail Notifier\\gnotify.exe"

That should now disable the Gmail Notifier on the accounts that don't want it.

Tags:

z_default
I've got an old home WDS system set up made up of two Linksys WRT54G gateways. It's awesome. I love Linksys for allowing the WRT54G to be "the first consumer-level network device that had its firmware source code released to satisfy the obligations of the GNU GPL."

The WRT54G wasn't configured to build a Wireless Distribution System, but the hardware was capable of it. I installed DD-WRT and followed an online recipe that gave me the configuration I needed:

  • One gateway in the office upstairs for all the local devices and the wi-fi devices.
  • One access point in the family room downstairs to extend the range of the network and for local (media) devices to speak to each other at high speed directly across the local switch, while still getting out to the internet when necessary.
This all worked great with my old DSL connection. But recently, we migrated from DSL to cable modem, and the new provider was Comcast. The Comcast technician came over to hook us up, but had a little trouble getting the computer online.

I had a sinking feeling that it was the WDS system I had in place. After a few early attempts, the service guy listened to me, and removed the WRT54G from the equation. Sure enough, when the cable modem was connected directly to the computer, the computer found the internet right away.

I was pretty upset that my WDS might not work anymore. I searched the web for terms that included DD-WRT and Arris and Comcast. Sure enough, half the hits I found indicated that the devices were simply incompatible. Wouldn't work.

But a few of the others suggested I set the local gateway to clone the computer's MAC address. That seemed like an advanced and bad thing to do, but if they were right, and Comcast had blacklisted the default MAC address that  DD-WRT uses, it was worth a try.

I navigate to the gateway's administration page expecting to have a lot of trouble, but it turns out to be really easy!


So I told the gateway to clone the PC's MAC address, crossed my fingers, and ... it worked!  It turns out Comcast was blacklisting the default MAC address the gateway uses!  W00T!  My home network is back in business.

... Until I upgrade to 802.11n.

(This is posted to add just another reference page on the net where a fix was found.  Hope it helps somebody.)

Tags:

Dear Lazyweb: Help with Lifestream Design

  • Dec. 17th, 2008 at 11:19 PM
z_default
I've got a new feature in my lifestream, but I don't know how to expose it. Currently, the lifestream entries look like this:


I like this look, because it's uncluttered. There are only two noticeable links when you hover over stuff. The text in the middle is a link to the original entry, and the little icon to the right takes you to my account at that site.

However, I decided it would be handy to be able to have lifestream pages that show only entries from livejournal, my family blog, delicious, or plurk, or any of the others.  I made it so.  Yay!  There they are!

But now the problem: From where should I put links to them? It's the same issue as with the lifestream legend. The lifestream legend is meant to be just a little table to help the reader know which services are being tracked. It's a handy thing, but it doesn't belong on the lifestream page. So I left it out.

But it seems like I should be able to put links to the filtered pages somewhere. Hopefully from the lifestream itself, because that's the handiest. But a new link from that page will hurt the current design. Here are some examples that would put the link just to the left of the little icon at the end:

I don't know what I should do.  In the picture above there's a picture of a funnel, which apparently is geek code for "filter."  Below that is an icon of a page with a green "go" arrow (from famfamfam), and below that is a down arrow unicode character.  Below that is a nebulous, mysterious box.  I'm not really pleased with any of these.  I like the feature, but just don't know how to expose it.

Do you have any ideas of what would look good?  Should I leave those links out of the lifestream and put them in from the legend?  Maybe I should change the link of the icon at the end to be to the filtered page instead of my account page at the remote service?
 
[Edit]  Currently, I changed the link of the icon at the end to point to the filtered page.  I'll see how that works.


The Best Lifestream Ever!

  • Oct. 18th, 2008 at 11:26 PM
z_default
I'm really proud of my lifestream. Originally I got the idea from Jeremy Keith. (And I use a subset of his style. I intended to use my own style, but I simply love his, and I don't have any design skill.) A lifestream is an aggregation of your user activity feeds from across the internet. Essentially, it can be thought of as an automatic online diary. It writes itself.



I think I can be thought of as a late early-adapter. I thought I had a lot of original ideas as I made my lifestream, but it turns out that more often than not, somebody else had already implemented one of the ideas. Happily, no one seems to have made all the same decisions as me, so my effort wasn't wasted. For me, my lifestream really is the best lifestream ever! Here's why:


[Edit] I changed the icon link.  Now they point to a filtered lifestream page.

The Best of Both Worlds


Jeremy implements his as an aggregation of RSS and Atom feeds with no persistent storage of previous entries. So, as newer entries are made, the oldest entries are lost forever. His lifestream is always only the most recent few entries. Jeff, on the other hand, implements his with APIs, so he has access to the complete history of entries for any account. I maintain mine with feeds, but I imported my entire history from many accounts.  My lifestream is huge, and spans years, even though I just started it a couple of months ago.

Also The Best of Both Worlds

Jeremy's lifestream is handy, because it never becomes unwieldy.  It'll always be about the same size.  Jeff Croft's and Emily Chang's persist every entry and thus continuously grow.  They paginate their lifestream.  You can view page 234 out of 399, for example.

I decided that 98% of the time, I'm only interested in something I wrote down in recent memory.  Say, the last four weeks.  So I made that the index page of my lifestream.  Just the 28 most recent days of my online activity.  It make for a nice, small page.

But the other 2% of the time, I'm searching for something older, or I'm feeling nostalgic.  So I put my entire lifestream on one page, too.  Sure, it's big, and I'll never browse it from a phone, but modern web browsers are perfectly capable of downloading it and rendering it, and will be able to do so for years to come.  The entire history really has the same appeal to me as being able to search through a diary.

Even if I decide to paginate it eventually, it'll be easy, the backend will facilitate that.

The Details Matter

Since I provide my entire lifestream on one page, I also made sure to include the year for dates that precede this year.  (Eg., October 5th, 2006.  Note that that uses the intra-page anchor, another important detail.)

My lifestream has a discoverable RSS feed too.

But you know what?  Nobody'd want a feed of a lifestream that constantly updates for individual entries.  That's one thing that really bothers me about sweetcron feeds.  They're just too noisy.  Update, update, update!

So the RSS feed for my lifestream only provides weekly updates.  That's what I'd really want from a lifestream feed.  Just some sort of nice regular overview of all the activity over a certain period of time.  And its permalinks are intra-page links into the huge complete history page.

Some of the accounts that I include in my lifestream don't support user activity feeds.  For example, YouTube's feed for each user's Favorited videos doesn't have "date-favorited" information associated with it.  Since I wrote my own lifestream engine, I was able to work around that problem.  I doubt that most lifestream services like FriendFeed would go to the lengths I did in ensuring that I get exactly the information I want, regardless of whether or not the site's feed or API supports it.

It Helps Me Find Things

Searching for things half-remembered turns out to be pretty successful at the lifestream.  I sometimes don't know if I posted a link to delicious, or if I plurked it.

It Encourages Me To Write Better

I always think twice before I write a clever title to a tweet, plurk, or blog entry.  I realize now that I may well be searching for that entry in the lifestream later, and the lifestream may only have the title.  (The lifestream also contains actual content from the entries, but the content isn't presented in the web pages.  So maybe the content will be searchable too, eventually.)

Cleverness is out.  Accessibility and searchability are in when you have a persistant searchable lifestream.  Now, I strive for clarity in my titles.

I also stopped services that cross-post from one service to another.  Having the lifestream made the idea of cross-posting even more redundant.  If my livejournal friends don't want to see my tweets, I won't force them to with LoudTwitter.

Fixing a broken auto ventilator

  • Oct. 13th, 2008 at 7:08 PM
z_default
The Problem

Somebody let some soda spill from the cup holder into the auto's climate control ventilator.  The soda dried and gummed up the ventilator's directional control.  Somebody else used a little too much force when trying to change the direction of the flow, and made the ventilator control go "snap!" as all the little vents became dislodged from the bar that moves them together.  Here's a top-down view of the situation:
Now all the little vents rotate independently of each other.  That is, if they could rotate.  They're all stuck to the bottom in old soda glue.

The Solution


Part 1: Ungumming The Works

The solution to the sticky soda problem was easy.  I just needed some solvent/lubricant stuff.  I had duct tape and WD40.  So I tried the WD40, and it worked!  The works weren't gummed up anymore, and each of the vent fins could independently spin.

Part 2 : Re-attaching the fins to their controller bar.

This part was tricky.  I spent ten minutes trying to figure out how to remove the ventilator fin assembly from the dashboard.  I tilted the assembly up and tried to remove it, then I tilted it down and tried to remove it.  I looked all around the dashboard for hidden screws that'd allow me to remove the facade and access the ventilator fin assembly.  No dice.

I considered the possibility of having to live with the car like this forever.  What would it do to the resale value?

Then the idea hit me.  I felt like the first chimpanzee to put a stick in a termite hill and extract all the crunchy termites!

A stick!  A stick with a hook!  And I had just the tools for the stick and the operation that'd follow:

Wire, for being the stick, wire cutters for cutting the stick, pliers for holding the fins at just the right angle, and a flashlight, so I could see what I was doing inside the vortex of climate control.  In the picture above, you can barely make out the stick-with-hook as assembled out of gauge-enough wire.

The operation went off without a hitch:



I carefully shaped the stick-with-hook, inserted it into deep the ventilator, and pulled it back, catching the rear controller bar for the vertical fins.  Once I had that, it was an easy matter to carefully position each fin so that its notch would line up with the controller bar's attaching bit, and the pull the controller bar back into place.  I gave the hook a firm tug and...

Snap!

I am, once again, master of the direction of the flow of air in my vehicle.

Tags:

User feeds should reflect user activity

  • Oct. 12th, 2008 at 8:12 PM
z_default

RSS and Atom feeds are a lot of fun! The most common use of these feeds is to subscribe to them in a feed reader so that you can browse through individual articles from multiple sources in chronological order.

Another fun thing to do with them is to create a lifestream. That's a collection of feeds associated with a person. The first one that caught my attention was Jeremy Keith's. Mine is stylized identically to his, but the back-end is different, and the functionality is different. I'll cover that in a different post.

Creating my lifestream put me in a position to discover which tech companies provide the most and least useful services. For example, I think it's awesome that Hulu provides a feed for which videos I watch.  It's also awesome that Netflix offers different feeds (sent/enqueued/etc.) for their users' queues.

Here are the three companies that I thought would get it, but really ended up frustrating me:
  • Amazon does not provide an Atom or RSS feed for its users' wishlists.
  • Shelfari (owned by Amazon) does not provide a feed for its users' shelves.
  • YouTube does not provide a user-oriented feed for its users' favorited videos.
This, folks, is madness.

Their users want to draw attention to the best of the products these companies promote and offer. But Amazon, Shelfari and YouTube don't provide the mechanism. That's a bit like saying, "we don't want more eyeballs on our products."



Ideally, you could have a feed of the items you added to your Amazon wishlist, sorted chronologically by the date you added the item to your wishlist. Amazon doesn't provide that. That's really frustrating, because if you go to your wishlist page, it says, "added [date]" right there, next to each item.

At best, they provide a list that can be widgetized into a blog sidebar.  That's good, but a widget doesn't serve the same purpose as a feed.  With the help of Yahoo Pipes, you can come close enough to the feed we really want. Here's the URL you need:
http://webservices.amazon.com/onca/xml?Version=2006-06-07&Sort=DateAdded&
     Service=AWSECommerceService&ResponseGroup=ListFull&Operation=ListLookup&
     ListType=WishList&ListId=[id]&AssociateTag=[assoc]&AWSAccessKeyId=[key]
Extract item.Item.ItemAttributes.Title and item.DateAdded from each item, and insert them into a custom feed accordingly. Voila, the feed that Amazon should be providing itself.



Shelfari suffers from the same problem as with Amazon. You can get a widget. But you can't get a feed that says when you added the book to your shelf, or when you started reading it, or when you finished and reviewed the book. Users have been asking Shelfari for that for nine months.

I don't have a workaround for this one. It's better to just use a services that provides the right feeds, like librarything.com or goodreads.com.



YouTube has awesome feed support. That keyword support is brilliant. So it breaks my heart to say that they really missed the boat when it comes to favorited videos. YouTube does support a feed of video that have been favorited by a user.

http://gdata.youtube.com/feeds/api/users/[user]/favorites

But the videos aren't sorted by when they were favorited. That's really frustrating, because when you go to your profile page, it says right there, when each video was favorited.

The profile page presents the info, but the favorites feed doesn't.  Instead, they're sorted by when the videos were most recently commented upon.

If we're going to subscibe to a user's list of favorited videos, it's pretty safe to assume that we're interested in when that user favorited those videos.  If they favorited something recently, we want it at the top of that feed.  Simple.

My only workaround for the current feed involves parsing their feed, and comparing each item against a previously gathered list of known favorites.  If there are any new favorites, add them with the current timestamp.

[Edit] Youtube eventually made the feed we need.

Summary

We, as users, shouldn't have to be coding around the services that these companies offer.  The companies should recognize the obvious value inherent in useful user feeds that point to their most popular products.

C'mon, Amazon, Shelfari, and YouTube.  Give us our feeds.

So Tweet It Is

  • Sep. 16th, 2008 at 5:46 AM
z_default

  • 16:12 UniBall Signo 0.38 >= Pentel Hi-Tec-C 0.4 > Slicci 0.3 > Hi-Tec-C 0.3 #

Posted by LoudTwitter

Tags:

Returning to Firefox from Chrome

  • Sep. 10th, 2008 at 8:47 PM
technical
Aww.  I liked Chrome.  A lot.  I even made it my primary browser.  I liked the algorithmic home tab page.  (It shows you little thumbnails of the pages you go to the most.  Smart.  It helps me get to where I most likely want to go.)  I also really enjoyed the faster rendering.  I even tore tabs into other application windows.  I was getting used to the Chrome way of things.  It was nice.

For the most part, Chrome delivers.  It's a great first release of a beta into a mature commodity market.

But today, I returned to Firefox.  Chrome has the following problems that I just can't get past:
  • No native ATOM/RSS support.  (Seriously-  Are feeds not the most important modern feature of the web?)
  • Immature Bookmarking system. (no plugins (Foxmarks/Delicious) to workaround this, either).
  • Rare AJAX incompatibility with all other browsers.  (Chrome doesn't support the AJAX drag-and-drop in Netflix's queues, for example.)
Chrome, I'll be keeping an eye on you, and with major releases, I'll come back and give you another go.  Good luck, there.

Tags:

Help Improve Karma Medic's Vocabulary

  • Aug. 10th, 2008 at 9:40 PM
z_default
Some of you might suggest that Karma Medic has a limited vocabulary.

Shame on you. Shame!

Here's your chance to atone for your intimation. What would you have Karma Medic say?

Given a plurk with plurk-qualifier verb, like "shares" or "loves" or any of the others, what's a reasonable non-committal response for her to give? She can read the plurk qualifier, so she can make a somewhat appropriate response. (Offensive responses can be funny, but they wear thin pretty quickly, so I probably won't be adding those.)

Also, when the original plurk has no specific qualifier, how should she respond?

Please, suggest away! What should KM say? Help her help you!

Voices From Beyond The Grave

  • Aug. 10th, 2008 at 8:57 PM
z_default
This is a plea for help.

I'm pleased with the way Karma Medic has turned out. She help me and all her other friends. Since I created her, I also gave her my password and authorized her to post in my stead, when I'm away.

Suppose I die in the near future. I'll keep posting to Plurk (because she'll be doing it), and she'll keep replying to my posts, because it's her job to reply to her friends' plurks.

While I'm dead, I'll be having conversations with myself at Plurk.

Here are the three alternating things she'll do when she's plurking on my behalf:
  1. Post a line that I've queued for her ahead of time. (I've got a running set of these. Complete with online interface for adding more, whenever I think of it.)
  2. Post an image that flickr has determined to be very interesting.
  3. Post an interesting image from a specific tag group from flickr.
These are the tag groups from which she'll be selecting images and posting them:
  • awesome, dark
  • awesome, light
  • san francisco, beautiful
  • robot, awesome
  • steampunk, cool
  • space, beautiful
  • rock, climbing
  • seattle, beautiful
From what other tag groups would you like to see images chosen?  I'm not going to add anything too wacky.  But I'm open to suggestions.  Feel free to suggest tag groups of two or three tags that you think would result in generally accessible and interesting pictures.
z_default
Yahoo Pipes can also be used for feed authentication (like Twitter Friend feeds). You could embed the username and password directly into the URL (in which case, everybody can see them), or you can hide them within a private string object, like this.


With a feed like that (with your own username and password), you can view your friends feed from Google Reader.
z_default
The RSS specification allows you to have an <image> element in the header of your RSS feed.  A long time ago, if you used Wordpress, you'd have to edit the wp-rss.php file and be very careful when you upgraded to new releases, or your change could be lost.

But if you use a modern version of Wordpress, you should take advantage of the do_action('commentsrss2_head') hooks* in the feed-rss... .php files.

Here's what you'd do: Add the following code to your theme's functions.php file:

function add_my_rss_image()
{
echo '<image><title>', bloginfo_rss('name'), '</title>';
echo '<url>', bloginfo_rss('stylesheet_directory'), '/images/button.gif</url>';
echo '<link>', bloginfo_rss('url'), '</link>';
echo '<width>88</width><height>31</height>';
echo '<description>Description of your blog.</description></image>';
}

add_action('rss2_head','add_my_rss_image');
add_action('rss_head','add_my_rss_image');
add_action('commentsrss2_head','add_my_rss_image');

Take care to actually put an image file in the path specified, and adjust the width and height accordingly.

Et, voila! Now your feeds have images, and they're forwards compatible with future versions of Wordpress. Oh, did I say future versions of Wordpress? Excuse me, I have to:

svn sw http://svn.automattic.com/wordpress/tags/2.6/

Blam! Upgraded. Sweet.

* Also rss2_head and rss_head, just so I cover the appropriate Google terms.

The Unofficial Plurk API in Python

  • Jul. 14th, 2008 at 1:52 PM
technical
I've ported some of the unofficial Plurk API in Python at Google Code.

There were already a couple Python scripts out there that connect to Plurk, but nothing that constituted anything like an API like Ryan Lim's PHP version.

It's only a partial port, and it's not documented yet. But it's pretty easy to understand and it's usable. If you use it, please conform to Plurk's Terms and Conditions.

Here are some examples:
import plurkapi

p = plurkapi.PlurkAPI()

## View some plurks
for plurk in p.getPlurks(your_userid):
print plurk['content']

## Retrieving Karma
p.login(nickname, password)
print "%s has %1.2f karma." % (p.nickname, p.uidToUserinfo(p.uid)['karma'])

How Starbucks killed the iPhone

  • Jul. 7th, 2008 at 1:19 AM
z_default
I purchase songs from iTunes because even if I can't buy the DRM-free version of the songs, I can remove the DRM with QTFairUse.  So, I'll always be able to take my songs with me.

I've been pretty diligent about not upgrading iTunes, just in case it becomes incompatible with QTFairUse.

One of the recent free iTunes "Pick of the Week" songs at Starbucks (I think it was Waking Up by Bitter:Sweet) required an upgrade from my crufty old iTunes 7.2 to 7.6.  I've been thinking about getting an iPhone, and in a moment of weakness, I upgraded my version of iTunes.

And sadly, that put my iTunes in a walled garden, because Apple sent a cease and desist to the QTFairUse team, and QTFairUse doesn't work with iTunes 7.6.  Now any new songs I purchase with DRM will have to have the DRM stuck to them.  I shouldn't have upgraded.

This is pretty disappointing.  iTunes feels cripped to me now, since all the songs I want are DRM-only there.  My disappointment in being stuck with the DRM at iTunes translates to the iPhone, too.  So, now I'm not so sure I want the iPhone 3G either.

Darn.  I wonder if I can regress my iTunes library back to 7.2...

Tags:

Google Reader's favicon flag

  • Jun. 23rd, 2008 at 10:00 PM
z_default
Even since I've been toying around with Firefox 3, I've notice that the favicon for Google Reader is state-dependent.  Sometimes the favicon is the usual overlapping feed icons.  But sometimes, they're tilted.  Compare the following two favicons, to the left of "Google Reader."


(Old favicon, no new items)



(New favicon, new items to read)

A little experimentation revealed how to change the icon.  When I have no new items to read, the favicon is the usual level one.  But if I have new items to read, then the favicon is tilted up, like a mailbox flag when there's outgoing mail in the box.

Could this be what the Google Reader team intended?  It doesn't seem likely, because the tilted version is actually a 3D perspective version.   But still, that's what my experience has been so far.  It's a little mailbox flag for new articles!

I know what you're all thinking:  Ooh, fascinating, David!  Is this what you do in your spare time?

Tags:

TodoPaper

  • Jun. 16th, 2008 at 11:43 PM
z_default
I've found another tool that nicely rounds out my workflow for getting things done. It's so elegant, I wish I'd written it myself.

I used to make lists with 3x5 index cards. (I have much love for that physical medium.) Then I wrote a bare-bones web 1.0 todo list. These things worked, but they had problems.

The 3x5 index cards aren't convenient for making my annual self-review at work. I'm not interested in sorting through the ones I kept. Besides, I like tossing them in the recycle bin when I'm done with them. It's rewarding.

The web service is under-featured, and I can't write any company proprietary tasks on it because it isn't contained within our intranet.

Enter TodoPaper.



A colleague at work uses the Macintosh product TaskPaper to keep himself on task at work. He showed me how simple it was to use, and I was instantly hooked with the utility of it. I thought about writing a Windows version of the product, but then I found TodoPaper.

Pure Utility

TaskPaper and TodoPaper use the same document format and data entry techniques. The document type is a plain text file, and formatting relies on simple rules. (Simpler than wiki markup.)
  • Heading end with a colon.
  • Tasks start with a hyphen.
  • Tags start with an at sign (@).
  • Tabs can be used to specify hierarchy. (Collapsible, too.)
For example, the actual file in the image above contains exactly the following lines:
Secret Project:
Structure:
- Basic element shape @done(2008-06-13)
- Programmatic generation of thrusters @done(2008-06-14)
- Home base coordinates
- Hit points @done(2008-06-13)
Behavior:
- Idle duration @done(2008-06-16)
- Wandering
- Target acquisition
- Chasing
It's beautiful because it's simple.  You can't waste your time getting wrapped up in the tool.  The utility of it encourages you to stay on task.  That's why I'm using it.

Why didn't I write my own?  Because Jordan Sherer already took care of the details.  In addition to the basics mentioned here, which is mostly what I really need, he made the presentation very customizable, supports tagging, filtering and searching of the tasks, and even has some expert level features, like a quick-entry dialog that comes up when you press a keyboard shortcut in any other application.

TodoPaper even has an online forum, and Jordan's very active and responsive to his users' requests.  I have every belief that he's going to continue to support and improve on the product.  The product and its workflow has sold me.

Full disclosure:  I should receive a free license to the application.  I'd have written a positive review for it anyway.

Variety's Fact Checking

  • May. 8th, 2008 at 5:27 PM
z_default
I work at a deeply awesome company.  One of the founders is even something of a Silicon Valley celebrity, in a geeky sort of way.  He founded Network Appliance, CacheFlow and this one.  The man helped make NAS popular.  Don't have NAS at home yet?  You probably will, in one form or another.

So, this month, Variety interviews him.  Meh.  What we do is so much more awesome than that.  I could talk about RAID-K to strangers.

If you click on his name in the Variety article, does it take you to a biography of the Silicon Valley legend?  Nope.  It's a link to an assistant on Cheech and Chong's Nice Dreams.  Hee hee.

Tags:

Danelope Rocks

  • Apr. 18th, 2008 at 2:02 PM
z_default
It's thanks to danelope's tag tip (some old post I can't be bothered to find) that I'm subscribing to "Alt Text" at YouTube by way of tags.

http://youtube.com/rss/tag/+lore+sjoberg+wired.rss

Tags: