<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17426834</id><updated>2012-01-06T07:55:33.789-08:00</updated><title type='text'>MindRetrieve Blog</title><subtitle type='html'>MindRetrieve - an open source desktop search tool for your personal web</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17426834.post-114911026631745835</id><published>2006-05-31T13:31:00.000-07:00</published><updated>2006-05-31T14:41:41.150-07:00</updated><title type='text'>From Simple to Complex - A Reflection on Framework Design</title><content type='html'>For a while I have used the Jakarta Struts framework in web development. I was quite overwhelmed by the number of configuration files and entries I have to wade through to get anything done. All these configurations are put in for a reason. The offer users a degree for flexibility. These are knobs you can tune to set the system up. With these knobs you no longer need to open the box and rewire things when you want to fine tunes things later.&lt;br /&gt;&lt;br /&gt;Alas this makes a steep learning curve. It takes a lot of work to get just some simple thing done. Also when things go wrong, it is very hard to track it down. Unhappy programmers are the result.&lt;br /&gt;&lt;br /&gt;It just occur to me that there is a pattern in this kind of issues in framework design. A lot of simple things adds up. When looked at a system scope, it results in something very complicated. The options of struts all serve a purpose and is not hard to understand by itself. But because you need to use all of them in your application, the overall pictures is complicated.&lt;br /&gt;&lt;br /&gt;I will use foreign language learning as an example. You learned and memorized many grammars rules: singular v.s. plural, subject v.s. object and so on. You went through the drilling exercises quiet well. Then the challenge came when you need to read or write a full sentence. Your tongue tied, mind gone blank. Why? Because a real life sentence is free formatted. Out of the many grammar rules you've learned perhaps two or three is relevant in the sentence in front of you. The hard part is you don't know which two or three should apply. Although you understand each rule individually, together they become a challenge.&lt;br /&gt;&lt;br /&gt;Some lessons I have learned as a user and designer of framework are:&lt;br /&gt;&lt;br /&gt;1. Look at things at system level, not just individual feature level.&lt;br /&gt;&lt;br /&gt;2. Use common pattern that user have already learned. Clever one-off trick may be an advantage on individual level, but it complicates the system as a whole.&lt;br /&gt;&lt;br /&gt;3. Design a framework can do simple work without much training. User can learn gradually when they need to do something complex.&lt;br /&gt;&lt;br /&gt;4. Spend time to learn the detail of the system. Like the foreign language analog, sometimes there is no shortcut but to learn really hard. If you are a user who stuck with a complex system you have to use this applies to you. For framework designer, better stuck with point 3 than assume your users' dedication.&lt;br /&gt;&lt;br /&gt;5. Finally, provide a tool to manage complexity. If an action have to involve 2 beans, 3 templates, and 5 validation rules, make a tool to help user to track them down. Surprising much of my time in software development is spent simply in tracking these things down manually.&lt;br /&gt;&lt;br /&gt;Rudy on Rail's convention over configuration philosophy is a good example. It uses a simple rule consistently (naming notation as the main logic). It can get simple thing to work easily and complex thing possible.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114911026631745835?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114911026631745835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114911026631745835' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114911026631745835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114911026631745835'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/05/from-simple-to-complex-reflection-on.html' title='From Simple to Complex - A Reflection on Framework Design'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114897027381204461</id><published>2006-05-29T23:13:00.000-07:00</published><updated>2006-05-29T23:24:33.823-07:00</updated><title type='text'>MindRetrieve got Ajax</title><content type='html'>Thanks for the &lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt; library, MindRetrieve has started to add some Ajax UI, like an auto-completer for entering tags makes it so much easier to from pick existing tags.&lt;br /&gt;&lt;br /&gt;I have spent much time struggling with Javascript and the poorly documented DOM before. Relying on trial and error and tribal knowledge to program DHTML is so painful. I'm glad to find these new generation Ajax libraries has brought a big improvement to this situation. They have done things the DOM standard  has failed to do, namely to provide a consistent interface to programming dynamic elements across browsers.&lt;br /&gt;&lt;br /&gt;Prototype's implementation has a lot of neat things. The $() method as a shorthand to document.getElementById() is just brilliant.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114897027381204461?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114897027381204461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114897027381204461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114897027381204461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114897027381204461'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/05/mindretrieve-got-ajax.html' title='MindRetrieve got Ajax'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114840145886279199</id><published>2006-05-23T09:10:00.000-07:00</published><updated>2006-05-23T09:24:18.876-07:00</updated><title type='text'>Took a RSS break</title><content type='html'>I have took a 2 weeks break in reading the technology blogs and industrial news. Now each of the 20 feeds I've subscribed has at least 50 unread items. Not knowing the 20 new products that has since launched, I feel that I am out of touch with the industry.&lt;br /&gt;&lt;br /&gt;It is interesting how much a RSS feed can change a person. As long as I am keeping up the news I feel like I am an active player. But the world moves so fast that if you standstill for a little while you will have a lot of catch up to do.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114840145886279199?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114840145886279199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114840145886279199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114840145886279199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114840145886279199'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/05/took-rss-break.html' title='Took a RSS break'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114615214889606861</id><published>2006-04-27T08:26:00.000-07:00</published><updated>2006-04-27T08:35:48.910-07:00</updated><title type='text'>berlios outage</title><content type='html'>berlios, the hosting service of this project, is suffering from another outage. This time I'm counting 16 hours since yestarday afternoon. Over the course I've seen many small outages that last minutes or a few hours. I should get very serious about finding alternative provider, especially now that sourceforge offer subversion finally.&lt;br /&gt;&lt;br /&gt;For now, I hope berlios will get back to life soon.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114615214889606861?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114615214889606861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114615214889606861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114615214889606861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114615214889606861'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/04/berlios-outage.html' title='berlios outage'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114471091081414263</id><published>2006-04-10T16:08:00.000-07:00</published><updated>2006-04-10T16:33:41.143-07:00</updated><title type='text'>Fixing TortoiseCVS's shattering glass sound</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6899/1679/1600/TortoiseCVSSound.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6899/1679/320/TortoiseCVSSound.jpg" border="0" alt="" /&gt;&lt;/a&gt;TortoiseCVS plays an irritating sound when it encounters an error. It is downright embarrassing when you are sitting in a cafe and from your laptop comes this &lt;br /&gt;&lt;a href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/tortoisecvs/TortoiseCVS/build/TortoiseCVSError.wav?rev=1.2"&gt;shattering glass noise&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;What's annoying is I couldn't find a way to change it or turn it off. I tried the usual places and searched the web. Still I couldn't get the noise to leave me alone. Finally I found the right place to do it. Go to Windows - Control Panel - Sounds and Audio Devices - Sounds Tab. Change the TortoiseCVS Error sound to something more gentle.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114471091081414263?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114471091081414263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114471091081414263' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114471091081414263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114471091081414263'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/04/fixing-tortoisecvss-shattering-glass.html' title='Fixing TortoiseCVS&apos;s shattering glass sound'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114421412667755319</id><published>2006-04-04T21:38:00.000-07:00</published><updated>2006-04-04T22:15:26.706-07:00</updated><title type='text'>Upgrade notification with Atom</title><content type='html'>One of the biggest advantage of building a web application over a desktop one is the ease of upgrade and bug fixes. For MindRetrieve I've been looking for a mechanism to notify user for upgrade. At the same time I have to keep the mechanism non-intrusive and respect the user's privacy.&lt;br /&gt;&lt;br /&gt;After looking at different mechanisms like CGI and Javascript on browser, it just dawn on me than upgrade notification has a lot in common with news syndication. All I have to do is to publish a news feed and then put a mini-newsreader into the application. Of course the user can always opt out or even choose to fetch it using their own newsreader.&lt;br /&gt;&lt;br /&gt;It is a good day to find a satisfactory solution to a nuisance issue.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114421412667755319?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114421412667755319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114421412667755319' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114421412667755319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114421412667755319'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/04/upgrade-notification-with-atom.html' title='Upgrade notification with Atom'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114353211389151621</id><published>2006-03-27T23:41:00.000-08:00</published><updated>2006-03-27T23:51:47.140-08:00</updated><title type='text'>xfolk - Microformats</title><content type='html'>I was looking for a bookmark sharing standard. Sure enough there is a microformat &lt;a href="http://microformats.org/wiki/xfolk"&gt;xFolk&lt;/a&gt; proposed.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;xFolk is a simple and open format for publishing collections of bookmarks. It better enables services for improving user experience and sharing data in web-based bookmarking software. xFolk may be embedded in (X)HTML, Atom, RSS, and arbitrary XML. It is one of several open microformat standards.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Microformat is simple conventions for embedding semantics in HTML to enable decentralized development. It remixing of websites possible, as shown in the wonderful &lt;a href="http://spaces.msn.com/rayozzie/blog/cns!FB3017FBB9B2E142!285.entry"&gt;Live clipboard&lt;/a&gt; demo.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114353211389151621?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114353211389151621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114353211389151621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114353211389151621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114353211389151621'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/03/xfolk-microformats.html' title='xfolk - Microformats'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114321795773620544</id><published>2006-03-24T08:22:00.000-08:00</published><updated>2006-03-24T08:32:37.746-08:00</updated><title type='text'>MindRetrieve postcard</title><content type='html'>This is a postcard I've made as a promotion material. I find it a more creative compare to handing out name card. You can print it on photo paper at home. Or you can send it to a photo lab to print a big stack. Either case it probably turns out quicker and cheaper than name cards. The color is great. The 4x6 inch space afford a great deal of creativity.&lt;br /&gt;&lt;br /&gt;The amateurish graphics design is mine. You think I got a lot of nerve to actually hand this out to people. At least I can claim some novelty :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6899/1679/1600/postcard.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;border: thin solid #777;" src="http://photos1.blogger.com/blogger/6899/1679/400/postcard.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114321795773620544?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114321795773620544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114321795773620544' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114321795773620544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114321795773620544'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/03/mindretrieve-postcard.html' title='MindRetrieve postcard'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114304331308489628</id><published>2006-03-22T07:57:00.000-08:00</published><updated>2006-03-22T08:01:53.176-08:00</updated><title type='text'>Announce: interactive javascript console</title><content type='html'>I'm rather productive in cranking out little tools lately. Here is another one.&lt;br /&gt;&lt;br /&gt;js_console is an javascript console you can insert into you web page. It allows you to test javascript statements interactively in the context of your web page. Try a demo and download from&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://tungwaiyip.info/software/js_console.html"&gt;http://tungwaiyip.info/software/js_console.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114304331308489628?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114304331308489628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114304331308489628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114304331308489628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114304331308489628'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/03/announce-interactive-javascript.html' title='Announce: interactive javascript console'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-114185242095743252</id><published>2006-03-08T13:00:00.000-08:00</published><updated>2006-03-08T13:13:40.966-08:00</updated><title type='text'>Google Desktop Search cannot find files moved</title><content type='html'>The story about &lt;a href="http://www.mercurynews.com/mld/mercurynews/business/technology/personal_technology/14028721.htm"&gt;Google Desktop Search cannot find files moved&lt;/a&gt; stir up some nosie in the blogosphere. Admittedly it is a hard problem. And it would require good platform support to do right. It is the same dilemma I have faced when implementing the tag the files feature. I choose to leave this problem alone for now (while leaving enough nexus so that it can be fixed later). This allow me to put out a simple features in days. If it is proven popular I can alway go back and spend time to resolve it.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-114185242095743252?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/114185242095743252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=114185242095743252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114185242095743252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/114185242095743252'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/03/google-desktop-search-cannot-find.html' title='Google Desktop Search cannot find files moved'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113985461164703984</id><published>2006-02-13T09:12:00.000-08:00</published><updated>2006-02-13T10:31:26.600-08:00</updated><title type='text'>Announce: HTMLTestRunner - generates HTML test report for unittest</title><content type='html'>I'd like to annouce the release of Python library HTMLTestRunner, a by-product of the MindRetrieve project.&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;HTMLTestRunner is an extension to the Python standard library's unittest   &lt;br /&gt;module. It generates easy to use HTML test reports. See a sample report at   &lt;br /&gt;&lt;a href="http://tungwaiyip.info/software/sample_test_report.html"&gt;http://tungwaiyip.info/software/sample_test_report.html&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Check more information and download from &lt;br /&gt;&lt;a href="http://tungwaiyip.info/software/#htmltestrunner"&gt;http://tungwaiyip.info/software/#htmltestrunner&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Actually this was posted on comp.lang.python newsgroup a while ago. Thank you Cameron Laird for picking it up in &lt;a href="http://groups.google.com/group/comp.lang.python/browse_frm/thread/b72778e86f40c3eb/53ae18720551697d?hl=en#53ae18720551697d"&gt;Dr. Dobb's Python-URL&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113985461164703984?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113985461164703984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113985461164703984' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113985461164703984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113985461164703984'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/02/announce-htmltestrunner-generates-html.html' title='Announce: HTMLTestRunner - generates HTML test report for unittest'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113779035049209713</id><published>2006-01-20T12:29:00.000-08:00</published><updated>2006-01-20T12:52:30.503-08:00</updated><title type='text'>Great gathering last night</title><content type='html'>Thanks to &lt;a href="http://fuzzyblog.com/"&gt;Scott&lt;/a&gt; of &lt;a href="http://ookles.com/"&gt;Ookles&lt;/a&gt; for organizing the &lt;a href="http://fuzzyblog.com/archives/2006/01/20/who-came/"&gt;great gathering&lt;/a&gt; in San Francisco last night. It was a great pleasure to meet so many prominent people who are pushing the Internet front.&lt;br /&gt;&lt;br /&gt;Geeks are officially cool again!&lt;br /&gt;&lt;br /&gt;Also I got to thank Scott for being the inspiration behind the new &lt;a href="https://developer.berlios.de/project/shownotes.php?release_id=8737"&gt;tag the file&lt;/a&gt; feature!&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113779035049209713?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113779035049209713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113779035049209713' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113779035049209713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113779035049209713'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/great-gathering-last-night.html' title='Great gathering last night'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113770101851208301</id><published>2006-01-19T12:01:00.000-08:00</published><updated>2006-01-19T12:03:38.523-08:00</updated><title type='text'>Announce release of version 0.8.0</title><content type='html'>I'm gload to announce the first major release in almost a year. New features in version 0.8.0 include:&lt;br /&gt;&lt;br /&gt;Web library - tag base bookmarking system&lt;br /&gt;Tag based categorization&lt;br /&gt;Tag files in local disk (Windows XP)&lt;br /&gt;&lt;br /&gt;Download from via the &lt;a href="http://www.mindretrieve.net/"&gt;MindRetrieve&lt;/a&gt; website.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113770101851208301?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113770101851208301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113770101851208301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113770101851208301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113770101851208301'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/announce-release-of-version-080.html' title='Announce release of version 0.8.0'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113760512553135250</id><published>2006-01-18T09:22:00.000-08:00</published><updated>2006-01-18T09:25:25.540-08:00</updated><title type='text'>Added IE support</title><content type='html'>After months of developing on Firefox and Opera only, I have finally ported the DHTML code to IE. Well almost except some small bugs. IE6 is just hideous. I should really have wait to support IE7 only.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113760512553135250?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113760512553135250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113760512553135250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113760512553135250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113760512553135250'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/added-ie-support.html' title='Added IE support'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113720638629870147</id><published>2006-01-13T18:32:00.000-08:00</published><updated>2006-01-13T18:39:46.300-08:00</updated><title type='text'>Efficient character escapes decoding</title><content type='html'>I ran into this technical issue using Python's 'unicode_escape' codecs on unicode string. Put a question in the comp.lang.python newsgroup and thought this is probably too technical for anyone to care. But the Python community never fails me. Thank you for Steven Bethard to come up with a great suggestion that works for me. I have written up the solution in a &lt;a href="http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/466293"&gt;Python cookbook recipe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope it will be useful for other people too.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113720638629870147?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113720638629870147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113720638629870147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113720638629870147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113720638629870147'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/efficient-character-escapes-decoding.html' title='Efficient character escapes decoding'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113709830581401855</id><published>2006-01-12T12:15:00.000-08:00</published><updated>2006-01-12T12:38:25.826-08:00</updated><title type='text'>Synchronization with Simple Sharing Extensions</title><content type='html'>I have come across this &lt;a href="http://msdn.microsoft.com/xml/rss/sse/"&gt;Simple Sharing Extensions for RSS and OPML (SSE)&lt;/a&gt; specification from Microsoft. It is a minimum extensions necessary to enable loosely-cooperating apps to use RSS as the basis for item sharing – that is, the bi-directional, asynchronous replication of new and changed items amongst two or more cross-subscribed feeds.&lt;br /&gt;&lt;br /&gt;This seems to be a great fit for synchronizing the weblib among different repositories. The essence of SSE is a set of items, each has a globally unique id, a timestamp and an increasing version number. This has inspired me to make another revamp to the &lt;a href="http://mindretrieve.blogspot.com/2005/12/weblib-file-specification.html"&gt;Weblib file specification&lt;/a&gt; to add all those elements. The only remaining issue for me is the globally unique id. I need to figure out a simple way to generate them across distributed systems, (I feel UUID too heavy weight). The implementation is available in SVN, although I haven't updated the specification yet.&lt;br /&gt;&lt;br /&gt;Synchronization is a though issue I haven't have it all thought through. But it probably can't go wrong to go with Ray Ozzie who has created Lotus Notes.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113709830581401855?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113709830581401855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113709830581401855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113709830581401855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113709830581401855'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/synchronization-with-simple-sharing.html' title='Synchronization with Simple Sharing Extensions'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113699624682455410</id><published>2006-01-11T08:16:00.000-08:00</published><updated>2006-01-11T08:17:26.833-08:00</updated><title type='text'>Quick key and the Petname system</title><content type='html'>I have come across an interesting article &lt;a href="http://www.skyhunter.com/marcs/petnames/IntroPetNames.html"&gt;An Introduction to Petname Systems&lt;/a&gt;. It echoes with a quick key feature I am building, which associates a short phrase with frequently used URL. For example phrase 'amex' can be used as the key to the 'American Express' web site. The main goal of the article is in security (against phishing). While for MindRetrieve the goal is to make a slick user interface. Nevertheless it helps me to understand what I am doing, an implicit system for user to assign petname to items!&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113699624682455410?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113699624682455410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113699624682455410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113699624682455410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113699624682455410'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/quick-key-and-petname-system.html' title='Quick key and the Petname system'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113635097136142122</id><published>2006-01-03T21:02:00.000-08:00</published><updated>2006-01-03T21:02:51.376-08:00</updated><title type='text'>Text v.s. multimedia?</title><content type='html'>&lt;p&gt;The heat is on once again in the advent of internet technologies. The word is that we will move beyond text based communication to audios and videos, from text blogging to audio podcasting to video blogging, from SMS evolves MMS, from search for text to search for audios and videos, etc. The humble text is only the first step in technology development. Eventually technologies would be advanced enough to enable the full glory of multimedia.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I feel rather lukewarm for this. I often past up the news video for text article as I grow impatient with video's pace. With text I can scan back and fro much more easily. User generated content? That reminds me of those home videos, where the camera never stop panning left and right. And when the subject talks, he is actually off-screen ;)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Multimedia was the buzz world of last generation. With the enabling technology CD-ROM become popular, people envision our PC would be filled with sight and sound. While we now see lot more graphics on our PC than the early  days, enough to say the focus is still on text, whether we are using email or the web. Anyway none of the multimedia companies has become Google.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I think people consider who video and audio are more advance than text are only looking at it from computer engineering's perspective. This really does not do justice to text. From a different perspective I would say audio and video more primitive because they are base on our biological sensory perception. Whether as &lt;a href="http://en.wikipedia.org/wiki/Writing_system"&gt;text&lt;/a&gt; is truly the great innovation than revolutionized communication.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113635097136142122?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113635097136142122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113635097136142122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113635097136142122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113635097136142122'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2006/01/text-vs-multimedia.html' title='Text v.s. multimedia?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113596051102740451</id><published>2005-12-30T08:04:00.000-08:00</published><updated>2005-12-30T08:35:11.036-08:00</updated><title type='text'>Incremental Development</title><content type='html'>I was looking at the subversion checkin log at&lt;br /&gt;&lt;br /&gt;http://svn.berlios.de/wsvn/mindretrieve/trunk/?op=log&amp;rev=0&amp;sc=1&amp;isdir=1&lt;br /&gt;&lt;br /&gt;I notice I have made many many small checkins. Often several times a day and each checkin include a group of several files (taking into consideration I am not working on this full time). This style is quite different from my work on other projects when I do a lot less checkin but usually in a larger chunk.&lt;br /&gt;&lt;br /&gt;Perhaps this say something about the productivity? Perhaps I was acting thoughtless because I'm the only developer right now. But just now I have come to another characterization - this is incremental development!&lt;br /&gt;&lt;br /&gt;Each time I made small changes, add some new feature or a methods, refactor code, fix a bug, add a test. I made the code changes, test it, and then I check in. The code base is functional most of time. Seldom did I make big changes that break the code base for several days or more.&lt;br /&gt;&lt;br /&gt;Is incremental development the best development process? I'll leave it to other discussion. But from a developer's perspective, having a functional system most of time and being able to test and verify any code change easily is wonderful. Everytime I do a checkin I have the satisfaction that something is done. Coming from an environment where changing only one line of code would lead to tedious work of building a test environment and a painful testing process, this is just pure joy.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113596051102740451?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113596051102740451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113596051102740451' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113596051102740451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113596051102740451'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/incremental-development.html' title='Incremental Development'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113582088501338087</id><published>2005-12-28T17:08:00.000-08:00</published><updated>2005-12-28T17:48:05.033-08:00</updated><title type='text'>Keep Your Article in One Single Web Page</title><content type='html'>There is a style widely used in web publishing. It says people don't like to read long article, one should keep modem user in consideration that a long web page would result in slow download and so. If you have a long article to publish, break it down into several short sections and let user read it page by page.&lt;br /&gt;&lt;br /&gt;I have arrived in a contrarian view. I think breaking a long article down into several pages is a hassle to the users. It is best to publish the entire article in one single page. The issue is in order to finish the article I need to click next page several times, every time there is a delay and it interrupts the momentum. Usually the delay is short, like one or two seconds. But it is a noticeable delay. Scrolling is seamless in comparison. For slow sites the delay is much worst. Some sites routinely take 10 seconds or more. That would feel like an episode ended in a cliffhanger and we have to wait for the next episode.&lt;br /&gt;&lt;br /&gt;Is several short page a better layout than a long one? I actually prefer to have a long one. The scroll bar give a good indication of how far in the article I have progressed. The scroll wheel is very handy in navigation. I can also use the browser to search for a word that appears anywhere in the article. All these is better than arbitrary break an article into several parts and then leave only a narrow window to the user. The speed issue is a non-issue. Any browser should be able to render incrementally so that you can start reading as soon as any text arrives. Even my cellphone do this flawlessly.&lt;br /&gt;&lt;br /&gt;In some case the multiple pages format backfire badly. I'm glad that Yahoo has a mobile version made for cellphone at http://mobile.yahoo.com/. I thought it would be great for reading email. Turns out the issue with cellphone data network is not just low bandwidth, every time when I click a link there would be a long delay before I can get any response. As Yahoo mobile break every screen into 15 lines or so, even the simplest email cost me multiple clicks to read though. The long delay between clicks make it plain unusable. I end up went back to the regular web interface. Even I have to scroll through tons of irrelevant stuff to get to the email body I still prefer it to the mobile version.&lt;br /&gt;&lt;br /&gt;Of course my comment should not be generalized too far. I have tried to load an entire technical manual as a single web page (in my harddrive). The browser have noticeably delay to process a web page of this size. But I still keep the manual in this format for the ease of searching.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113582088501338087?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113582088501338087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113582088501338087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113582088501338087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113582088501338087'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/keep-your-article-in-one-single-web.html' title='Keep Your Article in One Single Web Page'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113475253109026373</id><published>2005-12-16T08:53:00.000-08:00</published><updated>2005-12-16T09:06:39.846-08:00</updated><title type='text'>ISO 8601, the metric of date format</title><content type='html'>Different countries have different convention of writing date. Some write in m/d/y order and some write in d/m/y order and so on. One thing to do for localization is to show date in the right format...&lt;br /&gt;&lt;br /&gt;I say ____ the convention. Write it in ISO 8601 format. That is in the YYYY-MM-DD format. No more confusion of whether the day or month come first. And when you sort it, it comes out in chronological order. ISO 8601 is the metric of date format.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113475253109026373?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113475253109026373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113475253109026373' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113475253109026373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113475253109026373'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/iso-8601-metric-of-date-format.html' title='ISO 8601, the metric of date format'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113424580874454904</id><published>2005-12-10T12:05:00.000-08:00</published><updated>2005-12-10T12:19:22.086-08:00</updated><title type='text'>Your Site Has Vulnerability</title><content type='html'>I was testing my web application for security problem. Failure to escape user input is a very common class of security problem. So I created an input string like this:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;'"&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;h1&amp;gt;&amp;lt;font size=7 color=red&amp;gt;GOTCHA&amp;lt;iframe src=http://mindretrieve.blogspot.com/2005/12/your-site-has-vulnerability.html width=500 height=300&amp;gt;&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;Cut and paste it into any input fields and then click submit. If you see something you don't expect, that site probably has a problem. &lt;br /&gt;&lt;br /&gt;Hurry! Test out your site before hackers do!&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113424580874454904?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113424580874454904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113424580874454904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113424580874454904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113424580874454904'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/your-site-has-vulnerability.html' title='Your Site Has Vulnerability'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113405909255690104</id><published>2005-12-08T08:01:00.000-08:00</published><updated>2005-12-08T08:24:52.603-08:00</updated><title type='text'>17000 lines of code</title><content type='html'>It has been a while since I did a tally on the code size. The new statistics shows there are about 17000 lines of code in about 100 modules. That is for a non-trivial application with everything deliberately designed to be as simple as possible.&lt;br /&gt;&lt;br /&gt;A closer look inside, among the them is 5000 lines of unit test code. It on track with the the rule of thumb of 1 to 1 ratio of production code to test code.&lt;br /&gt;&lt;br /&gt;Two of the largest module has around 700 lines of code. The median is around 100 lines. This sounds minuscule to most other software code. But with Python, 700 lines can be a really sophisticated module. In many cases I would break a module down into smaller components before they even reach 700 lines.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113405909255690104?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113405909255690104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113405909255690104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113405909255690104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113405909255690104'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/17000-lines-of-code.html' title='17000 lines of code'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113400860625858285</id><published>2005-12-07T18:02:00.000-08:00</published><updated>2005-12-07T18:23:27.340-08:00</updated><title type='text'>Google v.s. bookmark?</title><content type='html'>While we are working hard on MindRetrieve to improve bookmarking, some people argue that the entire idea of bookmarking is outdated. Instead of bookmark, we just google. Indeed Google gives such excellent experience that people expect the right answer instantaneously. More easy than you would looking things up from the bookmark menu.&lt;br /&gt;&lt;br /&gt;While this is true for some obvious sites, perhaps for 'dell' or 'walmart', it ain't necessary useful for everything you'd ever interested. How many times have you flip through pages of marginally useful search result until you finally found the one that gives what you need? (assuming, of course, you an advance searcher who actually go beyond the first page). You will not want to repeat this search. And if you do, you won't necessary found the same item. How about a page that is not a direct search result but is one click, or two clicks away? Let's say from Google you found a passionated travelogue about an Italy trip. From there you found more links about some hotel recommendation that you really want. Google is a good starting point. But you have also make additional effort to arrive in what you needed.&lt;br /&gt;&lt;br /&gt;When you search and evaluate the result, you are actually creating something of value. If you put together the link of the travelogue, a guide on how to use the Italy train system and the two cute hotel you have seen, you will in effect created some kind of travel guide, even if you have not authored any of them. Personal web is a way for you to capture the creation.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113400860625858285?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113400860625858285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113400860625858285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113400860625858285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113400860625858285'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/google-vs-bookmark.html' title='Google v.s. bookmark?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113345557122962286</id><published>2005-12-01T08:34:00.000-08:00</published><updated>2005-12-01T08:46:11.243-08:00</updated><title type='text'>Weblib file specification</title><content type='html'>The work on MindRetrieve has reached another mile stone as I have published the weblib file specification and that it supports updating now. Previously I was using a hack to rewrite the entire file whenever I update a tiny little piece of data. That actually served me well for several months during development and personal use. Rewriting a 200k file everytime never seems to add any drag. In anycase the newer format seems well designed and is more ready for future scalability.&lt;br /&gt;&lt;br /&gt;I've included a snapshot of the spec here or you can find the latest version from the &lt;br /&gt;&lt;a href="http://svn.berlios.de/viewcvs/mindretrieve/trunk/minds/weblib/store.py?view=markup"&gt;source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;MindRetrieve Weblib Data File Specification Version 0.5&lt;br /&gt;&lt;br /&gt;MindRetrieve weblib data is an UTF-8 encoded text file (no other&lt;br /&gt;encoding is supported as this time). The overall format is a block of&lt;br /&gt;headers followed by a blank line and then the body similar to email and&lt;br /&gt;HTTP messages. Each line of the body part represents a webpage or tag&lt;br /&gt;item. Update to the weblib is appended as change records to the end of&lt;br /&gt;the file. The entire weblib can be represented by a single file.&lt;br /&gt;&lt;br /&gt;file            = headers BR body&lt;br /&gt;headers         = *(header BR)&lt;br /&gt;header          = field-name ":" [ field-value ]&lt;br /&gt;field-name      = token&lt;br /&gt;field-value     = DSV encoded value&lt;br /&gt;body            = column-header BR *((data-line | comment-line | *SP) BR)&lt;br /&gt;column-header   = column-name *( "|" column-name)&lt;br /&gt;column-name     = token&lt;br /&gt;comment-line    = "#" any string&lt;br /&gt;data-line       = [change-prefix] (data-record | header)&lt;br /&gt;change-prefix   = '[' YYYY-MM-DD SP HH:MM:SS ']' SP ['r' | 'u' | 'h'] '!'&lt;br /&gt;data-record     = ["@"] id *( "|" field-value)&lt;br /&gt;BR              = CR | LF | CR LF&lt;br /&gt;SP              = space characters&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note&lt;br /&gt;&lt;br /&gt;* token is defined according to RFC 2616 Section 2.2.&lt;br /&gt;&lt;br /&gt;* DSV encoded value is an unicode string with the characters "\", "|",&lt;br /&gt;  CR and LF encoded as "\\", "\|", "\r" and "\n" respectively.&lt;br /&gt;&lt;br /&gt;* There are two kind of data records, a webpage has a numeric id, while&lt;br /&gt;  a tag has a numeric id prefixed by "@".&lt;br /&gt;&lt;br /&gt;//* A record with the same id can appears multiple times in the data file.&lt;br /&gt;//  The last record overwritten preceding records.&lt;br /&gt;&lt;br /&gt;* A data-record preceded by a change-prefix denote update to the file.&lt;br /&gt;&lt;br /&gt;* A record prefixed by "[ISO8601 time] r!" is a remove record. The item&lt;br /&gt;  with the corresponding id is to be removed.&lt;br /&gt;&lt;br /&gt;* A record prefixed by "[ISO8601 time] u!" is an update record. The item&lt;br /&gt;  with the corresponding id is to be replaced.&lt;br /&gt;&lt;br /&gt;* A record with by "[ISO8601 time] h!" is an header update record. The&lt;br /&gt;  header value is to be updated. There is no remove header record. A&lt;br /&gt;  header value can be set to empty string however.&lt;br /&gt;&lt;br /&gt;* The last line should always ended with BR. If the last line is not&lt;br /&gt;  terminated with BR it is considered a corrupted record and must be&lt;br /&gt;  discarded. Moreover never append change record to a corrupted record&lt;br /&gt;  because the line break would be misplaced.&lt;br /&gt;&lt;br /&gt;* The encoding header is defined for future extension only. Only UTF-8&lt;br /&gt;  encoding is supported right now.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113345557122962286?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113345557122962286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113345557122962286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113345557122962286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113345557122962286'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/12/weblib-file-specification.html' title='Weblib file specification'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113276227011742096</id><published>2005-11-23T07:42:00.000-08:00</published><updated>2005-11-23T08:11:10.130-08:00</updated><title type='text'>How do I find out this web page?</title><content type='html'>One of the puzzle I try to solve with this project is to find the trail that leads me to certain web page. Often time when I am researching on the web I find some interesting page but do not remember how I get there. Maybe it is a fruitful search result with certain search terms and I want to explore more. Or it maybe it is point out by some knowledgeable blogger and I want to know the him better and what more he has to offer.&lt;br /&gt;&lt;br /&gt;One idea is to have a "always present back button". MindRetrieve keep enough information that you can find the source page of any page most of time. I probably have to experiment with various UI before I know how effective it can be.&lt;br /&gt;&lt;br /&gt;I am not alone in having this problem. Marc Hedlund calls for a tool to find the &lt;a href="http://radar.oreilly.com/archives/2005/11/lazyweb_request_tab_history.html"&gt;tab history&lt;/a&gt; in his blog. This New York times &lt;a href="http://www.nytimes.com/2005/10/16/magazine/16guru.html?ei=5070&amp;en=46837940782f854a&amp;ex=1132808400&amp;oref=login&amp;pagewanted=print"&gt;article&lt;/a&gt; look at a similar issue in a larger context. Modern people are heavily multitasked. But once we are interrupted it often takes a lot of work to reestablish the context when we return to the original task.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113276227011742096?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113276227011742096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113276227011742096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113276227011742096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113276227011742096'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/11/how-do-i-find-out-this-web-page.html' title='How do I find out this web page?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113207301463113561</id><published>2005-11-15T08:06:00.000-08:00</published><updated>2005-11-15T08:46:22.166-08:00</updated><title type='text'>HTML 3-state checkbox</title><content type='html'>I have been experimenting with a 3-state checkbox GUI. When we edit the tags of multiple items, there would be some tags that is only used in some items. Just and on and off setting is not enough. We also need a "grey" state to mean leave the tag untouched rather than turning everything on or off.&lt;br /&gt;&lt;br /&gt;Since HTML form does not support 3-state checkbox, I have experimented with various simulations using Javascript and CSS. While the widget work resaonble well, I find the "grey" state rather unintuitive. It is obvious what on or off will do. You have to stop to think what grey's action would be.&lt;br /&gt;&lt;br /&gt;So I have decided against using 3-state checkbox after all and stick to simple widgets. I think the user in this case would have a strong intent to make properties common among all items. If they leave the checkbox untouched, the tag setting will be unchanged. Otherwise it will be on or off for all.&lt;br /&gt;&lt;br /&gt;&lt;div style='text-align:center;'&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6899/1679/1600/3state3.jpg"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6899/1679/320/3state3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6899/1679/1600/3state2.jpg"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6899/1679/320/3state2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I have posted one version of the working HTML code here in case if there is any interest. It is tested in Firefox and Opera. Need some simple change to make it work in IE.&lt;br /&gt;&lt;pre style='font-size:80%'&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/html4/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;  #tagControl {&lt;br /&gt;    line-height:200%;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl span {&lt;br /&gt;      padding-left: 0.3em;&lt;br /&gt;      padding-right: 0.5em;&lt;br /&gt;      padding-top: 0.3ex;&lt;br /&gt;      padding-bottom: 0.3ex;&lt;br /&gt;      border: thin outset #777;&lt;br /&gt;      font-weight: bold;&lt;br /&gt;      color: #000;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl .tagSelect {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl .tagUnchange {&lt;br /&gt;      color: #777;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl .tagDelete {&lt;br /&gt;      color: #777;&lt;br /&gt;      text-decoration: line-through;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl .tagSelectPressed {&lt;br /&gt;      color: #fff;&lt;br /&gt;      background-color: #777;&lt;br /&gt;      border: thin inset #707;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl .tagUnchangePressed {&lt;br /&gt;      color: #fff;&lt;br /&gt;      background-color: #777;&lt;br /&gt;      border: thin inset #707;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #tagControl .tagDeletePressed {&lt;br /&gt;      color: #fff;&lt;br /&gt;      background-color: #777;&lt;br /&gt;      border: thin inset #707;&lt;br /&gt;  }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&lt;br /&gt;function toggleTagSelect(e) {&lt;br /&gt;    p = this.parentNode&lt;br /&gt;    var cb = this;&lt;br /&gt;    if (p.className == 'tagSelect') {&lt;br /&gt;        p.className = 'tagDelete';&lt;br /&gt;        cb.checked = false;&lt;br /&gt;    }&lt;br /&gt;    else if (p.className == 'tagDelete') {&lt;br /&gt;        p.className = 'tagUnchange';&lt;br /&gt;        cb.checked = true;&lt;br /&gt;    }&lt;br /&gt;    else if (p.className == 'tagUnchange') {&lt;br /&gt;        p.className = 'tagSelect';&lt;br /&gt;        cb.checked = true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onload(e) {&lt;br /&gt;    // attach event handlers&lt;br /&gt;    var tc = document.getElementById('tagControl');&lt;br /&gt;    var elems = tc.getElementsByTagName('input');&lt;br /&gt;    for (var i=0; i &amp;lt; elems.length; i++) {&lt;br /&gt;        var elem = elems[i];&lt;br /&gt;        elem.addEventListener('click', toggleTagSelect, false);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;window.addEventListener('load', onload, false);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Tags&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&lt;br /&gt;    &amp;lt;div id='tagControl'&amp;gt;&lt;br /&gt;    &amp;lt;span  class='tagSelect' node='rep:tag'&amp;gt;&lt;br /&gt;        &amp;lt;input type='checkbox' /&amp;gt;&lt;br /&gt;        &amp;lt;a node='rep:tag'&amp;gt;&lt;br /&gt;        Gas&lt;br /&gt;        &amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;nbsp;&lt;br /&gt;    &amp;lt;span  class='tagUnchange' node='rep:tag'&amp;gt;&lt;br /&gt;        &amp;lt;input type='checkbox' /&amp;gt;&lt;br /&gt;        &amp;lt;a node='rep:tag'&amp;gt;&lt;br /&gt;        Food&lt;br /&gt;        &amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;nbsp;&lt;br /&gt;    &amp;lt;span  class='tagDelete' node='rep:tag'&amp;gt;&lt;br /&gt;        &amp;lt;input type='checkbox' /&amp;gt;&lt;br /&gt;        &amp;lt;a node='rep:tag'&amp;gt;&lt;br /&gt;        Lodging&lt;br /&gt;        &amp;lt;/a&amp;gt;&lt;br /&gt;    &amp;lt;/span&amp;gt;&lt;br /&gt;    &amp;nbsp;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113207301463113561?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113207301463113561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113207301463113561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113207301463113561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113207301463113561'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/11/html-3-state-checkbox.html' title='HTML 3-state checkbox'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-113113934317948449</id><published>2005-11-04T13:20:00.000-08:00</published><updated>2005-11-04T13:22:23.190-08:00</updated><title type='text'>Progress on categorization</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6899/1679/1600/category1.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/6899/1679/320/category1.gif" alt="" border="0" /&gt;&lt;/a&gt;I have make a lot of progress designing the categorization for the tags. Once things are ready I plan to put an online version for people to get a feel.&lt;br /&gt;&lt;br /&gt;This time I want to show the visualization of the category tree. The most common way to show it is the explorer style tree view. With tree view you can represent categories any level deep. User can navigate by expanding and collapsing the branches. I find the expanding and collapsing fairly cumbersome. So I put a twist to that idea by expanding all categories by default. I use different font size and color to represent different level of categories. It works quite well that all items are presented on a single webpage and you can do an incremental search (with Opera or Firefox) without going to the web server again.&lt;br /&gt;&lt;br /&gt;Right now it can show reasonable well up to three levels. While I don't have categorization any deeper I would like to find solutions for deeper categorizations. Either a specific way to represent fourth or fifth level items or a scheme that can work at arbitrary level deep.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-113113934317948449?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/113113934317948449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=113113934317948449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113113934317948449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/113113934317948449'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/11/progress-on-categorization.html' title='Progress on categorization'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112900545483929470</id><published>2005-10-10T21:10:00.000-07:00</published><updated>2005-10-10T21:37:34.846-07:00</updated><title type='text'>spywareaid says MindRetrieve.exe is Legitimate</title><content type='html'>MindRetrieve.exe &lt;a href="http://www.spywareaid.com/index.php?file=o23&amp;action=view&amp;id=1079"&gt;is a legitimate application&lt;/a&gt; according to spywareaid.&lt;br /&gt;&lt;br /&gt;Thanks for some of you, who are among the hundreds of people who have downloaded MindRetrieve, for updating spywareaid about this.&lt;br /&gt;&lt;br /&gt;Actually not only is it not a spyware, MindRetrieve is committed to respect user's privacy. The way we ensure this is by being open source. Anyone can audit the software to see what it is really doing, and should there be anything objectionable, to be able to disabled them or even to fork a new branch.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112900545483929470?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112900545483929470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112900545483929470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112900545483929470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112900545483929470'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/10/spywareaid-says-mindretrieveexe-is.html' title='spywareaid says MindRetrieve.exe is Legitimate'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112864966088989358</id><published>2005-10-06T15:50:00.000-07:00</published><updated>2005-10-06T18:47:40.920-07:00</updated><title type='text'>A life time archive?</title><content type='html'>One thing that MindRetrieve does differently is there is no limit on how many webpages it archives. That may surprise some people intially as a disk hungry application. But after one year I collected about 120MB of archive. Project this number for 10 years would result in mere 1.2GB. You can buy a flashdrive today and have enough capacity for the next 10 years. There is rising awareness that technology has advanced to a stage that we can record everything we ever read or done, documents, emails, digital video, phone calls, etc, and keep an archive of you entire lifetime. MindRetrieve is designed with this idea in mind.&lt;br /&gt;&lt;br /&gt;That said I find MindRetrieve current works best finding webpages you have just recently viewed, perhaps on the same day. Like things that are a few clicks away from a google result but you forgot how you get there. What about thing you've seen 6 months ago? Initially I think MindRetrieve would work like google of your mind. You enter a keyword and the desired result shows up on top. Actual experience is a lot less effective. One issue is you've simply used the wrong keyword. Memory fades. You might try to search for the article about the Vietnamese restaurant you went six months ago in vain. Turns out you didn't go to a Vietnamese restaurant six months ago. It was really an Indian restaurant you are looking for.&lt;br /&gt;&lt;br /&gt;Beyond that there is a deep user interface problem for us to solve. Having a TiVo of you life is one thing. Being able to rewind over hundreds of thousands of hours of recording and find the exact one moment is a different thing. Full text search is helpful. But that alone is not the solution.&lt;br /&gt;&lt;br /&gt;So I am still adding to my 125MB of web archive. And I believe sooner or later we'll find some interesting ways to explore the memory land.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112864966088989358?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112864966088989358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112864966088989358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112864966088989358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112864966088989358'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/10/life-time-archive.html' title='A life time archive?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861196523575007</id><published>2005-10-06T08:18:00.000-07:00</published><updated>2005-10-06T08:19:25.236-07:00</updated><title type='text'>Blog moved to blogger.com!</title><content type='html'>Mindretrieve blog has moved to a new location at &lt;a href="http://mindretrieve.blogspot.com/"&gt;http://mindretrieve.blogspot.com/&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;I have been lazy to repurpose berlios' discussion forum as the MindRetrieve blog. This works out to some extend. But its UI is a bit clumsy and there is no RSS support.&lt;br /&gt;&lt;br /&gt;I finally give up and setup an account with blogger instead. I have manually imported the past posting there. From now on please visit the new location!&lt;br /&gt;&lt;br /&gt;P.S. The spammer there is fierce! Even before I finish importing past postings they are already adding spam there! Got to update the posting policy.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861196523575007?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861196523575007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861196523575007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861196523575007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861196523575007'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/10/blog-moved-to-bloggercom.html' title='Blog moved to blogger.com!'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861131314375174</id><published>2005-09-02T08:08:00.000-07:00</published><updated>2005-10-06T08:08:33.143-07:00</updated><title type='text'>HTTrack Website Copier - Offline Browser</title><content type='html'>Think you have a novel idea in software? Chances are there are many other people working on the same thing. I just found one that have significant overlapping. Description from its web site:&lt;br /&gt;&lt;br /&gt;----------------------------------------------&lt;br /&gt;HTTrack is a free (GPL, libre/free software) and easy-to-use offline browser utility. &lt;br /&gt;&lt;br /&gt;It allows you to download a World Wide Web site from the Internet to a local directory, building recursively all directories, getting HTML, images, and other files from the server to your computer. HTTrack arranges the original site's relative link-structure. Simply open a page of the "mirrored" website in your browser, and you can browse the site from link to link, as if you were viewing it online. HTTrack can also update an existing mirrored site, and resume interrupted downloads. HTTrack is fully configurable, and has an integrated help system. &lt;br /&gt;&lt;br /&gt;WinHTTrack is the Windows 9x/NT/2000/XP release of HTTrack, and WebHTTrack the Linux/Unix/BSD release. See the download page.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.httrack.com/"&gt;http://www.httrack.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861131314375174?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861131314375174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861131314375174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861131314375174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861131314375174'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/09/httrack-website-copier-offline-browser.html' title='HTTrack Website Copier - Offline Browser'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861128018873705</id><published>2005-08-15T08:07:00.000-07:00</published><updated>2005-10-06T08:08:00.190-07:00</updated><title type='text'>When will MindRetrieve move out of alpha?</title><content type='html'>If Google introduce the notion of putting out software in perpetual beta state, MindRetrieve maybe push this further for being in perpetual alpha state. This wasn't a statement that the quality of software is subpar or buggy. Since MindRetrieve sit between me and the world wide web every day, I would be the first one to be upset if my web experience suffer in any way. It is in alpha because I see this as a research project. The idea of personal web and ways to organize it is fairly novel. I enjoy toying it in this project.&lt;br /&gt;&lt;br /&gt;That say, once the web library feature is complete I feel it would reach a certain mile stone. By then MindRetrieve should be mature enough to be in beta.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861128018873705?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861128018873705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861128018873705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861128018873705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861128018873705'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/08/when-will-mindretrieve-move-out-of.html' title='When will MindRetrieve move out of alpha?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861125640795359</id><published>2005-08-05T08:07:00.000-07:00</published><updated>2005-10-06T08:07:36.406-07:00</updated><title type='text'>Wikipedia:Categorization</title><content type='html'>Here is an interesting guideline from wikipedia on categorization.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Categorization"&gt;http://en.wikipedia.org/wiki/Wikipedia:Categorization&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notice categories do not form a tree but a more general directed acyclic graph.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861125640795359?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861125640795359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861125640795359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861125640795359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861125640795359'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/08/wikipediacategorization.html' title='Wikipedia:Categorization'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861123058923390</id><published>2005-08-05T08:06:00.000-07:00</published><updated>2005-10-06T08:07:10.590-07:00</updated><title type='text'>Status update</title><content type='html'>Development has been slow since I came back from PyCon. During that time I have moved to a new day job. While I am very glad to shave a large part off my monstrous two-hour one way commute, the unintented consequence is I also lost a lot of development time I had on the commuter train. You never how productive a long train commute can be.&lt;br /&gt;&lt;br /&gt;In anycase now I have craved out a new time to move things forward, often during marginal hours at coffee shops. A lot of good things in managing personal web library are coming out already.&lt;br /&gt;&lt;br /&gt;Also looking at SVN I notice I have spent weeks hacking perhaps no more than a thousand line of code over and over again. Despite the code size some very interesting functionarity has slowly come into shape. It must some unimpressive if you measure productivity by number of lines of code written. But I find this a very interesting experience as I have high regard of simplicity.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861123058923390?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861123058923390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861123058923390' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861123058923390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861123058923390'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/08/status-update.html' title='Status update'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861113690921995</id><published>2005-04-13T08:05:00.000-07:00</published><updated>2005-10-06T08:06:29.516-07:00</updated><title type='text'>using del.icio.us</title><content type='html'>The idea of del.icio.us is rather simple. But its utility is sometimes very subtle. For example the URL below shows the people who have bookmarked MindRetrieve:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/url/532b38dcd4526f40faef56f8c94896e9"&gt;http://del.icio.us/url/532b38dcd4526f40faef56f8c94896e9&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;21 people has bookmarked this project. As a popularity contest this is a respectable number. More interestingly is the common tags box on the right. This show what people think this project is about.&lt;br /&gt;&lt;br /&gt;------------------&lt;br /&gt;common tags&lt;br /&gt;13 search&lt;br /&gt;12 python&lt;br /&gt;7 web&lt;br /&gt;4 lucene&lt;br /&gt;3 software&lt;br /&gt;3 tool&lt;br /&gt;2 firefox&lt;br /&gt;2 desktop&lt;br /&gt;2 useful&lt;br /&gt;2 pylucene&lt;br /&gt;2 apps&lt;br /&gt;2 browser&lt;br /&gt;------------------&lt;br /&gt;&lt;br /&gt;13 people tagged this as search. Another 12 tagged Python, the programming language used in this project. 4 people mention lucene, the open source search engine that powers MindRetrieve. &lt;br /&gt;&lt;br /&gt;Python is not exactly what I think should characterize MindRetrieve but merely an implementation detail. Since I have made an demo in PyCon, the Python community has help to spread the word about this project. del.icio.us' user build classification system just reflected this zeitgeist.&lt;br /&gt;&lt;br /&gt;Congratulations to Joshua Schachter of del.icio.us. Recently he announced that he has received funding to start working on the project full time. Money aside, he has show how an individual innovator can make significant achievement.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lists.del.icio.us/pipermail/discuss/2005-April/002801.html"&gt;http://lists.del.icio.us/pipermail/discuss/2005-April/002801.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861113690921995?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861113690921995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861113690921995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861113690921995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861113690921995'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/04/using-delicious.html' title='using del.icio.us'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861075250400224</id><published>2005-03-28T07:58:00.000-08:00</published><updated>2005-10-06T07:59:12.506-07:00</updated><title type='text'>Help make the mac version happens!</title><content type='html'>My mac mini has finally arrived :-) I have gotten myself oriented. Fooled around and eventually found out how to launch the terminal. Then got some taste of downloading mac applications. Now I am ready to port MindRetrieve to Mac!&lt;br /&gt;&lt;br /&gt;I am still totally new to Mac application development. Would you like to contribute development effort to make this happen? Or point me to literatures I should know about? In particular I like to know how an application is supposed to be packaged (it is written in Python). Also how to setup a daemon application on Mac (auto startup when the system starts, stop when the system shutdown).&lt;br /&gt;&lt;br /&gt;Email me at tungwaiyip at users.berlios.de. Thanks a bunch!&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861075250400224?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861075250400224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861075250400224' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861075250400224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861075250400224'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/03/help-make-mac-version-happens.html' title='Help make the mac version happens!'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861049938695247</id><published>2005-03-28T07:54:00.000-08:00</published><updated>2005-10-06T07:57:30.043-07:00</updated><title type='text'>Lightning talks in PyCon</title><content type='html'>I have made one of the first public demo of MindRerieve at PyCon [&lt;a href="http://www.pycon.org/dc2005/"&gt;http://www.pycon.org/dc2005/&lt;/a&gt;]. This informal 5 minutes demo got some friendly reception. &lt;br /&gt;&lt;br /&gt;PyCon was a great gathering for Python developers. Read more about my experience at my blog [&lt;a href="http://tungwaiyip.info/blog/2005/03/25/"&gt;http://tungwaiyip.info/blog/2005/03/25/&lt;/a&gt;].&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861049938695247?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861049938695247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861049938695247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861049938695247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861049938695247'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/03/lightning-talks-in-pycon.html' title='Lightning talks in PyCon'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861047058090602</id><published>2005-03-04T07:51:00.000-08:00</published><updated>2005-10-06T07:54:30.580-07:00</updated><title type='text'>browser statistics</title><content type='html'>Below is some statistics of what people use to visit the MindRetrieve home page from a snapshot of server log. Everyone seems to be using updated version of browser. Firefox is used by more than half of the visitors. Note that at present MindRetrieve has only released to a very small circle. Visitors are likely to be Java programmers are those who know something about Lucene.&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;Breakdown by browser&lt;br /&gt;&lt;br /&gt;Mozilla 72 (all seems to be recent Gecko or Firefox)&lt;br /&gt;Win 60&lt;br /&gt;Linux 11&lt;br /&gt;mac 1&lt;br /&gt;&lt;br /&gt;Mozilla 4.0 5&lt;br /&gt;&lt;br /&gt;IE 38&lt;br /&gt;5.0 2&lt;br /&gt;5.2 mac 1&lt;br /&gt;6.0 35&lt;br /&gt;&lt;br /&gt;Opera 8&lt;br /&gt;&lt;br /&gt;Safari 7&lt;br /&gt;&lt;br /&gt;Konqueror 2&lt;br /&gt;&lt;br /&gt;OmniWeb 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;133&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;Breakdown by OS&lt;br /&gt;&lt;br /&gt;Win 105 (all win NT except a few win 98)&lt;br /&gt;Linux 13&lt;br /&gt;Mac 10&lt;br /&gt;Unknown 5&lt;br /&gt;&lt;br /&gt;133&lt;br /&gt;----------------------------------------------------------&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861047058090602?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861047058090602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861047058090602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861047058090602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861047058090602'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/03/browser-statistics.html' title='browser statistics'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861021210104882</id><published>2005-03-03T07:49:00.000-08:00</published><updated>2005-10-06T07:50:12.103-07:00</updated><title type='text'>organizing bookmarks thoughts</title><content type='html'>First we deride the folder based hierarchical taxonomy as too strict and unrealistic data organization. Then we have the liberal tags based deli.cio.us style organizing.&lt;br /&gt;&lt;br /&gt;Thinking more, we have another familiar way of organization, that is the hyperlinked web. The web may be a superior mean than the above two methods.&lt;br /&gt;&lt;br /&gt;But then it is easy to get lost just wandering in the web. There is where the hierarchical map comes in. It gives you a starting point and known paths to the destinations....&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861021210104882?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861021210104882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861021210104882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861021210104882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861021210104882'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/03/organizing-bookmarks-thoughts.html' title='organizing bookmarks thoughts'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861133924835103</id><published>2005-02-23T08:08:00.000-08:00</published><updated>2005-10-06T08:08:59.250-07:00</updated><title type='text'>How to save a web pages?</title><content type='html'>Design A&lt;br /&gt;--------&lt;br /&gt;Save the web page and all dependent files as one unit&lt;br /&gt;&lt;br /&gt;Pros&lt;br /&gt;- Easy to implement. Easy deletion.&lt;br /&gt;- Good performance. (No extra lookup, all data in one place)&lt;br /&gt;&lt;br /&gt;Cons&lt;br /&gt;- Duplicated .jpg and .gif, etc are saved for each web page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Design B&lt;br /&gt;--------&lt;br /&gt;Build a URL (or MD5) to resources database.&lt;br /&gt;&lt;br /&gt;Pros&lt;br /&gt;- Web pages referencing same resources only have 1 copy saved. Experiments show that in compressed form, the original document takes only 1/5 to 1/10 of storage. The rest are potentially duplicated. (Note dependent resources like .jpg are often not well compressed).&lt;br /&gt;&lt;br /&gt;Cons&lt;br /&gt;- Delete requires reference counting before removing shared resources.&lt;br /&gt;- Opening a saved web page requires multiple lookups.&lt;br /&gt;- Saving in storage only happens incrementally. I.e. the first web pages saved take same amount of storage in either design. Saving only happends when adding subsequent web pages from the same site (referencing similar resources)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Design C&lt;br /&gt;--------&lt;br /&gt;Save resources from the same DNS domain in one place. Items under one domain are more managable.&lt;br /&gt;&lt;br /&gt;Compromise? Best of both world or complexity of both?&lt;br /&gt;&lt;br /&gt;Caveat: one web page can have resources coming from several domains.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861133924835103?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861133924835103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861133924835103' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861133924835103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861133924835103'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/02/how-to-save-web-pages.html' title='How to save a web pages?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861100070284701</id><published>2005-02-23T08:02:00.000-08:00</published><updated>2005-10-06T08:03:20.703-07:00</updated><title type='text'>Why don't we all have 10,000 bookmarks?</title><content type='html'>Is that because there is not so much worthy materials from the web? At least not for me. If there are tools to support it I am confident that I would a bookmark of 10,000 items within 10 years.&lt;br /&gt;&lt;br /&gt;One obvious issue is that web browser's bookmark UI is not scalable. The primary UI is a pull down menu with items organized under hierarchical folders. Access become dramatically more difficult when a menu is longer than a screenful or when items are organized in a second level folder or below. I painstakingly organized my bookmark list to keep frequently used items accessible and avoid having some went out of the radar screen. It was never fully successful. It also mean I bookmark a lot less than I want to.&lt;br /&gt;&lt;br /&gt;A search based access is an improvement. Organize by a flat keyword list (tags a la deli.cio.us) also improve upon the strict hierarchical taxonomy.&lt;br /&gt;&lt;br /&gt;When you really have 10,000 bookmarks, another issue comes up. People don't seems to have the ability to pay attention to such a large amount of items. I purge bookmark regularly after I think I got a good grip on the information and that it cannot provide me extra value. This is usually a mistake. I seldom want to purge something completely from my consciousness. What I was trying to do is to keep the bookmark list tidy to prepare for new information. The tools force me to erase the memory completely.&lt;br /&gt;&lt;br /&gt;An alternative is keep recent items handy while pushing old items into an archive. Gmail introduced such organization technique. It recommends you to use 'archive' instead of 'delete' so to get an item out of sight but still accessible via search in the long term archive. This process is very promising but unconventional. How much success does Google has?&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861100070284701?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861100070284701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861100070284701' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861100070284701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861100070284701'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/02/why-dont-we-all-have-10000-bookmarks.html' title='Why don&apos;t we all have 10,000 bookmarks?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861018714044572</id><published>2005-02-21T07:49:00.000-08:00</published><updated>2005-10-06T07:49:47.140-07:00</updated><title type='text'>Practical File System Design</title><content type='html'>Part of the design is reminiscience of a file system. It store's web pages instead of files. And there are attributes like URL and title that is indexed and searchable. I just found Dominic Giampaolo's book "Practical File System Design with the Be File System" available online (http://www.nobius.org/~dbg/practical-file-system-design.pdf). This seems to be a good study on this subject.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861018714044572?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861018714044572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861018714044572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861018714044572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861018714044572'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/02/practical-file-system-design.html' title='Practical File System Design'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861015983667357</id><published>2005-02-19T07:49:00.000-08:00</published><updated>2005-10-06T07:58:29.676-07:00</updated><title type='text'>A Comparison of Hyperstructures</title><content type='html'>A Comparison of Hyperstructures: Zzstructures, mSpaces, and Polyarchies&lt;br /&gt;&lt;br /&gt;McGuffin, M. J. and schraefel, m. c. (2004) A Comparison of Hyperstructures: Zzstructures, mSpaces, and Polyarchies. In Proceedings of ACM Conference on Hypertext and Hypermedia, 2004 (in press), pages pp. 153-162, Santa Cruz, California, USA.&lt;br /&gt;--------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Just found this paper at &lt;a href="http://eprints.ecs.soton.ac.uk/9230/"&gt;http://eprints.ecs.soton.ac.uk/9230/&lt;/a&gt;. The descriptions of Hyperstructures has enlighten me on a lot of unstructure thought on how to organize &amp; structure bookmarks. The deli.cio.us way to eschew hierarchical structure in favor of associated keyword is a simple and effective approach. However the paper says&lt;br /&gt;&lt;br /&gt;"A disadvantage of using this approach alone is that users cannot exploit their spatial memory and learn where things are located, or remember paths of links to find them"&lt;br /&gt;&lt;br /&gt;It also helps me to understand what semantic web is all about. Great work.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861015983667357?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861015983667357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861015983667357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861015983667357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861015983667357'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/02/comparison-of-hyperstructures.html' title='A Comparison of Hyperstructures'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861013411900083</id><published>2005-02-02T07:48:00.000-08:00</published><updated>2005-10-06T07:58:04.423-07:00</updated><title type='text'>article gone? MindRetrieve save the day</title><content type='html'>I have bookmarked an article "INNOVATION, INFORMATION TECHNOLOGY. AND THE CULTURE OF FREEDOM" by Manuel Castells for later reading at&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.softwarelivre.org/news/3636"&gt;http://www.softwarelivre.org/news/3636&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When I go back today somehow the original article is pulled and replaced with another Spanish piece. The site is in Portuguese and there is no indication of any language button. I begin to question my memory if there was ever an English article there.&lt;br /&gt;&lt;br /&gt;A search in MindRetrieve quickly dispel my doubt. In the cache is the English article I've seen.&lt;br /&gt;&lt;br /&gt;Anyway it is largely things about open source I already know. Nothing particularly insightful there.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861013411900083?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861013411900083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861013411900083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861013411900083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861013411900083'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/02/article-gone-mindretrieve-save-day.html' title='article gone? MindRetrieve save the day'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861010062571330</id><published>2005-02-02T07:47:00.000-08:00</published><updated>2005-10-06T07:48:20.626-07:00</updated><title type='text'>TortoiseSVN + Total Commander</title><content type='html'>I've just setup the TortoiseSVN client with the fresh release of Total Commander 6.5. The result is a wonderful integration of SVN client with my favourite file manager. A little icon next to the file indicates whether the file is modified or not. Diff, commit and revert commands are readily available in the context menu. Even through the SVN repository is half way around the globe and I am working off DSL, the speed still blow away the ClearCase that I use in corporate environment. Also SVN works great offline and diff works without the network!&lt;br /&gt;&lt;br /&gt;The only thing I haven't figure out is how to store the session for the svn+ssh protocol. Right now it asks for password for every remote operation, sometimes even twice.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861010062571330?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861010062571330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861010062571330' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861010062571330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861010062571330'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/02/tortoisesvn-total-commander.html' title='TortoiseSVN + Total Commander'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17426834.post-112861002590990803</id><published>2005-01-27T07:46:00.000-08:00</published><updated>2005-10-06T07:47:05.913-07:00</updated><title type='text'>thought on search the search?</title><content type='html'>2005-Jan-27 02:59&lt;br /&gt;&lt;br /&gt;The basic thing to do is to separate search engine result page from other pages. If users is searching for a topic chances are they have look for it in search engine before. It is distracting to see a lot of google result pages among the result.&lt;br /&gt;&lt;br /&gt;More than this is to tackle some frustrations a search often encounter:&lt;br /&gt;&lt;br /&gt;* beating around the bush, keep search the same item and revisiting same result. Can it help to point out dead end earlier?&lt;br /&gt;&lt;br /&gt;* How do I get here? You're looking at a promising result. If it can backtrack to the search result page (or some other directory page) it may lead to more useful lead.&lt;br /&gt;&lt;br /&gt;Would a software helps in these cases? How to present an intuitive and non-intrusive UI? That's something to experiment with in the next few months.&lt;div class="blogger-post-footer"&gt;Download MindRetrieve from http://www.mindretrieve.net&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17426834-112861002590990803?l=mindretrieve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mindretrieve.blogspot.com/feeds/112861002590990803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17426834&amp;postID=112861002590990803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861002590990803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17426834/posts/default/112861002590990803'/><link rel='alternate' type='text/html' href='http://mindretrieve.blogspot.com/2005/01/thought-on-search-search.html' title='thought on search the search?'/><author><name>Tung Wai Yip</name><uri>http://www.blogger.com/profile/01409046343777567728</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
