I updated the source code tool, and it's pretty cool, if I do say so myself. Instead of submitting suggestions via a form that emails me, you can now submit them via comments. This means you can read what anyone else suggests, you can ask questions about the code, and you're not relying solely on my good word that I will, in fact, give attribution for contributions I use as everyone else could see if I were to pass off your ideas as my own (which, of course, I would never do).

Because it's not in a form anymore, the source is now using syntax highlighting, which is easier to read. You can also now directly download the source of any page as a text file, which makes it much easier to reuse something you find here. In addition to making the tool easier for others, this will hopefully save me some time as I will no longer need to package up files and email them to people.

Now here's the coolest part: Whenever a source file references another source file, the source tool automatically creates a link to the source of the referenced file. This will make it much easier to reuse tools that use multiple files. But wait, there's more! It will also recognize SQL references to database tables, and link directly to the table in the database browser I recently made (and to which I still need to add more tables). So now pretty much everything on this site except passwords is open for anyone to see, download, reuse and comment upon.


Last night Shelley Powers published a lengthy RDF tutorial, in which she wrote I’m focusing on what I call street RDF–RDF that can be used out of the box to meet a need ... I've read about RDF before, and I read about it again, but the needs RDF meets are still not clear to me. Today Danny Ayers wrote But the statements can be made available by techniques like mapping SQL database tables to RDF ... Fair enough. I've started making my database available via XHTML, and will add more tables soon. Now if anyone wants to convince me of the value of RDF, I invite you to explain to me how to represent my database as RDF, and show me how this helps me or anyone else.


In a comment to my post on microlending, Jessica asked what I thought about an organization that does what might be called microgiving, giving people animals that grow to be more valuable than they were when given. I'm all for charity in general, but there are several reasons why this would probably work better if the animals were replaced with loans. Loans are better than giving, despite the cliche about not borrowing and lending.

Local knowledge is better than a plan to save the world. Animals aren't the best use of money in all places at all times for all people. The theory behind microlending, largely proven in practice, is that people know what their local community needs, and they just need some capital to provide it. Maybe their local community needs animals. But maybe it doesn't. I remember a story - I don't know the source or if it's true - about a charity that gave cars to poor people, who then sold the cars and bought bus tickets. This ties into the next issue:

Shared responsibility is better than individual responsibility. If I give you a dollar, you are only responsible to yourself in how you spend that dollar. You may want to spend that dollar in the most beneficial way possible, but you may not know what that is, and even if you know, you might not be listening to yourself. You could easily be tempted to spend it on a short-term gain at the expense of a long-term investment. If I loan you a dollar, we have a shared responsibility for how that dollar is spent. We are both responsible to ourselves, but also to each other. Shared responsibility is multiplied, not just added. And when an organization stays around for a while, this responsibility gets multiplied even further over time. Which ties into the next issue:

Individuals are less likely to reinvest than organizations. Reinvestment is good. If I give you money, your wealth has grown. But you won't likely give money to someone else. If I loan you money, your wealth grows, and then you give the money back to me, and I can give it to someone else. And over time, I can give money to more and more people. Reinvestment build infrastructure which improves community. And now that I think about it, this is a problem with Kiva, the direct-microlending organization I wrote about earlier, because the individuals doing lending through Kiva are less likely to loan again than Kiva would be if it were handling the loans.

Another issue is the relationship created by giving vs. lending. We give down, to people who have less than us. We lend to peers and make them our partners in investment. This is a bit counter-intuitive, but I think it's true. Personally, I don't like to borrow money from people, but I like even less to take money from people. And then, of course, there's the cynical view that poor people are just lazy, which microlending preempts and microgiving doesn't.

So in general I think microlending is better than microgiving. That said, if you want to donate directly to people, go ahead. It couldn't hurt. I think microlending is a smarter way to redistribute wealth. But the world, in my opinion, is not currently lacking in smarts so much as compassion. I should also point out briefly that most of the principles I've described here don't hold true on a larger scale. I favor macro-giving over macro-lending, but I'll go into that some other time.


I recently added some advertising for a few charities to this site. One of the charities is the Grameen Foundation, a microlending institution. I have a BA in International Studies, and much of what I did to earn that degree was learning about various save-the-world plans and their pros and cons. After four years, I pretty much knew why the world would never be saved, because pretty much every save-the-world plan has some major problems. Except the Grameen Bank.

The Grameen Bank gives small amounts of money to people in developing regions, which they then invest in what they need to sustain themselves, and pay back the money. Just like any loan, not everyone pays back the money, but it's not a lot of money, so no big deal. And those who do pay back the money gain both capital and experience helping themselves, which is ultimately much more valuable. It's generally an excellent program, and you can contribute to it via the Grameen Foundation.

Today Seth Godin pointed to Kiva, which does the same kind of micro-lending as the Grameen Bank, only without the bank. Rather than give your money to the Grammen Foundation, you give it directly to the people who need it. I have mixed feelings about this.

At first glance, it appears this direct connection primarily benefits donors, who get to know exactly where the money is going. I also imagine this system requires more overhead than Grameen. But it's also more transparent, which is something all non-profits should strive for. And even if it does primarily benefit donors, that should bring in more donors and ultimately benefit recipients. I think I'll give Kiva a little more time to establish a history before giving it my coveted banner ad endorsement, but it's nice to see new activity in microlending.


At first I didn't like the results Google recently started inserting for searches I maybe should have made instead of what I actually searched for. I'm pretty smart, you see, and I don't need to be bothered by Google treating me like a fool, assuming I don't know what I'm looking for.

And that was basically my thinking up until I searched for something unfamiliar and wasn't entirely clear what I was looking for, and Google gave me some results for what I would have been searching for if I knew what I was doing. At that point I found the functionality very useful.


My profile identifies me as existentialist, and I've discovered over the years that this means many different things to many different people. Yesterday I was thinking about criticisms I've read of the Red Cross and about how such criticisms might give some cause to not donate blood. Personally, I don't donate blood because I was told not to. But I was thinking about people who have no reason not to give other than perceived problems with the Red Cross, and about how such people are very unlikely to give anywhere other than the Red Cross, and about how I make similarly cynical choices of inaction.

As I was thinking about this, I think I came up with a pretty good summary of what I mean when I call myself existentialist: All choices in life should be made between (at least) two courses of action. One should never choose between action and inaction because inaction is just too tempting, and almost always the wrong choice.

There are exceptions, I'm sure, and some rare people may have enough discipline to consider them. But just like we don't offer children the option of cotton candy for dinner, I think we shouldn't offer ourselves the option of doing nothing. We exist, so we should do something.

Indeed we can't help it, as even doing nothing is an action, and that choice makes up who we are like any other. But now I'm straying away from my simple summary. What I mean to say is, we are what we do and if we don't do anything, we aren't. No, that's not quite right ... it's really hard to talk about existentialism without sounding like Strong Sad. Well, I tried anyway, and I guess that's the point.


I gather most people involved in microformats are coming from a background heavy in more formally structured data, e.g. RDF, XML, relational databases. I'm coming more from the opposite background: scraping. Recently Phil Jones described a web in which metadata resides in scraping/parsing applications meaning documents need not be so descriptive, and Danny Ayers predictably responded with an argument for the Semantic Web, in which metadata resides in documents meaning applications need not be so smart.

In Danny's comments, I tried to point out the applications Phil predicts can produce the documents Danny predicts. I already do a small amount of this with all my scrapers. On Disemployed, I add location and time information to each job posting and publish that information in a regular format (HTML, RSS 1, RSS 2, or Atom). I could admittedly be structuring this information more formally to better encourage reuse, but the data is there, in any case, where it wasn't before. But this is relatively simple data to add. I know when I found each job post and where it came from, so my application doesn't need to be very smart. What are the limits of a smart application? Could a very crafty application actually make microformats unnecessary?

Let's take one microformat, hCard, and see how guessable the microformat metadata would be if it weren't there, on a scale of zero to ten:

  • fn (full name): this could at best be a guess. A name could feasibly contain pretty much any combination of letters. I'm sure someone somewhere has named a child "Asdf Jkl." Microformats are the easiest way to identify fn. 0/10.
  • n (name): same here. 0/10.
  • nickname: again, no easy way out. 0/10.
  • photo: here we have a winner, mostly. I'm guessing eight times out of ten, any image referenced within something identified as hCard information will be a photo. Depending on how lucky we feel, microformats could be dispensed with here. 7/10.
  • bday (birthday): this is a bit complicated. Dates follow very standard formats, and we could probably identify dates in a jumble of text with about 95% accuracy. But how do we know if a given date is a birthday? We can assume relatively safely based on proximity to words like "birthday." 9/10.
  • adr (address): I would have guessed this would be very hard to identify as a pattern, but Google is already doing this. Of course, Google is limiting to US addresses. 5/10.
  • label: at first, this appears to be as open-ended as names, but the variety in practice is likely very limited. I would expect a list of a few dozen words likely to occur in a label (e.g. home, domestic, etc.) would catch maybe 7/10.
  • tel (telephone): this is a bit complicated. Having an address makes it much easier to tell if a given set of numbers is likely a phone number. Capturing anything that fits the patterns (###) ###-#### or ###-###-#### would get many phone numbers, and I suspect more is possible. 6/10.
  • email: This one is easy. An email address must fit a defined pattern, so we can discover all email addresses with no microformat, as evidenced by the proliferation of junk email. 10/10.
  • mailer: At any given time, there are only so many known email clients. 8/10.
  • tz (time zone): There are only so many timezones, and not too many ways to describe them. 9/10.
  • geo: Latitude and Longitude information is pretty much useless if it doesn't follow a certain pattern (decimal numbers between -180 and 180), but that doesn't mean all numbers that follow this pattern are geo codes. 6/10.
  • title: Theoretically unlimited, but practically limited. 7/10.
  • role: Words ending in "er" would catch a lot. Check for proximity to words like "job," "work," or "professional." 5/10.
  • logo: Just like photo, only probably smaller. 7/10.
  • agent: I had to look this one up. Auto-discovery doesn't look good. 0/10.
  • org: Just like names, only worse. 0/10.
  • categories: Could be anything. 0/10.
  • note: Again, anything. 0/10.
  • rev: Dates near words like "updated" or "modified." 7/10.
  • sort-string: Usually last word in the name. 6/10.
  • sound: Sounds have defined formats. 10/10.
  • uid: Pass. 0/10.
  • url: First standard link. 7/10.
  • class: Pass. 0/10.
  • key: Keys follow patterns. 10/10.

Average: 5.3/10. In general there are some areas in which microformats are entirely unneccesary, some in which they are entirely necessary, and some in between. Of course, these are mostly rough estimates on the potential accuracy of intelligent scraping. The actual accuracy would need to be determined by writing a scraper and pitting it against some actual data.

In any case, microformats appear well worth the expense to capture that 47% (or however much) of the existing information. Even though email addresses are entirely identifiable without any microformat, as long as we're wrapping names in name tags, it makes sense to wrap the email addresses at the same time so a parser doesn't need to be any smarter.

While not the absolute simplest method, microformats appear to be the lowest common denominator of structured documents. So now I think I was wrong when I wrote that we're headed towards a "semantic web" in which the semantics are forced onto websites by browsers and other intermediaries. I still expect that will happen (as I notice it happening, and cause it to happen), but given the practical limits of the smart-application method of connecting the world of information, it will only work as a bridge to a semantic web composed of metadata-rich documents.


In other microformat news, over the weekend I made a draft version of a "Microformats Zen Garden." The idea, introduced on the microformats-discuss email list, is an obvious knockoff of the CSS Zen Garden, only the (X)HTML is full of microformatted information, and JavaScript is added to the mix. I spent a few hours working on this, and when I was done, I realized the concept was not just an application, but almost a platform - a small hint at the mythical web-as-operating-system. Microformats act as the documents, CSS handles the visual style, and JavaScript acts as the applications. The only important thing missing is the ability to save edited documents, but Mark Pilgrim is already working on using Atom for that. I'll be very interested to see how this all materializes.


I recently worked on a website for the Iowa Military Veterans Band for my day job. It's a static site, which is not my primary interest. Making static websites is more interesting to me than most other tasks, but I'd much rather be working on something dynamic and functional. So I made the site functional in ways no one will ever use.

If you take any page with contact or calendar information from the IMVB site and feed it into X2V, you'll get the relevant information as vCard or iCal, which you can then import into most address book and calendar applications. Which admittedly seems pretty useless at first given the unlikelihood that anyone would want to import such information into a desktop application.

I did this mostly to test out the usefulness of microformats. I had been reading about microformats for a few weeks, so I thought this would be a good opportunity to try it out. I probably spent about 20 minutes extra time adding and testing the microformats, which is relatively little given the enormous time savings for the first person who wants to import all ninety-some IMVB members into her address book.

And this is only what can be done with microformats today. I imagine a future in which X2V is unnecessary because microformat readers are built into browsers. Where Safari and Firefox today recognize syndication feeds and allow users to import that information into a suitable application with a single click, future browsers could do the same with various microformats.

Unfortunately, this future will likely be slow coming, as microformats suffer from the same chicken-egg problem that made syndication adoption so slow: nobody wants a reader application with no content, and nobody cares to produce content with no readers. But because microformats are starting mostly with existing formats like vCard and iCal (and soon Atom), perhaps the future won't be so slow to arrive. In any case, I've done my part to spread microformats and create a more semantic web, and I see no reason not to continue doing so in the future.


Graphite 0.5 is released. I added support for decimals, and removed the "beta." I'm going to submit it as widely as I can now. I've been putting this off in an attempt to catch bugs before most people ever use it, but I'm not getting much feedback anymore, so I need some more users. First stop: Apple's site.


So far I really like the Colbert Report, so I spent five minutes altering my Daily Show RSS feed and produced a Colbert Report RSS feed.

Some day Comedy Central will have useful RSS feeds. They already have a feed for the Daily Show on their RSS page, but it points to pages with completely unnecessary popup windows, which is just bad form.


I keep update notification on in NetNewsWire. Often it's more annoying than helpful. Tom Coates' links, for example, are updated every day, for formatting not content, but I see them all as new when they are updated. But every once in a while I see something valuable in the updates. Most often on BoingBoing, because they don't have comments, so they post selected comments sent via email as addendums to the the original posts. And often the comments are more interesting than the original post.

But today I got another kind of treat via update notification:


Someone at the DNC obviously said "change that to point out that Delay is the Republican Leader and get the word 'criminal' in there too." This is why I don't like the Democratic Party much more than the Republican. I don't have much sympathy for Tom DeLay, but I think the Democrats can let him dig his own grave and concentrate on something else. Maybe health care? Education? Equal rights? Peace? I really hope Democratic candidates in 2006 and 2008 have a platform beyond "Republicans are bad." I'm getting awfully tired of voting for the lesser of two evils.


Over the past few months I've made and eaten dinner while watching TV several times. It's a hectic experience. Tonight I am making and eating dinner while watching a TV show on DVD, and something occurred to me that maybe was obvious to everyone else. Time shifting technology brings with it speed shifting, which is so much more valuable.

The best feature of a Tivo (which I don't own, though almost everyone else I know does) is not the much-discussed ability to skip commercials, but the simple pause button which allows you to stop the show and do other things without worrying about getting back to the TV in time to continue the show. I don't even need to eat dinner in front of the TV now, though I will because eating alone at the table is less activity than I can handle. But having a TV show with time shifting at least makes it easier to slow down, which I think will be increasingly valuable as life becomes more hurried. I, at least, find it much easier to tune out commercials than to tune out the voice in my head saying "hurry up or you'll miss the show."

I think Tivo should release a commercial touting the pause button of the Tivo and using Simon and Garfunkel's "Feeling Groovy" as a soundtrack.


A few weeks ago, my company announced a new corporate discount for Sprint. I have a Sprint account, so I called up to get a free discount, nor realizing how much time it would cost me. The actual discount line only took a few minutes, and I thought I was all good. Just before hanging up, the Sprint representative said something about how I would get two bills - one under my old rate, and one with my discount applied.

In retrospect, I should have just said "no, never mind, I don't want the discount" right then. This was a clear notice that the discount program was new, and the billing system wasn't made to handle discounts. I might have guessed that nothing at Sprint was made to handle the discounts, especially given my previous experience trying to get an overcharge refunded by Sprint. But I was young and foolish then.

Several months ago I signed up for online billing through Sprint. I get notified by email whenever I have a new bill, and I go to the website and pay the bill. No need to pay postage or kill trees. So last week I got my email telling me I had a new bill, only when I went to the website, there was no bill. The website informed me that the service was "temporarily unavailable." After a few days of seeing the same "temporary" problem, I contacted customer service. I still have (I assume) a good three weeks before my bill is due, but I can already see the late fee I will no doubt receive for not paying the bill Sprint has made it impossible for me to pay.

Customer service responded that I don't have online bills because I switched accounts. They even gave me my old and new account numbers, which were two numbers I had never seen before, always referring to my account by the phone number. I wrote back that I was not informed I would lose online billing when I applied the corporate discount, and if they can't bring it back, I'm canceling my account altogether.

I got this account when Jessica and I both lived in Bloomington, but now I have a local Des Moines phone, so I'm only holding on to the Sprint account until Jessica moves here in December anyway. I figured Jessica could just get new phone a few months early if Sprint gave me reason to follow through on my threat to cancel service.

It turns out, I was told, I could pay online. A "specialist" would be calling me within 24 hours. Apparently the specialist doesn't specialize in calling people on time, as that was about 36 hours ago and no one has called me.

So I'm documenting this here for two reasons. First, so I have a record of what went wrong, as I have a suspicion it will go even more wrong in the future. And second, to warn others about Sprint's craptacular service. I'll be sure to post an update when I get that late notice for the bill Sprint won't allow me to pay.


Michael Barrish writes:

Today I made a friend cry by saying she's lying to herself if she thinks she's going to find the relationship she wants while continuing to sleep with her ex-boyfriend, who to his credit isn't promising anything more than he can deliver: great sex, false hope, and the occasional fix-it job.

I'm pretty ignorant about how people work, generally preferring to deal with more predictable computers, but I've learned a few lessons over the years. One is: never date an ex. Another is: never give someone advice on who to date. May those lessons serve you well.


Google has begun returning results for things you didn't type, but maybe should have. For example, if you search for "opera," you get a block of results for "oprah." It looks like it will benefit people who don't know what they're looking for, and probably annoy people who do. I don't like it yet.

I was testing this out with random words when I typed in 'search' and saw that Google returned itself as the top result. And then I thought it would be interesting to try a search for 'search' on various search engines. It turns out Google is the only search engine that returns itself as the top result for 'search.'

Search EngineTop Result
Search.comMSN Search
MSN SearchGoogle
AOL SearchGoogle
Ask JeevesLycos

Google is also the most popular search engine among search engines, just slightly ahead of Search.com.


From Wired, What Would Jesus Blog:

Topics included God bloggers' relationship with the traditional church, their growing influence on mainstream politics and how to manage outsiders' perceptions.

Just when I thought the gap between Jesus and Christians couldn't get any bigger.


My cousin David is working on a genealogy of the Reynen family. I'm hoping to convince him to move it off of Tripod onto my hosting, and eventually replace the static HTML with something database driven with auto-generated family trees and whatnot. He already has a lot of information and it's an interesting read for me.




I don't know a lot of Americans into Asian self-improvement practices such as Buddhist meditation or Yoga, but from the few I do know I have developed a theory. My theory is that self-improvement practices from distant lands more often than not act as a particularly effective placebo.

I used to be very interested in Buddhism. I got some books on the subject, even took a course in university, and some of it I found useful, but never life-altering. But one after another, I've listened to friends and acquaintances with major personal problems extoll the virtues of this or that Asian self-improvement technique after a week or a month of practice. The thing is, they're still just as messed up. They just don't realize it anymore because they've convinced themselves that Shiatsu, or transcendental meditation, or whatever has cured what ails them.

So I've developed this theory. Basically, I think some people with big problems start looking for some answer they never thought of before, because nothing they've done previously seems to be working. And they find some teaching from the other side of the world, and it tells them to do everything different, and they do, and their lives seem different. So they go out and tell everyone else about this great new thing.

Which is great, until everyone else realizes that the person hasn't changed at all. They're just as angry, only now they have mantras to recite about anger. They're just as unhealthy, only now they can lecture everyone else about healthy living. Maybe it's just me and the people I know, but the net result of all the eastern evangelism I've heard has been to make me want to stay as far away from a Tai Chi class as possible.

When someone starts telling me how great Asian cure-all X is, I have a game I like to play now. I replace X with "Ronco Food Dehydrator."

"I've been practicing Ronco Food Dehydrator for about a month now, and it's really helped me. I think you should consider trying it. There's a center in California that gives away free Ronco Food Dehydrator lessons. It will really change your life. I know you probably have a lot of bias from American culture about how weird Ronco Food Dehydrator is, but it's really easy to use."

And maybe Ronco Food Dehydrator really does amazing things to improve peoples' lives. But when I hear someone selling it so hard, I start to think they're not trying to convince me - they're trying to convince themselves that something has really changed, trying to make the placebo last. That's my theory, anyway. I wonder if it would translate into actual placebos. I wonder if giving people "herbal medicine" sugar pills would cure them more than traditional sugar pills.


Last month I tried to write about the potential problems with making decisions to hedge against the future. Joel Spolsky did this a lot better today in Set Your Priorities:

In fact when I thought about this later, I realized that for a long time, I had been doing dumb shit (that's a technical term) simply because I figured that eventually it would have to get done, so I might as well do it now.

That's exactly what I've been doing, only not so much with software as with life. I'm not saying I've been making a lot of bad decisions, but I think maybe making good decisions for bad reasons.


I discovered Dinosaur Comics today via Piehead News and I like it enough that I'd like to read it daily, so I scraped a feed.


0.4 beta fixed a bug in 0.3 beta that made nothing work (oops!).

I'm excited about the comments I've been getting over on the Dashboard Widget showcase. Even though that version is completely broken, the few people who went to the trouble to fix it themselves seem to really like Graphite.


I just posted Graphite 0.3. It makes the process of creating a graph about as simple as possible:

  • Open a site in Safari
  • Open a Graphite widget's info by clicking the 'i'
  • Click 'Discover URL' to get the URL of the frontmost site in Safari
  • Click 'Discover Text' to get a list of numbers on that site
  • Click the number you want to graph to get the approriate search text for that number
  • Click 'Done'

This is simple enough that I'm ready to start submitting Graphite to various widget sites. I think I'll hold off on Apple's widget list until I get some feedback and polish it up a bit.


You can now leave comments with limited HTML. Specifically, you can include the following tags: b, i, em, strong, q, blockquote, p, pre, and a. If you use a (the tag for links), your comment will not show up until I approve it. This is to keep the comments spam-free.

You can also now browse and subscribe to the weblog based on tags. If you're only interested in what I have to say about music, for example, you can subscribe to the music tag. Each post has a list of tags, and clicking on any of them will take you to the appropriate tag page.


Flickr changed format and broke my previous bookmarklet. At first I thought maybe they actually moved protected images to a protected server, but they just changed some variable names. So here's the updated bookmarklet that makes it (too) easy to get the full size version of protected images:

Get Flickr Original


I think Most of Mine (MP3, lyrics) is one of my best songs, if I do say so myself. Which makes it all the more embarrassing to admit that it was largely inspired by an episode of Will and Grace. It's the one where Harry Connick Jr's character and Grace are getting back together after he has cheated on her. That said, I hope the song has a bit more depth to it than a typical episode of Will and Grace.