Jon Aquino's Mental Garden

Engineering beautiful software jon aquino labs | personal blog

Thursday, April 28, 2005

Monitoring comment threads and sites without RSS feeds: WatchThatPage

Do you have a favourite page doesn't have an RSS feed? There's a free service called WatchThatPage (not to be confused with WatchThisPage) that will "diff" the page at regular intervals and send you an email containing the parts that are new. (Yes it's email rather than a feed, but did you know that Bloglines gives you multiple email accounts that you can use for this purpose?).

I wanted a way to monitor comment threads on other people's blogs. When I leave a comment on someone's blog, chances are that I won't come back to check up on it. Using the WatchThatPage bookmarklet I get notified whenever someone replies to my comments.

Neat!

Connecting two bloggers who don't know each other

Recently I've been scobleizing (reading lots of) blogs written by people in my city, and occasionally I see interesting connections and recurring themes. For example, Shannon from Victoria mentioned that she was going to be reading Life of Pi, and five hours earlier Mikey from Victoria mentions enjoying Life of Pi. So I left a comment on both people's blogs, telling each about the other.

We need a good buzzword for playing the role of connector in the local blogosphere. How about blognecting ... nah.

How about "nectaring"?

Moving from Blogdigger to SuperBlog (for Victoria BC Bloggers aggregator)

To see what Victoria BC Bloggers are writing about right now, click here (old site).


I've decided to move the Victoria BC Bloggers combined webpage from Blogdigger to SuperBlog. They're both free services for combining RSS feeds, but SuperBlog is updated more frequently (hourly) and shows pictures (woo-hoo!).

Sunday, April 24, 2005

How to Live on 24 Hours a Day

Just finished reading the famous essay How to Live on 24 Hours a Day and I think it's going to be a lifechanger for me. It's basically about how to make the most of the 16 hours between finishing your work one day and starting your work the next. I'm looking forward to: reviewing the day during my evening commute, learning something difficult for 90 minutes every other evening, and building my concentration skills during my morning commute.

I was shocked when I read this: "You say your day is already full to overflowing. How? You actually spend in earning your livelihood--how much? Seven hours, on the average? And in actual sleep, seven? I will add two hours, and be generous. And I will defy you to account to me on the spur of the moment for the other eight hours."

Yikes! Where do those other eight hours go?

Mashing up feeds using Blogdigger

Yesterday I wrote about splicing a hundred local blogs together using Blogdigger Groups. But it also occurs to me that Blogdigger can be used to splice together any RSS feed, not just blogs. So you can splice together 2, 3, or 100 podcasts. You could splice together the feed from all the TODO comments in your source code with the latest Slashdot headlines. You could splice together Flickr photos of chocolate with photos of peanut butter. The mashup possibilities are endless.

Assembling a list of local bloggers, spending several hours in the process

To see what Victoria bloggers are writing now, click here (old site). Then come on back for the why and how.

I wanted a complete list of bloggers in my city (Victoria BC). Not only that, I wanted a real-time display of what everybody in this town was writing. I found a great service called Blogdigger Groups that lets me combine several blogs into a single webpage. All I had to do now was to find all the bloggers in my city.

It took me several hours just to scratch the surface.

Some of the sources I used to find local blogs were: GeoURL, Blogger, and a good ol' fashioned Google search. And of course you have to check out the people on the blogrolls in case they live here too. Sigh. And I stopped short of adding Xanga blogs (456 Victoria blogs to plow through -- many by people in their early teens).

Anyway, the final result is here: a webpage combining the feeds of 109 Victoria bloggers. Also available as a feed, or if you want to import all 109 (!) blogs into your aggregator, an OPML file. Anyone is free to add or remove blogs using the Edit link.

I'm looking forward to connecting with the bloggers in my town!

Saturday, April 23, 2005

Blog Mashups (and note for Victoria bloggers)

The idea: Combine your blog posts with those of your friends (or professional contacts, with their permission) into an ad-hoc group blog. The various bloggers don't have to use the same system -- the only requirement is that they provide an RSS feed. RSS is the common denominator that will make it easy to combine the content. Thank goodness for RSS!

Why I'm thinking this: We recently had a meeting of bloggers in Victoria BC, and were brainstorming ideas about what sort of web presence our group would have. And we didn't want to add any work to our lives. The thought struck me: How about a webpage featuring the latest entries (or excerpts) from the blogs of each member? Readers could click the links to go to the originating blog. Victoria Bloggerati -- whaddya think? Maybe I'll mock up a working prototype to show you what I'm thinking.

Update: Just thought of an easier way to do this using Technorati tags. Anyone who wants to be considered a Victoria blogger and added to the group blog could simply add the following invisible tag to their blog post template: <a href="http://technorati.com/tag/victoriabc" rel="tag"></a> Our combined blog would then be at http://www.technorati.com/tag/victoriabc

Update 2: Another interesting way to get your blog on the map is to add GeoURL tags to your blog template. Here are some blogs near me.

Friday, April 22, 2005

Gmail as your private del.icio.us (and alternative to Furl)

Suppose there's a webpage that you want to save, but it's a private matter (e.g. medical) and you don't want to put it on del.icio.us. It turns out that you can simply select everything on the page and paste it directly into Gmail, all without leaving your browser. Gmail has rich text editing, so all the colours, fonts and images are preserved! No need to break out Microsoft Word -- this shows that we are moving closer to a bona fide Web OS.

(You don't have to enter an email address -- just hit Save Draft.)

If you want a Gmail invite, let me know.

Monday, April 18, 2005

Using Colour To Highlight Your Key Points

I sometimes use red text to help the reader quickly find the salient points in my blog posts. It's something I saw in Edward Tufte's beautiful books on information visualization.

I've been noticing a recent trend of late is to use a bit of background highlighting. I just saw it again on Garrett Dimon's now popular post on presenting the customer with alternative design choices. It's a bit hard to see, but it's certainly a good thing. Although I still prefer good ol' red text.

Index Cards: Programmer's Best Friend

I seem to have started a little trend at work. I've been using index cards to write down my tasks (1 task per card) so I won't worry about forgetting to do them. Turns out that when you are writing a computer program you can have dozens of these things scattered about your desk.

Well, the idea caught on, and now three of my neighbours are using 'em. One of them likes to tear up a card after completing it; another likes to colour-code his by project. We're not using them as CRC cards or anything fancy like that. We're just writing one to-do per card. Jotting your thoughts down frees up your mind to concentrate on the work at hand, instead of being nagged by outstanding to-do's.

You can tell I'm a big fan of the Getting Things Done (GTD) methodology for personal organization, and its ideal of mind like water.

Online Line Shuffler

I have written a tiny web application that will let you paste in a bunch of lines of text and hit a button, and it will shuffle the lines for you.

It's trivial really; and yet it's a nice timesaver, obviating the need to break out that Perl one-liner that you keep having to Google for.

Tiny tools like this one -- it's a step in the right direction toward the ideal of the URL command line. I wonder if we could somehow expose many of the Unix text tools as tiny web apps. Of course, we'd need a way to pipe the output of one command into another . . .

Sunday, April 17, 2005

Yeah! Another GTD weekly review complete

Finished another GTD personal weekly review. Celebrate with me! Yee-haw!

Bloglines Splicer -- An Improvement On Bloglines Shuffler

I have created a new and improved web application called the Bloglines Splicer that arranges your unread feed items in a new way: the first item is shown for each feed, then the second item is shown for each feed, then the third for each feed, and so forth. This way, your feedreading is distributed evenly among all your feeds -- a great help if you are under time constraints (imposed by yourself or by your circumstances).

Contrast this with Bloglines' default alphabetical sort (which favours feeds named with the early letters A, B, C, ...) or its Sort By Number Unread (which favours the larger feeds). With the Bloglines Splicer, you can walk away from the computer at any time knowing that you have reviewed all of the feeds to the best of your ability, given the time constraints.

For example, suppose Slashdot has 5 unread items, Populicious has 20 unread items, and CNet has 10 unread items. The Bloglines Splicer will present the items to you in the following order: S P C S P C S P C S P C S P C P C P C P C P C P C P P P P P P P P P P.

So head on over to the Bloglines Splicer and try it out!


Notes:
  • Yesterday's attempt, the Bloglines Shuffler, favours feeds with more unread items because it simply shuffles the items and presents them to you. In contrast, the Bloglines Splicer does not have this bias -- it gives equal preference to each feed.
  • Clicking the "Mark All As Read" link will tell Bloglines to mark all items as read, even items that have arrived after Bloglines Splicer has generated its results. So if you are concerned about missing items that arrive while you are reading the results, be sure to click it before you read rather than after (right-click and pick Open In New Window, so you won't lose the current results). On the other hand, if you're like me and don't care about missing a few items, you can happily ignore this.

Saturday, April 16, 2005

Bloglines Shuffler: A New Way To Read Your Feeds

I have written a simple web application called the Bloglines Shuffler, which presents a shuffled view of the unread items in your Bloglines feeds. It does not mark your items as read, so it is completely safe to try.

Update: I have made a better web application called Bloglines Splicer -- better because it does not favour feeds with more unread items; rather, it treats all feeds equally. Check it out!


Why shuffle my feeds? If you use an RSS reader like Bloglines to track dozens or hundreds of feeds, you probably come home to hundreds (or thousands) of unread items each night. The hours you spend catching up on your feeds may be taking valuable time away from your family and important personal projects. You may have thought about setting a time limit, but doing so would mean that certain important feeds would almost never get checked. By shuffling the unread items, you have a statistically unbiased way to read as many items as you can, within whatever time limit you have set for yourself.

Try the Bloglines Shuffler

Read the eruby source code

To Dos:
  • Add "Unsubscribe" links for each feed
  • Add "Mark All As Read" button

Friday, April 15, 2005

My First Web Host: TextDriven

I've been programming thick-client apps since I was a kid, but now that the world is moving into the Web 2.0 era, I figure it's time for me to start writing web apps. So I've signed up for a nifty account with the TextDrive hosting service. Now I'll be able to share my programs with the world in the form of web apps, instead of making people download Ruby scripts onto their computer, together with a series of tedious instructions. I'm quite excited about making my own web apps! Yee-haw!

A cool thing about TextDrive is that your account comes with Ruby built in. So I'm not stuck with Perl (no disrespect to the Perl gurus). People say that TextDrive is a bit pricey. I just have the basic account ($12US/mo), which is just fine for me. From what I've read, I like to think of TextDrive as the Mercedes of web hosts, so I'm quite proud to be a TextDrive owner.

How I came to make the jump to signing up with a web hosting service. I've got this great idea for a web app called Bloglines Shuffler. Basically it will shuffle your RSS feed items. Robert Scoble used to read 1300+ feeds each night, consuming 5 hours in the process. And I've been finding that my nightly feedreading takes 2 hours. Well if we had a way to shuffle our RSS feed items, and we set a time limit for our feedreading, then we would have a statistically unbiased way to plow through as many feed items as we could, and we could stop at the end of the allotted time without guilt. What do you think, Robert?

Anyway, I'm looking forward to implementing this as a webapp on my TextDrive host (yee-haw!) tomorrow. Originally I was going to do the whole thing in JavaScript so I wouldn't need to have it hosted, but I ran into roadblock after roadblock -- e.g. to use XmlHttpRequest in Firefox I had to turn on UniversalBrowserAccess, but then I found out about Firefox's Same-Origin Policy preventing me from firing an XmlHttpRequest to Bloglines, and then I discovered that IE would let me do it, but would prompt you with a frightening warning ... sigh. So instead of subjecting you to all the pain, Jonny's going to do it proper and get it hosted.

Wednesday, April 13, 2005

2 kinds of del.icio.us users: taggers and describers

There are two kinds of del.icio.us posters: taggers and describers. The taggers enter tags for a link; the describers enter descriptions. Describers are lazy (I'm a describer) - we just highlight an important portion of the page then click the del.icio.us bookmarklet to post to del.icio.us and fill in the description, all in one go.

I salute the taggers -- theirs is a more involved task. They must think for a second about 2, 3, or 4 tags that are relevant to the post. Their work is ultimately more helpful for others.

You know, Yahoo's beta Y!Q term-extraction web service can help us describers here. This web service can extract the most important terms from a block of text (in our case, the description we selected). del.icio.us could have a button called AutoTag that would use this service to fill in tags by extracting them from the description. (Maybe someone could write a GreaseMonkey script to do this? LazyWeb, I invoke thee!).

On the flip side, the del.icio.us/popular RSS feed could sure use our descriptions. Currently it just gives a list of bare links. How nice it would be if it showed descriptions provided by us describers.

Of course, if you are both a tagger and a describer, then you are a tagscriber.

Meetup.com charging $20 a month?


Meetup.com, the website that brought like-minded people together in the same city, is now majorly sucking by charging each group 20 bucks a month to continue using the service. Two-hundred smackers a year? Yeah right!

I vote that we switch over to Upcoming.org, which "is, and always will be, free." Go Upcoming Go!

(Note to Todd Brill (Victoria Bloggerati meetup organizer) -- if you decide to move us to Upcoming, you might want to leave a note behind on Meetup.com saying where we've moved to!)

Saturday, April 09, 2005

GTD Weekly Review Complete! Oh Yeah!

Hooray! I have completed yet another Getting Things Done weekly review! [dance]. Wasn't too painful - I think it was 2-3 hours (with sporadic surfing mixed in). I'd like to time these things in the future.

BTW Getting Things Done is the time management system that generated a lot of buzz in the blogosphere last year. It's all about getting all your stuff out of your mind and onto written lists, and reviewing those lists on a weekly basis (the more frequent the better).

Treemap To Visualize Memory Usage: Panopticon (Windows Freeware)

This is something I've always wanted. It's a Windows freeware product called Panopticon Explorer for visualizing your computer's memory and CPU usage in the form of a treemap. In the screenshot below, the larger the box, the more memory being consumed by the process; and the redder the box, the more CPU resources it is using (it's updated in real time).



Note that Panopticon Explorer can also be used to display a treemap of your hard drive, but I do not recommend using it to scan your whole hard drive. It is an alpha release and takes forever if you scan your whole C: drive -- performance is fine for visualizing small- to medium-sized directory trees however. And of course, it's great for visualizing your computer's memory, as shown above.

Markus Skyttner tells me that the memory problems will be fixed before they officially release the software in the summer.

Friday, April 08, 2005

Can't find a guru blog? Then make one up.

Don't you hate it when you want a blog on a certain topic, something to give you daily insights, motivation, and inspiration to continue pursuing that area of interest, but no such blog exists? Either the experts and the gurus have chosen not to blog or are unaware of what blogging is. Bottom line is, you're stuck without a blog on your favourite topic X, and there's nothing you can do about it.

No. There is something you can do about it. Pretend to be a guru in this topic and start a blog on it.

It's perfectly legitimate. You don't have to lie, saying that you have X number of books when you really don't. But there's nothing wrong with writing confidently, with writing authoritatively, despite not being a recognized authority. My violin teacher once told me, "If you want to play really well, just pretend you are a professional. Imagine that you are one of the best violin players in the world. And you will immediately play better." My thesis is that by writing with the authority of a recognized guru, the "missing" blog you are seeking will appear on the net ... and it will come from your hands.

For example, I am trying footbag (hacky sack) for regular exercise, and I so wish that someone -- a good footbag player -- had a blog that I could turn to daily for inspiration and motivation and tips. But a Google search for "footbag blog" reveals nothing. I suppose I could do nothing but sulk. Or I could start the world's first footbag blog, written with the forcefulness and conviction of an expert, while being an honest expression of my novice attempts at this sport. Nobody's made a footbag blog and somebody's gotta do it!

The hope is that pretending will evolve into becoming -- by pretending to be an expert for a while, you eventually become an expert, by osmosis. Aren't experts human like us? Then are we not human like experts?
Far better it is to dare mighty things, to win glorious triumphs even though checkered by failure, than to rank among those timid souls who neither enjoy nor suffer much, because they live in the gray twilight that knows neither victory nor defeat. (Theodore Roosevelt)
* * *

As a child I would pretend I was narrating my imaginary basketball training video -- describing and demonstrating various techniques for slam dunks, passing, dribbling, shooting. That is the sort of imagination required to do a guru blog.

Rapid code comprehension using a text editor + a simple find tool

Today I was asked to spend a couple of hours to understand the source code for a legacy project. I didn't have much time so I decided not to set up the source tree in my IDE (despite the coolness of the Eclipse Creole visualization plug-in, which currently is not working for me for some reason).

At first I tried using a treemap tool to visualize the source files by their sizes (Panopticon has asked me to evaluate their treemap disk viewer -- pretty slick in some places, but pretty rough in others). This is always an interesting exercise.

But all these fancy visualization tools didn't provide me with nearly the same bang-for-your-buck as that tried and tested method of simply reading the source code in a good text editor. Actually the main requirement of the text editor for this purpose is being able to find things quickly. My favourite editor (XEmacs) has incremental find, and it works great.

Besides a text editor with good searching capability, you'll also need a tool to find files by (1) name and (2) content. I just used Windows Find for this purpose. It has two text boxes: one for finding by filename, and one for finding words within a file. Surprisingly, this simple technique felt a *lot* like using Eclipse's treasured Browse Types By Name and Find References functions -- maybe not as accurate, but you don't need accuracy when doing quick code comprehension.

In summary, rapid code comprehension can be achieved with two tools: any text editor with a good Find function, and any tool for finding files by name or by content (the stock Windows Find will suffice). You get the IDE-like flow, with zero setup. Surprisingly it can be a more effective approach for code comprehension than fancy graphical tools.

Sometimes it's the simple ideas that get the most mileage.

Wednesday, April 06, 2005

Audiolicious: Turn Any RSS Feed Into A Podcast, Using Text-To-Speech

>>> Download audiolicious-1.1.zip (1.3 MB) <<<

Audiolicious is a Windows program that lets you turn any RSS feed into a podcast. It uses text-to-speech to convert the feed's webpages into MP3 files.

Listen to some sample textcasts:
Audiolicious works especially well with RSS feeds created using the del.icio.us bookmarking website -- just tag a web page using del.icio.us to add it to the Audiolicious job queue.


Instructions:
  1. Unzip the Audiolicious zipfile to a directory on your computer.
  2. Install Ruby.
  3. Install the Microsoft Speech API.
  4. Install the Microsoft Mary voice.
  5. Test Audiolicious by running audiolicious.bat. The MP3's will appear in the output directory.
  6. Configure Audiolicious by opening audiolicious.rb in your favourite text editor and changing the rss_feed and output_dir.
  7. Setup up audiolicious.bat to run daily using Windows Scheduler.

How this came about. Like many others, I have been disappointed with the quality of the content of today's podcasts (to be fair, podcasting is still in its early days), especially with so much good textual content on the web. For example, I wished that there was a podcast of biographies of great lives -- after all, there are numerous websites on the subject. Then it struck me: What if I used text-to-speech to convert these textual webpages to podcasts that I could listen to during my daily commute? Thus Audiolicious was born.

I love how Google understates new features

Well the blogosphere is abuzz with Google Maps' seamless ability to flip back and forth between Map View and Satellite View. (Pity the satellite maps aren't detailed for my Canadian hometown).

What strikes me is how Google understates new features. They might have the most amazing, cool, dazzling new feature (like this one), but all they have is a little link off to the side. When they get particularly excited about something, they might say "New!" in red:



Of course Google is fully aware that they are totally awesome.

Idea: "Textpodder" -- A GUI for Textcasting

Update: I have written a Windows program called Audiolicious that lets you turn any RSS feed into a podcast. You'll find it over here.


Note: I have not implemented this GUI yet. It's just an idea I have: Textpodder. Like iPodder did for podcasting, Textpodder would be a GUI that would let you add RSS feeds to convert to podcasts, but using text-to-speech. You could subscribe to different blogs, and each one would get their posts converted to MP3s and placed in the appropriate directory. Just like iPodder, but for text.

The blogosphere has heard complaints about the quality of podcast content being quite poor, compared to the written word on the web. Textcasting nicely solves this by combining the quality of textual content with the convenience of mobile audio, thanks to the magic of text-to-speech.

It's a neat idea. Bloggers who are hopeless verbal communicators, but fantastic writers -- authors who hadn't originally intended their writings to be read aloud -- unwittingly become instant podcasters through textcasting.

And who makes the textcasts? The author (push)? The end-user (pull)? A third party? These are all interesting modalities.

TTScasting? Blogcasting? Autopodcasting?

The blogosphere needs a good name for the use of Text-To-Speech (TTS) to automatically generate podcasts from the links in RSS feeds.

Some ideas I have are: "TTScasting", "podblogging", "autopodcasting", "blogcasting", "textpodding", "textcasting". I'm partial to "blogcasting", but there is a danger that it could be confused with regular "blogging". And "TTScasting" is just too geeky to ever be accepted by the mainstream.

Preview: Audiolicious: Turn Any RSS Feed Into A Podcast Using Text-To-Speech

It's late (1:14 AM), and I'm not quite ready to release the binaries yet until I do some more testing, but I want to give my technically-minded readers a peek at an open-source program called Audiolicious that I will be releasing tomorrow or the day after.

Basically it will let you turn any RSS feed into a podcast. It will download the links mentioned in the RSS feed and generate MP3 files from those webpages, using text-to-speech. Unfortunately it's Windows-only (sorry Linux-heads).

The source code is below. If anything, it shows the beautiful concision of Ruby -- it accomplishes a lot in a mere 62 lines of code:

$rss_feed = "http://del.icio.us/rss/JonathanAquino/read-review-mobile"
$output_dir = "output"

require 'net/http'
require 'uri'

# The code for #fetch is from http.rb. It follows redirection e.g. if
# you leave off the trailing slash in the URL of a del.icio.us RSS
# feed. [Jon Aquino 2005-04-05]
def fetch( uri_str, limit = 10 )
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
else
response.error!
end
end

def get(url)
fetch(url).body
end

def text(url)
text = get(url).gsub(/[\r\n\t]/, " ")
if text =~ /<body>(.*)<\/body>/i
text = $1
end
text.gsub(/<script[^<]+<\/script>/i, " ").gsub(/<[^>]+>/, " ").gsub(/[^A-Za-z0-9 ][^A-Za-z0-9 ][^A-Za-z0-9 ]+/, " ").gsub(/ +/, " ")
end

def create_mp3_proper(text, filename)
sentences = text.split(". ").collect {|sentence| sentence+"."}
i = 0
sentences.each { |sentence|
i += 1
puts("#{i}/#{sentences.size}: #{sentence}")
File.open("TextToWave/TextToWave.txt", "w") { |file| file.print(sentence) }
system("cscript TextToWave\\TextToWave.vbs TextToWave\\TextToWave.txt")
system("lame-3.96.1\\lame -b 32 TextToWave\\TextToWave.wav TextToWave\\TextToWave.mp3")
system("copy /B \"#{filename}\"+TextToWave\\TextToWave.mp3 \"#{filename}\"")
}
end

def create_mp3(title, url)
create_mp3_proper(text(url), "#{$output_dir}\\#{title}.mp3")
end

def clean_title(title)
title.gsub(/[^A-Za-z0-9]/, " ").gsub(/ +/, " ")[0..40]
end

File.open("audiolicious.txt", "w") {} if not FileTest::exist?("audiolicious.txt")
old_urls = File.readlines("audiolicious.txt").each {|line|line.strip!}

require "rexml/document"
include REXML
doc = Document.new(get($rss_feed))
XPath.each(doc, "//item") { |element|
begin
url = element.elements["link"].text
if old_urls.include?(url) then
puts "Skipping #{url}"
next
end
puts url
create_mp3(clean_title(element.elements["title"].text), url)
File.open("audiolicious.txt", "a") { |file| file.puts(url) }
rescue => e
puts "Exception: #{e.class}: #{e.message}\n\t#{e.backtrace.join("\n\t")}"
end
}

Lifehack: Get a Good Sleep

Yesterday for the first time in 6 months I deliberately chose to wind down the day in a relaxing way, followed by a generous sleep. And today I am noticing immediate benefits.

- Heightened awareness. For the first time I noticed the shape of the wind chimes outside our kitchen window. (They look like potato chips).
- Increased productivity. Today I completed 10 change requests at work, which is above average.
- Better judgement. I decided to sit longer with my mother at dinner, rather than rushing off to the internet.

A leisurely evening and a good sleep -- I highly recommend it to all.



Update: Of course I totally do the opposite by staying up late to write Audiolicious, an automatic podcast generator that uses text-to-speech. Must go to bed now.

Monday, April 04, 2005

Gmail's HTML Rich Editing Is Simply Amazing

Gmail's new HTML editor rocks! Below I have cut-and-pasted HTML directly from one tab to another -- note how the colours stay intact. These are some current movie reviews that I am printing out for my mom. I was originally going to shell out to Microsoft Word, but I thought, Hey, we're living on the horizon of Web 2.0 right? Maybe I can do this entirely in the browser. And as it turns out, I could.

(If anyone still needs a Gmail invite, I've got 50 to give out)

The Blog Is The Social Network

Over the past year we have seen a variety of Social Networking Services come and go: Orkut, Friendster, SecondLife, LinkedIn, and most recently Yahoo 360, and it too shall pass.

And yet throughout all of this, people have been communicating and forming communities and social networks, but not through Social Networking Services. People are leaving comments on each other's blogs; they've been back-and-forthing it between each other's blogs; and yes they turn to email for private discussions when necessary. A lot of social activity is going on, and it's not on the SNS's.

It's on blogs. The blog is the social network.

And why is this? Orkut, LinkedIn, Yahoo 360 -- these are all walled gardens. They provide value only to people within the walls. And even worse, chances are that the garden will stagnate and die -- when an SNS is terminated, nobody will benefit from the pearls of wisdom that you imparted.

Blogs (and let's not forget Usenet groups) are accessible to all. You don't need to sign up to participate in a discussion going on in a blog (well, some blogs enforce registration, to their detriment). Most people like helping other people, and we don't like our contributions to be locked up behind the walls of a registration-only service. We want our contributions to be available to the world.

Repeat the Web 2.0 mantra: small pieces, loosely joined.

Sunday, April 03, 2005

del.icio.us as the Universal Registry of the Web

Ah, the Registry - that sprawling repository of configuration parameters:



I was recently using del.icio.us to add a menu item to my Web OS Start Menu, when it struck me how I was essentially using del.icio.us as a web-interface for a desktop app. Could it be that del.icio.us is the "Windows Registry" of the self-assembling Web OS? Might it be that desktop applications in the near future will store their user configuration variables in del.icio.us?

For example, take a look at the Firefox registry (accessed by typing "about:config" in Firefox):



There are a lot of settings there, and if you have a copy of Firefox at home and another at work, it can be painful to keep the two in sync, manually.

But suppose this application stored these parameters on the web, in del.icio.us. Your browser at home and your browser at work would have their settings kept in sync, automatically.

Now how exactly would these settings be stored in del.icio.us? Isn't it a bookmarking service? Simple -- just do something like this:


URL: http://del.icio.us/tag/accessibility.typeaheadfind
tag: true

URL: http://del.icio.us/tag/accessibility.typeaheadfind.flashBar
tag: 0

URL: http://del.icio.us/tag/adblock.observer
tag: *


The next question is, Why? Why would I want to have a Universal Registry that stores all of my configuration parameters? What about issues of privacy, security, reliability? I don't have the answers to all of these questions. I have showed one advantage, which is keeping desktop applications in sync. And I am sure that other important advantages will surface as we think through this idea more.

But one thing is for certain: personal computing is moving from the desktop onto the web, and this is a paradigm shift with implications that are difficult to foresee -- just as we could not have predicted 10 years ago the influence of the web today.

Podblogging, or using TTS to create a podcast

I recently read an article by a Darren Barefoot complaining about the quality of the material on podcasts compared to blogs. And just today I was thinking how nice it would be to have a podcast of daily biographies of great people, and how this sort of material is probably available on the web in written form only.

Well perhaps text-to-speech (TTS) can help us to bridge the gap between the high quality of textual material on the web and the convenience of listening to audio on a portable device. What if we used TTS to convert the webpages we want to track into audio files we can listen to during the commute? Input: text, output: audio. Shall we call it "podblogging"?



Update: I have cobbled together a primitive podblogging system, and the results are fantastic! Basically, whenever I see a webpage that I want to review later, I tag it using del.icio.us. My podblogging system then converts it into an MP3 file and downloads it to my PDA. I've uploaded a sample to OurMedia that will hopefully be processed soon so you can listen to the results (the page being read is http://linuxjournal.com/article/8217).

Effective immediately I am unsubscribing to all my podcasts and listening exclusively to podblogs!


Update 2: I have released an open-source Windows program called Audiolicious that converts any RSS feed into a podcast, using text-to-speech. Hopefully this will help to bring podblogging (or "textcasting") to the masses.



This proof-of-concept system that I have assembled is a pretty complicated bit of geekery, but it's still cool to know that it can be done. I'm using a bunch of free programs:

  • lynx -dump to convert from HTML to plain text
  • pyTTS to convert from text to wav
  • Lame to convert from wav to mp3
  • MobSync to move the mp3s onto my Pocket PC
If anyone wants a hint on making their own podblogging system, here are the scripts I use. Not too polished or portable I'm afraid, but it might give you some ideas that you can take away.




----- delicious-audio.bat -----
ruby delicious-audio.rb



----- delicious-audio.rb -----
class Array
def my_shuffle!
size .downto 1 do |n| push delete_at rand(n) end
self
end
end
Dir['c:/Documents and Settings/Jon/My Documents/X30 Storage Card/Delicious/Audio/*.mp3'].each { |file|
File.delete(file)
}
Dir['c:/Documents and Settings/Jon/My Documents/X30 Storage Card/Delicious/*.html'].my_shuffle![0..4].each { |file|
file.gsub!("/", "\\")
system("copy \"#{file}\" delicious-audio-1.html")
system("lynx -dump -nolist delicious-audio-1.html > delicious-audio-2.html")
system("txt2mp3.bat delicious-audio-2.html \"#{file.gsub('.html', '.mp3').gsub('\\Delicious\\', '\\Delicious\\Audio\\')}\"")
}



----- txt2mp3.bat -----
@c:\python23\python txt2mp3.py %1 %2



----- txt2mp3.py -----
import pyTTS, re, os, sys
input_file = sys.argv[1]
output_file = sys.argv[2]
tts = pyTTS.Create()
tts.SetVoiceByName('MSMary')
file = open(input_file, 'r')
text = file.read()
file.close()
text = re.sub(r"[\n\t]", " ", text)
text = re.sub(r"\[[^\]]+]", " ", text)
text = re.sub(r" +", " ", text)
sentences = text.split(". ")
i = 0
# Set output_file file to 0-length [Jon Aquino 2005-04-03]
file = open(output_file, "w")
file.close()
for sentence in sentences:
sentence = sentence.strip()+"."
i = i + 1
print str(i)+"/"+str(len(sentences))+": "+sentence
tts.SpeakToWave('tts.wav', sentence)
os.system("lame --quiet -b 32 tts.wav tts.mp3")
os.system('copy /B "'+output_file+'"+tts.mp3 "'+output_file+'"')

Saturday, April 02, 2005

A simpler way to identify your interests: Go through the Yellow Pages index

I've talked about a couple of approaches to identifying your interests in an automated way using computer scripts and data on the web.

Well today I came across a low-tech approach to identifying your interests that is also effective: simply go through your Yellow Pages index from Z to A and circle categories that interest you.

Simple, isn't it?

(Credit for that tip goes to Richard Bolles).

The Yellow Pages in my city (Victoria BC Canada) is 12 pages of small print, so it isn't going to take very long. Here's the beginning of my list:
Writers, Wireless Phones, Web Design / Development, Weather Forecast Service, Universities, Tracking Systems, Time Management, Theatrical Makeup, Costume & Design, Theatrical Equipment & Supplies, . . .
It's a really fun exercise and you can learn something about yourself. I recommend that you try it!

Spacemonger: Your Hard Disk Represented as a Treemap

While we're on the subject of treemaps, I want to let everyone know about Spacemonger (freeware for Windows), which is a nice visualization of your hard disk using a treemap. It shows you at a glance what big files or directories are eating up the space on your hard drive. Great when you're doing some spring cleaning.

A few days ago I had 3 MB left on my hard disk, and here's why:

Why oh why did Google not acquire Flickr?

Why oh why did Google not acquire Flickr? The two were made for each other. Here we have Google building the Google OS, and they did not incorporate into their vision only the best online photo-sharing application ever (not to mention one of the few social networking apps that actually works for a change).

They also missed out on Bloglines, which is a killer app for the Web 2.0.

Google has only one chance left, and they had better not waste it. Take it from me Google: Acquire del.icio.us.

Yahoo vs. Google: Rebuttal to Ben Hammersley

Ben Hammersley has written a curious article that is decidedly in favour of Yahoo over Google:
Unlike Google, Yahoo publishes its papers, names its researchers and says what it is up to. One-nil to Yahoo.
..........
Yahoo's own API is out, and it's better. It has more features, it's more complete, it's technically more elegant, and it's easier to use than Google's alternative. Two-nil to Yahoo.
..........
Yahoo must be indexing the web for data called RDF - a highly advanced, potentially powerful technology that Google has said it isn't going to touch. Three-nil to Yahoo.

Yahoo isn't just back in the game - it's winning. How weird is that?
It's very weird. Ben's conclusion is so weird in fact that, as his intuition tells him, it is incorrect. Ben obviously does not use Gmail on a regular basis. If he did, he would know that Google is winning the game, and they are winning because the quality of their services beats the competition.

You remarked that "Last month's launch of Google Maps was impressive, but not as cool as Yahoo's placing of live traffic conditions on its map this month." (Funny, I heard nary a peep on the blogosphere about Yahoo's traffic maps. Anyway...) Google Maps are amazingly responsive. You can grab hold of the map and move it around to see what you want to see. Very slick. Yahoo Maps uses older, slower technology (page refreshes). One-three to Google for the excellent user experience.

"Yahoo's blogging tool, Yahoo 360, launches this month, allegedly fully integrated with the rest of the content they produce." Have you tried Yahoo 360? It's really quite basic compared to Google's mature offering, Blogger. It simply cannot be customized, certainly not to the extent of Blogger templates, with which some of the world's top graphic designers have created beautiful examples. Two-three to Google.

(As for integration, isn't Web 2.0 about small pieces, loosely joined?)

And finally, Gmail. Yes "Yahoo mail users can have a gigabyte too" as of last week. But Gmail is not about the space. It's about the user interface: tags, 1-line previews of each email, display of all emails in a thread, and one of my favourites: "Undo Discard" which lets you retrieve the email you just cancelled. Unlike Yahoo Mail, Gmail is continually being enhanced with new features (just this week we got rich text editing). And as for space, Gmail just upped its limit to 2 GB. Three-three to Google for a web application that is equal to, nay, better than its desktop counterpart.

Ben, if you (or anyone else) want a Gmail invite, send me an email! I've got 50 to give out.

Friday, April 01, 2005

Foxylicious as the Start Menu of the Web

I recently wrote about Gmail as the Notepad of the Web. Well today I discovered another component of the self-assembling Web OS: the Start button, made possible by del.icio.us and the Foxylicious (Firefox+del.icio.us) Firefox extension. (If you don't already know, del.icio.us is a wonderful web-based bookmark manager).

We are all familiar with the Windows Start menu:



It turns out that if we create a Firefox folder called "start" in our Bookmarks Toolbar Folder which we then drag into the main Toolbar, we arrive at something very like the Windows Start menu:



If we now use the Firefox Foxylicious extension to sync this folder with our del.icio.us bookmarks, we now have a Start menu for the Web 2.0 era. The effect is especially striking if you have a "Programs" tag containing the applications that you use most often:



The Web OS is coming together indeed. We have our Notepad. We have our Start Menu. Email client. Usenet newsreader. Photo organizer. RSS reader. Word processor. Registry. Hard disk. What's the next desktop application to move onto the web?

Yahoo360: Monolithic app vs. small pieces loosely joined

I don't know about Yahoo 360. It seems like a monolithic, kitchen-sink app (and not a great sink either.

Portals are so 1999. Isn't Web 2.0 about small pieces, loosely joined?


(Still, if you want a Yahoo 360 invite, let me know - I've got around 80 left)