Sauce Reader

Weird name, but Sauce Reader is a new News Aggregator client for Windows.  It's free for personal use.  Hmm.  I don't think free for personal use leaves much room for profit.  I mean how many businesses classify news reading as legit business activity?  If businesses allow employees to read news online during work hours, is that business use?  How many companies will actually buy news aggregators for its employees?

Boy, I am getting tired of seeing these three-pane UIs.

Telephony XML

Many years ago, I built a voice-based web browser for a client when only other competition was Unwired Planet (now called OpenWave) founded by Alain Rossman whom I worked with at Radius.  Interestingly enough, they were both based in Redwood Shores, situated across a lagoon from each other, the same lagoon that passes by my house.  One time I even visited my client in a canoe.  Now that's the kind of commute I can enjoy.

While Unwired Planet was focused on using the tiny display and the dialpad and ended up with WAP, my client wanted to use all aspects of the phone including speech recognition and generation (aka Text-To-Speech).  There was nothing like it so I put together what can best be described as VoiceXML 0.0 and built some PIM-like applications for executives on the go.

It was a fun project and having to call myself hundreds of times a day was an 'interesting' experience.  The company then ran out of funding and that was the end of it although patents were snapped up.  Last time I heard, Moses Ma bought the dialpad-based browser navigation patent.

After all these years, I am now doing some VoiceXML/CCXML development again.  It's a weird feeling seeing what I was working on matured, implemented and available widely.  VoiceXML 2.0 is W3C recommendation and CCXML 1.0 is close to completion.  There are many VoiceXML vendors and hosting services like Voxeo even offer free developer accounts to build and test telephony applications.  All this is so much easier than having to build everything myself.

Still, there are many irksome aspects of VoiceXML and CCXML that leads me to think the spec was developed without the benefit of advices from experienced XML gurus.  For example, CCXML has many attributes whose values are expected to be ECMAScript (aka Javascript) fragments which leads to some awkward XML expressions like this:

<assign name="state0" expr="'calling'" />

Note the single quotes inside double quotes.  As to why the CCXML WG didn't add an alternate attribute named 'value', I am clueless.  What's even more weird is that attribute names provide no hint on whether the value is suppose to be script fragment or textual value.  I would have postfixed '_expr' or prefixed 'j' to names of attributes whose value is script fragment.

While I am tempted to fix what's wrong with CCXML before it's finalized, I already have my hands full so this general advice will have to do:

There is more to XML than meets the eye.  If you are defining a new XML-based language, you really need to consult some XML gurus to avoid making silly mistakes like these and to avoid pitfalls.

If you don't know any, let me know and I'll recommend a few.

Microsoft Open Sources WTL

Microsoft is finally open sourcing WTL (Windows Template Library) at SourceForge.net.  WTL is popular among Win32 C++ programmers for building lightweight applications and extensions such as IE plugins or ActiveX, but it was never supported officially and managed to limp ahead through individual efforts of the ATL team members.

The version in the CVS seems to be an alpha 7.5.  If you need a stable version, download version 7.1 from Microsoft.

Art of Another Kind

I think Halle Berry is sexy, particularly her face, voice, and, er, you know what.  But I didn't think her nose was that particularly good looking until I saw her Catwoman photos like the one above.  Isn't it amazing how hiding the nose under the mask changes her overall look?  She doesn't look like Halle Berry at all.  Even her you know what looks less attractive.  Weird.

I filed this post under Technical category for obvious reasons.

Art of Assembly

While my first program was written in Basic, a simple game typed onto a neat roll of yellow paper tape during lunch hour, my first program as an engineer was written in assembly.  I still have nostalgia for the assembly language and it's ability to squeeze amazing performance out of even whimpy computers.  While the popularity of assembly language has dimished much over the years, you can still enjoy it and might even find good excuses to use it again.

Check out the Art of Assembly Language Programming and HLA (High-Level Assembly) site.  There you can find the latest version of the classic Art of Assembly book and assembly language tools/libraries.

Phishmark Patent

I found out last Friday that the Phishmark idea is likely to be covered by a patent filed by PassMark two years ago.  Although I haven't read their patent application yet, discussion with Louie Gasparini, CTO of PassMark, made it clear that the broad languages used in the patent covers not just use of user/site specific visuals on the webpages for website authenticity, but also use of user/device-specific visuals in client-software for verification of UI authenticity.

Since I never planned to patent Phishmark and have many other ideas to pursue, I am not planning to disputing PassMark's patent.  If you have planned to use Phishmark in your product already, I advise you to talk to PassMark.  I am sorry if this turn of event affects your product.  As for me, I'll have to credit one of my clients for the hours I spent implementing it.

Does this upset me?  Not really.  Anyone can have ideas and I have more fair share of them.  Execution is important too but I care more about people and how ideas affect their lives.  Phishmark was a good idea, but someone else had a similar idea and had the courage to follow through.  Yes, the situation is rather awkward, but not uncommon.

As they say, if your pants are uncomfortable, keep walking.

Turning News Aggregators into News Distributors

Although I travel in the wide open realm of ideas, I am not into impractical ideas no matter how attractive they may be.  My excuse for wasting my time with impractical ideas is that they tend to be stepstones to practical ones.  Anyhow, here is one I thought could be of immediate use to the blogosphere.

The idea is to turn all those news aggregator clients out there into news distributors.  So all the RSS files I download every morning is also made available to others.  Whether sharing of RSS files and resources is done through a variation of BitTorrents, blogosphere-specific P2P network, or existing P2P networks is irrelevant as long as the sharing is done by those who can.

I know this is probably not a new idea, but I am peddling it here because I believe this must be done if blogosphere is to continue growing.  At some point, distribution of load across news aggregators must be discussed but that's a post topic for the future.  For now, enthusiasm for something new is enough to power this effort.

Filelist and Wishlist

My recent burst of interest in P2P networks stems from the idea of sharing wishlists which I mentioned in my comment about CleverCactus Share.  Diego expressed some enthusiasm about the idea so there is a good chance it will appear in ClearCactus Share.

But my mind is already leaping forward exploring generalizations and mutations of the basic idea of sharing and seemlessly integrating the capability into the operating system.  To power this exploration, I am asking questions like:

  • What is a file?
  • What does it mean to share?
  • How can I share something without having it?
  • How can I share nameless, locationless, temporary, and formless objects?
  • What if everything is shared by default?
  • What if bots are loosened into the shared space?

Many of the answers seem to point to a need to review some basic assumptions pounded into us by file systems and databases like names, locations, queries, etc.

If you drag a file from here to there, people expect the object to move from here to there and also expect the operation to take some time.

If the object is a wish, meaning it will arrive sometime in the future, dragging it from here to there could mean it should be moved there when it arrives.  That's like an instruction.  But people usually don't give instructions to empty air.  Is it better to introduce a bot-like objects or should future actions or 'promises' be turned into an object?

There is also the problem of having too many P2P networks.  They can be abstracted or hidden behind other shapes and forms.  At that point, even services like eBay and Amazon can be thrown into the mesh.  An auction involves someone wanting to sell something they either own or can provide.  Drag and drop this from here to there and eventually a real-world object is 'downloaded' to someone's doorstep.  All this is nice except abstraction and usuability don't often walk hand-in-hand.

I know that I am overstepping the bounds of practicality in many areas, but overreaching is often useful when searching through the solution space.  Anyway, these are kind of things I occupy weekends with these days.

MLDonkey and BitTorrent

I was looking through MLDonkey wiki when I ran into this technical yet compact explanation of how BitTorrent protocol works.  I already know how BT works but I thought my fellow geeks might find this useful since the diagrams at the official BT site aren't that useful:

It [BitTorrent] divides shared data (a single file or a directory) into pieces, typically of 256 KiB. A SHA-1 checksum is computed for each piece, and used to check the piece has been correctly downloaded. The checksums are stored in a .torrent file, along with filenames. The .torrent file also nominates a tracker, a Web resource that introduces peers to each other. Peers contact each other, learn what pieces they have available, request the rarest (least commonly seen) pieces first, and send requested pieces.

Just in case you are wondering, MLDonkey is a universal client of sort for many P2P networks including FastTrack, eDonkey2000, Gnutella, and Direct Connect.  It supports BitTorrent too but then BitTorrent is not really a network.  While MLDonkey is open source, it's written in Ocaml which is powerful but non-mainstream.