[ Friday, January 07, 2005 ]

A del.ici.ous browser-based desktop application

Following my last post on browser-based desktop applications, I prototyped a little application to play with these ideas.

I'm a big fan of the social bookmarks manager del.icio.us which enable you to bookmark urls and categorize them. However, all your bookmarks are available to everyone else (it manages social bookmarks after all). But, from time to time, I also need to bookmark urls that I don't want to share (e.g. private ones or professional ones which could give too much hints to competitors).
So I bookmark these URLs with my browser. But they can not be categorized like del.icio.us ones (folders don't help). So when I want to check bookmarks for a given topic I've to look in two different places and interfaces (the web bookmarks toolbar and del.icio.us). I prototyped a simple application with the following requirements:

  • keep a private list of bookmarks
  • categorize them like in del.icio.us
  • aggregate private and del.icio.us bookmarks
  • display them in the same interface
  • search categories for both private and del.icio.us bookmarks

The prototype is a browser-based desktop application (i.e. a standalone application which runs its embedded HTTP server and is displayed in the browser).
The application keeps a list of private bookmarks and aggregates them with del.icio.us ones (retrieved with del.icio.us REST API thanks to the delicious-java library). In fact, from the user interface, it is quite similar to del.icio.us interface. The only differences is that private bookmarks are automatically categorized with a private tag. (As an aside, I first had two type of bookmarks: public and private ones. But as I coded, I realized that I could used the bookmark own tags to categorize them as public or private...).
Special urls (like for displaying bookmarks for a set of categories) redirect to the application which filters both del.icio.us and private bookmarks.

Here some screenshots (I haven't care much for the layout but it is based on del.icio.us):

del1
To save a bookmark, type its url, its description, its (optional) extended description and list of space-separated tags. To save it in the application ( i.e. on your desktop), tag it as private. Otherwise, the bookmark will be saved on del.icio.us.

del2
If I look for all the bookmarks with the osgi tags, I see that some of them are categorized as private. They're stored on the application and not on del.icio.us (see my del.icio.us OSGi page to see the differences).
As you can see on the screenshots, the only differences is that private bookmarks are categorized with a private tag.

I haven't reproduced all features provided by del.icio.us but this first prototype is functional enough to help me vizualize what browser-based desktop applications could be.
I see this prototype like the equivalent of Google Desktop Search but for bookmarks. Both application aggregates local and web data and displays them in a consistent way in the browser.

As for the technology I used, it's based on the OSGi framework and its HTTP service (I used Knoplferfish implementation). The cool thing is that everything can be delivered as a standalone application that sits anywhere on your hard drive. You just start it and point your web browser to http://localhost:8080:<your del.icio.us name>. It's also possible make it a Windows or Mac OS X service with a cute little icon in the tray.
And, being based on OSGI, you can also use it from your PocketPC!

One other cool feature of this application is that since it sits on your own machine, you can also bookmark local files and categorize them.
For example, I've a local version of the OSGi specification in PDF file. I bookmarked it with my application with the url file:///Users/jeff/doc/...../r3.book.pdf. So when I want to see all my bookmarks related to OSGi (http://localhost:8080/jmesnil?tag=osgi), I've got both web url and local documentation (URLs starting with file:// are automatically tagged as private and local).
del3
The only problem is that you can't open the files from their URLs (I already blogged about it but I haven't find a correct solution yet).

There is nothing rocket science in this prototype but there is some potential for such browser-based desktop applications to integrate in a consistent way desktop data with the whole web.

6 Comments:

Scott said...

You indicated that "from time to time, I also need to bookmark urls that I don't want to share". This problem appears to be related more to one of security than one related to where this data is being hosted. You might not want to share some of your bookmarks with other users of the internet but I'd think that you would want to be able to access your private bookmarks from different devices; your home PC, your PC at work, your smartphone, etc. I would rather have my bookmarks and contacts in one central repository than have to jump through hoops and think about perpetually syncing all my devices.

For your specific example I would want the del.icio.us service to provide the functionality for me to tag some bookmarks as being private or public and be responsible for authentication and authorization. If you did not trust del.icio.us to host your private content then I'd still think it would be preferable to host this type of content on a private personal server rather than one of your client devices. If I were to implement such a solution I would develop a WSRP interface to the del.icio.us service, implement support for the same WSRP service running on my personal server, and then develop a JSR 168 portlet that could aggregate and present content from multiple WSRP bookmark services.

1/10/2005 12:26:20 AM  
jmesnil said...

Scott, thanks for your feedback.

This application is quite dumb and is really just a throwaway prototype. It was just the occasion to figure out what could be done with a browser-based application.
Your remarks are quite valid. I agree that it is not very useful to store the private bookmarks in the application. As you said, it could be be more interesting to host private bookmarks on a personal web server and use the application to aggregate bookmarks from three different places:
* del.icio.us
* the personal web server containing the private bookmarks
* this application which is still the better place to store
local bookmarks (starting with file://)

To make the application slightly more interesting, it should also be able to aggregate tags from flickr and display thumbnails of pivtures posted on flickr.

As for the technology to use, Portlets are a good way to go and it'd be quite interesting to get an OSGi Portlet bundle. However due to limitations of OSGi HTTP service (Servlets only, no JSP or WAR support), I've used only Servlets and XML/HTTP library (which is quite simple but still powerful enough).

1/10/2005 09:25:46 AM  
Scott said...

I am not sure how you are deploying servlets without having support for WAR files but if you are interested in investigating how you could provide support for standardized portlets on top of your OSGi implementation you should check out the open source Pluto Portlet Container. Pluto is to portlets as Tomcat is to servlets. I'd recommend starting with the 1.1 code base as it has been vastly simplified. JSP is not a requirement to portlet development but since many portlet developers leverage JSP the number of 3rd party portlets that could be deployed in a OSGi portlet framework would be limited.

1/10/2005 10:59:04 PM  
jmesnil said...

Scott, deploying a Servlet in OSGI service is straightforward:

Servlet s = new MyServlet();
httpService.register("/pathuri/", s);

OSGI targets a wide range of platform (from embedded devices to app server) but current release has the very least common denominator wrt to Servlet support.
However, it'd be possible to create new OSGI bundles offering advanced services (e.g. JSP support, portlets support).
But for now, I'm just toying with OSGi to evaluate its concepts...

jeff

1/13/2005 11:17:21 AM  
Hashim said...

I use Spurl.net to handle my private and public bookmarks.

When I want a bookmark to be public Spurl lets me publish it to its system and del.icio.us automatically at the same time. However, bookmark something private I simply click a checkbox for it not to be public and to skip my del.icio.us account.

Cool, no?

3/27/2005 07:09:06 AM  
Jonathan said...

Another idea is to select everything on the webpage and paste it into Gmail. Gmail now has HTML formatting, so all the fonts, colours, and images will be preserved.

6/08/2005 08:09:03 AM  

Post a Comment

<< Home