<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>0xDECAFBAD - Tag: delicious</title>
    <link href="http://decafbad.com/blog/atom.xml" rel="self"/>
    <link href="http://decafbad.com/blog"/>
    <updated>2011-11-16T16:29:50+00:00</updated>
    <id></id>
    <author>
        <name></name>
        <email>l.m.orchard@pobox.com</email>
    </author>
    

    <entry>
        <title>Let a million bookmarks bloom</title>
        <link href="http://decafbad.com/blog/2010/12/19/let-a-million-bookmarks-bloom"/>
        <updated>2010-12-19T21:26:38+00:00</updated>
        <id>http://decafbad.com/blog/2010/12/19/let-a-million-bookmarks-bloom</id>
        <content type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Don't depend on Delicious; host your own, pay for it elsewhere, or hope for the best. Use real-time feeds to stitch the bookmarking diaspora back together into topical aggregate indexes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href=&quot;http://decafbad.com/blog/2010/12/18/less-del-icio-us-than-ever-before&quot;&gt;the last entry&lt;/a&gt;, I wrote about why my use of Delicious has dropped over time, and what I've been missing as a result. In short, I think there's place for something like Delicious, and I'd like to get back to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; See also, &quot;&lt;a href=&quot;http://uniquehazards.tumblr.com/post/2377362882/we-can-save-delicious-but-probably-not-in-the-way-you&quot;&gt;We can save Delicious, but probably not in the way you think&lt;/a&gt;&quot; from Stephen Hood, one of my former Delicious co-workers. He covers some more good angles I didn't get around to here.&lt;/p&gt;

&lt;h2&gt;Active thoughts&lt;/h2&gt;

&lt;p&gt;So, it's true &lt;a href=&quot;http://blog.delicious.com/&quot;&gt;Yahoo! announced&lt;/a&gt; that they're &quot;actively thinking about the future of Delicious&quot; and that &quot;we believe there is a home outside the company&quot;. But, none of that says they've found a home or that it will be easy to transplant if they do. In the meantime, there's a lot of uncertainty and probably only an overworked skeleton crew left onboard.&lt;/p&gt;

&lt;p&gt;Much of Delicious now depends on home-grown technology that is shared by many other Yahoo! properties. This should not be a surprise: Beyond the money, &lt;a href=&quot;http://mashable.com/2005/12/09/yahoo-acquires-delicious/&quot;&gt;that was kind of the point of selling to Yahoo! in particular&lt;/a&gt;. As a major search company in 2005, they presumably had the indexing mojo help scale it up. So, transferring the site to a new technology stack will definitely figure into the value proposition of anyone looking to take over Delicious.&lt;/p&gt;

&lt;p&gt;In short, any buyers of Delicious will have their hands full—probably more so than Yahoo! did when they first bought it. Don't hold your breath for a bright future.&lt;/p&gt;

&lt;h2&gt;Who cares?&lt;/h2&gt;

&lt;p&gt;What it comes down to this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If you use Delicious regularly, you care about your bookmarks.&lt;/li&gt;
&lt;li&gt;If you're part of an interest group, you care about their bookmarks and they about yours.&lt;/li&gt;
&lt;li&gt;If you're a random web surfer, you care about finding things relevant to your interests.&lt;/li&gt;
&lt;li&gt;If you're Yahoo!—well, I would have thought you cared about building a human-powered index of the web, but who knows where your collective heads are at these days.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The important thing is that no owners of Delicious will care in particular about #1 and #2—that is, your bookmarks and those of your colleagues. If they care about anything, it's the overall value of a well-indexed set of web resources to #3 and how they can monetize that.&lt;/p&gt;

&lt;p&gt;In other words: If they can't figure out how to monetize the aggregate index, &lt;a href=&quot;http://archiveteam.org/index.php?title=Why_Back_Up%3F&quot;&gt;don't expect them to start caring about your data&lt;/a&gt;. See also: &lt;a href=&quot;http://lifehacker.com/5697167/if-youre-not-paying-for-it-youre-the-product&quot;&gt;If you're not paying for it; you're the product&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;What now?&lt;/h2&gt;

&lt;p&gt;Find someone else to host your bookmarks, maybe you yourself. Think about helping move and/or hosting your colleagues' collections. In particular, look for someone whose motivations are aligned with your own—by way of either money or common interest.&lt;/p&gt;

&lt;p&gt;There are plenty of services stepping in to take over from Delicious. &lt;a href=&quot;http://pinboard.in/&quot;&gt;I like pinboard.in&lt;/a&gt;, because it's very close to the original Delicious, will capture links from other modern services, and it charges &lt;em&gt;you&lt;/em&gt; money for valuable features.&lt;/p&gt;

&lt;p&gt;There are also a few self-hosted substitutes, and there will more in the weeks to come. Some take these weekend projects as fodder to discount Delicious in general, but they're missing the point: The basic features of Delicious were never particularly complex—&lt;a href=&quot;http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone&quot;&gt;it's scaling those features up&lt;/a&gt; to web scale &lt;a href=&quot;http://notes.torrez.org/2010/12/learn-to-program-in-24-hours.html&quot;&gt;that's hard in a single service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But, you may not need web scale. Also, hosting is getting cheaper every day. Gamers host servers for themselves and their friends, so why not start thinking about hosting a social bookmarking server for interesting people by invite? If you don't have the technical chops yourself, you probably know someone who does.&lt;/p&gt;

&lt;p&gt;If this kerfluffle with Delicious does nothing else, it should really get us thinking about hosting our own stuff again. Cheap hosting is not just for startups.&lt;/p&gt;

&lt;h2&gt;And after that?&lt;/h2&gt;

&lt;p&gt;I'd love to see a million social bookmarking sites bloom, both as new public services and self-hosted sites for friends. What this diaspora would lack, though, is the awesomeness of seeing &lt;a href=&quot;http://www.delicious.com/tag/webdev&quot;&gt;everything tagged &quot;webdev&quot;&lt;/a&gt; and &lt;a href=&quot;http://www.delicious.com/url/1ab75a7ce698b75ba1d4ac5517772590&quot;&gt;who else bookmarks things you like&lt;/a&gt;. What made Delicious hard is what made it interesting, and it's possible that no one service will ever again reach a critical mass in social bookmarking.&lt;/p&gt;

&lt;p&gt;But, I don't think Delicious could have scaled up forever and stayed interesting. To address this, I advocated breaking Delicious up into semi-porous cells around loosely defined interest groups. Basically, a lot like &lt;a href=&quot;http://blog.reddit.com/2008/01/new-features.html&quot;&gt;what Reddit does with subreddits&lt;/a&gt; and what the &lt;a href=&quot;https://secure.wikimedia.org/wikipedia/en/wiki/Stack_Exchange&quot;&gt;Stack Exchange network does with Q&amp;amp;A topics&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As it was, Delicious had grown up around an implicit interest group of webdevs, programmers, tech heads, and the like. So, I figured that spawning more cells would be more interesting than just shoving endless people into the existing one. I also thought it could help scale the site in terms of server architecture, since cells of relevance could be fairly independent.&lt;/p&gt;

&lt;p&gt;The problem with a delicious diaspora, though, is the opposite: Scattered sites will offer fragments of larger communities that may not find each other on their own. So, we might like to find a way to piece them back together.&lt;/p&gt;

&lt;p&gt;Luckily, I think we have the technology to rebuild Delicious at web scale.&lt;/p&gt;

&lt;h2&gt;A tasty future, maybe?&lt;/h2&gt;

&lt;p&gt;Assume that lots of people have tagged bookmark collections in lots of places. What if those sites all supported &lt;a href=&quot;https://code.google.com/p/pubsubhubbub/&quot;&gt;PubSubHubBub&lt;/a&gt; and/or &lt;a href=&quot;http://rsscloud.org/&quot;&gt;RSS Cloud&lt;/a&gt; across feeds by dimensions of tag, user, and URL?&lt;/p&gt;

&lt;p&gt;I think you'd have the makings of a loosely coupled and distributed Delicious:&lt;/p&gt;

&lt;p&gt;The motivation to maintain individual and group bookmark collections could match up better with those who care about them. You could use &lt;a href=&quot;http://pinboard.in/&quot;&gt;pinboard.in&lt;/a&gt;. You could &lt;a href=&quot;http://sourceforge.net/projects/scuttle/&quot;&gt;host your own bookmarks&lt;/a&gt;. You could &lt;a href=&quot;http://community.livejournal.com/deliciouslymad/18362.html&quot;&gt;be a minor hero and host those of the people you find interesting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then, imagine a layer of search engines, each specializing in collecting a topically-interesting mix of real-time feeds from an array of social bookmarking sites. A future Google could subscribe to hubs pings from all the above and build something interesting and valuable without hosting the bookmarks of pesky, demanding users.&lt;/p&gt;

&lt;p&gt;I don't think this is super-science rocket surgery. Oddly enough, this is close to how I hoped we'd restructure Delicious back in the 2.0 days. It's what I was getting at with my &quot;&lt;a href=&quot;http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone&quot;&gt;Queue everything, delight everyone&lt;/a&gt;&quot; post. I wanted to see us treat individual users' collections as isolated from the aggregate indexes, connected only by messages and queues. I'm not sure we ended up with something as de-coupled as that, but I didn't have enough visibility into the deep backend to say for sure. Either way, I think this could be an opportunity to address things at web scale without a single company running the show.&lt;/p&gt;

&lt;h2&gt;In conclusion&lt;/h2&gt;

&lt;p&gt;Use the web. Host your own, pay for it, or find someone who values your data.&lt;/p&gt;

&lt;p&gt;You don't need a central blog server to have a Google. And you don't need a Delicious to have social bookmarking. It seems like we're drifting away from this as services like Facebook and Twitter rise to swallow whole categories of web application in monolithic silos.&lt;/p&gt;

&lt;p&gt;Seriously, hosting is getting cheaper and easier. Use it and host your own. Yeah, cheap is not free, but is what you're doing worthless to you? There are interesting alternatives that don't involve handing everything over to someone who doesn't actually care about you and your stuff.&lt;/p&gt;

&lt;p&gt;And, if it turns out that social bookmarking settles down into a small but highly involved niche of curators, so much the better that they keep their own lights on.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087678&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://workbench.cadenhead.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=70fe121c9172e9882762d7f28f233567&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://workbench.cadenhead.org/&quot;&gt;Rogers Cadenhead&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087678&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-12-20T05:44:29&quot;&gt;2010-12-20T05:44:29&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Hosting is cheap.&lt;/p&gt;

&lt;p&gt;Running web applications on your own server securely and reliably is expensive, assuming you value your own time.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087680&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=bb266673ec59acafd5d3ed68238551a5&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;JB&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087680&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-12-20T10:05:58&quot;&gt;2010-12-20T10:05:58&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I really like this article.
There should indeed be a system where you can self-host your bookmarks with some CMS and a centralized site for less techy people. All of these bookmarks would be somehow merged to produce intelligent data.
Kind of what Automattic does with WordPress.org and WordPress.com.&lt;/p&gt;

&lt;p&gt;Aside, this new Delicious system should have a more &quot;sharing&quot; side with ability for networkers to comment on each bookmark, &quot;redeli&quot; the bookmark (like retweet), etc... Unite bookmark and twitter functions - What Yahoo! should have try to developp during these past five years and failed to.
I already tried to find some link posted in the past in my Twitter stream, and it made me really angry and frustrated. And I didn't succeed. Twitter is nice but still has a too bad signal-to-noise ratio : Tweets are way too much passing, impossible to organized, and replies are not enough differentiated from normal tweet.&lt;/p&gt;

&lt;p&gt;What could be an ideal way to go is a WordPress plugin. Based on already there custom post type system, tags system, comments sytem...
WordPress is already a successful product, widely used. It would make easier the process of leaving current doomed delicious to a decentralized system.&lt;/p&gt;

&lt;p&gt;And Automattic should integrate this plugin to their WordPress.com blogs. They even would not have to buy Delicious to Yahoo!, just spread the word and invite people to subscribe to their service and import their delicious data.&lt;/p&gt;

&lt;p&gt;Finally, imagine that Automattic creates a subdomain of wordpress.com where all the data (bookmarks and data) would be gathered. The plugin on self hosted blogs would propose to the owner to share his personal bookmarks data with this website via an API.
A network could be based on wordpress.com optional subscription.&lt;/p&gt;

&lt;p&gt;I don't have any personal or business interest in Automattic (just a WordPress user) but it seems the perfect way to go.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087684&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087684&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-12-20T16:49:26&quot;&gt;2010-12-20T16:49:26&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Rogers: Yeah, I totally glossed over the horrors of sysadmin work and security. I'm kind of bipolar that way. I'm very optimistic about the stuff you can do with all this cheap capacity. But, then, I get my 5th XSS bug of the day to fix and want to change careers. &lt;/p&gt;

&lt;p&gt;I tend to think that cheap/disposable VMs and things like Google App Engine can make it easier, though. You can pay for &amp;amp; run just enough to run your app, hopefully keep the maintenance needs down and minimize the attack surface.&lt;/p&gt;

&lt;p&gt;I don't think it's that bad for small self-hosted sites like I'm talking about, but then I have a high threshold for crap.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087685&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=1d7a7610cb0f02de44be3c4186f82ac3&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;Bill Seitz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087685&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-12-20T20:09:41&quot;&gt;2010-12-20T20:09:41&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I'm not feeling that optimistic about things like GoogleAppEngine these days. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;How much is GAE mattering to anyone these days? What does that imply for its long-term survival?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WikiLeaks/TOS etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087686&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087686&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-12-21T02:26:18&quot;&gt;2010-12-21T02:26:18&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Bill: Well, GAE is mattering to me insofar as it's a decent place to deploy quick python web apps. Of course, that might be bad, since quick python apps aren't really taking advantage of the whole BigTable thing.&lt;/p&gt;

&lt;p&gt;As for wikileaks, well... &lt;a href=&quot;http://rc3.org/2010/12/03/somebody-can-always-cut-you-off/&quot; rel=&quot;nofollow&quot;&gt;Somebody can always cut you off&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221087688&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://evan.status.net/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d54b3146dc0b7e92cf252e508c280abd&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://evan.status.net/&quot;&gt;Evan Prodromou&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221087688&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-12-22T17:55:13&quot;&gt;2010-12-22T17:55:13&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I'd love to get your comments on the Bookmark extension we're working on for StatusNet. It uses OStatus (http://ostatus.org/) for distributing bookmarks (that's PuSH + Activity Streams + Salmon) and the Bookmark object type for AS.&lt;/p&gt;

&lt;p&gt;It's shaping up nicely; I'm going to set up a sample site for testing v v soon.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Tags do work (for me, at least)</title>
        <link href="http://decafbad.com/blog/2009/01/18/tags-do-work-for-me-at-least"/>
        <updated>2009-01-18T06:29:34+00:00</updated>
        <id>http://decafbad.com/blog/2009/01/18/tags-do-work-for-me-at-least</id>
        <content type="html">&lt;p&gt;For the &quot;&lt;a href=&quot;delicious.com/tag/tl;dr&quot;&gt;too long&lt;/a&gt;; &lt;a href=&quot;http://delicious.com/tag/tldr&quot;&gt;didn't read&lt;/a&gt;&quot; crowd:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I've &lt;a href=&quot;http://del.icio.us/deusx&quot;&gt;been using a lot of tags on Delicious&lt;/a&gt; over a relatively long time, so they seem very useful to me.&lt;/li&gt;
&lt;li&gt;Delicious encourages the use of tags through UI convention and tool usage patterns, whereas Flickr presents no particular bias toward collecting tags from users.&lt;/li&gt;
&lt;li&gt;Since title and description attract more contribution effort from users on Flickr than on Delicious, it's natural that search over those fields will be more productive than for tags.&lt;/li&gt;
&lt;li&gt;Search on Delicious doesn't have access to the complete text of the bookmarked resource, and often tags will contain information missing from the supplied title or description.&lt;/li&gt;
&lt;li&gt;All told, tags on Delicious are more essential than tags on Flickr.&lt;/li&gt;
&lt;li&gt;In conclusion, I think &lt;a href=&quot;http://www.tekka.net/10/tags.html&quot;&gt;Do Tags Work?&lt;/a&gt; misses the value of tags, as I know them, by focusing on Flickr.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Of course, I don't really care what this means for folksonomy and the rest of Web 2.0—tags work for me on Delicious.  So, I suspect this means I'm not &lt;em&gt;entirely&lt;/em&gt; opposed to the sentiment in &lt;a href=&quot;http://www.tekka.net/10/tags.html&quot;&gt;Do Tags Work?&lt;/a&gt;, because I don't think tags work everywhere their use is attempted.&lt;/p&gt;

&lt;p&gt;The rest of this entry elaborates on the above.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;From Cathy Marshall's &lt;a href=&quot;http://www.tekka.net/10/tags.html&quot;&gt;Do Tags Work?&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;Have I convinced you that tags aren't all they've cracked up to be? I hope I have, but nonetheless there's a lingering fascination. Surely there's something to be done about tags: we don't want to just turn up our noses at Mr. Weinberger's argument.&lt;/blockquote&gt;


&lt;p&gt;From Mark Bernstein's &lt;a href=&quot;http://www.markbernstein.org/Jan09/InTEKKATags.html&quot;&gt;In TEKKA: Tags&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
The study could be repeated on more images, and in additional contexts. It might be bad luck. But if it’s a repeatable result — and I think we all know it is — then we’re going to have to rethink a lot of our Web 2.0 rhetoric. Folksonomy is an illusion.&lt;/blockquote&gt;


&lt;p&gt;From my &lt;a href=&quot;http://delicious.com/url/125aaf42e2dfbf53b1cb8672d584bbdd#item-125aaf42e2dfbf53b1cb8672d584bbdd972759&quot;&gt;bookmark on Delicious&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;If you can get past the rambling paragraphs of awkward fun-poking at tags interspersed with library science / web 2.0 / cultural references—as well as a discovery of what, you know, Flickr is all about—there's a well-embellished and obsessively-assembled statistical analysis of tags vs title vs notes in finding photos featuring tourist heel-spinning on the testicles of a bull mosaic in Milan. My impression is that she's missed the point of tags, but I'm having trouble reducing the impression to a critique.&lt;/blockquote&gt;


&lt;p&gt;It might be that I'm intimidated by the writing in &lt;a href=&quot;http://www.tekka.net/10/tags.html&quot;&gt;Do Tags Work?&lt;/a&gt; or by the fact that a lot of work was done to produce numbers I can't dispute.  Either way, I have neither the time to produce a counter-study nor the wherewithal to extract and refute points in that article with precision.  So, I'm just going to throw my impressions out there and hope they coalesce.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tags are extremely useful to me.

&lt;ul&gt;
&lt;li&gt;I've been using tags on Delicious since shortly after the site was created.&lt;/li&gt;
&lt;li&gt;To date, &lt;a href=&quot;http://del.icio.us/deusx&quot;&gt;I've saved 11825 bookmarks and spawned 6069 tags&lt;/a&gt;.  (More on that ratio later.)&lt;/li&gt;
&lt;li&gt;Tags have worked very well for me, both in later finding my own saved resources and in finding aggregates of others'.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flickr is not the poster child of tagging—Delicious is.

&lt;ul&gt;
&lt;li&gt;On Flickr, I've found tags occasionally interesting, but not incredibly so.  More a curiosity than a killer feature, really.  (More on that in a bit, too.)&lt;/li&gt;
&lt;li&gt;To be honest, I've not found a great deal of use for tags around Web 2.0 properties beyond Delicious, folksonomy hype notwithstanding.&lt;/li&gt;
&lt;li&gt;Fun fact: When I worked on Delicious, we disliked the term &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Folksonomy&quot;&gt;folksonomy&lt;/a&gt;&quot; and tried never to use it in serious discussion.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The places where I've found tags useful are text-heavy, where the full text is either not indexed or not displayed in results when using search.

&lt;ul&gt;
&lt;li&gt;Consider magazine articles or blog posts bookmarked on Delicious.&lt;/li&gt;
&lt;li&gt;Those bookmarks are subject to the character limits of title or description fields.&lt;/li&gt;
&lt;li&gt;Far more often than on Flickr, there is information in tags not present in a bookmark's title or description.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;On Delicious, the use of bookmarklets and extensions is the primary source of new bookmarks.

&lt;ul&gt;
&lt;li&gt;These tools tend to produce a title based on the original bookmarked page and, when present, a description summarized from the page contents by way of highlighted text.&lt;/li&gt;
&lt;li&gt;With this in mind, consider that tags often make up the &lt;strong&gt;sole intentional contribution&lt;/strong&gt; made to the bookmark by the person saving it.

&lt;ul&gt;
&lt;li&gt;Beyond the choice to save the bookmark in the first place, that is.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Whereas on Flickr, the effort is spent on title and, sometimes, the description.  Beyond that point, tags are an afterthought, at best.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The user interface of tagging is near effortless versus, say, formal taxonomies or nested folders.

&lt;ul&gt;
&lt;li&gt;Even the much-debated choice of the big, fat space bar as a delimiter supports minimal effort.&lt;/li&gt;
&lt;li&gt;Minimal effort lowers mental cost, which promotes more noise, but also encourages more input (or  any input) and thus more signal overall.&lt;/li&gt;
&lt;li&gt;People have limited attention span budgets from which useful metadata can be solicited.  Tagging lowers the budget requirement.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The reason why I have generated a ratio of 1 new tag for every 2 bookmarks is that I use tags in a way akin to free association, made possible by the low cost of tagging.

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;This is a feature, not a bug.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;I have many, many tags used only once and never again—some of them are, in fact, jokes.&lt;/li&gt;
&lt;li&gt;But, I have generated some tags that I've come to adopt more heavily, most of which proved surprisingly useful over months or years of recurrence.&lt;/li&gt;
&lt;li&gt;As for those tags I've never used again: They cost nothing, can be hidden below visibility thresholds, and can be merged later into more appropriate tags if I care to do so.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;And, there's where I run out of steam.  For the conclusion, go back to the beginning of this entry.  Biased though I might be, I think Delicious is the place to study tagging, and there they're of great use.  This is where I think &lt;a href=&quot;http://www.tekka.net/10/tags.html&quot;&gt;Do Tags Work?&lt;/a&gt; misses the value, despite the volume of writing and data.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086340&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://laughingmeme.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=01457d1a0f0e533062cd0d1033fb4d7a&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://laughingmeme.org&quot;&gt;kellan&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086340&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-18T07:40:08&quot;&gt;2009-01-18T07:40:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;In addition Flickr's tagging implementation has always been non-optimal because there is a 1-to-1-to-1 relationship of object (photo) - tag - tagger.  To call tagging on Flickr a folksonomy is to fundamental miss &lt;em&gt;why&lt;/em&gt; the term was coined to describe del.icio.us (we can argue about whether we &lt;em&gt;like&lt;/em&gt; the term).  Tags in del.icio.us act as votes (among other things), much like links in PageRank, and the mish-mash of curatorial activity on Flickr (faving/commenting/groups).&lt;/p&gt;

&lt;p&gt;Which is a long way of saying I agree!  (and we're thinking about how to fix tags on Flickr, but thats been true as long as I've been there)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086341&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.markbernstein.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=cdb20bf8e09680028612532944833686&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.markbernstein.org/&quot;&gt;Mark Bernstein&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086341&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-18T14:17:50&quot;&gt;2009-01-18T14:17:50&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;It seems to me that it ought to be straightforward to repeat this study of delicious.&lt;/p&gt;

&lt;p&gt;If I follow you, you find delicious tags useful primarily as a personal mnemonic -- a way for finding your own stuff.  That's an valuable application, but not the one addressed here (or by folksonomists); Marshall is exploring whether tags are useful for helping the community organize a collection for collaborative use.  I haven't heard much about using delicious this way, but perhaps it could be done.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086343&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=c51d39fe0d256f16e0d743cde9f71cc2&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;karl&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086343&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-18T18:30:05&quot;&gt;2009-01-18T18:30:05&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;note that she is saying that tags are good at finding your own personal stuff, and that you confirm this in your blog post. So at least you are in agreement on this.&lt;/p&gt;

&lt;p&gt;But let's dig a bit further what is she saying and what you are saying. I have too tagged a lot of stuff with another service similar to del.icio.us. The result is that no, it is not useful to find something quickly, and I would even go further that I don't even find my own stuff. What I do though on a regular basis is to reduce my own stuff by changing the tags for a set a of pages for example if there are économie, economie, economy, business, I might finally reduce it to one tag &quot;économie&quot;. What I would really wish is that I could do a hierarchy of these. For example sometimes I tag Japan and Tokyo, what I wish is that in my own hierarchy when I tag Tokyo, the system assumed Japan.&lt;/p&gt;

&lt;p&gt;On Flickr it really depends on what we are looking for, but I'm using flickr for finding images for specific location and for specific creative commons licenses. In both cases, these metadata depends on an ontology (taxonomy, structured schemas, $ORGANIZATIONSYSTEM)&lt;/p&gt;

&lt;p&gt;geolocation… the ontology is the map, a well defined system where you can pinpoint an image somewhere and get the real lat/long values. &lt;/p&gt;

&lt;p&gt;licenses… a controlled vocabulary of different type of licenses.&lt;/p&gt;

&lt;p&gt;The debate is not about &quot;do tags suck&quot; but do they work? And indeed they are not really efficient compared to other methods. It's cool they exist, but they should not be here to justify that ontology sucks either. Every community which is in a need of achieving a specific repetitive task comes one day or the other to structured data organization.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086344&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.ethanhein.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=4c0a6f9419c7bce70e889b6115e9bb77&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.ethanhein.com&quot;&gt;Ethan&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086344&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T02:33:33&quot;&gt;2009-01-19T02:33:33&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Very often, the suggested tags on a new Delicious post inspire my personal informational ontology. Folksonomy is real and valuable, but like any public resource, it requires some effort on my end to make it worth my while. Flickr's tagging system is valuable to me, but not as crucial to the overall experience. This is in part because Flickr's thumbnail images are a faster way to free-associatively group like concepts together than verbal tags ever could be.&lt;/p&gt;

&lt;p&gt;Your readers might enjoy &lt;a href=&quot;http://www.ethanhein.com/wp/2008/social-bookmarking-is-delicious/&quot; rel=&quot;nofollow&quot;&gt;an analysis of how I use Delicious.&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086346&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086346&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T02:37:53&quot;&gt;2009-01-19T02:37:53&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Kellan: That's definitely another thing - Flickr has plenty of explicit curatorial features that suck up the energy otherwise directed toward tagging—the only game in town on Delicious.  &lt;/p&gt;

&lt;p&gt;That's not a bad thing - those are good features that wouldn't necessarily work for Delicious.  And if they would work for Delicious, someone somewhere is probably emulating them with specially-formed tags to varying degrees of success. Eventually we might have discovered those uses and wrapped a feature around them. (see also: for:* and system:media:*)&lt;/p&gt;

&lt;p&gt;Actually, one area where I think Flickr has done better with tagging is in machine tags.  There was some disagreement about that even on the Delicious team—pitting it against simplicity of tags—but I thought there was something there worth exploring.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086347&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086347&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T02:41:29&quot;&gt;2009-01-19T02:41:29&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Mark: Not primarily as a personal mnemonic—I probably should have expanded more on the social aspects.  I find tags on Delicious just as useful for finding &lt;em&gt;others'&lt;/em&gt; bookmarks, too.&lt;/p&gt;

&lt;p&gt;I assume that many others use tags much like I do—especially the people bookmarking things I find interesting.  On Delicious, something akin to lightweight communities emerge based around bottom-up tags. &lt;/p&gt;

&lt;p&gt;I am no library scientist—but, if you've got a community with a collection to organize, I don't think you really need tags.  That community probably already has a notion of categories worth extracting in a more formal top-down process.  &lt;/p&gt;

&lt;p&gt;As for repeating the study, I probably won't be the person to do it.  But, for a quick example that I'd suggest is par for the course, take a look at &lt;a href=&quot;http://delicious.com/url/125aaf42e2dfbf53b1cb8672d584bbdd&quot; rel=&quot;nofollow&quot;&gt;the bookmarks for the article in question&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Of the 18 bookmarks, 10 have notes. That page only shows the most common title, but I'd be surprised if any of the 18 have a title other than &quot;Do Tags Work?&quot;  That leaves the tags.  Of the top 10 tags, only one appears in the title (&quot;tags&quot;).  The word &quot;folksonomy&quot; appears in none of the descriptions.  There's also &quot;socialsoftware&quot; used 3 times, which appears neither in title or description, nor in the original article itself.  I think this shows better use of tags than the example used from Flickr.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086348&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086348&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T03:12:10&quot;&gt;2009-01-19T03:12:10&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@karl: I wrote that tags are useful for finding both mine &lt;em&gt;and&lt;/em&gt; others' bookmarks.  Meaning tags work as intended, at least for me on Delicious.  I suspect they work for others too, since they keep tagging things in ways that I keep finding them.&lt;/p&gt;

&lt;p&gt;You wrote about another service, but I didn't—I'm writing about tags on Delicious.  I don't know what the thing they call tags looks like on that other unnamed service.  &lt;/p&gt;

&lt;p&gt;This is part of the reason behind my mild disdain for the term &quot;folksonomy&quot;:  Delicious didn't introduce tagging to start a best practice for Web 2.0 at large—tagging was introduced as a site feature for Delicious.  Attempts to clone that feature elsewhere have been uneven in results, despite having had a term coined and a body of hype spun around it.&lt;/p&gt;

&lt;p&gt;Tagging is like a salt water fish that lots of people thought was pretty and they started trying to stick in fresh water tanks.  I don't think it thrives everywhere people have tried to stick it and not everyone who's tried to clone tagging has gotten all the important parts right.&lt;/p&gt;

&lt;p&gt;On Flickr, I've asserted that tags aren't that useful.  Machine tags like geo tags are a big exception though.  Otherwise, they have a wealth of other tools for finding things beyond tags, whereas on Delicious they're the only game in town.&lt;/p&gt;

&lt;p&gt;I guess my main point is this:  In my experience, tags work.  On Delicious.  Where they're largely agreed to have been cloned from.  Elsewhere, I think there have been transcription errors and misinterpretations that give the concept a dubious reputation. &lt;/p&gt;

&lt;p&gt;I'm not sure what you mean about tags being not really efficient compared to other methods.  Tags are a way to get people to provide metadata useful in emergent classification that would otherwise have not been supplied at all.  I think they're efficient at that.&lt;/p&gt;

&lt;p&gt;Many people just punt when faced with sorting a new resource into a formal category or folder structure.  I suppose that filters out all but the conscientious, leaving better quality results.  Is that what you mean?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086349&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://thenoisychannel.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e9a1ce0b75918ac8c05ae1e83ebeab69&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://thenoisychannel.com/&quot;&gt;Daniel Tunkelang&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086349&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T06:07:24&quot;&gt;2009-01-19T06:07:24&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;My colleagues and I at Endeca learned a lot from out experience with the ACM Digital Library, a collection of author-tagged computer science articles. As is, the author-supplied tags weren't all that useful. But we were able to derive a vocabulary from them that we then used for automatic tagging. We also applied a variant of this approach to the website for a leading sports programming network.&lt;/p&gt;

&lt;p&gt;You can learn more details about our approach in the proceedings of the 2008 Workshop on Human Computer Information Retrieval:&lt;/p&gt;

&lt;p&gt;http://research.microsoft.com/en-us/um/people/ryenw/hcir2008/&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086350&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://delicious.com/britta&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=57aab4d4b63173e994095032a52d78e6&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://delicious.com/britta&quot;&gt;Britta&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086350&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T06:35:48&quot;&gt;2009-01-19T06:35:48&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Heh, so much of this depends on personal use. Like we always tell people, there's no wrong way to tag, and that makes it really really hard to generalize accurately about What Tags Mean.&lt;/p&gt;

&lt;p&gt;I tend to use Delicious tags to associate a bookmark with a thread of my thinking (which is very useful), and I use a combination of search and tags to find things. But on Flickr, I like looking through tagged photos, and I like looking through groups even more. I search to find old photos, often finding a picture because of the tags on the photo. Both Flickr and Delicious work very well for me.&lt;/p&gt;

&lt;p&gt;Tags are interface; the &quot;meaning&quot; of each tag is de-emphasized. Compared to hierarchical structures, they're easier, messier, more-used, more fun. They're flexible - they're personal.&lt;/p&gt;

&lt;p&gt;Tags on Delicious are collective; tags on Flickr are collective (except when you tag another person's photos); folksonomy implies collaborative.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086352&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://delicious.com/britta&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=57aab4d4b63173e994095032a52d78e6&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://delicious.com/britta&quot;&gt;Britta&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086352&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T06:39:57&quot;&gt;2009-01-19T06:39:57&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;P.S. I rewrote pretty much the entire Wikipedia article on tags a few months ago - http://en.wikipedia.org/wiki/Tag_(metadata) - which was fun. If you disagree with me about tagging, just look at the official article! Ho ho ho.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086353&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://husk.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=f1b0c8dfe96dad2606c99535803d12b8&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://husk.org/&quot;&gt;Paul Mison&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086353&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T13:17:34&quot;&gt;2009-01-19T13:17:34&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Just to throw a minor spanner in Les's argument in comment #5, I do have a slightly different title: I put the site name after a pipe for every bookmark I make, partly because it might make it easier to distinguish posts from different sources at some point (without recourse to URL or tag) and partly because it looked good when Dan Hill did it (I nicked the idea, as with so many things.) I don't think this really invalidates his point, though: tags are the place for (most) people to put their mark on a link. Us description-editors are odd.&lt;/p&gt;

&lt;p&gt;(Annoyingly, I can't find a link that shows that well. There's &lt;a href=&quot;http://delicious.com/blech/tagging&quot; rel=&quot;nofollow&quot;&gt;my bookmarks tagged 'tagging'&lt;/a&gt;, I suppose. I've only just noticed this has related tags- that's a nice touch I'd never really spotted.)&lt;/p&gt;

&lt;p&gt;On a side note, I love machine tags in Flickr, mainly because they're hidden from the user by default. (They've got a lot more useful now that there are specialised methods in the API, too.) I mused on Twitter last week that neither Delicious nor a third party has done anything with the loose convention of via: or cite: tags that some people use. One day...&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086354&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=c51d39fe0d256f16e0d743cde9f71cc2&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Karl&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086354&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T17:52:28&quot;&gt;2009-01-19T17:52:28&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I said tags were not very useful to me in the sense they don't help me to find interesting stuff (even on delicious) :) Your mileage may vary. Understood.&lt;/p&gt;

&lt;p&gt;About categories and structured hierarchies, I never mentionned to have to pick up one unique category. My goal is to be able to have hierarchieS. You could imagine a system where one tags &quot;chinese&quot; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;meant a human chinese person &lt;/li&gt;
&lt;li&gt;or meant the written language. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Structures are useful. As I said, I'm not against tags, I'm just for a better use of tags. I believe that plugging SKOS would be a very easy way to leverage the power of tags by letting people doing their own personal ontologies &lt;em&gt;if they need it&lt;/em&gt;. :) &lt;/p&gt;

&lt;p&gt;So the summary instead of a flat system, I want a hierarchical system, a graph without destroying the flat system.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086356&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086356&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T18:13:37&quot;&gt;2009-01-19T18:13:37&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@karl:  I'd say once you introduce intentional structure or hierarchy, you no longer have tags.  I think you really want categories.  You can emulate categories using tags, but you'll be going against the grain.&lt;/p&gt;

&lt;p&gt;Tags are about throwing things at the wall and letting analysis and algorithms help surface implicit structures or relations.&lt;/p&gt;

&lt;p&gt;And, yes, the semantic issue of &quot;chinese&quot; the language vs &quot;chinese&quot; the food vs &quot;chinese&quot; the people is a long standing one.  Single tags don't solve this and tagging in general kind of shrugs on the issue—though tag intersections involving many tags help disambiguate intended meaning. (ie. &lt;a href=&quot;http://delicious.com/tag/chinese+food&quot; rel=&quot;nofollow&quot;&gt;chinese+food&lt;/a&gt;, &lt;a href=&quot;http://delicious.com/tag/chinese+language&quot; rel=&quot;nofollow&quot;&gt;chinese+language&lt;/a&gt;)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086357&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://24ahead.com/all-tags&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=1ce7050209b9cdcd47909e5b6d7e512d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://24ahead.com/all-tags&quot;&gt;My tag cloud&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086357&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-01-19T20:31:25&quot;&gt;2009-01-19T20:31:25&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I didn't thoroughly read this post or the link, but I'm going to guess that the value of tagging depends on the tags you use. For instance, I wouldn't tag this with &quot;tags&quot; but instead with &quot;tagging debate&quot;, &quot;tagging meta&quot;, or similar. That would allow a visitor to this site to find every similar discussion. The &quot;tags&quot; tag might include a lot of things that someone wasn't looking for, such as a comparison of tagging services.&lt;/p&gt;

&lt;p&gt;This could also be tagged with the name of the person who wrote the link so the visitors could find discussions involving that person.&lt;/p&gt;

&lt;p&gt;For how I do things, my tag cloud is at my name's link.&lt;/p&gt;

&lt;p&gt;Note the tags with [name topic], such as &quot;obama cabinet&quot;. Anyone who sees that should realize right away what it involves. And, someone looking for specific Obama information can scan the tags starting with his name for subtopics. Note also the tags about themes, such as &quot;mean spirited&quot;, which refers to an &quot;argument&quot; some people make. And, click a tag like &quot;bill richardson&quot; to see how I make some sense of large numbers of posts: many of the lists with a large number of posts are preceded by a summary linking to individual posts.&lt;/p&gt;

&lt;p&gt;(Note: that doesn't represent all the content at my site because I switched from MT to Drupal a couple months ago and only a fraction of thousands of posts is tagged. There are also a few hundred tags that aren't shown; I need to figure out how to show lots of tags.)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Improving my Delicious command for Ubiquity</title>
        <link href="http://decafbad.com/blog/2008/09/07/improving-my-delicious-command-for-ubiquity"/>
        <updated>2008-09-07T05:20:20+00:00</updated>
        <id>http://decafbad.com/blog/2008/09/07/improving-my-delicious-command-for-ubiquity</id>
        <content type="html">&lt;p&gt;After writing up my &lt;a href=&quot;http://decafbad.com/blog/2008/09/01/writing-a-delicious-command-for-ubiquity&quot;&gt;first stab at a Delicious command for Ubiquity&lt;/a&gt;, I planned to continue revising it based on feedback and to work on exploring more of what Ubiquity enables.  I started looking into writing my own nouns for tag suggestions, as well as playing with page load and browser startup hooks.  And, I also started poking at a little bit of deeper extension development, which took up most of my time today.&lt;/p&gt;

&lt;p&gt;I've &lt;a href=&quot;http://decafbad.com/UbiquityCommands/&quot;&gt;updated my UbiquityCommands&lt;/a&gt; page and checked in my latest revision of &lt;a href=&quot;http://decafbad.com/hgwebdir.cgi/UbiquityCommands/file/tip/delicious.ubiq.js&quot;&gt;the Delicious command&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The main new feature is a status bar item reporting bookmarks for the current page:&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;padding: 0.25em&quot; src=&quot;http://decafbad.com/2008/ubiq-del-status.jpg&quot; /&gt;&amp;nbsp;&lt;img style=&quot;padding: 0.25em&quot; src=&quot;http://decafbad.com/2008/ubiq-del-tip.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As you can see above, the command now comes with a status bar panel powered by the &lt;a href=&quot;http://delicious.com/help/feeds&quot;&gt;Delicious URL info JSON feed&lt;/a&gt;, providing bookmarking info on every page visited.  It shows a bookmark count, a tooltip with further information, and sends the user to the URL info page on Delicious when clicked.  It mostly works, but it could use some looking at.  This is my first time really cracking open the hood on Firefox and XUL, and so I'm feeling around in the dark.&lt;/p&gt;

&lt;p&gt;Specifically, I'm using Ubiquity's page load hook—but I'm also trying to augment that by tracking tab selection events, in order to keep the status bar info updated for the active tab.  But then, that leads me to trying to track new windows, to attach the tab selection event handler for every newly opened window.  Or I could just be barking up the wrong tree entirely.  At any rate, the code is probably brain-dead dumb, so I hope someone can clue me into a better way.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088289&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.mozilla.com/gen/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=ef1b5a29836fa211b938d8ccbbd3e0a1&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.mozilla.com/gen/&quot;&gt;Gen Kanai&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088289&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-07T08:10:39&quot;&gt;2008-09-07T08:10:39&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Les, you may want to let R/RW know about your new command.&lt;/p&gt;

&lt;p&gt;http://www.readwriteweb.com/archives/the_ultimate_list_of_custom_ubiquity_verbs.php&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088292&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://abcdefu.wordpress.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=af8b180d6d4092fb42fe6b5e0b21536c&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://abcdefu.wordpress.com/&quot;&gt;Abimanyu Raja&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088292&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-07T08:55:52&quot;&gt;2008-09-07T08:55:52&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I disagree... Your command doesn't fit on that list. It's way too good for that list. :)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088296&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=61fc20fbb1afbfc057df523f9dae79da&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Jeton&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088296&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-07T21:56:43&quot;&gt;2008-09-07T21:56:43&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Well, i was having problems understanding the &quot;tagged&quot; and &quot;entitled&quot;. Didn't knew it was without brackets....&lt;/p&gt;

&lt;p&gt;But i gotta say, it actually replaces the delicious firefox extension for its easy way of posting links on delicious.&lt;/p&gt;

&lt;p&gt;Well done, and seeing that it's only the begining i don't doubt that it will improve much more!&lt;/p&gt;

&lt;p&gt;Oh, and i had a WTF when i first saw that delicous icon on the status bar of Firefox. Didn't knew it was from your command ;)&lt;/p&gt;

&lt;p&gt;Thanks for making this.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088300&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=61fc20fbb1afbfc057df523f9dae79da&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Jeton&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088300&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-07T22:20:09&quot;&gt;2008-09-07T22:20:09&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;One question:
Is there a chance to remove the quotation marks (i meant the same on the above comment as well, not brackets) when saving a note about a bookmark?&lt;/p&gt;

&lt;p&gt;Everytime i bookmark a page via this command, it quotes the note.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088302&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088302&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-07T22:41:20&quot;&gt;2008-09-07T22:41:20&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Jeton: I guess the quoted thing is something I do by habit, to discriminate between what's my comment and what's summary straight from the page.  One way you can force it unquoted is with the &quot;noted&quot; modifier.  So, select some text on the page, and you can do something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sha noted this tagged foo bar baz
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That should use the selected text without quotes.  Also, you can just type arbitrary stuff:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sha noted These are notes entitled A title goes here tagged foo bar baz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088304&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088304&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-07T22:44:59&quot;&gt;2008-09-07T22:44:59&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Jeton: Actually, I just made a check-in that flips it around.  There's now a &quot;quoted&quot; modifier to wrap the notes in quotes, leaving it unquoted otherwise.  I might be the weirdo here in my quote usage :)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088306&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jackmottram.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=3a6aa11eff36e9d968119a6bb4cea05e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jackmottram.com/&quot;&gt;Jack Mottram&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088306&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-09T10:04:12&quot;&gt;2008-09-09T10:04:12&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I'm a weirdo too, and now I can't quite work out how to get quotes around stuff I'm quoting from a page. I assumed this would work:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sha this quoted&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;but it just adds the word 'quoted' to the end of the quoted text, without quotes.&lt;/p&gt;

&lt;p&gt;Similarly:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sha quoted this tagged test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;adds the words 'tagged' and 'test' to the end of the quoted text, though this time everything _is_ in quotes. (So it seems I can get quotes, but lose the ability to tag in the process.)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sha this quoted text&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;puts the word 'text' in quotes, but drops the selected text...&lt;/p&gt;

&lt;p&gt;So, I give up - what's the secret to getting quotes around quoted text?!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088310&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jackmottram.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=3a6aa11eff36e9d968119a6bb4cea05e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jackmottram.com/&quot;&gt;Jack Mottram&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088310&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-09T10:11:59&quot;&gt;2008-09-09T10:11:59&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;And of course I worked it out immediately after leaving that comment:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sha tagged test monkey whatever quoted this&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;works just fine (but feels the wrong way around to be tagging before quoting). And now I can't work out how to quote &lt;i&gt;and&lt;/i&gt; note, so to speak. I tried adding&lt;/p&gt;

&lt;p&gt;&lt;code&gt;noted These are my comments on what I just quoted&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;but it doesn't work, it puts 'noted These are my &amp;amp;c.' inside the quotes...&lt;/p&gt;

&lt;p&gt;(I should say, despite all this moaning, I really have been enjoying using the command - it's very slick compared to the official add-on.)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088312&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088312&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-09T14:30:06&quot;&gt;2008-09-09T14:30:06&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Huh, weird - that's exactly how I use the command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sha quoted this tagged foo bar baz
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;One major difference, though, is that I'm using a bleeding edge checkout of the Ubiquity extension.  I wonder if there's a bug in the parser for the last release.  :(  &lt;/p&gt;

&lt;p&gt;The definition of the modifiers is pretty simple, so there's not a whole lot of debugging I can do in the command itself.  Ugh.&lt;/p&gt;

&lt;p&gt;Oh, and also: RIght now it's either plain notes or quoted notes.  Presence of the quoted modifier clobbers plain notes.  But, how that I think about it I wonder if I should make those work together.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088314&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://FromTheGut.us&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=3be27db3db50892929ef892ab04621a4&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://FromTheGut.us&quot;&gt;Frank&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088314&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-09T17:40:39&quot;&gt;2008-09-09T17:40:39&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Hello, &lt;/p&gt;

&lt;p&gt;I was wondering if there was any chance you could put together a post annotating/explaining the changes/additions to your improved Delicious command. In particular, some explanations of the code dealing with the statusbar would be helpful for us beginners. Thanks.&lt;/p&gt;

&lt;p&gt;Frank&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088317&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=357a20e8c56e69d6f9734d23ef9517e8&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Tony&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088317&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-10-22T05:12:52&quot;&gt;2008-10-22T05:12:52&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Not a big fan of things adding stuff my status bar. :/ Ubiquity commands should just focus on Ubiquity, not XUL changes in Firefox.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088320&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088320&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-10-29T16:04:28&quot;&gt;2008-10-29T16:04:28&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Tony: Actually, commands are just one of the goals of Ubiquity.  Easier XUL hacking, ala Greasemonkey, is another goal, albeit under-explored so far.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088321&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://dy-verse.blogspot.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=40e05965a0c35ba44927a8e4b0546f9d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://dy-verse.blogspot.com/&quot;&gt;http://dy-verse.blogspot.com/&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088321&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-04-27T14:50:43&quot;&gt;2009-04-27T14:50:43&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Here is a share-to-delicious ubiquity command that automatically generates tags using YAHOO pipes. It also uses the text selected on the page as notes and the page title as the title of the article. &lt;/p&gt;

&lt;p&gt;http://gist.github.com/26425&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221088327&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221088327&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-04-28T05:25:58&quot;&gt;2009-04-28T05:25:58&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Auto-generating tags via Yahoo Pipes is a neat trick, but it's unfortunately very much frowned upon by delicious.  Not that anything negative will happen to you, but it defeats the purpose of tagging altogether.&lt;/p&gt;

&lt;p&gt;Try searching for &quot;Lazy Sheep Bookmarklet&quot; and possibly read:&lt;/p&gt;

&lt;p&gt;http://www.mail-archive.com/ydn-delicious@yahoogroups.com/msg00853.html&lt;/p&gt;

&lt;p&gt;In particular - &quot;People add metadata so that 1) they can find things and 2) other people can find things. You are removing the step in which people add the tag metadata, thus making the system less valuable to themselves and others.&quot;&lt;/p&gt;

&lt;p&gt;The key word repeated there is &quot;people&quot;&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Writing a Delicious command for Ubiquity</title>
        <link href="http://decafbad.com/blog/2008/09/01/writing-a-delicious-command-for-ubiquity"/>
        <updated>2008-09-01T04:37:03+00:00</updated>
        <id>http://decafbad.com/blog/2008/09/01/writing-a-delicious-command-for-ubiquity</id>
        <content type="html">&lt;p&gt;In my &lt;a href=&quot;http://decafbad.com/blog/2008/08/31/ubiquity-cracks-open-personal-mashup-tinkering&quot; title=&quot;Ubiquity cracks open personal mashup tinkering&quot;&gt;last post&lt;/a&gt;, I got all fluffy about how cool &lt;a href=&quot;http://labs.mozilla.com/2008/08/introducing-ubiquity/&quot;&gt;Ubiquity&lt;/a&gt; is but didn't share any code to prove the point.  As it happens, I have come up with at least one useful command that I'm starting to use habitually in posting bookmarks to Delicious.  You can &lt;a href=&quot;http://decafbad.com/UbiquityCommands/&quot;&gt;subscribe to my command&lt;/a&gt; or &lt;a href=&quot;http://decafbad.com/hg/UbiquityCommands/file/tip/delicious.ubiq.js&quot;&gt;check out the full source&lt;/a&gt;—this post will serve as a dissection of the thing.  Since this will be fairly lengthy, follow along after the jump.&lt;/p&gt;

&lt;p&gt;Oh, and it's been awhile since I posted something this in-depth around here, so feel free to let me know how this first draft works.  And, bug reports and patches are of course welcome.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;To begin, consider the following code starting off the command source code:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;1&quot;&gt;
/**
 * share-on-delicious - an Ubiquity command for sharing bookmarks on
 * delicious.com
 *
 * l.m.orchard@pobox.com
 * http://decafbad.com/
 * Share and Enjoy!
 */
var uext = Application.extensions.get('ubiquity@labs.mozilla.com');

var cookie_mgr = Components.classes[&quot;@mozilla.org/cookiemanager;1&quot;]
    .getService(Components.interfaces.nsICookieManager);
&lt;/pre&gt;


&lt;p&gt;The first thing to note here is that a short header comment introduces the command.  This isn't required, but it's a good idea.  It's also something you can't really do with bookmarklets.  On the other hand, Greasemonkey user scripts expect metadata about the script to be provided here, but Ubiquity doesn't use this convention.&lt;/p&gt;

&lt;p&gt;Second, notice that the code accesses some chrome-level resources.  Again, this is something unavailable to bookmarklets and Greasemonkey user scripts.  Just take a look at the &lt;a href=&quot;http://developer.mozilla.org/en/FUEL&quot;&gt;FUEL library documentation&lt;/a&gt; to get a quick sense of what's available using that simplified API, not to mention what's available using the lower-level browser APIs.&lt;/p&gt;

&lt;p&gt;Now, check out this next chunk of code, which begins the construction of an Ubiquity command:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;13&quot;&gt;
CmdUtils.CreateCommand({
    
    name:        
        'share-on-delicious',
    icon:
        'http://delicious.com/favicon.ico',
    description: 
        'Share the current page as a bookmark on delicious.com',
    help:        
        'Select text on the page to use as notes, or enter your own ' + 
        'text after the command word.  You can also assign tags to the '+ 
        'bookmark with the &quot;tagged&quot; modifier, and alter the bookmark ' + 
        'default page title with the &quot;entitled&quot; modifier.  Note that ' + 
        'you must also already be logged in at delicious.com to use ' +
        'this command.',

    homepage:   
        'http://decafbad.com',
    author: { 
        name: 'Leslie Michael Orchard', 
        email: 'l.m.orchard@pobox.com' 
    },
    license:
        'MPL/GPL/LGPL',
&lt;/pre&gt;


&lt;p&gt;Whereas Greasemonkey scripts support metadata in the header comment, the Ubiquity command script API works a little differently.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://hg.toolness.com/ubiquity-firefox/file/tip/ubiquity/chrome/content/cmdutils.js&quot;&gt;&lt;code&gt;CmdUtils&lt;/code&gt; module&lt;/a&gt; provided by Ubiquity offers a &lt;code&gt;CreateCommand&lt;/code&gt; function, which expects an object as a parameter.  The object literal whose construction is begun in the code above serves as a self-contained package for the command, bearing metadata describing the command as well as containing all the code necessary to implement it.&lt;/p&gt;

&lt;p&gt;So, in the above code block, you can see the machine-readable description of the command—including a command name, display icon, home page URL, author information, and license.  The command name (&lt;code&gt;share-on-delicious&lt;/code&gt;) will be used by the Ubiquity command parser, but the rest of the description will also be used in the list of commands available to the user, invoked by the &lt;code&gt;command-list&lt;/code&gt; command, like so:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2008/ubiq-share-on-delicious-list.jpg&quot; style=&quot;border: 1px solid #333; margin: 0.25em; padding: 0.25em&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Moving along, this next chunk of code introduces the first functional bits of the command:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;37&quot;&gt;
    takes: { notes: noun_arb_text },
    modifiers: { 
        tagged:  noun_arb_text,
        entitled: noun_arb_text
    },
&lt;/pre&gt;


&lt;p&gt;Like smart keyword shortcut bookmarks, Ubiquity commands accept user-supplied input.  But, what's unique to Ubiquity is that it employs a parser whose goal is to support something approximating natural language.  At present, this results in commands that support a single primary argument—declared above with the &lt;code&gt;takes&lt;/code&gt; property—and any number of additional keyword modifiers—declared above by the &lt;code&gt;modifiers&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;For the command under construction here, this establishes a pattern something like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;share-on-delicious {notes} [tagged {tags} entitled {title}]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Content for the &lt;code&gt;{notes}&lt;/code&gt; argument can either be typed directly by hand, or it can be supplied by text highlighted on the page.  To use highlighted text, you can either issue the command alone, or use the word &lt;code&gt;this&lt;/code&gt; for the &lt;code&gt;{notes}&lt;/code&gt; argument before including further modifiers.&lt;/p&gt;

&lt;p&gt;The modifiers &lt;code&gt;tagged&lt;/code&gt; and &lt;code&gt;entitled&lt;/code&gt; are optional, and can be used in any order.  Each of these keywords signifies the start of a different argument—which unfortunately can collide with the literal data supplied for notes, which will hopefully be a rare occurrence.&lt;/p&gt;

&lt;p&gt;All of this adds up command invocations including the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;share-on-delicious
share-on-delicious I really like this page tagged nifty amusing
share-on-delicious this entitled This bookmark has no tags
sh this tagged osx software apple entitled This is good OS X software
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That last example is important—since I have no other commands starting with &quot;&lt;code&gt;sh&lt;/code&gt;&quot;, I can abbreviate the full command.  Ubiquity only requires enough of a command name to disambiguate it within your collection of commands.&lt;/p&gt;

&lt;p&gt;Another thing to note is the use of the constant value &lt;code&gt;noun_arb_text&lt;/code&gt;, which declares that these arguments should expect any arbitrary text as input.&lt;/p&gt;

&lt;p&gt;This facility is not exploited for the present command, but Ubiquity defines &lt;a href=&quot;http://hg.toolness.com/ubiquity-firefox/file/tip/ubiquity/chrome/content/nlparser/en/nountypes.js&quot;&gt;noun types&lt;/a&gt;.  These include concepts such as plain text, dates, address book contacts, browser tabs, bookmark tags, and more.  You can define your own noun types, as well as implement suggestion schemes that help guide the user toward constructing useful input values in the command interface.  You can &lt;a href=&quot;https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial#Introduction_to_Noun_Types&quot;&gt;read more about this&lt;/a&gt; in the official author tutorial.&lt;/p&gt;

&lt;p&gt;Next up is a quick bit of command-specific configuration:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;42&quot;&gt;
    /**
     * Command configuration settings.
     */
    _config: {
        // Base URL for the delicious v1 API
        api_base:      'https://api.del.icio.us',

        // Domain and name of the delicious login session cookie.
        cookie_domain: '.delicious.com',
        cookie_name:   '_user'
    },
&lt;/pre&gt;


&lt;p&gt;Since this command will be posting to Delicious via the V1 API, it's handy to declare the base URL for the API in an easily changed spot.  That way, you could change this value later on to point the command at another implementation of the API.&lt;/p&gt;

&lt;p&gt;Additionally, this command will employ a little-known authentication trick supported by the Delicious API that accepts the user's login cookie set by the Delicious website—this &quot;cookie god&quot; auth is used by the official Delicious addon for Firefox.  It's handy for piggybacking on the website login and removing the need to ask the user for their username and password again and possibly storing it in an insecure manner.&lt;/p&gt;

&lt;p&gt;In fact, this next chunk of code defines a utility method to rummage through the cookie jar:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;53&quot;&gt;
    /**
     * Dig up the Delicious login session cookie.
     */
    _getUserCookie: function() {
        var iter = cookie_mgr.enumerator;
        while (iter.hasMoreElements()) {
            var cookie = iter.getNext();
            if( cookie instanceof Components.interfaces.nsICookie &amp;&amp; 
                cookie.host.indexOf(this._config.cookie_domain) != -1 &amp;&amp; 
                cookie.name == this._config.cookie_name) {
                return decodeURIComponent(cookie.value);
            }
        }
    },
&lt;/pre&gt;


&lt;p&gt;The method defined above, &lt;code&gt;._getUserCookie()&lt;/code&gt;, uses the browser's cookie manager and the values defined in the previous configuration section to find the login session cookie set for Delicious.  Take note that this is far beyond the allowed capabilities of bookmarklets and Greasemoney user scripts—this is digging straight into the browser itself, skipping past the usual content-space security restrictions.&lt;/p&gt;

&lt;p&gt;In other words: In Ubiquity, &lt;em&gt;the gun is loaded&lt;/em&gt; and you should be careful.&lt;/p&gt;

&lt;p&gt;Moving along, consider this next utility method:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;67&quot;&gt;
    /**
     * Given input data and modifiers, attempt to assemble data necessary to
     * post a bookmark.
     */
    _extractBookmarkData: function(input_obj, mods) {
        return {
            _user:
                this._getUserCookie(),
            url:
                context.focusedWindow.location,
            description:
                mods.entitled.text || context.focusedWindow.document.title,
            extended: 
                input_obj.text,
            tags:
                mods.tagged.text
        };
    },
&lt;/pre&gt;


&lt;p&gt;Named &lt;code&gt;._extractBookmarkData()&lt;/code&gt;, this utility method accepts the results of Ubiquity's parser interpreting the primary argument and modifier arguments supplied by the user.  Using these data structures, it attempts to build a structure representing the fields of a Delicious bookmark.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;_user&lt;/code&gt; field is used for authentication via the site login cookie.  The &lt;code&gt;url&lt;/code&gt; is set from the location bar of the current page.  The &lt;code&gt;description&lt;/code&gt;, or title, field of the bookmark is taken from either the &lt;code&gt;entitled&lt;/code&gt; modifier or the title of the current page.  The &lt;code&gt;tags&lt;/code&gt;, if any, come from the &lt;code&gt;tagged&lt;/code&gt; modifier.  And, finally, the &lt;code&gt;extended&lt;/code&gt; notes for the bookmark are taken from the primary input argument of the command.&lt;/p&gt;

&lt;p&gt;As you'll see shortly, this utility method will be used in both the preview and the execution of the command.&lt;/p&gt;

&lt;p&gt;Next, there's one more utility method to cover:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;85&quot;&gt;
    /**
     * Given an object, build a URL query string
     */
    _buildQueryString: function(data) {
        var qs = [];
        for (k in data) if (data[k]) 
            qs.push( encodeURIComponent(k) + '=' + 
                encodeURIComponent(data[k]) );
        return qs.join('&amp;');
    },
&lt;/pre&gt;


&lt;p&gt;In anticipation of using the Delicious V1 API, the &lt;code&gt;._buildQueryString()&lt;/code&gt; method accepts an object and constructs a URL query string from the encoded properties of the object.  This will be paired with the &lt;code&gt;._extractBookmarkData()&lt;/code&gt; method to supply data for API calls.&lt;/p&gt;

&lt;p&gt;Moving along, it's time to start digging into the meat of this Ubiquity command:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;95&quot;&gt;
    /**
     * Present a preview of the bookmark under construction during the course
     * of composing the command.
     */
    preview: function(pblock, input_obj, mods) {

        var bm          = this._extractBookmarkData(input_obj, mods);
        var user_cookie = this._getUserCookie();
        var user_name   = (user_cookie) ? user_cookie.split(' ')[0] : '';

        var ns = { user_name: user_name, bm: bm };
        var tmpl;
&lt;/pre&gt;


&lt;p&gt;With this code, the implementation of command method &lt;code&gt;.preview()&lt;/code&gt; has begun.  This method is used by Ubiquity to generate a live preview of the command.  Called with a DOM node (&lt;code&gt;pblock&lt;/code&gt;) and partially completed command input (&lt;code&gt;input_obj&lt;/code&gt; and &lt;code&gt;mods&lt;/code&gt;), this method is expected to build a representation of the command's results in the DOM node.  As the user types, this method will be called over and over again, ideally offering feedback as the user composes a command.&lt;/p&gt;

&lt;p&gt;Continuing on, consider this next chunk of code checking the validity of command input:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;107&quot;&gt;
        if (!user_name) {

            // If there's no user name, there's no login, so this command won't work. 
            tmpl = [ 
                '&lt;p style=&quot;color: #d44&quot;&gt;No active user found - log in at ', 
                '&lt;img src=&quot;http://delicious.com/favicon.ico&quot;&gt; ',
                '&lt;b&gt;&lt;a style=&quot;color: #3774D0&quot; href=&quot;http://delicious.com&quot;&gt;delicious.com&lt;/a&gt;&lt;/b&gt; ', 
                'to use this command.&lt;/p&gt;'
            ].join('');

        } else if (!bm.description) {

            // If there's no title, then this is an error too.
            tmpl = [ 
                '&lt;p style=&quot;color: #d44&quot;&gt;A title is required for bookmarks on ', 
                '&lt;img src=&quot;http://delicious.com/favicon.ico&quot;&gt; ',
                '&lt;b&gt;&lt;a style=&quot;color: #3774D0&quot; href=&quot;http://delicious.com&quot;&gt;delicious.com&lt;/a&gt;&lt;/b&gt; ', 
                '&lt;/p&gt;'
            ].join('');
&lt;/pre&gt;


&lt;p&gt;This chunk of code first checks for a user name, which can be extracted from a valid Delicious login cookie, if one was found.  If not found, the command will fail—so the preview built here will instruct the user to login at Delicious before going further.&lt;/p&gt;

&lt;p&gt;The second precondition for using the command is that the bookmark has been given a title.  By default, this is the title of the current page—but, some pages don't offer titles.  So, an error needs to be flagged if the user hasn't manually supplied a title in this case.&lt;/p&gt;

&lt;p&gt;Finally, notice in both of these error cases, a string of HTML is composed in the variable &lt;code&gt;tmpl&lt;/code&gt;.  This will be used at the end of the method to populate the DOM node passed in as &lt;code&gt;pblock&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, assuming that all the command's prerequisites have been met, it's time to try constructing a proper preview for the results of this command:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;126&quot;&gt;
        } else {

            // Attempt to construct a vaguely delicious-esque preview of a bookmark.
            tmpl = [ 
                '&lt;style type=&quot;text/css&quot;&gt;',
                    '.preview a { color: #3774D0 }',
                    '.del-bookmark { font: 12px arial; color: #ddd; background: #eee; line-height: 1.25em }',
                    '.del-bookmark a.title { color: #1259C7 }',
                    '.del-bookmark .full-url { color: #396C9B; font-size: 12px; display: block; padding: 0.25em 0 }',
                    '.del-bookmark .notes { color: #4D4D4D }',
                    '.del-bookmark .tags { color: #787878; padding-top: 0.25em; text-align: right }',
                '&lt;/style&gt;',
                '&lt;div class=&quot;preview&quot;&gt;',
                    '&lt;p&gt;Share a bookmark at &lt;img src=&quot;http://delicious.com/favicon.ico&quot;&gt; ',
                        '&lt;b&gt;&lt;a href=&quot;http://delicious.com/${user_name}&quot;&gt;delicious.com/${user_name}&lt;/a&gt;&lt;/b&gt;:&lt;/p&gt;',
                    '&lt;div class=&quot;del-bookmark&quot;&gt;',
                        '&lt;div style=&quot;padding: 1em;&quot;&gt;',
                        '&lt;a class=&quot;title&quot; href=&quot;${bm.url}&quot;&gt;${bm.description}&lt;/a&gt;',
                        '&lt;a class=&quot;full-url&quot; href=&quot;${bm.url}&quot;&gt;${bm.url}&lt;/a&gt;',
                        bm.extended ? 
                            '&lt;div class=&quot;notes&quot;&gt;${bm.extended}&lt;/div&gt;' : '',
                        bm.tags ?
                            '&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;tags:&lt;/span&gt; ${bm.tags}&lt;/div&gt;' : '',
                    '&lt;/div&gt;',
                '&lt;/div&gt;'
            ].join(&quot;\n&quot;);

        }

        pblock.innerHTML = CmdUtils.renderTemplate(tmpl, ns);
    },
&lt;/pre&gt;


&lt;p&gt;Building on the notion that previews are built in a DOM node, the code above uses both CSS and HTML to assemble a quick-and-dirty facsimile of a Delicious bookmark—which will be rendered like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/2008/ubiq-share-on-delicious-preview.jpg&quot; style=&quot;border: 1px solid #333; margin: 0.25em; padding: 0.25em&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Also note that Ubiquity provides a template engine for use in generating content—namely the &lt;a href=&quot;http://code.google.com/p/trimpath/wiki/JavaScriptTemplates&quot;&gt;JavaScript Templates&lt;/a&gt; engine from the &lt;a href=&quot;http://code.google.com/p/trimpath/wiki/TrimPath&quot;&gt;TrimPath&lt;/a&gt; project.  This engine may eventually be replaced with another, but the notion is that Ubiquity will provide tools to more easily generate previews and more.&lt;/p&gt;

&lt;p&gt;The conclusion of the &lt;code&gt;.preview()&lt;/code&gt; method uses the template engine with a call to &lt;code&gt;CmdUtils.renderTemplate()&lt;/code&gt; to inject content into the preview element by way of the &lt;code&gt;.innerHTML&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;Now that the preview is out of the way, it's time to get down to implementing the execution of the command:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;157&quot;&gt;    
    /**
     * Attempt to use the delicious v1 API to post a bookmark using the 
     * command input
     */
    execute: function(input_obj, mods) {
        var bm          = this._extractBookmarkData(input_obj, mods);
        var user_cookie = this._getUserCookie();
        var user_name   = (user_cookie) ? user_cookie.split(' ')[0] : '';

        if (!user_name) {
            // If there's no user name, there's no login, so this command won't work. 
            displayMessage('No active user found - log in at delicious.com ' +
                'to use this command.');
            return false;
        }

        if (!bm.description) {
            // If there's no title, somehow, then this is an error too.
            displayMessage(&quot;A title is required for bookmarks at delicious.com&quot;);
            return false;
        }
&lt;/pre&gt;


&lt;p&gt;Mirroring the &lt;code&gt;.preview()&lt;/code&gt; method, the &lt;code&gt;.execute()&lt;/code&gt; method first checks for validity of the arguments given by the user.  A missing user name or title result in a notification that the command has failed.&lt;/p&gt;

&lt;p&gt;But, if the arguments are all valid, it's time to actually issue a request to the Delicious V1 API:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;178&quot;&gt;
        var path = '/v1/posts/add';
        var url  = this._config.api_base + path;

        var req = Components.classes[&quot;@mozilla.org/xmlextras/xmlhttprequest;1&quot;].
            createInstance();

        req.open('POST', url, true);

        req.onload = function(ev) { 
            displayMessage('Bookmark &quot;' + bm.description + '&quot; ' + 
                'shared at delicious.com/' + user_name);
        }

        req.onerror = function(ev) { 
            displayMessage('ERROR: Bookmark &quot;' + bm.description + '&quot; ' + 
                ' NOT shared on delicious.com/' + user_name);
        }
&lt;/pre&gt;


&lt;p&gt;Using the base URL for the Delicious API declared earlier in the configuration section, the &lt;code&gt;.execute()&lt;/code&gt; method constructs an API URL for the &lt;code&gt;/v1/posts/add&lt;/code&gt; method.  Then, it creates an instance of &lt;code&gt;XMLHttpRequest&lt;/code&gt; from the browser to be used in sending the API request.  Event handlers are registered with the object to present notifications to the user indicating whether or not the API request was successful.&lt;/p&gt;

&lt;p&gt;At long last, it's time to wrap up this method and make the API request:&lt;/p&gt;

&lt;pre lang=&quot;javascript&quot; line=&quot;195&quot;&gt;
        req.setRequestHeader('Authorization', 'Basic Y29va2llOmNvb2tpZQ=='); // btoa('cookie:cookie')

        var mediator = Components.classes[&quot;@mozilla.org/appshell/window-mediator;1&quot;].
            getService(Components.interfaces.nsIWindowMediator);
        var win = mediator.getMostRecentWindow(null);
        var user_agent = win.navigator.userAgent + &quot;;Ubiquity-share-on-delicious&quot;;

        req.setRequestHeader(&quot;User-Agent&quot;, user_agent);      

        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        req.send(this._buildQueryString(bm));
    },

    EOF:null // I hate trailing commas
});
&lt;/pre&gt;


&lt;p&gt;The login cookie authentication supported by the Delicious V1 API is triggered by supplying a user name / password pair of &lt;code&gt;cookie&lt;/code&gt;, which is done by setting the &lt;code&gt;Authorization&lt;/code&gt; request header.  The login cookie is then expected to be passed in as the POST variable &lt;code&gt;_user&lt;/code&gt;, which is done in the &lt;code&gt;._extractBookmarkData()&lt;/code&gt; utility method.&lt;/p&gt;

&lt;p&gt;Another bit here that shows more access of browser resources is the construction of a unique User-Agent header for this API call based on the browser's own User-Agent string, something that's suggested in the guidelines for using the Delicious API.&lt;/p&gt;

&lt;p&gt;Finally, the &lt;code&gt;.execute()&lt;/code&gt; method—and the command itself—is wrapped up with by sending off the bookmark data encoded as POST form variables with the &lt;code&gt;._buildQueryString()&lt;/code&gt; utility method.&lt;/p&gt;

&lt;p&gt;And, that's it—a command-driven Delicious browser extension in a little over 200 lines of code.  There's still more to be done to really make this thing full-featured, but I think this shows off the basic features of Ubiquity.  I'm hoping to dig in deeper and explore further, taking a look at running Greasemonkey-style code at &lt;a href=&quot;https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial#Running_on_page_load_and_startup&quot;&gt;browser startup and page load&lt;/a&gt;, as well as playing with some more browser chrome features.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085986&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jclark.org/weblog/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=d0a9ab4b71ce193e98b7284ca257e327&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://jclark.org/weblog/&quot;&gt;Jason Clark&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085986&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-01T14:47:35&quot;&gt;2008-09-01T14:47:35&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;First off-  fantastic post.  Great to see a lengthy post here again, although I'm one to talk.  This is an excellent introduction to Ubiquity command development, and tres useful to boot.&lt;/p&gt;

&lt;p&gt;I'm wondering why you chose to construct and post the XMLHttpRequest manually instead of using jQuery, which is included with Ubiquity.  I don't know that there's any benefit other than some simplicity, but I took a crack at converting your code to use jQuery, which works nicely.  In the 'execute' function, replace everything after &quot;var url  = this._config.api_base + path;&quot; with this (hope code blocks work in comments):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
        var win = context.focusedWindow;
        var user_agent = win.navigator.userAgent + &quot;;Ubiquity-share-on-delicious&quot;;&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    jQuery.ajax({
      type: &quot;POST&quot;,
      url: url,
      data: this._buildQueryString(bm),
      username: &quot;cookie&quot;,
      password: &quot;cookie&quot;,
      beforeSend: function( req ) {
        req.setRequestHeader(&quot;User-Agent&quot;, user_agent); 
      },
      error: function() {
        displayMessage('ERROR: Bookmark &quot;' + bm.description + '&quot; ' + 
            ' NOT shared on delicious.com/' + user_name);
      },
      success: function() {
        displayMessage('Bookmark &quot;' + bm.description + '&quot; ' + 
            'shared at delicious.com/' + user_name);
      },
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Also, with both versions of the code, I'm seeing some unexpected behavior around authentication.  Assume I'm logged in to delicious, with &quot;stay logged in&quot; checked, and I restart my browser.  Trying to post with the command fails with a 401 unauthorized, even though I can see the cookie was sent (via Live HTTP Headers extension).  Going to delicious.com shows me logged in, and once I've viewed the site, the command works.  Except that now I can't reproduce; but I know it happened because I've got the headers.  At any rate, it is working nicely, but the previous failure is bugging me... feel like I'm overlooking something.  &lt;/p&gt;

&lt;p&gt;Thanks again for an awesome post.  Hope to see more of the same.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085988&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e799a79441c7543be48562403411cd13&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Ryan Scott Scheel&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085988&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-01T15:07:01&quot;&gt;2008-09-01T15:07:01&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;You should be helping with the documentation, if you aren't already.  Very nice job with this article;&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085991&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://azarask.in&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e4307f205d017ba76647806951e14bb0&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://azarask.in&quot;&gt;Aza Raskin&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085991&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-02T01:44:13&quot;&gt;2008-09-02T01:44:13&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Hi Leslie,&lt;/p&gt;

&lt;p&gt;This is a beautiful tutorial on writing a Ubiquity command. We'd love your help in making Ubiquity's documentation better (especially dev facing). You should totally link to this from the Ubiquity Wiki -- or even add the content in someway.&lt;/p&gt;

&lt;p&gt;Anyway, just wanted to say thanks.&lt;/p&gt;

&lt;p&gt;-- Aza&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085993&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.slackorama.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=15b474c86cd73c2d12c1d77af11c1d8a&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.slackorama.com&quot;&gt;seth&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085993&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-08T17:30:16&quot;&gt;2008-09-08T17:30:16&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Am I doing something wrong?  &lt;/p&gt;

&lt;p&gt;When I enter in &quot;sh this tagged tag1 tag2 entitled This is a title&quot; everything after the tagged is added as a tag. It's not seeing the entitled part.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085994&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://spyced.blogspot.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=849810634810c960e5e7c27fa54a0f5b&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://spyced.blogspot.com/&quot;&gt;http://spyced.blogspot.com/&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085994&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-15T19:12:58&quot;&gt;2008-09-15T19:12:58&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Did something break?  I'm getting a 404 accessing http://decafbad.com/hg/UbiquityCommands/file/tip/delicious.ubiq.js&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085995&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085995&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-09-15T23:07:42&quot;&gt;2008-09-15T23:07:42&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Yeah, looks like I had a small snafu with switching back from Lighttpd to Apache.  Left out a rewrite rule - doh!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085996&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=357a20e8c56e69d6f9734d23ef9517e8&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Tony&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085996&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-10-22T04:56:03&quot;&gt;2008-10-22T04:56:03&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Great article. This is replacing my delicious bookmarklet. Thanks!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085997&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=31461076fcbce091ff822fc9ac31315d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;dgtlchlk&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085997&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-04-14T01:06:57&quot;&gt;2009-04-14T01:06:57&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Great article and command.
Wish it worked correctly with the latest 0.1.8 release though. No matter what text you put in it adds everything as the notes. The tagged and entitled modifiers don't work.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085999&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.nolanhergert.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=957e24509baf770ba57ad306e20f201c&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.nolanhergert.com&quot;&gt;Nolan&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085999&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-04-16T03:10:07&quot;&gt;2009-04-16T03:10:07&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I second that comment. Delicious is actually saying the link given was &quot;chrome://browser/content/browser.xul&quot; and marking it as harmful inside delicious!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086002&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=3d056a5b07c384647fe0806b0dfc429e&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Justin&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086002&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-07-06T12:39:39&quot;&gt;2009-07-06T12:39:39&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Hi Leslie,&lt;/p&gt;

&lt;p&gt;Thanks for the delicious ubiquity command. Unfortunately, as one of the commenters above mentions, the tagged modifier doesn't seem to work. I'm using Ubiquity 0.5 pre and typing the phrase:&lt;/p&gt;

&lt;p&gt;share tagged foo&lt;/p&gt;

&lt;p&gt;Adds the bookmark to Delicious with the note text &quot;tagged foo&quot;&lt;/p&gt;

&lt;p&gt;Cheers, Justin&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221086004&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://ericscalf.com/stream&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=0775f9beff626496b86d7cb602e5f46f&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://ericscalf.com/stream&quot;&gt;Eric&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221086004&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-07-20T22:43:17&quot;&gt;2009-07-20T22:43:17&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Echoing others.. I'm using the latest ubiquity (err, next to latest.. 0.1.8?), and doing &quot;share-on-delicious this is a note tagged testing&quot; saves the link with notes &quot;this is a note tagged testing&quot; and no tags. :(  Then again, the other delicious command I've found (by someone else) is having the same issue.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Delicious 2.0 is more than a pretty new face</title>
        <link href="http://decafbad.com/blog/2008/08/04/delicious-20-is-more-than-a-pretty-new-face"/>
        <updated>2008-08-04T17:21:55+00:00</updated>
        <id>http://decafbad.com/blog/2008/08/04/delicious-20-is-more-than-a-pretty-new-face</id>
        <content type="html">&lt;p&gt;I'm no longer at Yahoo! and I no longer work on &lt;a href=&quot;http://delicious.com&quot;&gt;Delicious&lt;/a&gt;, but I'm still a huge supporter.  And, since I'm pretty sure everyone over there is either burnt out or still insanely busy at the moment, it might be awhile before anyone tells the full story of what this relaunch offers.  As it is, even I only know a bit of what all went into this effort.&lt;/p&gt;

&lt;p&gt;So, off the top of my head, I thought I might point out &lt;strong&gt;just a few&lt;/strong&gt; of the easily-missed improvements the new site offers beyond the great new love-it-or-hate-it visual redesign that seems to have occupied most of the discussion I've seen so far:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search works and is incredibly fast.&lt;/strong&gt;  In fact, search may really be the real star of the redesign show here—especially since del.icio.us often took 30 seconds or more for a simple search, rendering it all but useless.  Today, though, it's at ludicrous speed in comparison—and so finally, the real power of search applied to social bookmarking might start to shine with the critical mass of content found by real people using Delicious.&lt;/p&gt;

&lt;p&gt;To scratch my own itch, I've created &lt;a href=&quot;http://mycroft.mozdev.org/developer/devlist.html?email=l.m.orchard%40pobox.com&quot;&gt;an unofficial OpenSearch search engine plugin for Delicious&lt;/a&gt; on Mycroft.  Though I think it comes along with &lt;a href=&quot;http://delicious.com/help/tools&quot;&gt;the browser extensions&lt;/a&gt;, I've yet to find this for &lt;a href=&quot;http://mycroft.mozdev.org/developer/hosting.html&quot;&gt;autodiscovery&lt;/a&gt; from the site itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The notes field in bookmarks has been expanded from 255 to 1000 characters.&lt;/strong&gt;  Yes, this means that you can now include long running quotes from pages, or complete paragraphs of rambling discourse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://delicious.com/help/feeds&quot;&gt;The feeds have all been overhauled and reorganized&lt;/a&gt;.&lt;/strong&gt;  An attempt at backward compatibility was made, but the old feed URLs are all deprecated.  Replacing these, there's now &lt;a href=&quot;http://delicious.com/help/feeds&quot;&gt;a common and consistent URL namespace for feeds across formats&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Almost all RSS feeds have &lt;a href=&quot;http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/&quot;&gt;JSONP&lt;/a&gt; counterparts, and further feed formats could be considered.  Additionally, the old mix of RSS 1.0 and 2.0 has been dropped in favor of RSS 2.0 format across the board to support podcast and media enclosure elements consistently.  The &lt;a href=&quot;http://delicious.com/help/tools&quot;&gt;linkrolls, tagrolls, network badges, and tagometers&lt;/a&gt; now all use the new JSONP feeds—and the widgets can be examined as example code in using the feeds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tag bundles can now be viewed as combined bookmark views, complete with feeds.&lt;/strong&gt;  This augments bundles from a simple visual organization tool to a more powerful content aggregation function.  Personally, I never had much use for tag bundles until now, but since they can actually be used to partition tags and bookmarks I might actually take the time to use them.  Check out these example URLs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://delicious.com/britta/bundle:art%2Fdesign&quot;&gt;http://delicious.com/britta/bundle:art%2Fdesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feeds.delicious.com/v2/rss/britta/bundle:art%2Fdesign&quot;&gt;http://feeds.delicious.com/v2/rss/britta/bundle:art%2Fdesign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Bundles now work for tags, network contacts, and subscriptions.&lt;/strong&gt;  This means, for example, that you can partition your network contacts into topical groups.  From there, you can subscribe to those partitioned bookmarks in different folders in readers, or use the bundled bookmark views in mashups through JSON feeds.  Check out these example URLs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://delicious.com/network/bkerr/bundle:Brickyard&quot;&gt;http://delicious.com/network/bkerr/bundle:Brickyard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feeds.delicious.com/v2/rss/network/bkerr/bundle:Brickyard&quot;&gt;http://feeds.delicious.com/v2/rss/network/bkerr/bundle:Brickyard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Network member and fan feeds now include the date when the contact was added.&lt;/strong&gt;  Pro tip: Subscribe to fan feeds to see when new people have started following your bookmarks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://delicious.com/help/api&quot;&gt;Several previously undocumented parts of the V1 API have now been documented&lt;/a&gt;.&lt;/strong&gt;  In particular, the following new parameter combinations have been used with the browser extensions for primitive bookmark sync:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;https://api.del.icio.us/v1/posts/all?hashes&lt;/li&gt;
&lt;li&gt;https://api.del.icio.us/v1/posts/all?meta=yes&lt;/li&gt;
&lt;li&gt;https://api.del.icio.us/v1/posts/all?fromdt={DT}&amp;amp;todt={DT}&lt;/li&gt;
&lt;li&gt;https://api.del.icio.us/v1/posts/all?start={##}&amp;amp;results={##}&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;The posts/all API URL works again for users with large collections.&lt;/strong&gt;  With my 11k+ bookmarks, del.icio.us was keeling over with the attempt to assemble and deliver my entire collection with a posts/all call.  Now, however, Delicious 2.0 appears able to handle this call for my account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easter eggs have been rotated and recalibrated.&lt;/strong&gt; No, I'm not going to tell you what or where or how many they are.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085469&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e17949267bbfe21a0fadf1bbf00592b4&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://plasmasturm.org/&quot;&gt;Aristotle Pagaltzis&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085469&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T02:31:52&quot;&gt;2008-08-05T02:31:52&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;
  &lt;p&gt;Since I’m pretty sure everyone over there is either burnt out or still insanely busy at the moment, it might be awhile before anyone tells the full story of what this relaunch offers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Admit it, Les, you just got impatient after building a bunch of shiny toys that no one at Yahoo! seemed to be coming forth to tell the world about them. :) (I would be miffed too.)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085470&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.yining.org&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=cd8af1a8b7c1cfdca49fb19d4a98a7bc&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.yining.org&quot;&gt;Yining&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085470&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T06:51:44&quot;&gt;2008-08-05T06:51:44&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;one thing in the new version that disappoints me is the tab-to-complete feature is gone. It was replaced with a drop-down list which not only costs me more finger/hand movement but also breaks my daily usage habit of del.icio.us. Oh, maybe I can write a GMscript to scratch my own itch....&lt;/p&gt;

&lt;p&gt;Btw, regarding the search, I find using a keyworded bookmark is much faster. For example, I could setup keyword 'del' and just type 'del webdev+openid' to search all my bookmarks tagged with these two keywords. One plus point, it works on SeaMonkey too (which doesn't support opensearch yet).&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085471&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.osunick.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e4b643246238e03a2a481a9a28a3c576&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.osunick.com&quot;&gt;Nick&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085471&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T06:56:05&quot;&gt;2008-08-05T06:56:05&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Yay!  So glad you wrote this, Les!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085473&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://pauldwaite.co.uk/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=240d5b71429f8b782b029e19349ec435&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://pauldwaite.co.uk/&quot;&gt;Paul D. Waite&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085473&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T17:07:03&quot;&gt;2008-08-05T17:07:03&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;one thing in the new version that disappoints me is the tab-to-complete feature is gone. It was replaced with a drop-down list which not only costs me more finger/hand movement but also breaks my daily usage habit of del.icio.us&lt;/blockquote&gt;

&lt;p&gt;Amen.&lt;/p&gt;

&lt;p&gt;Also,the option to delete a bookmark from its own page seems to have disappeared. I have to find it in my list of bookmarks, which isn’t always easy when it’s been there for a couple of weeks.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085475&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://pauldwaite.co.uk/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=240d5b71429f8b782b029e19349ec435&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://pauldwaite.co.uk/&quot;&gt;Paul D. Waite&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085475&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T17:09:25&quot;&gt;2008-08-05T17:09:25&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Sorry, that sounded a bit negative. I do love how autocomplete now only offers me tags that I’ve used. And it is kinda neat to see how many times I’ve used each one, but I’d give that up to have the old tab-to-autocomplete back. Way too much thinking involved with the menu.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085476&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.innerlogics.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=fdf1879b5ea790d6b734a4e953bd9273&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.innerlogics.com&quot;&gt;Niv Singer&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085476&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T18:52:38&quot;&gt;2008-08-05T18:52:38&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I couldn't find the &quot;Network member and fan feeds&quot; - where are they??&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085478&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085478&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-05T19:03:00&quot;&gt;2008-08-05T19:03:00&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@Niv: Not all feeds are linked in from pages - check out the &lt;a href=&quot;http://delicious.com/help/feeds&quot; rel=&quot;nofollow&quot;&gt;feeds help page&lt;/a&gt; on delicious.com.  For example:&lt;/p&gt;

&lt;p&gt;http://feeds.delicious.com/v2/rss/networkmembers/nivsin&lt;/p&gt;

&lt;p&gt;http://feeds.delicious.com/v2/rss/networkfans/nivsin&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085479&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.1729.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=dd3f1ee67310b4f2b843498bf9c119c6&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.1729.com&quot;&gt;Philip Dorrell&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085479&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-06T02:01:52&quot;&gt;2008-08-06T02:01:52&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;It seems that the posting API's have all stopped accepting a &quot;tags&quot; parameter, which partly breaks my Firefox &quot;deli&quot; search keyword.&lt;/p&gt;

&lt;p&gt;e.g. &quot;deli toread math&quot; used to fill in tags &quot;toread&quot; and &quot;math&quot;, now it doesn't.&lt;/p&gt;

&lt;p&gt;Also, does delicious have any equivalent to Google's site: prefix? That would be really good for a &quot;most popular pages on my website&quot; option.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085480&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085480&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-06T21:41:06&quot;&gt;2008-08-06T21:41:06&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@philip Yup, that's broken for me too.  See also: http://decafbad.com/blog/2008/08/02/delicious-20-legacy-bookmarklet-fix&lt;/p&gt;

&lt;p&gt;As for something like site:, I think host: used to work but it seems no longer with the new search implementation.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085482&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://wizardishungry.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a592808d920cd15d2234638b4b5850d5&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://wizardishungry.com/&quot;&gt;Jon Williams&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085482&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-22T18:38:43&quot;&gt;2008-08-22T18:38:43&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;blockquote&gt;Network member and fan feeds now include the date when the contact was added. Pro tip: Subscribe to fan feeds to see when new people have started following your bookmarks.&lt;/blockquote&gt;

&lt;p&gt;Where is this? (I feel silly not being able to find fan feeds)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>delicious 2.0 legacy bookmarklet fix</title>
        <link href="http://decafbad.com/blog/2008/08/02/delicious-20-legacy-bookmarklet-fix"/>
        <updated>2008-08-02T22:34:28+00:00</updated>
        <id>http://decafbad.com/blog/2008/08/02/delicious-20-legacy-bookmarklet-fix</id>
        <content type="html">&lt;p&gt;As you've probably seen by now, &lt;a href=&quot;http://blog.delicious.com/blog/2008/07/oh-happy-day.html&quot;&gt;Delicious 2.0 has launched&lt;/a&gt;.  It's an all new design and the whole thing has been rewritten from the ground up.  Most of the gripes I've seem like general dislike of change—which actually attests to the gargantuan effort put forth to reimplement the original from scratch in a whole new language and architecture.&lt;/p&gt;

&lt;p&gt;That said, I found &lt;a href=&quot;http://twitter.com/lmorchard/statuses/875002291&quot;&gt;at least one little bug&lt;/a&gt; that stops my usual bookmarklet flow.  And, what's really annoying is that, it's probably a bug in code I wrote at one point.  As it turns out, the original URL parameters for the bookmark posting form don't seem to be accepted anymore, so legacy bookmarklets may be broken.  I swore I tested that, since I've got some personal investment in it.&lt;/p&gt;

&lt;p&gt;But, although I can't contribute code to the project anymore, I've at least still got &lt;a href=&quot;http://www.greasespot.net/&quot;&gt;Greasemonkey&lt;/a&gt;.  And, through &lt;a href=&quot;http://decafbad.com/2008/deliciouscom_legacy_book.user.js&quot;&gt;this quick &amp;amp; dirty user script&lt;/a&gt;, I'm back to using my legacy bookmarking bookmarklets.  In case you're interested, &lt;a href=&quot;javascript:u=%22USERNAME%22;q=location.href;e%20=%20%22%22%20+%20(window.getSelection%20?%20window.getSelection()%20:%20document.getSelection%20?%20document.getSelection()%20%20:%20document.selection.createRange().text);p=document.title;window.location.href=%22http://del.icio.us/%22+u+%22?jump=doclose&amp;amp;noui&amp;amp;tags=%22+encodeURIComponent(%22%s%22)+%22&amp;amp;url=%22+encodeURIComponent(q)+%22&amp;amp;description=%22+encodeURIComponent(p)+%20%20%22&amp;amp;extended=%22%20+%20encodeURIComponent('%22'+e+'%22').replace(/%20/g,%20%22+%22);&quot;&gt;here's my favorite Firefox keyword shortcut bookmarklet&lt;/a&gt;—just select some text, type the keyword in the URL bar with some tags, and hit return.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084822&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=4762519f72e7ada7f2050a77eedca0e5&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;Peter Beardsley&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084822&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-03T13:52:14&quot;&gt;2008-08-03T13:52:14&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Just curious-- what language was del.icio.us originally implemented in, and what language was it re-implemented in for 2.0?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221084825&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221084825&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-08-03T18:30:58&quot;&gt;2008-08-03T18:30:58&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;@peter: The original del.icio.us was built with Mason in Perl, backed by MySQL.  The new Delicious 2 is built with Symfony in PHP for the web frontend, with all the out-of-box Symfony database abstraction replaced by a Yahoo!-developed data management and business logic layer written mostly in C++ for the backend.  I'm pretty sure I've read all of that in other public releases, so I don't think I'm letting any cats out of bags there :)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>date-based pagination</title>
        <link href="http://decafbad.com/blog/2008/07/17/date-based-pagination"/>
        <updated>2008-07-17T18:16:01+00:00</updated>
        <id>http://decafbad.com/blog/2008/07/17/date-based-pagination</id>
        <content type="html">&lt;p&gt;Here's a small idea I've not yet had the chance to try out on a large scale:  Time-based pagination in lieu of page-number-based pagination for personal content - ie. blogs, bookmarks, status updates, etc.  (You know, User Generated Content except I dislike the term.)&lt;/p&gt;

&lt;p&gt;Page numbers change over time, while time-based URLs are stable.  Most people don't generate an unreasonable amount of stuff in a day, so a page-per-day might not be so bad.  But, if there's too much stuff, degenerate to a page-per-12-hours or whatnot.&lt;/p&gt;

&lt;p&gt;Delicious used to have something like this in the web UI, back in the mists of 2003 or so, but Joshua got rid of it after a few design iterations.  The Delicious API is still somewhat based on it, which causes some confusion—but I tend to like it, thus this post.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085362&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://beesbuzz.biz/&quot;&gt;&lt;img src=&quot;http://disqus.com/api/users/avatars/plaidfluff.jpg&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://beesbuzz.biz/&quot;&gt;fluffy&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085362&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-17T20:22:38&quot;&gt;2008-07-17T20:22:38&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;You mean, like the date-based archives that Movable Type has had for ages?&lt;/p&gt;

&lt;p&gt;Yeah, I like those.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085363&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://brevity.org/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=55d0166df4149bbea204bb997f8447cb&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://brevity.org/&quot;&gt;Neil Kandalgaonkar&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085363&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-18T19:44:42&quot;&gt;2008-07-18T19:44:42&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I've had the same idea for Upcoming, for obvious reasons... our SRP pagination would then be permalinks.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221085364&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.anildash.com/&quot;&gt;&lt;img src=&quot;http://disqus.com/api/users/avatars/anildash.jpg&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.anildash.com/&quot;&gt;Anil Dash&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221085364&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-25T17:11:40&quot;&gt;2008-07-25T17:11:40&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Actually, yeah, we built the default pagination for archives in MT4 to be category-by-month, for exactly this reason. I regularly see &quot;?page=2&quot; in URLs and it just seems like such an obvious, avoidable mistake for so many to have embraced. SEO aside, permalinks that are destined to expire over time seem pretty reader-hostile, too.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Queue everything and delight everyone</title>
        <link href="http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone"/>
        <updated>2008-07-04T19:17:18+00:00</updated>
        <id>http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone</id>
        <content type="html">&lt;p&gt;This is a blog post I've had simmering in my brainmeats for well over a year or two.  I'm suddenly inspired to break blog-radio-silence and get it out of my head.&lt;/p&gt;

&lt;p&gt;From &lt;a href=&quot;http://www.russellbeattie.com/blog/let-the-microblogs-bloom&quot;&gt;Let the microblogs bloom - RussellBeattie.com&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;Once this is widely accepted (and I'm sure there are many that would argue with me), the thing that will separate these types of services won't be whether they stay up (ala Twitter), but how fast your subscription messages are updated. Some services might be smaller or offer more features but not update as quickly whereas others will pride themselves on being as close to real-time as possible. The key is that it's all about messaging, not publishing. (Oh, and this also facilitates federation as well, but that's another topic).&lt;/blockquote&gt;


&lt;p&gt;See also: &lt;a href=&quot;http://randomfoo.net/blog/id/4182&quot;&gt;Rearchitecting Twitter: Brought to You By the 17th Letter of the Alphabet - random($foo)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the problems it seems most modern web apps face is the tendency to want to do everything all at once, and all in the same code that responds directly to a user.  Because, while you're in there building a user interface, it's &lt;em&gt;easy&lt;/em&gt; to implement everything else that needs to happen in that same UI module or library.&lt;/p&gt;

&lt;p&gt;Someone wants to post a bookmark?  Someone wants to post a message?  Well, of course you want the system to cross-reference and deliver that new piece of User Generated Content through every permutation of tag, recipient, keyword, and notification channel supported by your system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt;, do you &lt;em&gt;really&lt;/em&gt; have to do everything all at once—while the person who generated that content is tapping his or her foot, waiting for the web interface to respond with feedback?  Are all of these things immediately vital to the person watching the browser spin, &lt;em&gt;right now&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;No.  Your user wants to get on with things.  He or she wants to see the submitted content get accepted and, as feedback and confirmation, see it reflected in a personal view immediately.  Does it matter—to &lt;em&gt;this person&lt;/em&gt;, at &lt;em&gt;this moment&lt;/em&gt;—whether it shows up &lt;em&gt;simultaneously&lt;/em&gt; in a friend's inbox, the public timeline, a global tag page, or even an RSS or Atom feed?&lt;/p&gt;

&lt;p&gt;Again, no, simultaneity doesn't really matter—because no human beings actually appreciate it.  Instead, imagine a ripple effect of concentric social and attention contexts with associated people spreading out from the original submission.  (This probably rates the creation of a diagram someday.)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To make the person who's submitting something happy, offer feedback visible in their own personal context in under 50-200 milliseconds.  (That is, less than half-a-second at worst, in people terms.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The next person to delight is someone following the first person's published content—and humanly speaking, delays of &lt;em&gt;tens of thousands of milliseconds&lt;/em&gt; can be acceptable here.  (That is, 1-10 seconds at worst, in people terms.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, you can start worrying about strangers, allowing the content to propagate to tag pages, keyword tracking pages, and other public views—and I'd assert that delays of &lt;em&gt;hundreds of thousands of milliseconds&lt;/em&gt; are acceptable here.  (That is, 1-2 minutes at worst, in people terms.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The idea here is that the social structure can help you scale, while still delighting people.  Even with these delays, the system is still better at getting the word out than the original content creator would be at notifying all the others involved with an out-of-band system like IM or email.  And that's at worst—on most good days, all the delays should tend to be on the order of seconds or less.&lt;/p&gt;

&lt;p&gt;And how do you do all of this?  Use queues.  Sure, the original submission of content can and should be done all at once—just enough to get the content into the user's collection.  Then, queue a job for further processing and get out of the way.  In fact, just queue one job from the user interface—the processor of &lt;em&gt;that&lt;/em&gt; queue can then queue further jobs for all the other individual processing tasks that are likely susceptible to plenty of parallel processing and horizontal scaling.&lt;/p&gt;

&lt;p&gt;Meanwhile, the original user creating content has been thanked for their submission and life goes on.  In fact, their life may include going on to submit many more pieces of content in rapid succession, thanks to your delightfully responsive web user interface.&lt;/p&gt;

&lt;p&gt;And, in the end, that's really the purpose of a web-based content creation interface—accepting something as quickly as possible to make the user happy enough to continue submitting more.  The other part of the user interface, retrieval, serves simply to get the original content distributed as fast as can be reasonably expected.&lt;/p&gt;

&lt;p&gt;Now, preparing for fast retrieval is another story.  The flip side to processing queues are message inboxes—expect content duplicated everywhere and fetched simply, rather than using cleverly expressed SQL joins that bring a system to its knees.  But, that's another post altogether. :)&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083313&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://fatalerror.in&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=15516fd23722eeca86b8ea91738eea4b&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://fatalerror.in&quot;&gt;shyam&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083313&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-04T21:12:46&quot;&gt;2008-07-04T21:12:46&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Interesting bits of conversation happening all over the place regarding queues and the irony of it all - the much maligned Java has had workqueues since the early days.&lt;/p&gt;

&lt;p&gt;What everyone will learn, rather painfully in in cases like Twitter, is that all data is not created, consumed or processed equally. If you write your system which treats data equally you'll wind up with many Twitters all over the place.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083314&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083314&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-04T21:37:30&quot;&gt;2008-07-04T21:37:30&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Oh, definitely.  Work queues are not a new thing at all.  It's just that I think there're a lot of modern web app builders who skipped Java &quot;enterprise&quot; software—skipped, or hoped to run away—and are rediscovering the whole set of problems.  Maybe the solutions will be less over-engineered this time.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083315&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://mikewarot.blogspot.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=04f21a4b6a007063d191b66c34f71710&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://mikewarot.blogspot.com&quot;&gt;Mike Warot&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083315&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-04T21:40:15&quot;&gt;2008-07-04T21:40:15&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;The thing that drives me nuts about twitter is that the core data rate is only about 30k/second... yet it kept going down. It's easy to spit out a broadcast to a subnet and never even miss a packet if there are only 100 of them per second or so. There's no reason on god's green earth that twitter should be anywhere near overloaded.&lt;/p&gt;

&lt;p&gt;Bad architecture, on the other hand, is the work of Satan. ;-)&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083317&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://simonwillison.net/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=ac7005eff7720218df4cf0c72ddf6a3d&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://simonwillison.net/&quot;&gt;Simon Willison&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083317&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-04T21:40:39&quot;&gt;2008-07-04T21:40:39&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Thank you! I've been trying to put my thumb on why queues are so interesting for months; this expresses it perfectly.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083319&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.wachob.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=5c8ad784d2b5d12d57cf707dded1d58c&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://blog.wachob.com&quot;&gt;Gabe Wachob&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083319&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-04T22:54:10&quot;&gt;2008-07-04T22:54:10&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Usually I would have something serious to say in agreement with you, because I do so much agree with you.&lt;/p&gt;

&lt;p&gt;But I have just one comment: &lt;/p&gt;

&lt;p&gt;DUH!!!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083320&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.docuverse.com/blog/donpark/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=88f2ee32d146425a422f58f8eab5424b&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.docuverse.com/blog/donpark/&quot;&gt;Don Park&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083320&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-06T05:16:32&quot;&gt;2008-07-06T05:16:32&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Good suggestions. For social services like Twitter, I would also add one more item:&lt;/p&gt;

&lt;p&gt;Prioritize by Relationship&lt;/p&gt;

&lt;p&gt;For example, two-way Twitter relationships (mutual-follow or recent @ or direct message exchange) should be refreshed before one-way. One can go further by placing higher priority on users whom poster sent messages to or received from within past X-hours.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083323&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.rabbitmq.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=6f355ae1f33640b777cae294092116ff&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.rabbitmq.com&quot;&gt;alexis&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083323&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-10T12:35:25&quot;&gt;2008-07-10T12:35:25&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;er... eventually consistent social graphs anyone?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083324&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://cosmicrealms.com&quot;&gt;&lt;img src=&quot;http://disqus.com/api/users/avatars/Sembiance.jpg&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://cosmicrealms.com&quot;&gt;Robert Schultz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083324&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-10T13:36:22&quot;&gt;2008-07-10T13:36:22&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I agree with everything you've said. Especially the last part, duplicating data in the format it will be retrieved in rather than using complicated and CPU intensive SQL queries. This is especially true for any sort of statistics or reporting. I learned this by seeing my website's statistics growing slower and slower to retrieve as more and more traffic caused the database to become larger and larger and all of a sudden those queries that ran nearly instantly, even with good indexing were taking several seconds to return.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083326&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=8acae029d9833597f8eb1623f94ef7e6&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;citric&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083326&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-10T21:49:19&quot;&gt;2008-07-10T21:49:19&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Web apps doing things while the user waits unnecessarily is an old phenomenon. I think it's often a matter of developers not wanting to (and/or being politically unable to) venture into what they consider the sysadmin's domain. Take the way-too-common case of apps that make the client wait while it does housekeeping. Why isn't this in a cron job? One reason is maybe this is KewlOSSBlogWikiPackage and it's simpler to say &quot;just untar the package under htdocs and you're done&quot; instead of saying &quot;also, unpack these scripts in a non-servable area and set them up to run hourly, but not all at the same time; stagger them a little. And run them with the same UID your web server is running as&quot;. But we end up with a lot of apps that (badly) reimplement basic tools their OS ships with in the first place.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083327&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=1d7a7610cb0f02de44be3c4186f82ac3&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://webseitz.fluxent.com/wiki&quot;&gt;Bill Seitz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083327&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-07-28T21:23:06&quot;&gt;2008-07-28T21:23:06&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I wonder if you're still setting the bar too high for low-priority connections. I mean, microblogging &lt;em&gt;isn't&lt;/em&gt; really messaging, and maybe isn't (shouldn't-be?) conversation. &lt;/p&gt;

&lt;p&gt;So why wouldn't 10-15min be good enough?&lt;/p&gt;

&lt;p&gt;What % of &quot;messages&quot; are &lt;em&gt;read&lt;/em&gt; instantly after they hit an inbox?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083328&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.yukes.com/2008/11/jimdo-dropr-php-messa&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=151a00c8656ea5c733dff2ac3adb27a3&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.yukes.com/2008/11/jimdo-dropr-php-messa&quot;&gt;Jay Yukes&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083328&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-11-23T10:35:55&quot;&gt;2008-11-23T10:35:55&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I had to solve a similar problem.  Needed the fastest possible response, so had to rule out interacting with the Database directly from the web app.  Used PHP message queue Dropr to defer all DB work.  It is very fast, easily over 1000 messages/second&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083329&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=70c1729db01a21a2a9d236f336e3beff&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;&quot;&gt;jmxz&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083329&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-02-13T20:00:13&quot;&gt;2009-02-13T20:00:13&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Wow those comments make me feel old.  I remember when these java queues everyone's referring to reminded me of how I had a VAX dedicated to queuing and scheduling batch jobs for a Cray.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083331&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://chr.ishenry.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=4ab185c23be3076c02c2b7b7f48062d1&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://chr.ishenry.com&quot;&gt;Chris Henry&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083331&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2009-06-11T20:09:47&quot;&gt;2009-06-11T20:09:47&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Handling load is probably one of the biggest problems facing websites today.  Queueing is definitely the way to go, but like you said, sites need the type of architecture where it's easy to deploy services to different machines.  Usually by the time the site is under load, it's too late...&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221083333&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://9fans.net&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=5b5f08225c299dd0955eb13d6b5c043c&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://9fans.net&quot;&gt;maht&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221083333&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2010-05-04T14:50:05&quot;&gt;2010-05-04T14:50:05&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;I use Inotify as my queue messaging system&lt;/p&gt;

&lt;p&gt;http://maht0x0r.blogspot.com/2009/06/serialising-multiple-writers-in-shell_20.html&lt;/p&gt;

&lt;p&gt;Inotify can wait on MOVED_TO or CLOSE_WRITE events so that you can add them to the queue when the upload has finished.&lt;/p&gt;

&lt;p&gt;It should also be noted that this is a mnethod of load balacing too. Instead of 1000 parallel thumbnails being produced all context switching away, you can determine how many processes get spawned, use the OS' resource managing features etc.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>wow, eve, and delicious</title>
        <link href="http://decafbad.com/blog/2007/11/21/wow-eve-and-delicious"/>
        <updated>2007-11-21T04:20:14+00:00</updated>
        <id>http://decafbad.com/blog/2007/11/21/wow-eve-and-delicious</id>
        <content type="html">&lt;p&gt;Come see me try to write big words &lt;a href=&quot;http://decafbad.com/recaffeinated/&quot;&gt;on my new blog&lt;/a&gt; about &lt;a href=&quot;http://decafbad.com/recaffeinated/archives/2007/11/20/WoWEVEandDelicious.html&quot;&gt;what I hope is not a new MMORPG addiction&lt;/a&gt;, while I work through the aftermath of this thing having been hacked.&lt;/p&gt;
</content>
    </entry>
    
    

    <entry>
        <title>bookmarking outlier</title>
        <link href="http://decafbad.com/blog/2007/10/09/bookmarking-outlier"/>
        <updated>2007-10-09T16:18:56+00:00</updated>
        <id>http://decafbad.com/blog/2007/10/09/bookmarking-outlier</id>
        <content type="html">&lt;p&gt;I've amassed &lt;a href=&quot;http://del.icio.us/deusx&quot;&gt;9681 bookmarks on del.icio.us&lt;/a&gt; as of right now.  Quick napkin calculation:  I post an average of 7 bookmarks a day, over my lifetime of 1353 days using the site.  Within the next 45 days or so, I should reach 10000 bookmarks at this rate.  I wonder if I should throw a party?&lt;/p&gt;

</content>
    </entry>
    
    

    <entry>
        <title>Invites to the delicious preview</title>
        <link href="http://decafbad.com/blog/2007/09/28/invites-to-the-delicious-preview"/>
        <updated>2007-09-28T18:12:05+00:00</updated>
        <id>http://decafbad.com/blog/2007/09/28/invites-to-the-delicious-preview</id>
        <content type="html">&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; &lt;i&gt;Oh!  And since even I missed this link in the original blog post, you can &lt;a href=&quot;http://del.icio.us/help/preview&quot;&gt;request to be invited&lt;/a&gt;.  Not sure if that results in an email, either, though.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update #2:&lt;/b&gt;  &lt;i&gt;Also, we're &lt;a href=&quot;http://www.deliciousforums.com/&quot;&gt;trying out Vanilla forums&lt;/a&gt; as an alternative to the delicious mailing list.  If you're invited to the preview, your login should work there too.  We might even launch public forums once del 2 is out.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;In case anyone's forgotten:  I work on &lt;a href=&quot;http://del.icio.us&quot;&gt;delicious&lt;/a&gt;.  Since I've had a steady stream of friends and acquaintances asking me about how they can get into the invite, I thought I'd mention this:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;You may already have been invited!&lt;/b&gt;  :)&lt;/p&gt;

&lt;p&gt;Unlike most Web 2.0 sites that open up a preview or invite-only thing with a mysterious sign-up form, we can't fire off an email when we create an account for someone on our preview.  It's thanks to our privacy policy - although we have the email addresses of most everyone we've been adding to the preview, we're not allowed to send anything other than password recovery emails.  Weird, I know, but sometimes organizations try to follow things like that.&lt;/p&gt;

&lt;p&gt;So, the problem is that we have many more people invited to the preview than have actually started using it.  As briefly mentioned in the &lt;a href=&quot;http://blog.del.icio.us/blog/2007/09/taste-test.html&quot;&gt;blog post announcing the preview&lt;/a&gt;, you need to check your &quot;Links for You&quot; to see if you've been sent a link to the preview.&lt;/p&gt;

&lt;p&gt;But, if your invite has possibly been buried in other links from friends - you might just &lt;a href=&quot;http://preview.delicious.com&quot;&gt;try signing into the preview&lt;/a&gt; with the username and password from your existing delicious account!  It might just work.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082580&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://lascribe.net/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=756d205a4a679da61c2c9654b96b242f&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://lascribe.net/&quot;&gt;chryss&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082580&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-09-28T19:58:43&quot;&gt;2007-09-28T19:58:43&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Sniff. Cry. I'm not.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082581&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://slackorama.com/blog&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=15b474c86cd73c2d12c1d77af11c1d8a&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://slackorama.com/blog&quot;&gt;slackorama&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082581&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-09-28T21:12:20&quot;&gt;2007-09-28T21:12:20&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Wah.  Nor am I.  We are network buds and everything?  What's up with that?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082583&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://claimid.com/severud&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=a344bb19ed0516777f537dba4ca18da1&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://claimid.com/severud&quot;&gt;Kevin Severud&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082583&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2007-09-28T22:27:55&quot;&gt;2007-09-28T22:27:55&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;So if I haven't gotten my invite yet and I log in trough the preview link (which I did) should my bookmarks still have been imported?  Currently I have none of my bookmarks from the original site.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221082585&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://del.icio.us/dasmart&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=6449c0d7d0049d73e2afcdf053682d46&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://del.icio.us/dasmart&quot;&gt;D. Archibald Smart&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221082585&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2008-03-05T03:56:24&quot;&gt;2008-03-05T03:56:24&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;if i promise to use the preview, can i get an invite, please?&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>correlation is not causation</title>
        <link href="http://decafbad.com/blog/2006/12/21/correlation-is-not-causation"/>
        <updated>2006-12-21T02:01:38+00:00</updated>
        <id>http://decafbad.com/blog/2006/12/21/correlation-is-not-causation</id>
        <content type="html">&lt;p&gt;By the by:  Correlating the &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;new del.icio.us JSON URL feed&lt;/a&gt; with &lt;a href=&quot;http://google-code-updates.blogspot.com/2006/12/beyond-soap-search-api.html&quot;&gt;Google's recent deprecation of the SOAP Search API&lt;/a&gt; is about as effective as noticing how often the clock reads 12:34 when you just happen to be looking at it.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090761&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.joegrossberg.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=f288a8afe5302a16a366d5e9d34f2fec&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.joegrossberg.com&quot;&gt;Joe Grossberg&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090761&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T13:10:16&quot;&gt;2006-12-21T13:10:16&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Because ... you say so? :)&lt;/p&gt;

&lt;p&gt;Also, I think you misuse the word &quot;correlation&quot;.&lt;/p&gt;

&lt;p&gt;And I think there is a correlation -- both are indicative of a trend in &quot;web services&quot; today.&lt;/p&gt;

&lt;p&gt;JSON and YAML are getting more popular in that arena and XML (especially SOAP) is something that a lot of programmers dislike workign with.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>Tagometers and Travesties</title>
        <link href="http://decafbad.com/blog/2006/12/21/tagometers-and-travesties"/>
        <updated>2006-12-21T01:19:56+00:00</updated>
        <id>http://decafbad.com/blog/2006/12/21/tagometers-and-travesties</id>
        <content type="html">&lt;p&gt;You know you've truly arrived in Silicon Valley when &lt;a href=&quot;http://blog.del.icio.us/blog/2006/12/the_new_and_tag.html&quot;&gt;the darling new feature you just helped launch&lt;/a&gt; on &lt;a href=&quot;http://del.icio.us/&quot;&gt;a Web 2.0 site&lt;/a&gt; gets shredded in &lt;a href=&quot;http://www.scripting.com/2006/12/20.html#godBlessTheReinventers&quot;&gt;a rant by Dave Winer&lt;/a&gt;.  :)&lt;/p&gt;

&lt;p&gt;My day, having started with me in a foul mood, has been made.  Pre-launch, the tooth marks in my tongue have gotten deep as I watch the &lt;a href=&quot;http://scripting.wordpress.com/2006/12/20/scripting-news-for-12202006/&quot;&gt;comments&lt;/a&gt; pile up.  It's exciting to have so many people debating something you've made.  (Update:  Seriously.  I'm in a better mood now.  It's made me laugh.)&lt;/p&gt;

&lt;p&gt;Actually, it wasn't the &lt;a href=&quot;http://blog.del.icio.us/blog/2006/12/the_new_and_tag.html&quot;&gt;feature itself&lt;/a&gt; that got shredded, so much as the &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;new JSON data feed&lt;/a&gt; revealed before the &lt;a href=&quot;http://blog.del.icio.us/blog/2006/12/the_new_and_tag.html&quot;&gt;intended star of the show&lt;/a&gt; made it on-stage, by way of &lt;a href=&quot;http://developer.yahoo.net/blog/archives/2006/12/preview_of_the.html&quot;&gt;a screencast preview on Y!DN by Matt McAlister&lt;/a&gt; and &lt;a href=&quot;http://www.niallkennedy.com/blog/archives/2006/12/delicious-url-api.html&quot;&gt;an amplification by Niall Kennedy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The feed itself is mainly intended to power our new &lt;a href=&quot;http://del.icio.us/help/tagometer&quot;&gt;Tagometer&lt;/a&gt; page widget include thingy.  Beyond that, leaving the feed decoupled from the include itself made sense to me, both for our own flexibility's sake and as a nod toward our mashup friends in the blogosphere and lazyweb.&lt;/p&gt;

&lt;p&gt;You see, I like JSON.  It was convenient in this use case of creating a remote blog widget fed by cross-domain sourced data.  I, personally, didn't even have to &lt;a href=&quot;http://www.scripting.com/2006/12/20.html#godBlessTheReinventers&quot;&gt;reinvent anything&lt;/a&gt; that wasn't already implemented in &lt;a href=&quot;http://json.org/&quot;&gt;assorted off-the-web tools&lt;/a&gt;.  JSON worked for this purpose - it might not work for your purpose.  &lt;strike&gt;If it doesn't, please accept my insincere apology, but yours wasn't my primary goal.  Attempts to string me up for this travesty will be met with giggles and pointing.&lt;/strike&gt;  (Update:  I realize I'm not the to-be-strung-up party responsible for the JSON travesty - I just couldn't resist being a smart ass for its own sake.  I really do giggle and point a lot.  My &lt;em&gt;actual&lt;/em&gt; apologies for that.)&lt;/p&gt;

&lt;p&gt;It's funny, laugh.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt; is not really an API.  &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt; is not a bold declaration of side-taking in the grand war of web service specifications.  Do not base business models on &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt;.  Caution: &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt; may suddenly accelerate to dangerous speeds or stop altogether.  &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt; contains a liquid core, which, if exposed due to rupture, should not be touched, inhaled, or looked at.  Ingredients of &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt; include an unknown glowing substance which fell to Earth, presumably from outer space.  If &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt; begins to smoke, get away immediately. Seek shelter and cover head.&lt;/p&gt;

&lt;p&gt;Do not taunt &lt;a href=&quot;http://del.icio.us/help/json/url&quot;&gt;JSON URL feed&lt;/a&gt;.&lt;/p&gt;

&lt;div id=&quot;comments&quot; class=&quot;comments archived-comments&quot;&gt;
            &lt;h3&gt;Archived Comments&lt;/h3&gt;
            
        &lt;ul class=&quot;comments&quot;&gt;
            
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090833&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.scripting.com/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2378b474e8eadf5da80e86c2bbc75a74&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.scripting.com/&quot;&gt;Dave Winer&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090833&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T02:00:51&quot;&gt;2006-12-21T02:00:51&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Not sure if I helped your mood or made it worse, but the rant wasn't about you. &lt;/p&gt;

&lt;p&gt;http://www.json.org/xml.html&lt;/p&gt;

&lt;p&gt;Tell me what you think of that bit of hyperbole. Someone there is trying to undermine a lot of work a lot of people did over a long period of time to get software to interoperate. When you say that's just my issue, you miss the point. It should be everyone's.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090834&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://gfmorris.net/&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=505e3b39dcea29b3ded74a5494c493eb&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://gfmorris.net/&quot;&gt;Geof F. Morris&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090834&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T02:28:32&quot;&gt;2006-12-21T02:28:32&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Aw, man.  It should've been &quot;Do not taunt happy JSON URL feed.&quot;&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090836&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=2377f34a68801b861c3e54e1301f0dce&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.decafbad.com&quot;&gt;l.m.orchard&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090836&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T02:47:44&quot;&gt;2006-12-21T02:47:44&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;Honestly, it brightened my mood.  The smiley was neither ironic nor sarcastic.  Something big I helped launch has been stirring an interesting discussion, however tangential my blame in the making.  &lt;/p&gt;

&lt;p&gt;Vanity and Carly Simon aside, I know I'm not the main perpetrator of JSON.  I just couldn't resist an opportunity to be a smart ass.  For that I have a &lt;em&gt;sincere&lt;/em&gt; apology.  I should probably strike it or delete it now that the giddiness of a major launch and a lot of attention has subsided.&lt;/p&gt;

&lt;p&gt;But seriously, what I meant above is not that this is &lt;em&gt;your&lt;/em&gt; issue, per se.  This post is really more directed at some comments on your blog post, in bulk.  &lt;/p&gt;

&lt;p&gt;Our particular intentions behind using JSON here do not necessarily map to anyone else's expectation from a web service or standards-driven perspective.  It seems like a lot of people are looking at this JSON data since its early release, divorced from it's main consumer:  The Tagometer JS include.  It works for that purpose - and incidentally might help others - but we're not working very hard to support other uses.&lt;/p&gt;

&lt;p&gt;Apropos of that, I don't particularly buy the hyperbole about JSON being XML's superior in the general case.  JSON's a brilliant hack, but it's got issues.  And seriously, if anyone thinks that adding and removing script tags on the fly in a browser DOM is the best overall way to go about things...  they should be strung up.  It just so happens that right now, it's the only way to do some things.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090837&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://bon.gs&quot;&gt;&lt;img src=&quot;http://www.gravatar.com/avatar.php?gravatar_id=e8bc54082f8f4894f625bb229265b9bd&amp;amp;size=32&amp;amp;default=http://mediacdn.disqus.com/1320279820/images/noavatar32.png&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://bon.gs&quot;&gt;timb&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090837&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-21T11:22:52&quot;&gt;2006-12-21T11:22:52&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;hooray, i'm glad to see the json url feed.&lt;/p&gt;

&lt;p&gt;however, i shouldn't have to generate the md5s of the urls i am interested in... i should just be able to give it the actual urls.&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;li class=&quot;comment&quot; id=&quot;comment-221090838&quot;&gt;
            &lt;div class=&quot;meta&quot;&gt;
                &lt;div class=&quot;author&quot;&gt;
                    &lt;a class=&quot;avatar image&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.jm3.net/&quot;&gt;&lt;img src=&quot;http://disqus.com/api/users/avatars/jm3.jpg&quot;/&gt;&lt;/a&gt;
                    &lt;a class=&quot;avatar name&quot; rel=&quot;nofollow&quot; 
                       href=&quot;http://www.jm3.net/&quot;&gt;John Manoogian III (jm3)&lt;/a&gt;
                &lt;/div&gt;
                &lt;a href=&quot;#comment-221090838&quot; class=&quot;permalink&quot;&gt;&lt;time datetime=&quot;2006-12-30T02:28:08&quot;&gt;2006-12-30T02:28:08&lt;/time&gt;&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class=&quot;content&quot;&gt;&lt;p&gt;mmmmm, swilling the liquid core...!&lt;/p&gt;&lt;/div&gt;
            
        &lt;/li&gt;
    
        &lt;/ul&gt;
    
        &lt;/div&gt;



</content>
    </entry>
    
    

    <entry>
        <title>painfully metalicious</title>
        <link href="http://decafbad.com/blog/2006/11/29/painfully-metalicious"/>
        <updated>2006-11-29T00:05:22+00:00</updated>
        <id>http://decafbad.com/blog/2006/11/29/painfully-metalicious</id>
        <content type="html">&lt;p&gt;I find this sequence of URLs almost as funny as &lt;a href=&quot;http://decafbad.com/blog/2005/12/23/like-a-blonde-ouroboros&quot;&gt;the blonde joke&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/?url=http%3A//del.icio.us/&quot;&gt;http://del.icio.us/url/?url=http%3A//del.icio.us/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/9a81616a6fdc3fd6cd432f0c3cce9b5c&quot;&gt;http://del.icio.us/url/9a81616a6fdc3fd6cd432f0c3cce9b5c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/b944c5e478a1e32dc71af722951498e3&quot;&gt;http://del.icio.us/url/b944c5e478a1e32dc71af722951498e3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/3ddb685e75e1bd74363748355dc30d2d&quot;&gt;http://del.icio.us/url/3ddb685e75e1bd74363748355dc30d2d&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/e2ca7a0b59613504f3b0658a1b519b33&quot;&gt;http://del.icio.us/url/e2ca7a0b59613504f3b0658a1b519b33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/27209b794819a0dce0e3e970be2d1789&quot;&gt;http://del.icio.us/url/27209b794819a0dce0e3e970be2d1789&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/cd0b24de440fe51b2797b125a33b60e0&quot;&gt;http://del.icio.us/url/cd0b24de440fe51b2797b125a33b60e0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/102ab8bb6becc7d3eac87f4c2707d0a9&quot;&gt;http://del.icio.us/url/102ab8bb6becc7d3eac87f4c2707d0a9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://del.icio.us/url/aec6c8de3d189f18cdd85798f36bf716&quot;&gt;http://del.icio.us/url/aec6c8de3d189f18cdd85798f36bf716&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I'm also happy that del.icio.us uses MD5 hashes to normalize this situation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: I also see that &lt;a href=&quot;http://www.kottke.org/06/11/delicious-will-eat-itself&quot;&gt;Kottke&lt;/a&gt; beat me to the meta.&lt;/p&gt;
</content>
    </entry>
    
    

    <entry>
        <title>Back in the Saddle Again</title>
        <link href="http://decafbad.com/blog/2006/10/02/back-in-the-saddle-again"/>
        <updated>2006-10-02T21:55:42+00:00</updated>
        <id>http://decafbad.com/blog/2006/10/02/back-in-the-saddle-again</id>
        <content type="html">&lt;p&gt;When I got up this morning, this was my sad state of affairs:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://decafbad.com/blog/wp-content/uploads/2006/10/plaze-20days.jpg&quot; border=&quot;0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But, I'm back at the office now, albeit at reduced capacity for zooming around - unless said zooming may be done on crutches.  And, let me tell you, zooming around on crutches is both hazardous and exhausting in an office environment.  Also?  I want my hands back.  It's hard to carry hot coffee or oatmeal with no hands.&lt;/p&gt;

&lt;p&gt;I haven't been posting much around here, thanks to various moments in a drugged up haze or just plain wallowing in &lt;a href=&quot;http://decafbad.com/blog/2006/09/06/world-of-warcraft-is-my-world-of-warcraft&quot;&gt;convalescent marathon WoW sessions&lt;/a&gt;.  The only real productive work I've gotten done was for &lt;a href=&quot;http://del.icio.us&quot;&gt;del.icio.us&lt;/a&gt;.  Over the past few weeks, I just haven't felt like doing much or hacking anything at all.  However, I am pretty sad that I missed Yahoo! Hack Day.&lt;/p&gt;

&lt;p&gt;On the bright side, I'm planning to be propped up in a corner at least for the &lt;a href=&quot;http://upcoming.org/event/109550/&quot;&gt;del.icio.us birthday bash&lt;/a&gt;.  Come sign &lt;a href=&quot;http://flickr.com/photos/missadroit/251064139/&quot;&gt;the cast&lt;/a&gt;, or plaster me with a sticker while I'm too immobile to do much about it.&lt;/p&gt;
</content>
    </entry>
    
    
</feed>

