<?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-31589523</id><updated>2011-11-27T16:23:51.534-08:00</updated><category term='license'/><category term='index'/><category term='computer games'/><category term='rdf'/><category term='indexing'/><category term='semweb'/><category term='release'/><category term='desktop search'/><category term='application'/><category term='interface design'/><category term='beagle'/><category term='tech tips'/><title type='text'>d-Tech-t</title><subtitle type='html'>A hyper-textual display of my technical and writing prowess, or lack of the same. You have been warned.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31589523.post-7699972198903787110</id><published>2011-02-13T06:27:00.000-08:00</published><updated>2011-02-13T06:27:17.494-08:00</updated><title type='text'>Aww... how he was loved</title><content type='html'>I am guilty of orphaning the mighty &lt;a href="http://beagle-project.org/"&gt;Beagle&lt;/a&gt;. With so many bugs calling for attention, I reverted to debugging towards the end of the last decade; I had no option other than turning a blind eye to one of my favourite projects. There were technical reasons which acted as good secondary excuses - Evolution devised a new API for search engines which basically made &lt;i&gt;beagle&lt;/i&gt; incompatible with that email client, the File system indexer (one of the &lt;i&gt;many&lt;/i&gt; data gatherers supported by it) was full of corner-case hacks demanding cleanup and rewrite, and lastly, increasing attention to tracker, whose one of the taglines (possibly made up by fan-boys) was &lt;b&gt;"C"&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;I havn't been catching up with beagle-tracker-mono world since then. To be honest, I have long stopped following /. and Linux news altogether. I couldn't get myself to unsubscribe from &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/"&gt;beagle mailing-list&lt;/a&gt; though, even though I was convinced within a year no one in the world would be using beagle any more and there will never be any email in that list. It was just matter of time.&lt;br /&gt;&lt;br /&gt;Therefore, imagine my surprise to see the following &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2011-February/msg00000.html"&gt;recent thread&lt;/a&gt; in the mailing list. It was too nice and warming to read the posts once-twice-thrice. The stability and versatility that we aimed and delivered, is surprisingly, still relevant. Maybe I should title this post as &lt;i&gt;"How he is still loved"&lt;/i&gt;&lt;br /&gt;&lt;blockquote&gt;Thu, 10 Feb 2011 13:53:42 +0100   &lt;br /&gt;&lt;hr /&gt;&lt;pre style="margin: 0em;"&gt;Dear beagle hackers,&lt;br /&gt;&lt;/pre&gt;&lt;tt&gt;since the mailing list is inactive I fear that beagle is now ultimately  &lt;/tt&gt;&lt;tt&gt;abandoned. Is this the case? If so, this really makes me sad. &lt;/tt&gt;&lt;tt&gt;I have been using beagle daily for a number of years and I still find  &lt;/tt&gt;&lt;tt&gt;that there is no better desktop search available on Linux. &lt;/tt&gt;&lt;tt&gt;Tracker is a disappointment. It supports very few data sources, is a cpu  &lt;/tt&gt;&lt;tt&gt;and memory hog, it is buggy, and its search results are very poor in  &lt;/tt&gt;&lt;tt&gt;quality, and I don't really see it making progress either. &lt;/tt&gt;&lt;tt&gt;I got so used to beagle for quickly finding e-mail and files that I was  &lt;/tt&gt;&lt;tt&gt;saddened to see that Debian completely removed it from the archives,  &lt;/tt&gt;&lt;tt&gt;because development has stopped. Isn't there anyone anywhere willing to  &lt;/tt&gt;&lt;tt&gt;take over? There has been so much effort invested into beagle. In the  &lt;/tt&gt;&lt;tt&gt;end it was really stable, reliable and usable, that just letting it rot  &lt;/tt&gt;&lt;tt&gt;is such a wasteful thing to do...&lt;/tt&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;Thu, 10 Feb 2011 11:46:20 -0600   &lt;br /&gt;&lt;hr /&gt;&lt;pre&gt;I don't think anybody is actively working on beagle, but I wouldn't&lt;br /&gt;call it dead.  It's still used by many people, and we're at least&lt;br /&gt;keeping it runnable -- eg we had an update to adapt to new Mono.Sqlite&lt;br /&gt;APIs upstream.  Feel free to work on it!&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Fri, 11 Feb 2011 10:06:13 +0100   &lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;I would love to, but unfortunately I am in no way qualified to do so. It is good to hear that people are still using it, However, at least for Debian users this has become very difficult since it was removed from the repositories. Has it been updated to work with recent version of Evolution?&lt;/blockquote&gt;&lt;blockquote&gt;Fri, 11 Feb 2011 13:28:41 -0500   &lt;br /&gt;&lt;hr /&gt;&lt;pre&gt;On Thu, 2011-02-10 at 13:53 +0100, Johannes Rohr wrote: &lt;br /&gt;&amp;gt; Dear beagle hackers,&lt;br /&gt;&amp;gt; since the mailing list is inactive I fear that beagle is now ultimately &lt;br /&gt;&amp;gt; abandoned. Is this the case? If so, this really makes me sad.&lt;br /&gt;&amp;gt; I have been using beagle daily for a number of years and I still find &lt;br /&gt;&amp;gt; that there is no better desktop search available on Linux.&lt;br /&gt;&amp;gt; Tracker is a disappointment. It supports very few data sources, is a cpu &lt;br /&gt;&amp;gt; and memory hog, it is buggy, and its search results are very poor in &lt;br /&gt;&amp;gt; quality, and I don't really see it making progress either.&lt;br /&gt;&lt;br /&gt;I feel the same way;  I'd hoped Tracker could serve as a replacement for&lt;br /&gt;Beagle but to call it a disappointment is an understatement.  &lt;br /&gt;&lt;br /&gt;Score a big one for the anti-Mono-FUD-monster  [funny they used to go&lt;br /&gt;on-an-on that Beagle was slow because it used Mono... then Beagle got&lt;br /&gt;fast and Tracker still devours gobs of CPU to produce essentially no&lt;br /&gt;result].&lt;br /&gt;&lt;br /&gt;But in Tracker's defense Evolution has been changing significantly in&lt;br /&gt;the past few revisions so Beagle doesn't work with it anymore either.&lt;br /&gt;In time hopefully Evolution will settle down again and the Tracker&lt;br /&gt;integration will improve.  Some really nice improvements are being made&lt;br /&gt;to Evolution.&lt;br /&gt;&lt;br /&gt;&amp;gt; I got so used to beagle for quickly finding e-mail and files that I was &lt;br /&gt;&amp;gt; saddened to see that Debian completely removed it from the archives, &lt;br /&gt;&amp;gt; because development has stopped. Isn't there anyone anywhere willing to &lt;br /&gt;&amp;gt; take over? There has been so much effort invested into beagle. In the &lt;br /&gt;&amp;gt; end it was really stable, reliable and usable, that just letting it rot &lt;br /&gt;&amp;gt; is such a wasteful thing to do...&lt;br /&gt;&lt;br /&gt;If there are no developers that is what happens.  Pointing out that&lt;br /&gt;there "should be" developers doesn't make them magically appear.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Fri, 11 Feb 2011 13:47:15 -0500   &lt;br /&gt;&lt;hr /&gt;&lt;div style="font-family: inherit;"&gt;&amp;gt; &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&amp;gt; I feel the same way;  I'd hoped Tracker could serve as a replacement for&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&amp;gt; Beagle but to call it a disappointment is an understatement.  &lt;/div&gt;&lt;br /&gt;Ditto.  I have continued to be disappointed by Tracker.  I've completely&lt;br /&gt;removed it from my systems as it was actively blocking other&lt;br /&gt;applications.  More trouble that it was worth.&lt;br /&gt;&lt;br /&gt;Beagle was always very un-intrusive and always gave me great search&lt;br /&gt;results.&lt;br /&gt;&lt;br /&gt;Sad that it's moribund.  :-(&lt;/blockquote&gt;Then there were posts about an alternate desktop search yada yada yada which I am skipping. Though, one thing should be kept in mind - one shouldn't apples and oranges. Beagle is &lt;i&gt;not&lt;/i&gt; a &lt;i&gt;file-system indexer&lt;/i&gt;. There are plenty of other tools to do that, and the simplest file system indexer can be written in less than 100 lines (of any modern programming language).&lt;br /&gt;&lt;br /&gt;There is of course a file system indexer built on beagle that can be used to compare against existing file system indexers - it is called &lt;a href="http://beagle-project.org/Blocate"&gt;&lt;i&gt;blocate&lt;/i&gt;&lt;/a&gt; and I believe, is shipped alongside beagle (in distros still packaging beagle). Let us bow once again to the stability and versatility - blocate is merely a wrapper shell script calling the regular beagle commands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-7699972198903787110?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/7699972198903787110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=7699972198903787110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7699972198903787110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7699972198903787110'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2011/02/aww-how-he-was-loved.html' title='Aww... how he was loved'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-1854588556375260622</id><published>2011-01-28T12:16:00.000-08:00</published><updated>2011-02-04T08:15:18.315-08:00</updated><title type='text'>Superfish menu + Drupal Fusion + How the devil do I</title><content type='html'>Superfish is a pretty cool menu based on JQuery and CSS. If you are suspicious, view the wonder for yourself at &lt;a href="http://users.tpg.com.au/j_birch/plugins/superfish/"&gt;http://users.tpg.com.au/j_birch/plugins/superfish/&lt;/a&gt; with the &lt;b&gt;nav-bar&lt;/b&gt; example.&lt;br /&gt;&lt;br /&gt;Fusion based Drupal themes are currently hot on market, e.g., Acquia Prosper. You can check them out for your own at &lt;a href="http://fusiondrupalthemes.com/browse"&gt;http://fusiondrupalthemes.com/browse&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You are yet to hear the awesomest - &lt;a href="http://cherne.net/brian/resources/jquery.hoverIntent.html"&gt;jQuery hoverintent plugin&lt;/a&gt;. Very helpful for navigating complex menus, where often, one slip of the mouse implies restarting the navigation.&lt;br /&gt;&lt;br /&gt;Fusion themes already use Superfish for their main menu system. Of course, I madly fell in love the moment I saw the navbar. However, the sophisticated CSS and JS of Superfish nav-bar goes kaput when used in Fusion. Quoting jeremy (a TopNotchThemer at &lt;a href="http://fusiondrupalthemes.com/forum"&gt;http://fusiondrupalthemes.com forum&lt;/a&gt;)&lt;br /&gt;&lt;div class="forum-post-panel-main clear-block"&gt;&lt;div class="forum-post-content"&gt;&lt;blockquote&gt;Superfish is a bit difficult to work with when you need to  get the active menu sub-menu to be visible when you are on that section.  I've tried a LOT of different scripts and changes to the theme but  never found a solution that worked for Superfish and it was very  unstabble when I got close to what I wanted.&lt;br /&gt;I actually went with disabling the primary menu and Superfish all  together and going with a block instead for my menu. This is basically  starting all over and doesn't work with Superfish at all so you have  full control over the placement and styling but will have to write it  yourself. &lt;br /&gt;So for this specific case I recommend going with a block instead of the default primary menu with Superfish. Best of luck!&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;So, I started keeping notes when I saw some early signs of success. Here is the recipe to get it (close to) perfect.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;u&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Fix Superfish nav-bar menu in Fusion-based Drupal themes&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;&lt;br /&gt;1. Enable navbar for superfish&lt;br /&gt;From &lt;a href="http://fusiondrupalthemes.com/story/100525/customizing-superfish-menus-your-fusion-theme"&gt;http://fusiondrupalthemes.com/story/100525/customizing-superfish-menus-your-fusion-theme&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;function iiitd_preprocess_page(&amp;amp;$vars) {&lt;br /&gt;  // Add Superfish navbar class if dropdown enabled&lt;br /&gt;  if ($vars['primary_links'] &amp;amp;&amp;amp; theme_get_setting('primary_menu_dropdown') == 1) {&lt;br /&gt;      $vars['primary_links_tree'] = preg_replace('/^&amp;lt;ul class="menu sf-menu/i', '&amp;lt;ul class="menu sf-menu sf-navbar', $vars['primary_links_tree'], 1);&lt;br /&gt;  }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;2. Ask navbar to keep showing second level&lt;br /&gt;&lt;a href="http://fusiondrupalthemes.com/forum/using-fusion/adjusting-superfish-behaviour"&gt;http://fusiondrupalthemes.com/forum/using-fusion/adjusting-superfish-behaviour&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--- mysubtheme.js&lt;br /&gt;&lt;pre&gt;Drupal.behaviors.mysubthemeSuperfish = function (context) {&lt;br /&gt;&lt;br /&gt;$("#primary-menu ul.sf-navbar").superfish({&lt;br /&gt;    hoverClass:  'sfHover',&lt;br /&gt;    pathLevels:  2,&lt;br /&gt;    pathClass:   'active-trail',&lt;br /&gt;    delay:       800,&lt;br /&gt;    animation:   {opacity:'show'}, // opacity: fade-in, height: slide-in&lt;br /&gt;    speed:       'normal',&lt;br /&gt;    autoArrows:  true,&lt;br /&gt;    dropShadows: false,&lt;br /&gt;    disableHI:   false&lt;br /&gt;  }).supposition();&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. Modify fusion-core/superfish.js DIRECTLY! Superfish removed the active-trail class which fusion didn't like at all!&lt;br /&gt;&lt;pre&gt;return this.each(function() {&lt;br /&gt;   var s = this.serial = sf.o.length;&lt;br /&gt;   var o = $.extend({},sf.defaults,op);&lt;br /&gt;   o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){&lt;br /&gt;+    $(this).addClass([o.hoverClass,c.bcClass].join(' '));&lt;br /&gt;+     //.filter('li:has(ul)').removeClass(o.pathClass);&lt;br /&gt;-    $(this).addClass([o.hoverClass,c.bcClass].join(' '))&lt;br /&gt;-     .filter('li:has(ul)').removeClass(o.pathClass);&lt;br /&gt;   });&lt;br /&gt;   sf.o[s] = sf.op = o;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. (As good as modifying superfish.js) Set the default value for Superfish directly - by the time drupal does it, the page is already rendered in an incorrect way.&lt;br /&gt;&lt;br /&gt;--- mysubtheme.js&lt;br /&gt;&lt;pre&gt;// Change defaults too - otherwise, second level does not show the active-trail&lt;br /&gt;$.fn.superfish.defaults.pathClass = 'active-trail';&lt;br /&gt;$.fn.superfish.defaults.pathLevels = 2;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5. Add space for the second level to show in the right place.&lt;br /&gt;&lt;pre&gt;div#primary-menu ul.sf-navbar {&lt;br /&gt;    height: 2.5em;&lt;br /&gt;    padding-bottom: 2.5em !important;&lt;br /&gt;    padding-left: 0 !important;&lt;br /&gt;    position: relative;&lt;br /&gt;    width: 100%;&lt;br /&gt;    z-index: 97;&lt;br /&gt;    line-height: 100%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div#primary-menu ul.sf-navbar li {&lt;br /&gt;  position: static;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div#primary-menu ul.sf-navbar li.sfHover ul {&lt;br /&gt;  margin-top: 0;&lt;br /&gt;  top: 2.5em;   /* match top ul list item height */&lt;br /&gt;  left: 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6. Even though the theme comes with hoverintent plugin files, HI (as hoverintent is often called) doesn't actually work. Even after disableHI is set to false. The reason and the fix is ...&lt;br /&gt;&lt;pre&gt;// Destroy default fusionSuperfish initialization.&lt;br /&gt;/* Explanation: default fusionSuperfish disables HI during its initialization -&lt;br /&gt; * which, attaches a jquery hover() handler. The jquery hover handler attaches&lt;br /&gt; * mouseenter and mouseleave events to the element. The mouseenter handler first&lt;br /&gt; * actually changes the eventype to 'mouseenter' and then calls the handler.&lt;br /&gt; *&lt;br /&gt; * Now, HI requires handlers for mouseover and mouseout. However, upon firing&lt;br /&gt; * those events, first the hover handler is called. So, by the time the HI&lt;br /&gt; * handler is called, the event type has already been changed to mouseenter/mouseleave!&lt;br /&gt; * And that is how the cookie crumbled everytime.&lt;br /&gt; */&lt;br /&gt;Drupal.behaviors.fusionSuperfish = function (context) { };&lt;br /&gt;Drupal.behaviors.fusionSuperfishBlocks = function (context) { };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;i&gt;This post carries a timestamp of 1:30am at night. Don't even ask for warranty.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-1854588556375260622?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/1854588556375260622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=1854588556375260622' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1854588556375260622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1854588556375260622'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2011/01/superfish-menu-drupal-fusion-why-devil.html' title='Superfish menu + Drupal Fusion + How the devil do I'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2134714347859922701</id><published>2010-12-01T07:00:00.000-08:00</published><updated>2010-12-10T18:52:08.271-08:00</updated><title type='text'>Internet to TV</title><content type='html'>This is the age of parallel processing.&lt;br /&gt;&lt;br /&gt;Multiple firefox profile running simultaneously (&lt;i&gt;--no-remote&lt;/i&gt; / &lt;i&gt;MOZ_NO_REMOTE=1&lt;/i&gt;).&lt;br /&gt;Multiple tabs opened in yakuake.&lt;br /&gt;Multiple CPUs (one for dealing with flash/firefox, other for life).&lt;br /&gt;Now added, multiple sound outputs from computer.&lt;br /&gt;&lt;br /&gt;I have one pair of speakers which I use in the dining area. Helps me get past barely edibles.&lt;br /&gt;&lt;br /&gt;My work area has now moved close to the TV. This TV has HDMI (and is DLNA-compatible), so it made perfect sense to me when the geeky fairy whispered something about using the TV speakers for listening to &lt;a href="http://www.magic1067.com/"&gt;Magic 106.7FM&lt;/a&gt;, &lt;a href="http://www.jango.com/"&gt;Jango&lt;/a&gt; and Youtubish songs off of my not-so-great-sounding laptop. &lt;a href="http://sourceforge.net/projects/minidlna/"&gt;minidlna&lt;/a&gt; doesn't quite stream non-file contents, so I was left with pleading ALSA to let specially chosen audio to be routed for TV@dBera via HDMI.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ aplay -l&lt;br /&gt;**** List of PLAYBACK Hardware Devices ****&lt;br /&gt;card 0: Intel [HDA Intel], device 0: AD198x Analog [AD198x Analog]&lt;br /&gt;&amp;nbsp; Subdevices: 0/1&lt;br /&gt;&amp;nbsp; Subdevice #0: subdevice #0&lt;br /&gt;card 0: Intel [HDA Intel], device 3: INTEL HDMI [INTEL HDMI]&lt;br /&gt;&amp;nbsp; Subdevices: 0/1&lt;br /&gt;&amp;nbsp; Subdevice #0: subdevice #0&lt;/div&gt;&lt;div style="background-color: #cccccc; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ cat &amp;gt; ~/.asoundrc.tv&lt;br /&gt;pcm.!default {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type plug&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; slave {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcm {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type hw&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; card 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; device 3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;$ ALSA_CONFIG_PATH=~/.asoundrc.tv firefox -P music -no-remote&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Hitting the right button on the TV remote sets its &lt;i&gt;Energy Saving&lt;/i&gt; to &lt;i&gt;Picture Off&lt;/i&gt;. Voila! I just got myself an awesome pair of speakers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;i&gt;Edit:&lt;/i&gt; If you get no sound, make sure the IEC958 interface is unmuted (you can check/set/unset using alsamixer). IEC958 is the interface for digital output for a lot of soundcards. &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2134714347859922701?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2134714347859922701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2134714347859922701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2134714347859922701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2134714347859922701'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2010/12/internet-to-tv.html' title='Internet to TV'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8977375648299676857</id><published>2010-09-03T11:37:00.000-07:00</published><updated>2010-09-03T11:43:15.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer games'/><title type='text'>forever very-vapor</title><content type='html'>WHAT ! Duke Nukem Forever is &lt;a href="http://blogs.wsj.com/speakeasy/2010/09/03/controversial-long-awaited-duke-nukem-forever-will-finally-be-released/"&gt;&lt;span style="font-style: italic;"&gt;not&lt;/span&gt;&lt;/a&gt; a vapour ware ? But I thought that is part of the definition of vap...&lt;br /&gt;&lt;br /&gt;I am feeling weak at my knees, being compelled to write about a hearsay read on blogs and twitter feeds. It's just that hard to keep cool.&lt;br /&gt;&lt;br /&gt;Let's Nuke'em Duke!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8977375648299676857?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8977375648299676857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8977375648299676857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8977375648299676857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8977375648299676857'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2010/09/forever-very-vapor.html' title='forever very-vapor'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-1469700409082015223</id><published>2009-06-07T06:01:00.000-07:00</published><updated>2009-06-07T06:46:34.711-07:00</updated><title type='text'>this is his 4th computer</title><content type='html'>A thin man with a pointed beard loved honeysuckle. He had some honeysuckle trees in an orchard across a huge river. He built a boat and used it to cross the river. The fruits were good. He ate some and sold the rest.&lt;br /&gt;...&lt;br /&gt;10 years later, the boat showed signs of age. He built a new boat. Life was good again.&lt;br /&gt;&lt;br /&gt;1 millennium, 6 century and 5 decades later, a very smart man told us how to create a very smart machine. One machine which can do everything. Of course, the machine needed sophisticated instructions but there were a lot of people who can figure out the right instructions for any operation.&lt;br /&gt;&lt;br /&gt;6 decades later. A company that sells computers made a wonderful laptop. A fat man who earns a lot of money bought one. The laptop performed top-notch, looked solid and meant business. He was happy.&lt;br /&gt;...&lt;br /&gt;2 years later, the computer slowed down. He bought a new one. The one felt as fast as the old one when he had bought it. He considered the purchase a terribly insightful investment.&lt;br /&gt;&lt;br /&gt;200 years later. A group of bespectacled visionaries will figure out every detail of how our body works. A lot of companies will appear who will promise a live-long and live-happy life. "Don't like your middle ear? Here, we will replace it with a machine. 1-day money back guarantee". You can hear a lot in 1 day, so everyone will be satisfied. A young rich business couple will modify themselves to become what they want. They will get married. They will make it to the news as the first perfect couple.&lt;br /&gt;...&lt;br /&gt;7 days later, the man will get bored of his wife. He will find her pose unexciting and her actions banal. He will find a new woman for a huge sum of money.&lt;br /&gt;...&lt;br /&gt;After uranium, monitors and PCBs, the world will face the challenge of a new type of landfill: people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-1469700409082015223?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/1469700409082015223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=1469700409082015223' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1469700409082015223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1469700409082015223'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2009/06/this-is-his-4th-computer.html' title='this is his 4th computer'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-3659638712698950805</id><published>2009-02-04T08:16:00.000-08:00</published><updated>2009-02-04T08:31:40.002-08:00</updated><title type='text'>Better than my best</title><content type='html'>Wow! "Toshiba handheld hits 1GHz"&lt;br /&gt;http://news.cnet.com/8301-13924_3-10155730-64.html&lt;br /&gt;&lt;br /&gt;The news isn't that tomorrow's phones will beat my current best computer. Technology, like leaking water, always finds a way to go down ... err... advance. I like it or not.&lt;br /&gt;&lt;br /&gt;What surprises me is the abusive intent of folks behind the technology. Like it or not, designing is more art than science. The kind of rationality and precision that goes into using the technology to create something more than a crapware is nothing short of the artistic choices a painter makes when rendering the perfect sunset over an island where he never went.&lt;br /&gt;&lt;br /&gt;The minds that control the coding hands do not seem to realise this ... no matter what better hardware I come across, I also come across a newer version of the same software which makes it crawl. Even the upcoming dual-core 1.5GHz is not going to impress me much, not any more. Perfection is the key.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-3659638712698950805?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/3659638712698950805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=3659638712698950805' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3659638712698950805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3659638712698950805'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2009/02/better-than-my-best.html' title='Better than my best'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4900396674010926750</id><published>2008-07-23T13:55:00.001-07:00</published><updated>2008-07-23T13:55:16.503-07:00</updated><title type='text'>&lt; Insert Your Favourite &gt; Desktop Search Hackfest</title><content type='html'>Good news - a (read: the first ever) Desktop Search Hackfest is being&lt;br&gt;planned after the Maemo Summit, in Berlin.&lt;br&gt;&lt;a href="http://wiki.maemo.org/Desktop_Search_Hackfest"&gt;http://wiki.maemo.org/Desktop_Search_Hackfest&lt;/a&gt;&lt;p&gt;Not so good news - I will not be able to attend. It&amp;#39;s not easy to&lt;br&gt;sneak out as a grad student from an US university (bonus if you are an&lt;br&gt;_alien_). Joe is not going either. Our in-house Xesam guru is about a&lt;br&gt;join a real job, the money-paying kind. It might be hard for him to&lt;br&gt;attend either. I dearly wish Beagle could somehow benefit from this&lt;br&gt;meeting. Good luck to the other projects. Get some work done and make&lt;br&gt;the users happy. It is nice to see that Strigi/Nepomuk devs are&lt;br&gt;attending. And thanks to Nokia for making this happen.&lt;p&gt;On a side note, look at the number of participants from the Tracker&lt;br&gt;project ! Wow, they&amp;#39;re booming. Double kudos to them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4900396674010926750?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4900396674010926750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4900396674010926750' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4900396674010926750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4900396674010926750'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/07/desktop-search-hackfest.html' title='&lt; Insert Your Favourite &gt; Desktop Search Hackfest'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6460491532166464802</id><published>2008-07-16T20:47:00.000-07:00</published><updated>2008-07-16T20:49:39.483-07:00</updated><title type='text'>Creating new backend - help wanted</title><content type='html'>Three years ago this month, the above was the subject of my first post to the &lt;br&gt;dashboard-hackers mailing list. I was writing a backend for Akregator. Its &lt;br&gt;immaterial what Akregator is; I was mostly pattern matching back then and &lt;br&gt;that is how I got familiar with C#.&lt;p&gt;I remember submitting a patch to beagle bugzilla a few days before that. It &lt;br&gt;was to filter JPEG JFIF comments because that is where digikam stored all the &lt;br&gt;descriptions. Now it uses IPTC tags. Does not really matter since beagle &lt;br&gt;indexes both.&lt;p&gt;Backtracking further, I got interested in beagle several months before that. I &lt;br&gt;had this incredible urge to add /author/, /title/, /subject/ tags to the PDF &lt;br&gt;research papers that I download and use beagle to search among them. The &lt;br&gt;first time I visited the beagle website and downloaded the tarball, the huge &lt;br&gt;list of dependencies really really scared me off. I used to allow more Gnome &lt;br&gt;on my desktop back then than I do now but nevertheless building beagle seemed &lt;br&gt;like a daunting task. I later freed beagle from many of its dependencies; I &lt;br&gt;feel that is my biggest contribution to this project.&lt;p&gt;I made a second attempt later; soon realized that even though I can get beagle &lt;br&gt;going, there was (is ?) no easy way to modify PDF document properties (in &lt;br&gt;linux). Then I switched my goal to index my pictures, which I have started &lt;br&gt;tagging and adding comments to, using my new found love digikam. Thankfully &lt;br&gt;the one-liner JFIF patch did not require much C# knowledge. It would not have &lt;br&gt;mattered anyway, C# is darn easy to pattern match.&lt;p&gt;After all these months, I still haven&amp;#39;t managed to build my repository of well &lt;br&gt;tagged PDF papers (if I wait for several more months and stop wasting time &lt;br&gt;then the need would be gone forever). I do keep a static index for my &lt;br&gt;pictures but rarely search them. What a waste of time :-). Silly me!&lt;p&gt;As I am about to sign off this blog entry, I noticed that I was siging off &lt;br&gt;as &amp;quot;Bera&amp;quot; in my initial few emails. I wonder when did I switch to &lt;br&gt;my &amp;quot;signature sign&amp;quot; dBera.&lt;p&gt;Did I mention that beagle 0.3.8 was released some 48 hours ago. Go go get it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6460491532166464802?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6460491532166464802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6460491532166464802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6460491532166464802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6460491532166464802'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/07/creating-new-backend-help-wanted.html' title='Creating new backend - help wanted'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-37851089834806536</id><published>2008-05-08T04:14:00.001-07:00</published><updated>2008-05-08T04:14:49.134-07:00</updated><title type='text'>One way to get things fixed in Ubuntu</title><content type='html'>Become famous and then blog about it. Its easy (the blogging part). And it &lt;br&gt;works [1a, 1b].&lt;p&gt;Now if only someone famous blogged about some other literal showstoppers in &lt;br&gt;beagle and KNetworkManager, some more Kubuntu users would be happy [2]. &lt;br&gt;Beagle is second class citizen in Ubuntopia, but I thought KNetworkManager is &lt;br&gt;important.&lt;p&gt;One thing I noted though, since Beagle was moved to Universe from Main, it is &lt;br&gt;getting better treatment. Periodic sync from debian is actually happening &lt;br&gt;unlike when it was in main; the core Ubuntu developers rarely found time to &lt;br&gt;update the Beagle package. Kudos to Masters of the Universe!&lt;p&gt;[1a]&lt;p&gt;&lt;a href="https://bugs.launchpad.net/ubuntu/+source/galago-sharp/+bug/186049/comments/9"&gt;https://bugs.launchpad.net/ubuntu/+source/galago-sharp/+bug/186049/comments/9&lt;/a&gt;&lt;br&gt;[1b] &lt;a href="http://arstechnica.com/reviews/os/hardy-heron-review.ars/3"&gt;http://arstechnica.com/reviews/os/hardy-heron-review.ars/3&lt;/a&gt;&lt;br&gt;[2] &lt;a href="https://bugs.launchpad.net/ubuntu/+source/beagle/+bug/207157"&gt;https://bugs.launchpad.net/ubuntu/+source/beagle/+bug/207157&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-37851089834806536?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/37851089834806536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=37851089834806536' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/37851089834806536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/37851089834806536'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/05/one-way-to-get-things-fixed-in-ubuntu.html' title='One way to get things fixed in Ubuntu'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8618421071116138241</id><published>2008-04-28T07:12:00.001-07:00</published><updated>2008-04-28T07:12:21.750-07:00</updated><title type='text'>I knew searching would fail</title><content type='html'>There is a great report about a usability test on the web about a guy&lt;br&gt;giving some common computer tasks to his girlfriend on a fresh Hardy&lt;br&gt;Heron installation. I found it via Slashdot but since fewer and fewer&lt;br&gt;people are slashdotting these days, so here is a link [1].&lt;p&gt;The tasks are well chosen and the user is _not_ a first time&lt;br&gt;grandma-type-user and approaches each task in the obvious possible&lt;br&gt;way. &amp;quot;Obvious possible&amp;quot; - for people not used to a Linux distribution,&lt;br&gt;where &amp;quot;doing stuff my way&amp;quot; rules over &amp;quot;getting stuff done&amp;quot;.&lt;p&gt;As I started reading it, I knew at some point the user was going to&lt;br&gt;&amp;quot;search for something&amp;quot;. And I knew she was going to fail. Which she&lt;br&gt;did.&lt;p&gt;The problem with most (all?) of the linux desktop search applications&lt;br&gt;is that they are cut out for a particular task and are (hopefully)&lt;br&gt;pretty good at it. Indexing is the keyword there - how to index all&lt;br&gt;kinds of data in the best possible way and then allow users to search&lt;br&gt;the indexed data. And there are lots of sophistication there.&lt;br&gt;Unfortunately the common search tasks by an user is not quite that.&lt;p&gt;- Search for a file by name - most common&lt;br&gt;- Search for files of certain types&lt;br&gt;- Search for files in home directory containing some text - slightly&lt;br&gt;advanced usage&lt;br&gt;- Search among browsed websites etc.&lt;br&gt;  - As a computer &amp;quot;user&amp;quot;, it is not clear why I would search for&lt;br&gt;websites in the desktop search tool and not in the browser. Of course,&lt;br&gt;once I am told this can be done in the desktop search tool _too_, I&lt;br&gt;would be extremely glad and nod in appreciation.&lt;p&gt;It takes time to write a desktop indexing and searching system. I&lt;br&gt;didnt believe it when I first heard of it and my friends asked me what&lt;br&gt;is so difficult about it other than implementing inotify. For some&lt;br&gt;reason it is. So a lot of effort in invested behind that. But there&lt;br&gt;has been less effort in presenting a failsafe, minimum capability&lt;br&gt;search experience in that direction. What do I mean by failsafe and&lt;br&gt;minimum capability ?&lt;p&gt;- One obvious way to launch the search tool (there could be more, but&lt;br&gt;there should be one which may not be the best but works in the worst&lt;br&gt;case)&lt;br&gt;- The obvious tool should never fail on the basic searching - never,&lt;br&gt;never, never. By basic searching I mean searching for non-file content&lt;br&gt;information - name, size, type (what on earth is _mimetype_ to a&lt;br&gt;non-CS/IT person ? searching by extension is what I mean. broad&lt;br&gt;classification like music, picture helps).&lt;br&gt;- Repeat the above. Let me say it this way - if the user knows a file&lt;br&gt;exists, she should be able to find it by name. And matches by name&lt;br&gt;should come _first_. Same for search by types.&lt;br&gt;- Anything else is a bonus. When we have complete semantic desktops,&lt;br&gt;where a file is same as an email and same as an addressbook entry,&lt;br&gt;maybe then users would want to search for everything or specify what&lt;br&gt;exactly she wants. Not now.&lt;p&gt;So where does beagle fall behind (or some of the others tools, by&lt;br&gt;reading about them and looking at their screenshots).&lt;br&gt;- User want to use them to search for files. The tools return pretty&lt;br&gt;much everything.&lt;br&gt;  - Give them an option on where to search. There is no need to&lt;br&gt;include an option for &amp;quot;application/rdf+xul&amp;quot; but list the common&lt;br&gt;options. A search service has to work for the minimum, a GUI has to&lt;br&gt;cater to the average. I would be sad if it didnt have ways to cater to&lt;br&gt;the advanced crowd too but I dont mind if that requires one extra&lt;br&gt;step.&lt;br&gt;- User wants to search everywhere (in the filesystem).&lt;br&gt;  - Thats definitely not what beagle was designed for. A beagle search&lt;br&gt;tool is not expected to do that. But when it is presented as the&lt;br&gt;_main_ search tool to the users, it will be used to search everywhere.&lt;br&gt;And it will fail.&lt;br&gt;  - I dont quite know how to design a failsafe GUI search tool  but a&lt;br&gt;good start would be use the indexing service to home directory files&lt;br&gt;and brute-force &amp;#39;find /usr/bin&amp;#39; for non-home directory partitions.&lt;br&gt;- Some users would never need to search by content.&lt;br&gt;  - If searching content was cheap then it would not be a big deal if&lt;br&gt;searching by content is enabled. But content searching is expensive&lt;br&gt;from my experience. It would be better if users are allowed to opt-in&lt;br&gt;for content searching.&lt;br&gt;  - Content searching is not supposed to be expensive. As far as&lt;br&gt;beagle is concerned, it is halfway on meeting this goal. It still&lt;br&gt;needs some fault-tolerance feature to detect problems before too much&lt;br&gt;damage has been done.&lt;p&gt;There are lots of other ways to make searching &amp;quot;just work&amp;quot;. The user&lt;br&gt;does not even need to know there is any indexing in the background.&lt;br&gt;The sad part is a lot of what I suggested (or could have suggested) is&lt;br&gt;already possible with the current beagle infrastructure. What is&lt;br&gt;lacking is someone with a good GUI knowledge to work on improving the&lt;br&gt;search experience. I am defending the base by fixing the occassional&lt;br&gt;simple bugs but a real developer is needed. And needed urgently&lt;br&gt;otherwise yet another distributions will be released with a lacklustre&lt;br&gt;search experience.&lt;p&gt;&lt;a href="http://contentconsumer.wordpress.com/2008/04/27/is-ubuntu-useable-enough-for-my-girlfriend/"&gt;http://contentconsumer.wordpress.com/2008/04/27/is-ubuntu-useable-enough-for-my-girlfriend/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8618421071116138241?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8618421071116138241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8618421071116138241' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8618421071116138241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8618421071116138241'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/04/i-knew-searching-would-fail.html' title='I knew searching would fail'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6058290980947905522</id><published>2008-04-20T15:04:00.001-07:00</published><updated>2008-04-20T15:05:39.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='indexing'/><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop search'/><title type='text'>Takes Two to Release</title><content type='html'>The &lt;a href="http://beagle-project.org/Live_GMail_Search"&gt;GMail backend&lt;/a&gt; I blogged about &lt;a href="http://dtecht.blogspot.com/2008/04/you-said-google-owns-your-life.html"&gt;before&lt;/a&gt; is now available for mass abuse in &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2008-April/msg00055.html"&gt;Beagle 0.3.6&lt;/a&gt;(&lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2008-April/msg00060.html"&gt;.1&lt;/a&gt;). We also tried to maintain our love of cutting edge technology by upgrading the Firefox extension to work with Firefox 3.0.&lt;br&gt; &lt;br&gt;I noticed several forum posts where users wanted to use beagle like locate/find-grep. The desire was two pronged - no intention to run a daemon continuously and return files from everywhere doing basic searches in name and path. That is not how beagle is supposed to be used but users are the boss in a community project. So I added blocate, a wrapper to &lt;a href="http://dtecht.blogspot.com/2008/03/better-late-than-never.html"&gt;beagle-static-query&lt;/a&gt;. Currently it only matches the &lt;i&gt;-d DBpath&lt;/i&gt; parameter of &lt;i&gt;locate&lt;/i&gt; but works like a charm. Sample uses&lt;br&gt; &amp;nbsp; &lt;span style="font-family: courier new,monospace;"&gt;$ blocate sondesh&lt;/span&gt;&lt;br&gt;&amp;nbsp; &lt;span style="font-family: courier new,monospace;"&gt;$ blocate -d manpages locate&lt;/span&gt;&lt;br&gt;&lt;br&gt;The other thing I added was a &lt;i&gt;locate&lt;/i&gt; backend. I absolutely do not recommend using this one. Yet if you insist ... when enabled and used with the &lt;i&gt;FileSystem&lt;/i&gt; backend, it will return search results from the &lt;i&gt;locate&lt;/i&gt; program. Yes, results from eVeRyWhErE, as you wished.&lt;br&gt; &lt;br&gt;You can use both the GMail and the locate backends in beagle-search as well. But both the new backends are rather primitive, so I have taken enough precautions againsts n00bs accidentally using them. So in summary, 0.3.6 is not going to do you any good. Oops... did I just say that ?!&lt;br&gt; &lt;br&gt;The title is based on the empiricial count of the number of actual releases (including brown bag ones) needed for last few releases. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6058290980947905522?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6058290980947905522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6058290980947905522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6058290980947905522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6058290980947905522'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/04/takes-two-to-release.html' title='Takes Two to Release'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4569281257669179083</id><published>2008-04-08T12:31:00.001-07:00</published><updated>2008-04-08T12:31:38.879-07:00</updated><title type='text'>You said Google owns your life</title><content type='html'>And I nodded my head and felt sympathy for you. I also used the I_doubt_its_maintained_anymore and just_barely_works &lt;a href="http://xemail-net.sourceforge.net/" target="_blank"&gt;xemail-net&lt;/a&gt; to write a live &lt;a href="http://beagle-project.org/Live_GMail_Search" target="_blank"&gt;GMail backend&lt;/a&gt; for beagle. It does not index the emails as of now, but uses the IMAP search protocol to directly search the emails on the GMail IMAP server. And searching followed by retrieving the headers of the matched emails is really slow; the delay is clearly perceptible. It could be due to xemail but I could not find a better alternative for a .Net IMAP library.&lt;br&gt;  &lt;br&gt;It should not be hard to take the current backend and add the ability to download a batch of emails and index them locally. Google also publishes a nice set of &lt;a href="http://code.google.com/p/google-gdata/" target="_blank"&gt;GData .NET API&lt;/a&gt; for accessing Google documents, calendars and a lot of other services. A backend for them would at least make our beloved maintainer &lt;a href="http://www.mail-archive.com/dashboard-hackers@gnome.org/msg04270.html"&gt;happy&lt;/a&gt;.&lt;br&gt;    &lt;br&gt;A basic GMail query-only backend was on my TODO list for more than year. And now its finally done. Proper GMail indexing and Google service is also on my TODO list. So hope to see it sometime... say by next year.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4569281257669179083?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4569281257669179083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4569281257669179083' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4569281257669179083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4569281257669179083'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/04/you-said-google-owns-your-life.html' title='You said Google owns your life'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8917252589969955999</id><published>2008-03-28T16:24:00.001-07:00</published><updated>2008-03-28T16:38:07.930-07:00</updated><title type='text'>Better late than never</title><content type='html'>Beagle 0.3.4 was released into the wild last week. We tried to fix the build problems (new Gnome-sharp, Mono 1.9, missing files from last release) but building Beagle with Ndesk-DBus 0.5.2 remained broken, as per tradition.&lt;br /&gt;&lt;p&gt;Other than that this version builds nicely with Mono 1.9 and contains #ifdef-ed code to use the &lt;span style="font-family:courier new;"&gt;Mono.Unix.UnixSignal &lt;/span&gt;API when built with Mono 1.9. That should ensure that beagled and index-helper will quit when asked to quit. Yes, this is the 21st century.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is a lot of mapping in Beagle and a lot of them are hardcoded. We are gradually moving them to user configurable files. The config files were moved out earlier; in 0.3.4 we have moved out the query mapping (mapping "ext:html" to right internal property name). If you want to add a mapping for some property you repeatedly query, just add it to the local ~/.beagle/query-mapping.xml&lt;/p&gt;&lt;p&gt;I added another handy tool to use Beagle as updatedb/locate. Use beagle-build-index or beagled to create indexes (like updatedb). And then use beagle-static-query to query the indexes (like locate) - no long running daemon beagled has to be running.&lt;/p&gt;&lt;p&gt;E.g. I created an index for system files in /usr/bin, /bin and other global directories (the --disable-filtering is to disable filtering file contents since here is only care about the file names and such),&lt;br /&gt;&lt;/p&gt;&lt;p style="font-family: courier new;"&gt;$ beagle-build-index --recursive --disable-filtering --target ~/.systembeagle /usr/bin/ /usr/local/bin/ /bin/ /etc /usr/local/etc/&lt;/p&gt;&lt;p&gt;Then I could query just like locate,&lt;br /&gt;&lt;/p&gt;&lt;p style="font-family: courier new;"&gt;$ beagle-static-query --add-static-backend ~/.systembeagle 'net*' --backend none&lt;/p&gt;&lt;p&gt;(--backend none is to tell beagle to not search any other backends). I could have added ~/.systembeagle to beagle using beagle-config so that I dont have to add this path everytime or I could have even created an alias for this. &lt;/p&gt;&lt;p&gt;Why do this when locate/updatedb already does it ? Because I can :). Ok, I actually use this to search monodocs. I am not a big fan of this mouse, point, click business and I stick to the terminal with &lt;span style="font-family:courier new;"&gt;mod&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;monop2&lt;/span&gt; at my disposal. These tools are great once you know the fully qualified name of the method or the class. Use this jack-of-all-trade beagle.&lt;/p&gt;Step-1: Enable the system wide monodoc index. Its one of the crawl-rules shipped with beagle but disabled by default.&lt;br /&gt;&lt;br /&gt;Step-2: Let cron build it or you run the cron job yourself. Building the monodoc index takes time though. Definitely longer than any special indexer for monodoc files. But thats only a one time cost.&lt;br /&gt;&lt;br /&gt;Step-3: Use beagle-static-query. You can also use phrases and wildcards '*' and search only in methods or classes or properties (just look in the returned fields and use beagle property query).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8917252589969955999?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8917252589969955999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8917252589969955999' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8917252589969955999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8917252589969955999'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/03/better-late-than-never.html' title='Better late than never'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2207018274575187254</id><published>2008-03-08T13:36:00.000-08:00</published><updated>2008-03-08T16:47:30.718-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='indexing'/><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='semweb'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><title type='text'>Beyond Search: arrhh...dee...efff</title><content type='html'>If the news reports and blogs are to be believed, this is the age of Semantic Something. First people wanted to search web, then file contents, and then search emails and other user data. Everybody was talking about desktop search; along came &lt;a href="http://beagle-project.org/"&gt;Beagle&lt;/a&gt;,  Spotlight, Google Desktop Search, Kat, &lt;a href="http://www.gnome.org/projects/tracker/"&gt;MetaTracker&lt;/a&gt;, Pinot, &lt;a href="http://strigi.sourceforge.net/"&gt;Strigi&lt;/a&gt; etc. While desktop search at its core is nothing but a crawler which reads different file formats and stores them in a searchable database, searching is the most trivial and &lt;span style="font-style: italic;"&gt;IMO,&lt;/span&gt; boring application built on Beagle's infrastructure.&lt;br /&gt;&lt;br /&gt;These days the focus seems to have shifted to &lt;a href="http://www.semanticdesktop.org/"&gt;&lt;span style="font-style: italic;"&gt;Semantic Desktop&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://www.w3schools.com/semweb/default.asp"&gt;&lt;span style="font-style: italic;"&gt;Semantic Web&lt;/span&gt;&lt;/a&gt;. Most blog comments and mailing list posts about Semantic-Fu have a hint of it being vapourware. Its not totally their fault either; the ideas are around for a long time and people are working on it for many many years. But there is no glittering gold in sight. Only recently some interesting Semantic Web ideas have started taking shape. Semantic Desktop is a slightly different game but it should not be far behind. After taking about &lt;a href="http://www.ohloh.net/projects/3826"&gt;40 developer years&lt;/a&gt;, Beagle is just about ready to take desktop search beyond simple file content search. Historians might want to take note of the &lt;a href="http://www.nat.org/dashboard/"&gt;dashboard project&lt;/a&gt; and how beagle came into being as a necessary requirement for that truly beyond-desktop-search application.&lt;br /&gt;&lt;br /&gt;The core idea behind Semantic Desktop, upto my understanding, revolves around the buzzword jack-of-most-trades &lt;span style="font-weight: bold;"&gt;RDF&lt;/span&gt;. And for the impatient kind, here is a rude shock - &lt;a href="http://en.wikipedia.org/wiki/Resource_Description_Framework"&gt;RDF&lt;/a&gt; is not useful for human beings. Even further, it is not even meant for you, me and us; storing every conceivable data in the RDF format is not going to make our life any easier right away.&lt;br /&gt;&lt;br /&gt;RDF or Resource Description Framework is a generic way to &lt;span style="font-style: italic;"&gt;describe&lt;/span&gt; anything, to be accurate any &lt;span style="font-style: italic;"&gt;description&lt;/span&gt; of &lt;span style="font-style: italic;"&gt;anything&lt;/span&gt;. It is a fairly elaborate yet structured format; very easy for programs to analyze that information but extremely redundant to human eyes. Notwithstanding what the AI experts are claiming about the future of AI, human mind &lt;span style="font-style: italic;"&gt;can work&lt;/span&gt; without immediate deductive reasoning and in fact does that a lot of time. It recognizes familiar words without reading the alphabets one at a time, it deduces the color by merely glancing at it, it conjures up strange connections; its a wonder that will be hard to completely characterize by any set of rules. At least at the current stage, algorithms have to be told the facts and the relations between them for them to do any kind of processing with its data. These are the things that we &lt;span style="font-style: italic;"&gt;just know&lt;/span&gt; when we see something and is thus the reason why storing the description of something in an RDF format is not going to gain me anything immediately. On the other hand, this is also the reason why applications should be fed data in an RDF format to allow it unhindered access to the semantics of the data.&lt;br /&gt;&lt;br /&gt;If that felt hand wavy, try to think about the difference between the semantics of a data and its syntax. An array could be used to represent a linked list, a queue, a stack, a tree or an heap - the latter are the different semantics of the representations, the array is one of the many syntactic representations of one of the latter concepts. A bunch of &lt;name,&gt; pairs could be stored in a database table; the table is a syntactic representation of the data which has the semantics of a bunch of name, phone-number pairs. It is hard to work with the semantics of an idea, in a sense it is something up in the air; on the other hand storing some data in a suitable working form could fail to capture some concept about the data. Also, once stored in a particular form it is easy to miss the bigger picture; thus limiting the scope of what we could do with that data.&lt;br /&gt;&lt;br /&gt;Saying all that, for the time being think of the RDF format as a bunch of objects and facts where each object is related to some number of facts. The semantics of &lt;span style="font-style: italic;"&gt;related&lt;/span&gt; could differ based on the context, and RDF is powerful enough to describe even that semantics and a whole bunch of other &lt;span style="font-style: italic;"&gt;facts about the facts&lt;/span&gt;. With beagle pulling data from &lt;a href="http://beagle-project.org/Supported_Filetypes"&gt;nooks and corners&lt;/a&gt; of a user's desktop and providing a service which allows applications to search this data, it is a shame if we cannot exploit the relationships in this data for a better mankind... err... dolphins... err... us.&lt;br /&gt;&lt;br /&gt;Consider all the emails I have. Now &lt;span style="font-weight: bold;"&gt;I&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;know&lt;/span&gt; that there some emails that are part of discussion threads. Beagle does not. With the beauty of N3 (a close cousin of Semantic-Fu and RDF), I can write this extra information as a set of rule (the single '.' represents  end of one rule). I am using emails msgid to track emails in a thread.&lt;/name,&gt; I could not help but notice the similarity of these rules with prolog or other logic programming languages.&lt;br /&gt;&lt;name,&gt;&lt;tt&gt;&lt;br /&gt;/* an email with subject 'foobar' is in its own thread */&lt;br /&gt;{ ?email :title 'foobar' . ?email :msgid ?msg . } =&gt; { ?msg :inthread ?msg } .&lt;br /&gt;/* if any email refers to some email in thread, then this email is also in other email's thread */&lt;br /&gt;{ ?ref :inthread ?parent . ?email1 :reference ?ref . ?email1 :msgid ?msg .} =&gt; {?msg :inthread ?parent} .&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;Using the RDFAdapter of the &lt;a href="http://svn.gnome.org/svn/beagle/branches/beagle-rdf/"&gt;beagle-rdf&lt;/a&gt; branch, I can use this to get all the emails in the thread with &lt;span style="font-style: italic;"&gt;foobar&lt;/span&gt; in its subject. Note that I am able to write my set of rules only when I see this data as actual emails and not a bunch of lucene documents with fields. The latter carry no meaning. Further note that, I can also use the &lt;a href="http://beagle-project.org/doc/BeagleClient/Beagle/index.html"&gt;BeagleClient API&lt;/a&gt; to perform &lt;a href="http://beagle-project.org/Searching_Data"&gt;field specific queries&lt;/a&gt; to obtain the same results. The difference is that the process of using BeagleClient will require me to think about the relationships from scratch and then figure out the right sequence of queries. Instead I could store all the relationship among the emails in the email-index in an RDF format (and also related information not stored in the index e.g. saying a list of email addresses are all &lt;span style="font-style: italic;"&gt;mine&lt;/span&gt; and should be treated as for one person). Then, whenever I want to extract some information, I can write the question (again in an RDF format) and let the RDF-Magic figure out the how to execute this question against that data given this set of inference rules. Isn't it cool ?&lt;br /&gt;&lt;br /&gt;If I missed it earlier, this kind of data-mining operations are not for my everyday use (here my refers to usual computer users) and is not for everybody. Still it is can sometimes come in handy. Imagine the possibilities if you can write the relationships between a file in an mp3 playlist (playlist filter), its download link and how your arrived at that page (webhistory indexing), the email you sent with that file as an attachment in a zip file (email attachment and archive filter), its ratings and usage statistics  in Amarok (amarok querydriver) and of course the actual file on the harddisk (user home directory indexing).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Warning:&lt;/span&gt; The RDF Adapter in beagle uses the sophisticated &lt;a href="http://razor.occams.info/code/semweb/"&gt;SemWeb library&lt;/a&gt; which allows anyone to perform graph operations (selecting subgraphs, walking on graphs, pruning nodes and edges etc.) on the RDF graph of the data. Unlike most RDF stores for desktop data, beagle is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; optimized for RDF operations and could take quite a bit of time and heat up the CPU. It took me about 4 seconds to find all threads with the word beagle among 500 emails (my actual email index has about 20K emails! I refuse to imagine what will happen if I run it on the full index). If you are interested, checkout the rdf branch and take a look at the test &lt;a href="http://svn.gnome.org/viewvc/beagle/branches/beagle-rdf/RDFAdapter/SemWebClient.cs?view=markup"&gt;SemWebClient.cs&lt;/a&gt;.&lt;br /&gt;&lt;/name,&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2207018274575187254?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2207018274575187254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2207018274575187254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2207018274575187254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2207018274575187254'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/03/beyond-search-arrhhdeeefff.html' title='Beyond Search: arrhh...dee...efff'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-5686054689220680554</id><published>2008-02-12T17:25:00.000-08:00</published><updated>2008-02-12T17:46:31.549-08:00</updated><title type='text'>beagle searchhandler for khelpcenter</title><content type='html'>I realized that it is extremely easy to build searchhandlers for KHelpcenter. I have always wanted to use beagle for searching in KHelpcenter, so I quickly made a searchhandler in python. Screenshot below. To use it, put these files in the right places, chmod khc_beagle.py to make it executable and restart KHelpcenter. This only searches the manpage index for now and can be easily extended to search docbook. And of course you have to remove /usr/share/apps/khelpcenter/searchhandlers/man.desktop. I would submit it to KDE bugzilla but I dont know if this works with KDE4 version of KHelpcenter.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://cs-people.bu.edu/dbera/blogdata/beagle.desktop"&gt;/usr/share/apps/khelpcenter/searchhandlers/beagle.desktop&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cs-people.bu.edu/dbera/blogdata/khc_beagle.py"&gt;/usr/bin/khc_beagle.py&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Dl_EHp-s13Q/R7JJ_msvcNI/AAAAAAAAAA8/7GTkaSPZsyo/s1600-h/khelpcenter-beagle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_Dl_EHp-s13Q/R7JJ_msvcNI/AAAAAAAAAA8/7GTkaSPZsyo/s320/khelpcenter-beagle.jpg" alt="" id="BLOGGER_PHOTO_ID_5166273079616172242" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-5686054689220680554?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/5686054689220680554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=5686054689220680554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/5686054689220680554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/5686054689220680554'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/02/beagle-searchhandler-for-khelpcenter.html' title='beagle searchhandler for khelpcenter'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_Dl_EHp-s13Q/R7JJ_msvcNI/AAAAAAAAAA8/7GTkaSPZsyo/s72-c/khelpcenter-beagle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4065041809479905959</id><published>2008-02-02T19:16:00.001-08:00</published><updated>2008-02-02T19:17:58.826-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>Grab the 3rd of the third</title><content type='html'>I announced the release of Beagle 0.3.3 today. It is one of those releases with lots of features here and there which just makes me nervous. I found a problem (which incidentally was uncovered when we started using Sqlite prepared statements couple of weeks ago) today during. I quickly identified the problem and fixed it but I am hoping everything else works out OK with this one.&lt;br&gt; &lt;br&gt;Apart from using Sqlite prepared statements, which should show some speed improvements during running beagle-build-index, there are few other goodies as well. Beagle-search includes a menu option to view the current index information. I would have liked it better if it kept refreshing but this is better than nothing.&lt;br&gt; &lt;br&gt;Searching documentation is now enabled in beagle-search. It used to be disabled by default in the early days because apparently it returned a lot of results and messed be Best. The situation is better now but not by much; so you have to pass --search-docs to beagle-search to ask it to search the documentation index. That aside, system wide manpage index is now enabled by default and that includes lzma compressed manpages (so Mandriva users like yours truly will be extremely delighted). Beagle search happily searches manpages and it is a real pleasure to use it instead of &lt;i&gt;man -k&lt;/i&gt;.&lt;br&gt; &lt;br&gt;Another real pleasure is being able to create Qt GUI using C#. Its feels very good and I ended up creating beagle-setting-qt, a Qt GUI for beagle-settings. I never added the bindings for the new beagle-config to libbeagle. So I had to amend my fault by giving KDE users some GUI for beagle-settings.&lt;br&gt; &lt;br&gt;You also get a fake implementation of searching in a directory, one of the popular requests. You can either search inside a directory by giving its full path or by giving a word in the directories name. One catch is that the search is not recursively under the directory but only in its contents.&lt;br&gt; &lt;br&gt;Sadly almost all the currently known problems with beagle are outside our control. Fortunately, most of the problems in these dependent libraries or suites are fixed and will be released soon. It is surprising how bugs in these external programs, generally corner cases when used alone, are triggered when using beagle. A long running application for desktop users has to cover a lot of bad ground to be even slightly respectable.&lt;br&gt; &lt;br&gt;If this release goes well, then we might try to fix all the horribly hacky property names (based on our own &lt;a href="http://beagle-project.org/Properties_Hack_Week"&gt;ontology&lt;/a&gt;) and come out with a 0.4.0. I am also hoping to merge the RDF branch to trunk before that. I should really blog about the RDF branch sometime; the experiment to overlay an RDF store on beagle&amp;#39;s data is nearing a sure success.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4065041809479905959?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4065041809479905959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4065041809479905959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4065041809479905959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4065041809479905959'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/02/grab-3rd-of-third.html' title='Grab the 3rd of the third'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-1095007647394476723</id><published>2008-01-29T10:24:00.000-08:00</published><updated>2008-01-29T11:01:57.656-08:00</updated><title type='text'>FOSS meets ENG</title><content type='html'>&lt;a href="http://www.techkriti.org/"&gt;Techkriti&lt;/a&gt; brings back fond memories. Techkriti is the annual technology fest at &lt;a href="http://www.iitagh.org/iitfocus/houston/db.htm"&gt;IIT-Kanpur&lt;/a&gt; (y'no the place where they figured out how to decide &lt;a href="http://en.wikipedia.org/wiki/AKS_primality_test" &gt;if a number is prime&lt;/a&gt; in a theoretically fast way).&lt;br /&gt;&lt;br /&gt;That was one fabulous event I actively took part in during my undergrad days. A perfect mix of all kinds of technology. I was there in its early days of infancy; if I remember correctly the first prize for the software contest in my first year there went to a graphical calculator program in Tcl/Tk. By the time I left it was hugely popular and there participants from all over India. I was one of the organizers for Tech Olympiad in my final year. It was equally fun to come up with challenging problems where various concepts tie in together. The participants loved it.&lt;br /&gt;&lt;br /&gt;This year Techkriti is even more exciting. I read in the news and blogs about how FOSS is catching up in the subcontinent. This time they are organizing a FOSS event for Techkriti, probably for the first time. I am hoping the event becomes a success, though the schedule page is a bit empty now. Beagle Xesam adapter author &lt;a href="http://nemesis.accosted.net/index.php"&gt;Arun&lt;/a&gt; and Web interface dude &lt;a href="http://bheekly.blogspot.com/"&gt;Nirbheek&lt;/a&gt; are among its organizers, so I am sure I will get first hand information about all the exciting things that will happen (how about a hackfest for &lt;a href="http://code.google.com/p/dashboard/" &gt;Dashboard&lt;/a&gt; ;-).&lt;br /&gt;&lt;a href="http://www.techkriti.org/fosskriti/" title="FOSSKriti @ Techkriti '08"&gt;&lt;img src="http://www.techkriti.org/fosskriti/buttons/fosskriti_button_medium2.png" alt="FOSSKriti" border="0" /&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I will end with two simple brain-stormers.&lt;br /&gt;&lt;br /&gt;The first one is of mathematical type, my favourite: Show that any 5 consequtive numbers will always contain some number which is prime to the other 4 numbers.&lt;br /&gt;&lt;br /&gt;The second one relates to programming (somewhat), my hobby. You are given two arrays A1 of size m+n and A2 of size n where only the first m slots of A1 are filled with sorted integers (increasing order) and all the slots of A2 are filed with sorted integers (increasing order). You goal is to merge the two arrays into A1, in linear time (no block array copying or other tricks) but (here is the twist) using &lt;i&gt;no extra space&lt;/i&gt; (i.e. no placeholder variable to hold temporary values).&lt;br /&gt;&lt;br /&gt;Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-1095007647394476723?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/1095007647394476723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=1095007647394476723' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1095007647394476723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1095007647394476723'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/01/foss-meets-eng.html' title='FOSS meets ENG'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4539968325805693681</id><published>2008-01-25T17:39:00.001-08:00</published><updated>2008-01-25T18:20:59.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><title type='text'>Open letter to OpenSUSE users</title><content type='html'>(long post warning)&lt;p&gt;Dear OpenSUSE users,&lt;/p&gt;&lt;p&gt;  Recently I came across several threads in various OpenSUSE mailing lists&lt;br /&gt;[1], [2], [3]. I was both amused and felt sorry while reading the posts. No&lt;br /&gt;really some of you write funny emails. That aside, people, especially those&lt;br /&gt;using FOSS don't make up things like this. I am sure the problems that you&lt;br /&gt;faced exist (or existed in whatever version you were using).&lt;/p&gt;&lt;p&gt;  I joined the project later but I still feel responsible for the sleepless&lt;br /&gt;nights some of you have had due to beagle, trying to imagine what you would&lt;br /&gt;see beagle has done to your computer when you wake up. I would have felt the&lt;br /&gt;same if I were in your position, in fact I sometimes feel the same for one of&lt;br /&gt;the browsers that I use.&lt;/p&gt;&lt;p&gt;  There were lots of suggestions and speculations. There were suggestions of&lt;br /&gt;filing bugs with us. While I do appreciate if some you can file bug reports,&lt;br /&gt;I sympathise with those who dont want to open yet another account to file&lt;br /&gt;bugs or email the mailing list. I belong to the latter group, so instead of&lt;br /&gt;replying to the thread, let me take a minute here explaining how we try to be&lt;br /&gt;friendly to your computer hard-disk space, memory and CPU.&lt;/p&gt;&lt;p&gt;  * We nice the process and (try to) lower the iopriority.&lt;/p&gt;&lt;p&gt;  * Extracting text from the binary files, without rewriting the app which&lt;br /&gt;deals with files of that type, is an expensive operation. So, we index them a&lt;br /&gt;few at a time with sufficiently long wait in between. The wait period is&lt;br /&gt;longer if the system load average is high. But if you are playing games or&lt;br /&gt;doing other CPU intensive operation, you will not miss the CPU spikes. Normal&lt;br /&gt;uses should not be hampered though.&lt;/p&gt;&lt;p&gt;  * During crawling (for files, emails or browser cache) we try not to disturb&lt;br /&gt;the existing vm buffer cache.&lt;/p&gt;&lt;p&gt;  * We believe once the initial indexing is over there should not be noticable&lt;br /&gt;effect from beagle, so we crawl a bit faster when the screensaver is on. But&lt;br /&gt;we provide options for you to turn it off.&lt;/p&gt;&lt;p&gt;  * We use a separate process to actually do the dirty job of reading the&lt;br /&gt;files and extracting data. As a failsafe measure, if the memory usage of that&lt;br /&gt;helper process increase too much we kill it and start a new helper process. I&lt;br /&gt;would like to claim that for the last several versions I did not see/hear the&lt;br /&gt;helper process being killed due to memory problems.&lt;/p&gt;&lt;p&gt;  * For certain files we need to store indexable data in a temporary file. We&lt;br /&gt;make sure we delete it as soon as the indexing is over. There were problems&lt;br /&gt;in some old versions where the files would not be deleted (they definitely&lt;br /&gt;wont be deleted if you kill-9 the process) but I have not heard about this&lt;br /&gt;problem in recent times.&lt;/p&gt;&lt;p&gt;  * To show you snippets of your searched words, we store the text data of&lt;br /&gt;some types of files (not the text or c,c++ kind of files whose text data is&lt;br /&gt;basically the file itself but the files in a binary format). We try to be&lt;br /&gt;smart here to not create thousands of small files on the disk (I have about&lt;br /&gt;20K mails generating at least 10K snippet files). In addition to it, we&lt;br /&gt;provide ways for you to turn off the snippets completely.&lt;/p&gt;&lt;p&gt;We do care for your experience and certainly for my own experience while&lt;br /&gt;indexing my data. So where do we go wrong:&lt;/p&gt;&lt;p&gt; * Once in a while the indexer encounters a file for which it ends up in an&lt;br /&gt;infinite loop. Most of the times it is generally a malformed file but&lt;br /&gt;sometimes it is also our fault.&lt;/p&gt;&lt;p&gt;  * C# has lots of advantages and one of them is that the developer does not&lt;br /&gt;have to worry about freeing memory after it is used. Depending on someone&lt;br /&gt;else (in this case the garbage collector which frees the memory for us) has&lt;br /&gt;its pros and cons. But one thing for sure (assuming mono is not making any&lt;br /&gt;mistake in freeing), there is not going to be any memory leak of the kind we&lt;br /&gt;are afraid of in C or C++. Neither are we afraid of segmentation faults due&lt;br /&gt;to memory corruption. If you are wondering how do some of you see beagle's&lt;br /&gt;memory growing, let me remind you that "to err is human". With sophisticated&lt;br /&gt;tools to prevent simple errors, comes sophisticated errors. A simple example&lt;br /&gt;could be like storing in a list all files beagle finds during crawling, but&lt;br /&gt;forgetting to remove them once the data is written to the index. No, we never&lt;br /&gt;did that but sometimes we make similar mistakes.&lt;/p&gt;&lt;p&gt;  * We would be extremely happy if beagle only used C# for all its operations.&lt;br /&gt;Unfortunately, we have to depend on a lot of C libraries for indexing certain&lt;br /&gt;files. Sometimes memory leaks (the C type) and segmentation faults happen in&lt;br /&gt;them. These are harder to spot since mono does not know about the memory&lt;br /&gt;allocated in the C libraries.&lt;/p&gt;&lt;p&gt;  * Beagle re-indexes a file as soon as possible once it is saved. It is in&lt;br /&gt;general not possible to know whether it was the user pressing ctrl-s in&lt;br /&gt;KOffice or a torrent app saving the file after downloading one chunk of data.&lt;br /&gt;As a result, beagle performs horribly, yes horribly, if it encounters a file&lt;br /&gt;that is being downloaded by a p2p/torrent app. You are bound to see almost&lt;br /&gt;continuous indexing as beagle strives to index the updated file for you in&lt;br /&gt;real time. Same goes for any large, active mbox file in the home directory&lt;br /&gt;_not_ used by Thunderbird, Evolution or KMail (for mbox files of these apps,&lt;br /&gt;the corresponding backend is smart to index only the changed data).&lt;/p&gt;&lt;p&gt;  * NFS shares have their own share of problems with file locking, speed of&lt;br /&gt;data access etc. We have tried to deal with them in the past by copying the&lt;br /&gt;beagle data directory to a local partition, performing indexing and then&lt;br /&gt;copying back the data directory to the users home directory. It is a feature&lt;br /&gt;not continuously tested and I am sure you can think about lots of cases where&lt;br /&gt;this would fail.&lt;/p&gt;&lt;p&gt;  * The first attempt to write a Thunderbird backend was a disaster. Well, it&lt;br /&gt;was good learning experience for us but it will cause headache to most users.&lt;br /&gt;We disabled it in the later 0.2 versions. There is a new one in the 0.3&lt;br /&gt;series which reportedly works better.&lt;/p&gt;&lt;p&gt;  * There was one design decision which backfired on us. Imagine you dont have&lt;br /&gt;inotify and have a large home directory. To present you changes in real time,&lt;br /&gt;one option is to crawl the directories regularly (kind of what the WinXP&lt;br /&gt;indexer does). You can imagine the rest. Though inotify is present in the&lt;br /&gt;kernel these days, the number of default inotify watches (the number of&lt;br /&gt;directories that can be watched) is pretty low for users with a non-trivial&lt;br /&gt;sized home directory. In the recent versions, we disable the regular&lt;br /&gt;recrawling. &lt;/p&gt;&lt;p&gt;  * Besides continuous CPU usage and hard disk activity (for days and weeks&lt;br /&gt;after the initial indexing is over) the above had another effect on the log&lt;br /&gt;file. Add to it the pretty verbose exceptions beagle logs. We want to know&lt;br /&gt;about the errors so we still print verbose exceptions but we dont reprint the&lt;br /&gt;same errors anymore. (I have been told that some of the OpenSUSE packages&lt;br /&gt;have the loglevel reduced to error-only which will automatically generate&lt;br /&gt;smaller log files).&lt;/p&gt;&lt;p&gt;  * This is a good excuse to end the list with. C# and beagle architecture&lt;br /&gt;allows us to add lots of goodies. After all, we (read I) work on beagle&lt;br /&gt;solely because I love to play with it. The more the features, more the lines&lt;br /&gt;of code and more errors. The only good part is once spotted, they are easy to&lt;br /&gt;fix. Check our mailing list and wiki for the available freebies.&lt;/p&gt;&lt;p&gt;So in summary, we try to be nice to your computer (and to you ? maybe, if you&lt;br /&gt;are nice ;-) ... just kidding) but there are limitations that we are&lt;br /&gt;constantly trying to improve on. Any of you can look in our bugzilla, our&lt;br /&gt;mailing list archive, our wiki or hang out in our IRC channel to see for&lt;br /&gt;yourself how we try to issue any problem with utmost importance. Ok, I lied,&lt;br /&gt;as much as our time permits. There are lots of features in beagle and some of&lt;br /&gt;them rarely get regular testing, mostly because none of us use those&lt;br /&gt;features. I wont be surprised if there are major problem with these. I assure&lt;br /&gt;you that if you bring any problem to our notice, they will be taken care of,&lt;br /&gt;if not completely resolved.&lt;/p&gt;&lt;p&gt;Lastly, I read in one of the forum posts that beagle-0.3 will land in factory&lt;br /&gt;sometime soon. If any of you wants to verify the facts above (the good ones&lt;br /&gt;or the bad ones ;-), give that a spin. And a friendly suggestion, if you only&lt;br /&gt;want to search for files with certain name or extension, you can do much much&lt;br /&gt;better with find/locate.&lt;/p&gt;&lt;p&gt;Your friendly beagle developer,&lt;br /&gt;- dBera&lt;/p&gt;&lt;p&gt;[1] &lt;a href="http://lists4.suse.de/opensuse-factory/2008-01/msg00157.html"&gt;http://lists4.suse.de/opensuse-factory/2008-01/msg00157.html&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://lists.opensuse.org/opensuse/2007-12/msg01796.html"&gt;http://lists.opensuse.org/opensuse/2007-12/msg01796.html&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://lists.opensuse.org/opensuse/2008-01/msg01083.html"&gt;http://lists.opensuse.org/opensuse/2008-01/msg01083.html&lt;/a&gt; (could not find&lt;br /&gt;the parent of this thread)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4539968325805693681?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4539968325805693681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4539968325805693681' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4539968325805693681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4539968325805693681'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2008/01/open-letter-to-opensuse-users.html' title='Open letter to OpenSUSE users'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8880082962899028477</id><published>2007-12-28T18:59:00.000-08:00</published><updated>2007-12-28T19:17:30.452-08:00</updated><title type='text'>klik2 klik beagle</title><content type='html'>Yay! I managed to make a &lt;a href="http://www.kdedevelopers.org/node/3166"&gt;klik2&lt;/a&gt; recipe for beagle. In principle this should enable anyone to just do&lt;br /&gt;$ klik klik2://beagle&lt;br /&gt;and happily run beagle. All the dependency packages will be automatically downloaded and managed in the background. Or to download once and use many times, you can do&lt;br /&gt;$ klik get beagle&lt;br /&gt;$ alias runbeagle='klik run ~/Desktop/beagle.cmg'&lt;br /&gt;$ runbeagle&lt;br /&gt;&lt;br /&gt;Not all of the above is happening right away; klik2 is under development and is looking promising but not completely done yet. But if you already have mono and want to run beagle, you can sort of do it now. This works for any distribution that klik2 works for, which is basically almost all the major distributions.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Get and install klik2&lt;/li&gt;&lt;li&gt;Download &lt;a href="http://cs-people.bu.edu/dbera/blogdata/beagle.xml"&gt;http://cs-people.bu.edu/dbera/blogdata/beagle.xml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;$ klik get beagle.xml&lt;/li&gt;&lt;ul&gt;&lt;li&gt;It will do a lot of stuff and end up failing since there is no single app called "beagle" in the beagle package. It will however create the file ~/Desktop/beagle_0.3.1-2.cmg&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Run beagled.&lt;/li&gt;&lt;ul&gt;&lt;li&gt; klik run beagled ~/Desktop/beagle_0.3.1-2.cmg --fg --backend manpages --backend Files &lt;span style="font-weight: bold;"&gt;&lt;other&gt;&lt;/other&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Browse to http://localhost:4000/ to access beagle using the web interface. You can use it to search, check indexing status and shutdown beagled.&lt;/li&gt;&lt;li&gt;To run the other beagle tools, the pattern is the same&lt;/li&gt;&lt;ul&gt;&lt;li&gt;$ klik run &lt;span style="font-style: italic;"&gt;beagle-command&lt;/span&gt; ~/Desktop/beagle_0.3.1-2.cmg &lt;span style="font-style: italic;"&gt;beagle-command-params&lt;/span&gt;&lt;/li&gt;&lt;li&gt;For example, to shutdown from command line&lt;/li&gt;&lt;ul&gt;&lt;li&gt;$ klik run beagle-shutdown  ~/Desktop/beagle_0.3.1-2.cmg&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;The next time you want to run beagled, you need not run the recipe again; start from step-4 straight away!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8880082962899028477?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8880082962899028477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8880082962899028477' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8880082962899028477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8880082962899028477'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/12/klik2-klik-beagle.html' title='klik2 klik beagle'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4276341565411953975</id><published>2007-12-27T14:11:00.000-08:00</published><updated>2007-12-27T14:12:10.546-08:00</updated><title type='text'>one zero-three-two sailed today</title><content type='html'>Beagle 0.3.2 was released &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2007-December/msg00108.html"&gt;today&lt;/a&gt;. On one hand we are still catching up with the regressions and new bugs that were introduced in the mighty  &lt;a href="http://joeshaw.org/2007/12/15/511"&gt;beagle-0.3.0&lt;/a&gt; and on the other hand, new features are streaming in. While yelp remains &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=504163"&gt;broken with beagle&lt;/a&gt;, I was amazed at how easily I can search within the manpages and double click on the results to open them in yelp. A much better alternative to  &lt;i&gt;man -K&lt;/i&gt;.&lt;br&gt;&lt;br&gt;In other news, Lukas has started working on providing spelling suggestions &lt;i&gt;Did you mean ... ?&lt;/i&gt; There are some technical limitations which are not fully resolved yet so it did not make it into 0.3.2 . It is currently housed in a &lt;a href="http://svn.gnome.org/viewvc/beagle/branches/beagle-suggestions-branch/"&gt;branch&lt;/a&gt; and I hope to release it into the wild soon.&lt;br&gt;&lt;br&gt;Beagle was not designed as an RDF store at its inception. It will take quite some work to make it a genuine RDF store. But what if there was an RDF adapter that sat between an RDF client and beagle and talked to each of them in their corresponding language, yet maintaining sanity. There is an ongoing  &lt;a href="http://svn.gnome.org/viewvc/beagle/branches/beagle-rdf/"&gt;work&lt;/a&gt; to overlay a &lt;a href="http://razor.occams.info/code/semweb/semweb-current/apidocs/SemWeb/index.html"&gt;Semweb selectable source&lt;/a&gt; on top on beagle. We will see how that goes. &lt;br&gt;&lt;br&gt;A &lt;a href="http://www.kdedevelopers.org/node/3166"&gt;post on klik2&lt;/a&gt; rekindled my desire to create a klik package for beagle. It will be easier this time since klik2 handles command line programs. I tried the automatic debian generated recipe and it mostly worked. Mostly, because one of the tools in beagle ran with --version and --help but failed to find some libraries to do anything more. I think all I need to do is to teach klik how to set certain PATHs and environment variables. Pretty exciting, what do you think ? &lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4276341565411953975?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4276341565411953975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4276341565411953975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4276341565411953975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4276341565411953975'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/12/one-zero-three-two-sailed-today.html' title='one zero-three-two sailed today'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-5470999661693622527</id><published>2007-12-13T18:44:00.001-08:00</published><updated>2007-12-13T18:44:04.368-08:00</updated><title type='text'>Enterprise search OR How to index on-demand</title><content type='html'>If you are like me who keeps their filesystem organized, have a relatively &lt;br&gt;unchanging home directory or just simply do not want realtime indexing, you &lt;br&gt;can use beagle-build-index to meet your needs.&lt;p&gt;&lt;br&gt;Beagle-build-index builds static indexes from files. Static indexes are &lt;br&gt;created and updated on demand when beagle-build-index is run but the &lt;br&gt;directories are otherwise not monitored for changes. The next time the &lt;br&gt;command is run, the changes are registered in the index. Once the static &lt;br&gt;index is created, you can ask beagled to search in it (by &lt;br&gt;passing --add-static-backend /location/of/static/index). beagled need not be &lt;br&gt;stopped while running beagle-build-index, it will automatically use the &lt;br&gt;updated index for searching once beagle-build-index finishes.&lt;p&gt;&lt;br&gt;That was for files. If you want to do the same for anything else, say emails &lt;br&gt;or notes or addressbook and you do not want realtime monitoring, start &lt;br&gt;beagled normally and let the indexing finish. Then stop beagled and restart &lt;br&gt;with the parameter --disable-scheduler. Unfortunately, to update the index &lt;br&gt;with changes, beagled needs to be stopped, started normally and allowed to &lt;br&gt;run till updating of index is done, stopped and then again started with that &lt;br&gt;parameter.&lt;p&gt;&lt;br&gt;If you are a system administrator managing lots of users and you dont want to &lt;br&gt;run beagled in realtime indexing mode for all of them, you can use the above &lt;br&gt;procedure to create/update static indexes, say once a day.&lt;p&gt;&lt;br&gt;Or if you don&amp;#39;t like mono, you can use Recoll for files and mairix for emails. &lt;br&gt;There are probably many more such tools but these are the two I know. Just in &lt;br&gt;case you have not heard about Mono, it is an open source implementation of &lt;br&gt;ECMA standard compliant C# compiler and a Common Language Runtime. And some &lt;br&gt;more goodies, all in all pretty useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-5470999661693622527?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/5470999661693622527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=5470999661693622527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/5470999661693622527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/5470999661693622527'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/12/enterprise-search-or-how-to-index-on.html' title='Enterprise search OR How to index on-demand'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6710074159986433332</id><published>2007-12-12T19:01:00.000-08:00</published><updated>2007-12-12T20:30:49.952-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><title type='text'>Many reasons to like, what's yours ?</title><content type='html'>Beagle &lt;a href="http://www.mail-archive.com/dashboard-hackers@gnome.org/msg04048.html"&gt;0.3.0&lt;/a&gt; was released beginning of December. It is nearly 2 years since &lt;a href="http://osdir.com/ml/gnome.announce/2006-01/msg00079.html"&gt;0.2.0&lt;/a&gt;, more than 10 months since the &lt;a href="http://lists.ximian.com/pipermail/mono-announce-list/2007-January/000122.html"&gt;last feature release&lt;/a&gt; and it has been about 2 weeks since then. In the mean time we identified some problems upgrade problems with 0.3.0 and released &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2007-December/msg00051.html"&gt;0.3.1&lt;/a&gt; and Mono released &lt;a href="http://lists.ximian.com/pipermail/mono-devel-list/2007-December/026024.html"&gt;1.2.6&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In contrast to 0.1.0 and 0.2.0, beagle-0.3.0 did not have any single major-impact change. But there were lots of small changes, all over the summer months and the months following them. It was getting increasingly difficult to handle all the small changes without going through the "Release early" trick and at some point we paused development, did a test release and then finally released what we have as a major release. I am personally expecting a fair share of &lt;a href="http://beagle-project.org/Known_Issues"&gt;bugs&lt;/a&gt; and regressions.&lt;br /&gt;&lt;br /&gt;What are these small changes anyway ? I will leave out the invisible ones, some of which I have blogged about &lt;a href="http://dtecht.blogspot.com/"&gt;before&lt;/a&gt;, and only explain the ones that will directly impact your desktop usage.&lt;br /&gt;&lt;br /&gt;There are 3 new backends: the &lt;a href="http://postlund.org/2007/08/06/thunderbird-support-now-available-in-trunk/"&gt;Thunderbird backend&lt;/a&gt; (newly written, much better than the earlier one), the Opera history backend and the Nautilus metadata backend. There is also the TeX filter, one of our most demanded ones and new audio filter based on Taglib-sharp. There are new &lt;a href="http://beagle-project.org/Browser_Extension"&gt;Firefox and Epiphany extensions&lt;/a&gt; which do a lot more than indexing browsing history and bookmarks.&lt;br /&gt;&lt;br /&gt;The UI got some love; specially a bunch of useful options were added to beagle-settings like the backend selecion list. For obvious reasons, users should disable the backends they are never going to use.&lt;br /&gt;&lt;br /&gt;One of the side effects of the beagle textcache previously was the creation of thousands of small cache files on the disk. People reported that the external fragmentation was wasting a lot of space. The textcache module was &lt;a href="http://dtecht.blogspot.com/2007/10/i-saved-80mb.html"&gt;redesigned&lt;/a&gt; to minimize the fragmentation; I am sure you will appreciate the recovered space. We also compacted the external attributes; besides other benefits that will save some more space.&lt;br /&gt;&lt;br /&gt;Two major enhancements were made to the &lt;a href="http://beagle-project.org/Searching_Data"&gt;query syntax&lt;/a&gt;, which is already quite rich. Date queries are now possible; date queries do not make complete sense without date range query, so that too is possible. And a new "filetype:" keyword was added e.g. to search for images use "filetype:image", to search among documents use "filetype:document" etc.&lt;br /&gt;&lt;br /&gt;The major complains against beagle are constantly high CPU load, high memory usage and improper termination (or not exiting at all). The first two are well known and oft discussed. The third problem is not directly brought up, but have been found to be the reason upon close investigation. I gained valuable experience trying to find my way through the web of signals, threads and events in beagle code; a number of key issues were spotted and fixed. Oh, and the first two issues were also dealth with, as much as we could diagnose, but that is nothing new. It will sound funny, but a few of the high CPU and memory problems are direct results of some of our decisions that backfired. Some of them were fixed and the others being worked on.&lt;br /&gt;&lt;br /&gt;2 experimental features were also added. One is a &lt;a href="http://beagle-project.org/Beagle_Webinterface"&gt;web interface&lt;/a&gt; to search beagle from Firefox (gecko based browsers really). You can also create standard bookmarks for common search terms. The neat thing about this web interface unlike the earlier webservices based one is that there is no heavy weight server running on beagle's side. This one communicates with beagled using BeagleClient XML based API and builds the entire GUI on the client side; a pure Web 2.0 AJAX/XSLT/CSS webapp (ok, these are some cheap buzzwords).&lt;br /&gt;&lt;br /&gt;The other fancy feature is searching other beagle daemons over the network. Using Avahi you can even publish your beagle daemon or discover other beagle daemons in the network. We haven't quite figured out how to handle security, authenication and some other issues. So the feature is disabled by default and marked as experimental but I believe it can be used in some innovative way.&lt;br /&gt;&lt;br /&gt;We received request from some distributions about global config files; useful for both distributions and sysadmins. Some useful global configuration settings would be to exclude certain directory from indexing for all users, adding or removing file ignore patterns from the default list, disabling of KDE backends by default in pure Gnome distributions. Some of the options were moved from the code to the config files, so that they can be set globally and overriden by individual users.&lt;br /&gt;&lt;br /&gt;These are only some of the &lt;a href="http://svn.gnome.org/viewvc/beagle/tags/BEAGLE_0_3_0/beagle/ChangeLog?view=markup"&gt;major ones&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Lastly, the reason I got excited about mono-1.2.6 is because it has some &lt;a href="https://bugzilla.novell.com/show_bug.cgi?id=345430"&gt;fixes&lt;/a&gt; and &lt;a href="http://kubasik.net/blog/2007/11/16/mono-126-memory-usage/"&gt;improvements&lt;/a&gt; that will be directly visible when using beagle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6710074159986433332?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6710074159986433332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6710074159986433332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6710074159986433332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6710074159986433332'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/12/many-reasons-to-like-whats-yours.html' title='Many reasons to like, what&apos;s yours ?'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-1905671447684711991</id><published>2007-11-08T14:36:00.001-08:00</published><updated>2007-11-08T14:36:14.148-08:00</updated><title type='text'>Hide and Seek where I lost!</title><content type='html'>Once upon a time someone created a Bittorrent website named SeedPeer [1]. Over &lt;br&gt;the years they grew bigger and popular. Then they also wanted to write a &lt;br&gt;bittorrent client. Recently they announced that their client (named SeedPeer &lt;br&gt;too) is mostly ready.&lt;p&gt;The above part is known. Then, Alan, the author of very-much-open (MIT/X11 &lt;br&gt;licensed) MonoTorrent posted his objection that SeedPeer was based on &lt;br&gt;MonoTorrent (is it a rip off ? or based on ?) [2]. What annoyed him was that &lt;br&gt;the SeedPeer folks said nothing about MonoTorrent anywhere and claimed that &lt;br&gt;the code is all theirs. Quite right for Alan to be disappointed. I read his &lt;br&gt;blog, chuckled and said to myself ...&amp;quot;sigh! yet another victim of MIT/X11 and &lt;br&gt;BSD style licenses&amp;quot;[3] (coincidentally, I have read several posts in the last &lt;br&gt;few weeks that somehow end up with the openness of the above licenses; BTW, &lt;br&gt;beagle is also under MIT, which means you can sell it too...).&lt;p&gt;I like playing hide and seek so I downloaded SeedPeer to see how they managed &lt;br&gt;to agree to MIT/X11 and not say anything publicly. Quite possibly they credit &lt;br&gt;the author in a sneaky way somewhere. Ahh no. The exe and other related files &lt;br&gt;mentioned nothing of that sort. Ok, I went ahead and posted a comment &lt;br&gt;pointing out that SeedPeer people need to abide by the license [5].&lt;p&gt;For some reason I had that page open, so when I checked later a lot of people &lt;br&gt;were complaining of plagiarism and stuff. Probably someone even claimed that &lt;br&gt;SeedPeer has nothing do with MonoTorrent (it was something like &amp;quot;just because &lt;br&gt;its in C# does not mean ...&amp;quot;). I said to myself valid point, maybe Alan is &lt;br&gt;wrong... and thought to perform a silly test: compare the output of &amp;quot;strings&amp;quot; &lt;br&gt;of SeedPeer.exe [6] and MonoTorrent.{exe,dll}. Hmm... there was a lot of &lt;br&gt;matches, not only coincidental ones but suspicious ones. Like SeedPeer.exe &lt;br&gt;had &amp;quot;Mono.Math&amp;quot; in it - why was SeedPeer using Mono if they claimed before &lt;br&gt;that they are only focussing on Windows for the time being. Then there were &lt;br&gt;lots of strings that I only found in MT source and with uncommon names. I &lt;br&gt;posted a message in jest, saying I found a huge list of common strings and &lt;br&gt;that they probably have a few minutes to mangle the class/method names in &lt;br&gt;their source.&lt;p&gt;It was quickly followed by another post (from one of the admins, I suppose) &lt;br&gt;that they are not afraid and I should post the list. Also once their software &lt;br&gt;is complete, they would open source it. That kind of ticked me off ... could &lt;br&gt;I be that wrong ? Could the common words in &amp;quot;strings&amp;quot; be that coincidental ? &lt;br&gt;Well, off to &amp;quot;monop2 -p&amp;quot;, the easiest &amp;quot;decompiler&amp;quot; at hand. Got the names, &lt;br&gt;removed the namespace and did a direct comparison. Irrelevant, but I could &lt;br&gt;not find any one line shell command to return the common lines from two &lt;br&gt;files; google helped me find a one line perl command. Anyway, there were 109 &lt;br&gt;matches! And a lof of them were from private classes in MonoTorrent. The &lt;br&gt;similarity was too striking to be a coincidence. I modestly reported my &lt;br&gt;findings.&lt;p&gt;I have not been able to access the site since then. It was down; I should say, &lt;br&gt;it was down from my computer. Because, curious, I accessed the site from &lt;br&gt;another computer and it was nice and jolly up. Except ... the SeedPeer.exe &lt;br&gt;article, the download link to the exe and some other news articles are gone &lt;br&gt;[5]. I guess they &amp;quot;banned&amp;quot; me for, I guess reading their policy on their faq &lt;br&gt;page, &amp;quot;using comments section to insult others&amp;quot; (that was the closest match; &lt;br&gt;I also could not figure out if they mean blocking IP when they say &amp;quot;banned&amp;quot; - &lt;br&gt;since I am not a member at all).&lt;p&gt;I wished I had accessed that page using Firefox. Beagle firefox extension &lt;br&gt;would have indexed it right away and I would have a copy of the forums page. &lt;br&gt;I used Konqueror which does not always save the pages in its cache directory; &lt;br&gt;I just checked, there is no cache file for the forums page.&lt;p&gt;Like Adleman [7] (ahem), I like to break stuff. And thats what I did when they &lt;br&gt;argued that SeedPeer is their own and solely theirs. But I suck at &lt;br&gt;hide-and-seek, I really do!&lt;p&gt;[1] &lt;a href="http://www.seedpeer.com"&gt;http://www.seedpeer.com&lt;/a&gt;&lt;br&gt;[2]&lt;p&gt;&lt;a href="http://monotorrent.blogspot.com/2007/11/i-heard-some-great-news-earlier-in-week.html"&gt;http://monotorrent.blogspot.com/2007/11/i-heard-some-great-news-earlier-in-week.html&lt;/a&gt;&lt;br&gt;[3] &lt;a href="http://www.opensource.org/licenses/mit-license.html"&gt;http://www.opensource.org/licenses/mit-license.html&lt;/a&gt;&lt;br&gt;[4] &lt;a href="http://beagle-project.org"&gt;http://beagle-project.org&lt;/a&gt;&lt;br&gt;[5] &lt;a href="http://seedpeer.com/sitenews/article/31.html"&gt;http://seedpeer.com/sitenews/article/31.html&lt;/a&gt;&lt;br&gt;[6] &lt;a href="http://cs-people.bu.edu/dbera/blogdata/SeedPeer.zip"&gt;http://cs-people.bu.edu/dbera/blogdata/SeedPeer.zip&lt;/a&gt;&lt;br&gt;[7] &lt;a href="http://www-groups.dcs.st-and.ac.uk/~history/Biographies/Adleman.html"&gt;http://www-groups.dcs.st-and.ac.uk/~history/Biographies/Adleman.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-1905671447684711991?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/1905671447684711991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=1905671447684711991' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1905671447684711991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/1905671447684711991'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/11/hide-and-seek-where-i-lost.html' title='Hide and Seek where I lost!'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2490454737509159227</id><published>2007-11-02T14:46:00.001-07:00</published><updated>2007-11-02T14:46:24.184-07:00</updated><title type='text'>Good Luck Joe</title><content type='html'>Please join me in welcoming &lt;a href="http://joeshaw.org"&gt;Joe Shaw&lt;/a&gt;, the &lt;a href="http://www.mail-archive.com/dashboard-hackers@gnome.org/msg03922.html"&gt;second&lt;/a&gt; &lt;a href="http://joeshaw.org/2007/11/02/499"&gt;non-Novell&lt;/a&gt;  maintainer of the &lt;a href="http://beagle-project.org"&gt;Beagle project&lt;/a&gt;. Joe has solid knowledge of the codebase yada yada yada...&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2490454737509159227?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2490454737509159227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2490454737509159227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2490454737509159227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2490454737509159227'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/11/good-luck-joe.html' title='Good Luck Joe'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2157652334811886242</id><published>2007-10-24T11:32:00.001-07:00</published><updated>2007-10-24T11:32:42.065-07:00</updated><title type='text'>KGiMAP</title><content type='html'>A not so beautiful Allston morning turned out to be a rather useful one with the slashdot post [&lt;a href="http://slashdot.org/article.pl?sid=07/10/24/0249257" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; Free IMAP On Gmail&lt;/a&gt;]. I checked my gmail settings and (apprently I am among the fortunate ones here) I saw the &amp;quot;Enable IMAP&amp;quot; setting there. Wee... &lt;br&gt;&lt;br&gt;Fired up &lt;span style="font-weight: bold;"&gt;K&lt;/span&gt;mail, added a new account for &lt;span style="font-weight: bold;"&gt;G&lt;/span&gt;oogle as a disconnected &lt;span style="font-weight: bold;"&gt;IMAP&lt;/span&gt;. And on my way to sync ... I was curious how the labels were going to be handled, I have about 15 of them based on which mailing list or which bugzilla an email is from (I have mentioned this before - I prefer organization over search). It was nice to see the labels getting downloaded as imap folders. And there is a special folder  &lt;span style="font-style: italic;"&gt;[Gmail]&lt;/span&gt; which contains the regular gmail folders - &lt;span style="font-style: italic;"&gt;All mail&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Starred, Trash, Spam, Sent Mail.&lt;/span&gt; Thats when it struck me! &lt;br&gt;&lt;br&gt;All the emails are going to be duplicated or triplicated or could have even more copies. Labels are not disjoint, so there are mails in my &lt;span style="font-style: italic;"&gt;Inbox&lt;/span&gt; that are also in &lt;span style="font-style: italic;"&gt;  beagle-bugs&lt;/span&gt; and of course all mail ever is also in &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;All Mail&lt;/span&gt;&lt;/span&gt;. To add to the trouble, deleting an email locally is going to &lt;span style="font-style: italic;"&gt;  archive &lt;/span&gt;the email (basically, it removes the &lt;span style="font-style: italic;"&gt;Inbox &lt;/span&gt;label from the email) and not delete it. The huge amount of mails in the &lt;span style="font-style: italic;"&gt;Spam&lt;/span&gt; folder is not healthy for my hard disk space. The huge amount of emails my beagle-bugzilla filter sends out to  &lt;span style="font-style: italic;"&gt;Trash&lt;/span&gt; is similarly bad.&lt;br&gt;&lt;br&gt;As of now I resolved the situation by asking all my filters (I have one filter for each label) to archive the email (&lt;span style="font-style: italic;"&gt;  Skip the inbox&lt;/span&gt;) and then apply the label. I asked KMail to not subscribe to any of the &lt;span style="font-style: italic;"&gt;[Gmail]&lt;/span&gt; folders. And I created a Gmail label(IMAP folder on KMail)&lt;span style="font-style: italic;"&gt;   Totrash&lt;/span&gt; which I marked as my Trash folder in KMail (for the GMail account). Now whenever I delete a Gmail email from KMail, it will go to Totrash which I can empty periodically from the web-interface. What a kludge! I wish there was a rule to empty folders or a filter move emails from Totrash to Trash! &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2157652334811886242?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2157652334811886242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2157652334811886242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2157652334811886242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2157652334811886242'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/10/kgimap.html' title='KGiMAP'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2685466491621409341</id><published>2007-10-13T12:00:00.001-07:00</published><updated>2007-10-13T12:00:56.864-07:00</updated><title type='text'>There is no third way</title><content type='html'>(This post is not about beagle though it is hosted on PlanetBeagle.&lt;br&gt;However it is somewhat related to &amp;quot;search&amp;quot;.)&lt;p&gt;I have seen two approaches to finding information, in land of software&lt;br&gt;as well as real-ware. There are people who find it themselves and&lt;br&gt;there are some who use an external agent to get what they need. Human&lt;br&gt;memory is expensive, so these are the most obvious approaches. I have&lt;br&gt;seen equal number of people on both sides.&lt;p&gt;In the first group are people who like to keep everything organized,&lt;br&gt;from physical files to computer files, books to RSS feeds, knives to&lt;br&gt;applications. Organization typically involves grouping the items into&lt;br&gt;categories and re-grouping again if the number of items in a category&lt;br&gt;grows too much. Its a pain to remember things, then there is so much&lt;br&gt;to remember. Care is taken so that the number of categories don&amp;#39;t grow&lt;br&gt;too large or the nesting isn&amp;#39;t too deep. Computer Science people&lt;br&gt;cashed in on such problems, analyzed them to death and presented us&lt;br&gt;with databases, shallow and deep trees, hashtables, sorting etc.&lt;br&gt;Whatever the approach, the objective remains that reaching one&lt;br&gt;particular item should take as less amount of memory and labour as&lt;br&gt;possible. Memory and labour appear as trade-off here, so there are&lt;br&gt;variations of this where the most frequently accessed items are&lt;br&gt;optimized more than others (compression, source coding, amortized&lt;br&gt;algorithms, cabinets with upper and lower shelves etc.).&lt;p&gt;The second group of people use an external agent to do this task. In&lt;br&gt;reality, not everyone belongs to only one group, people tend use&lt;br&gt;whichever approach is suitable. Anyway, the external agents could be&lt;br&gt;one&amp;#39;s mom, secretary :), a database, a filesystem, search engine etc.&lt;br&gt;They are nothing but efficient members of the first category. The&lt;br&gt;efficiency matters here; tolerance gets extremely low if I am not&lt;br&gt;doing something but hiring someone to do it.&lt;p&gt;It is clear that when dealing with items on the start menu, the same&lt;br&gt;ideas would come into action. OK, so the rest of the post is about&lt;br&gt;start menu, you can stop reading now.&lt;p&gt;Either we have a menu, properly organized or we have a dump of&lt;br&gt;everything with an extremely efficient way to get what we want. OK, we&lt;br&gt;can do the optimized variation of the first and add search to it to&lt;br&gt;make it work for the second group (e.g. kickoff, internet with search&lt;br&gt;engine and directories, filesystem with desktop search). But to get it&lt;br&gt;done right, both should be done with precision and care. Which means,&lt;br&gt;the search has to be fast and accurate and categorization should not&lt;br&gt;be too deep nor too flat. Geeshh... that is difficult.&lt;p&gt;Actually not that difficult for applications. If done the right way,&lt;br&gt;they can be arranged in a start menu with categories (not Windows&lt;br&gt;style though!). Or they can just be there and you find them using a&lt;br&gt;search tool (quicksilver, katapult, deskbar). Or both (kickoff,&lt;br&gt;kickoff spinoffs).&lt;p&gt;This is where I found Mandriva to go wrong. They had a nice start menu&lt;br&gt;to begin with (because Mandrake had a nice start menu to begin with).&lt;br&gt;In the latest distribution, the Mandriva specific categorization has&lt;br&gt;been replaced with a two level (i.e. top-level with&lt;br&gt;network/tools/office and then apps in them) menu. Some of the submenus&lt;br&gt;became too large, and they have been put behind another nesting called&lt;br&gt;&amp;quot;More&amp;quot; (e.g. &amp;quot;Firefox&amp;quot; went behind more because it not native KDE).&lt;br&gt;The end result is a menu, which is only two level and pretty flat (so&lt;br&gt;less to remember which submenu to go to) but once in the submenu, have&lt;br&gt;to memorize the position in a pretty long vertical list. Add to that&lt;br&gt;the effort in dragging the mouse a significant vertical distance. I&lt;br&gt;have entries that requires me to drag the mouse all the way from top&lt;br&gt;(I have my start menu button at the top-right corner) to the bottom -&lt;br&gt;that&amp;#39;s 1024 pixels. The earlier menu was the same with one more&lt;br&gt;nesting, like &amp;quot;Browsers&amp;quot;, &amp;quot;Spreadsheet&amp;quot;, &amp;quot;Terminals&amp;quot; where I only had&lt;br&gt;to memorize the levels and then look in the 2-3 items in each&lt;br&gt;immediate category. The vertical distance covered in the current menu&lt;br&gt;is larger than the horizontal distance due to that extra submenu.&lt;br&gt;Adding to the woes is the lack of an embedded search option.&lt;p&gt;There is another aspect with menu which make vertical movement much&lt;br&gt;harder than horizontal movement. Its related to Fitts&amp;#39;s Law. But first&lt;br&gt;a small digression. I like to call it Fitts&amp;#39;s Theory. Because it&lt;br&gt;describes certain operation in a particular model. Calling it law&lt;br&gt;isn&amp;#39;t wrong, except it makes it sound like anyone not following the&lt;br&gt;&amp;quot;law&amp;quot; is from Mars. Once again, it tries to model some observed&lt;br&gt;phenomenon, and does not aim to dictate how the phenomenon should take&lt;br&gt;place. Unfortunately most commentaries about Fitts&amp;#39;s law seem to think&lt;br&gt;we should all abide by Fitts&amp;#39;s law or leave this planet.&lt;p&gt;Anyway, in menus the entries are horizontally layered. The menus are&lt;br&gt;designed to open a submenu when the mouse in on the corresponding&lt;br&gt;entry. The problem happens if I try to follow a straight line from an&lt;br&gt;entry to an entry in a submenu. If the entry in the submenu appears&lt;br&gt;significantly lower in the submenu, the mouse will inevitably cross&lt;br&gt;over the next entry in the menu, which will open the submenu for the&lt;br&gt;next menu entry thereby forcing you to start again. Vertical motion&lt;br&gt;isn&amp;#39;t unrestricted. It happens to me always when I quickly try to go&lt;br&gt;from the start menu to some application whose position I know thereby&lt;br&gt;trying to go straight from the button to that entry. If I am not&lt;br&gt;careful, I end up opening the submenu of the next menu entry in a&lt;br&gt;haste, then move left and up to find the right menu entry, then move&lt;br&gt;right _carefully_ to horizontally enter the correct submenu and then&lt;br&gt;rush down to the memorized spot. All in a wink of an eye and it has&lt;br&gt;become my second nature now. But every time this happens, I feel&lt;br&gt;slightly irritated. If menus are designed to take advantage of the&lt;br&gt;horizontal freedom of movement more, it would be much smooth. Deeper&lt;br&gt;nesting has the mentioned side effect. By the way, radial menu or&lt;br&gt;submenus that open in the middle or in the first entry should be&lt;br&gt;better. But apart from a few radial Firefox context menus, I have not&lt;br&gt;found any other implementation. I love radial menu.&lt;p&gt;That is all I had to say about start menus. Before finishing, I should&lt;br&gt;point out that even for the first group of self-organized users,&lt;br&gt;having someone or something to search is not totally out of the&lt;br&gt;question. Some form of data are too vast to organize (bookmarks and&lt;br&gt;directories wrt internet), some have no single way of organizing or&lt;br&gt;some even have no of meaningful grouping criterion. And even if you&lt;br&gt;arrange all your computer files in directories, emails in mail&lt;br&gt;folders, feeds in feed reader folders, websites in bookmark folders,&lt;br&gt;if you are to find this blog (containing &amp;quot;Fitts&amp;#39;s Law&amp;quot; but unrelated&lt;br&gt;to beagle), then good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2685466491621409341?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2685466491621409341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2685466491621409341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2685466491621409341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2685466491621409341'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/10/there-is-no-third-way.html' title='There is no third way'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4825924911546861445</id><published>2007-10-09T17:45:00.000-07:00</published><updated>2007-10-09T17:46:10.520-07:00</updated><title type='text'>I saved 80MB</title><content type='html'>Its a common question in the database community where to store large binary &lt;br&gt;objects, commonly known as BLOBs (binary large objects). There are two &lt;br&gt;obvious options, store it in the filesystem or store it in a database. And by &lt;br&gt;twisting arms we get the third obvious approach, a mix of the two. There are &lt;br&gt;some studies in database academic community on the tradeoff.&lt;p&gt;Thinking carefully, the database and filesystem work in a similar way when &lt;br&gt;storing objects. Both store data in tree fashion, providing fast access to &lt;br&gt;any object. Both can add or delete object. And both suffers from &lt;br&gt;fragmentation.&lt;p&gt;The fragmentation is the key issue in my test case. So what is my test case. &lt;br&gt;It consists of lots and lots of small files and I mean, really small files &lt;br&gt;and some very large files. Just to give an example, I have a total of 20000 &lt;br&gt;files. Of them about,&lt;br&gt;500 are above 4K&lt;br&gt;1000 2-4K&lt;br&gt;2000 1-2K&lt;br&gt;16000 less than 1K.&lt;p&gt;There is a reason for this extremely skewed distribution. The files are &lt;br&gt;textcaches in my home directory. The main contributing factors are about 8000 &lt;br&gt;files (a mix of source code, tex, pdf and html and oh ... lots of pictures) &lt;br&gt;and 19000 emails (without spam). Now source codes are self caches i.e. &lt;br&gt;separate textcache is not stored for these files. Same with txt. Pictures and &lt;br&gt;other media has no text to cache. So the bulk of cached text comes from html, &lt;br&gt;pdf and office documents. Most of such documents in my home directory are &lt;br&gt;generally pretty large i.e. with a significant amount of textual content. &lt;br&gt;This is in sharp contrast to the behaviour for emails. The textual content &lt;br&gt;from the emails are stored. Also, unlike the html files on the disk, the HTML &lt;br&gt;parts in these emails are small, really small. Those contribute to the huge &lt;br&gt;number of extremely small files. If you are wondering how come I got 3000 &lt;br&gt;absurdly small 20 byte files, I store the gzipped copy of the extracted text &lt;br&gt;in the textcache.&lt;p&gt;So now the question is how to best store data with such distribution. The &lt;br&gt;simplest thing is to use the filesystem. Filesystem are equipped with &lt;br&gt;sophisticated methods to avoid fragmentation. But with a fixed block size &lt;br&gt;(like 4K on my home directory partition), there is bound to be some &lt;br&gt;fragmentation when storing small files like above. On the other hand, &lt;br&gt;historically databases were concerned with storing small strings (with all &lt;br&gt;sorts of querying and update speedup; and they are pretty good at that). &lt;br&gt;Recently, most of the databases have added support for large binary objects. &lt;br&gt;There is also a small twist to this problem. The data is mostly static but &lt;br&gt;there are deletions (and sometimes modifications). The last important factor &lt;br&gt;is I am using the embedded sqlite database which stores all its data in a &lt;br&gt;single file; so in essence, what I get is a &amp;quot;fast retrieval and &lt;br&gt;update&amp;quot;-enabled huge tar file.&lt;p&gt;The prevailing folklore is that database is better for smaller objects and &lt;br&gt;filesystem for larger objects. What is small and what is large depends on the &lt;br&gt;nature of the problem at hand. There are some papers doing detailed analysis &lt;br&gt;of the tradeoff, and they conclude somewhat along the same lines. I found one &lt;br&gt;paper showing that adding and deleting lots of large objects over time causes &lt;br&gt;enough fragmentation in a database that it can lag behind a filesystem.&lt;p&gt;I am not much of an experimental person myself. With the above testcase, I did &lt;br&gt;not even think twice about what I should do. Well, for other reasons (like &lt;br&gt;heap fragmentation in my application, since reading from a database would &lt;br&gt;require me to store the entire data in memory) I was a bit biased towards the &lt;br&gt;filesystem approach. So I decided to take the middle path of a mix of &lt;br&gt;filesystem and database. Thanks to decent APIs, implementing the hybrid &lt;br&gt;approach did not turn out to be anything complicated. I store the first 4K in &lt;br&gt;a buffer and then if I get more data, move everything to a file otherwise &lt;br&gt;save everything in the database.&lt;p&gt;All the 19500 files with less than 4K size are now safely sleeping in the &lt;br&gt;database, which would have otherwise taken 4K each.&lt;p&gt;(* The title is not entirely correct. I did not have to waste 4K blocks for &lt;br&gt;each of 19500 files, but now my sqlite database is 26MB instead of something &lt;br&gt;much smaller. But I am confident, this is good for the mankind at large and &lt;br&gt;for the dolphins too.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4825924911546861445?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4825924911546861445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4825924911546861445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4825924911546861445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4825924911546861445'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/10/i-saved-80mb.html' title='I saved 80MB'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8786030053969710463</id><published>2007-09-13T04:56:00.000-07:00</published><updated>2007-09-13T05:29:40.911-07:00</updated><title type='text'>Tracker-ing looks fun</title><content type='html'>Jamie &lt;a href="http://svn.gnome.org/viewcvs/tracker?rev=843&amp;view=rev"&gt;checked in&lt;/a&gt; thunderbird support to &lt;a href="http://www.gnome.org/projects/tracker/"&gt;Tracker&lt;/a&gt; today. How do I know ? Because I subscribe to &lt;span class="ppt" id="_user_svn-commits-list@gnome.org"&gt;svn-commits-list and my gmail filter separated him out when he was adding the beagle thunderbird backend (probably with some modifications, haven not checked the changeset) to tracker.&lt;br /&gt;&lt;br /&gt;This is looking pretty cool. I also found out &lt;a href="http://jamiemcc.livejournal.com/8837.html?thread=117125"&gt;Tracker-0.6&lt;/a&gt; was released with some extremely useful features and a damn good UI. The UI groups the documents in an intuitive way, shows more context information from matches, allows you to do tagging inplace (and has gradients, uh-on). The core &lt;span style="font-style: italic;"&gt;daemon&lt;/span&gt; (is that what it is called ?) can scan evolution mails, and pidgin logs. Now it can also do index thunderbird mails. It lists &lt;span style="font-style: italic;"&gt;XMP metadata support&lt;/span&gt; too - which is nice and something I never managed to finish in &lt;a href="http://beagle-project.org/XMP_Sidecar"&gt;beagle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am pretty sure people will find it useful. I could not resist myself to admire it and share it with others. Well, I was told that tracker is set to become the &lt;a href="http://www.nabble.com/Tracker-to-be-default-search-provider-in-next-Ubuntu-release-t4316423.html"&gt;default desktop search engine&lt;/a&gt; in ubuntu, so a lot of unhappy souls are about to become happy soon.&lt;br /&gt;&lt;br /&gt;For me, I will continue using beagle. Why ? Because, it does what I need it to do. And if it does not do something, just remember it is written in &lt;a href="http://www.atrevido.net/blog/2007/08/29/Practical+Functional+C+Part+IV+Think+In+ResultSets.aspx"&gt;C#&lt;/a&gt; :). Meanwhile, &lt;span style="font-weight: bold;"&gt;you&lt;/span&gt; make your &lt;span style="font-weight: bold;"&gt;own&lt;/span&gt; decision.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8786030053969710463?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8786030053969710463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8786030053969710463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8786030053969710463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8786030053969710463'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/09/tracker-ing-looks-fun.html' title='Tracker-ing looks fun'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-7619787424637437976</id><published>2007-09-09T17:34:00.000-07:00</published><updated>2007-09-09T18:21:01.040-07:00</updated><title type='text'>How is WebBeagle for a name ?</title><content type='html'>(Or FireBeagle ?)&lt;br /&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: none; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; width: 122px; height: 122px; z-index: 2147483646; left: 253px; top: 124px;" id="eG_nodes"&gt;&lt;img alt="" src="chrome://easygestures/skin/more.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 45px; top: 2px; width: 32px; height: 32px; opacity: 1;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/closeTab.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 76px; top: 14px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/forward_gray.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 89px; top: 45px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/nextTab.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 76px; top: 76px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/reload.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 45px; top: 89px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/closeTab.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 14px; top: 76px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/back.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 2px; top: 45px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/homepage.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 14px; top: 14px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/menu.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; width: 122px; height: 122px; opacity: 1;" /&gt;&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; z-index: 2147483647; left: 253px; top: 124px;"&gt;&lt;img alt="" src="chrome://easygestures/skin/link.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 45px; top: 45px; width: 32px; height: 32px; visibility: hidden;" /&gt;&lt;input style="border-style: solid; border-color: rgb(221, 221, 221); border-width: 4px 2px 8px; font-family: Arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal; background-color: white; color: black; text-align: center; position: absolute; z-index: 2147483647; visibility: hidden;"&gt;&lt;img onclick="var matchCase = this.src.search('matchCase_On')!=-1; this.src=this.src.replace( (matchCase?'On':'Off') , (matchCase?'Off':'On'));" src="chrome://easygestures/skin/matchCase_Off.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; z-index: 2147483647; visibility: hidden;" /&gt;&lt;img src="chrome://easygestures/skin/altMenuSign.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 93px; top: -2px; visibility: hidden; clip: rect(0px, 0px, 9px, 0px);" /&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: url(chrome://easygestures/skin/contextMenuSign.png); background-color: red; min-height: 0pt; min-width: 0pt; line-height: 0.8; visibility: hidden;"&gt;&lt;img style="position: absolute; left: 27px; top: -25px; visibility: hidden;" src="chrome://easygestures/skin/contextMenuSign.png" /&gt;&lt;img style="position: absolute; left: 23px; top: -21px;" src="chrome://easygestures/skin/contextMenuSign.png" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: none; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: normal; direction: ltr; font-family: tahoma,arial,helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12pt; font-size-adjust: none; font-stretch: normal; vertical-align: baseline; text-align: left; text-indent: 0px; position: absolute; height: 146px; width: 394px; z-index: 2147483645; left: 117px; top: 112px;" id="eG_labels"&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 10px; top: 10px;"&gt;More...(drag mouse)&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 265px; top: 40px;"&gt;Close Tab&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 270px; top: 70px;"&gt;Forward&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 260px; top: 100px;"&gt;Next Tab&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 230px; top: 125px;"&gt;Reload-Stop&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 10px; top: 95px;"&gt;Close Tab&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 10px; top: 68px;"&gt;Back&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 10px; top: 40px;"&gt;Home Page&lt;/div&gt;&lt;img src="chrome://easygestures/skin/other_labels.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; width: 394px; height: 146px;" /&gt;&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: none; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; width: 122px; height: 122px; z-index: 2147483646; left: 253px; top: 124px;" id="eG_nodes"&gt;&lt;img alt="" src="chrome://easygestures/skin/more.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 45px; top: 2px; width: 32px; height: 32px; opacity: 1;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/closeTab.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 76px; top: 14px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/forward_gray.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 89px; top: 45px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/nextTab.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 76px; top: 76px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/reload.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 45px; top: 89px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/closeTab.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 14px; top: 76px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/back.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 2px; top: 45px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/homepage.png" style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 14px; top: 14px; width: 32px; height: 32px; opacity: 0.75;" /&gt;&lt;img alt="" src="chrome://easygestures/skin/menu.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; width: 122px; height: 122px; opacity: 1;" /&gt;&lt;/div&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: inline; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; z-index: 2147483647; left: 253px; top: 124px;"&gt;&lt;img alt="" src="chrome://easygestures/skin/link.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 45px; top: 45px; width: 32px; height: 32px; visibility: hidden;" /&gt;&lt;input style="border-style: solid; border-color: rgb(221, 221, 221); border-width: 4px 2px 8px; font-family: Arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10pt; line-height: normal; font-size-adjust: none; font-stretch: normal; background-color: white; color: black; text-align: center; position: absolute; z-index: 2147483647; visibility: hidden;"&gt;&lt;img onclick="var matchCase = this.src.search('matchCase_On')!=-1; this.src=this.src.replace( (matchCase?'On':'Off') , (matchCase?'Off':'On'));" src="chrome://easygestures/skin/matchCase_Off.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; z-index: 2147483647; visibility: hidden;" /&gt;&lt;img src="chrome://easygestures/skin/altMenuSign.png" style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: none; background-color: transparent; min-height: 0pt; min-width: 0pt; line-height: 0.8; position: absolute; left: 93px; top: -2px; visibility: hidden; clip: rect(0px, 0px, 9px, 0px);" /&gt;&lt;div style="border: 0px none ; margin: 0px; padding: 0px; display: block; float: none; color: black; background-image: url(chrome://easygestures/skin/contextMenuSign.png); background-color: red; min-height: 0pt; min-width: 0pt; line-height: 0.8; visibility: hidden;"&gt;&lt;img style="position: absolute; left: 27px; top: -25px; visibility: hidden;" src="chrome://easygestures/skin/contextMenuSign.png" /&gt;&lt;img style="position: absolute; left: 23px; top: -21px;" src="chrome://easygestures/skin/contextMenuSign.png" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;I always wanted to search beagle using a web-browser. My desktop searches are mostly infrequent but complicated. So if I am unable to find something I definitely need an index-based search tool (e.g. &lt;a href="http://beagle-project.org/"&gt;beagle&lt;/a&gt;) but on the other hand I don't want to keep an application open on my desktop for a long time (beagle &lt;span style="font-style: italic;"&gt;does not&lt;/span&gt; consume significant memory for me, so it can keep running &lt;span style="font-style: italic;"&gt;in the background&lt;/span&gt;). That was one reason why I wrote the &lt;a href="http://www.kde-apps.org/content/show.php?content=28437"&gt;kio slave for beagle&lt;/a&gt; (I have stopped liking it for a long time) and followed it with a &lt;a href="http://www.kde-apps.org/content/show.php?content=35781"&gt;kde deskbar like applet&lt;/a&gt; (which is nice but with limited functionality). Now that I am done with shameless advertisements, let me share with you yet another way to query beagle.&lt;br /&gt;&lt;br /&gt;Today I wrote some ajaxy,xslt-ed webpages to allow users (read: me) to query beagle using a browser (err... firefox, konqueror-3.5.5 does not have XSLT processor). It uses the &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2007-August/msg00029.html"&gt;networkservice backend&lt;/a&gt; that can be used to &lt;a href="http://dtecht.blogspot.com/2007/07/mr-beagle-you-are-on-air.html"&gt;query beagle  over network&lt;/a&gt; (based on last year's Google Summer of Code projects).&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Dl_EHp-s13Q/RuSVUVFtUNI/AAAAAAAAAAM/SShdc8dzfTs/s1600-h/beagle-web-interface.jpg.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_Dl_EHp-s13Q/RuSVUVFtUNI/AAAAAAAAAAM/SShdc8dzfTs/s320/beagle-web-interface.jpg.png" alt="" id="BLOGGER_PHOTO_ID_5108372053835993298" border="0" /&gt;&lt;/a&gt;It uses internal knowledge of how queries are serialized, lists all the information in a boring way and does not show snippets (yet). But it works and was reasonably fast in displaying 42 results. Besides the boring UI, allowing browsers to access services always opens up some security hole, so it is disabled by default. If you so desire, use it but at your own risk (check the &lt;a href="http://svn.gnome.org/viewcvs/beagle?rev=3950&amp;view=rev"&gt;commit log&lt;/a&gt; for how to turn this feature on).&lt;br /&gt;&lt;br /&gt;I do hope to get this feature properly implemented. The things need to be done are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Fix the network-backend (it is sufferring from some crashes).&lt;/li&gt;&lt;li&gt;Probably related to the network backend as well, some kind of search authorization is needed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use CSS + javascript for the results page to group/sort the results, and make them look decent.&lt;/li&gt;&lt;li&gt;Get snippets and display them. I am thinking of retrieving snippets only on demand. Somehow the name and the location of files or the sender and the subject of emails help me more in filtering out search results than snippets. Which is quite unlike how I use web search engines.&lt;/li&gt;&lt;li&gt;Figure out a way to use the C# or libbeagle API to create the xml request messages. Currently they are hardwired. If the solution turns out to be too complicated, it might not be a bad thing to leave the format hardcoded as it is now.&lt;/li&gt;&lt;li&gt;More cosmetic, separate command line and configuration options for this feature.&lt;/li&gt;&lt;li&gt;This is more related to the network query implementation; figure out how to use the QueryDomain thing meaningfully. The results from some backends only make sense on the same machine and even for some of them, it is tricky to open the applications just from the URI itself. So does it make sense to show e.g. evolution mail hits in the browser ? Does it make sense to return gaim (pidgin) hits when queried over network ?&lt;/li&gt;&lt;li&gt;How does the browser behave (read: choke) when it receives 1000 results (100 results each from 10 backends)? (i.e. the DOMParser has to parse a huge string and form a huge DOM of 1000 Hit nodes. You see why I dont like to get all the snippets beforehand :)?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-7619787424637437976?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/7619787424637437976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=7619787424637437976' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7619787424637437976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7619787424637437976'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/09/how-is-webbeagle-for-name.html' title='How is WebBeagle for a name ?'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Dl_EHp-s13Q/RuSVUVFtUNI/AAAAAAAAAAM/SShdc8dzfTs/s72-c/beagle-web-interface.jpg.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6405624537427764106</id><published>2007-08-09T20:51:00.001-07:00</published><updated>2007-08-09T20:51:10.541-07:00</updated><title type='text'>Hey Firefox, Beagle This ... NOW!</title><content type='html'>Consider this scenario: B was writing an article when he remembered that he read a relevant blog some weeks ago but did not bookmark it due to his lack of foresight (stupid B). What to do ? He could possibly run a grep in his Firefox cache folder hoping that the cache would still be there or scan his FF history for a familiar looking URL. Anything better ? &lt;br&gt;&lt;span style="font-style: italic;"&gt;If B was using the FF beagle extension, he could find the blog instantly&lt;/span&gt;&lt;br&gt;&lt;br&gt;Really! Then I will pose this requirement. B has been using the new FF beagle extension for some time now. But he does not want to index all his browsing history. Sometimes he just wants to browse off the record. Maybe after a while he wants to index the pages he visits. Pretty random ... but hey, that&amp;#39;s B&amp;#39;s nature. &lt;br&gt;&lt;span style="font-style: italic;"&gt;No problem. The new extension puts a small status icon, which can be&amp;nbsp; used to disable/enable the automatic index; really, at B&amp;#39;s own sweet will.&lt;/span&gt;&lt;br&gt;&lt;br&gt;That was easy. How about this one, a bit harder. Someone told B about FF beagle extension, and B started using it. But this time he needs a PDF paper he found online. He does remember that he read the paper and he must have read it in the browser itself. Now what ? &lt;br&gt;&lt;span style="font-style: italic;"&gt;If B was using the new FF beagle extension, he could even search for embedded documents. Embedded content is not indexed automatically &lt;font size="1"&gt;(as of now)&lt;/font&gt; but can be indexed as required using the status icon menu.&lt;/span&gt;&lt;br&gt;&lt;br&gt;Hmm... But what if B visits a page with auto-indexing disabled and then decides that he better index the current page. Now what ? Does he have to enable the auto-indexing and then reload the page. Thats stupid!&lt;br&gt;&lt;span style="font-style: italic;"&gt;Heh. You gotta be kidding. Of course he can use the status icon menu or the page context menu to index the current page. &lt;/span&gt;&lt;br&gt;&lt;br&gt;If B wants to index an image, or take this one, sees a link to something (PDF, image, java source file, mp3 ...) and wants to index it without loading it explicitly ? &lt;br&gt;&lt;span style="font-style: italic;"&gt;The context menu provides options to index an image and index a link; in both the cases the file is retrieved in the background and indexed. All filetypes that beagle can filter, can be indexed using the index this link feature. &lt;/span&gt;&lt;br&gt;&lt;br&gt;This new extension seems to uber-useful. I guess I err... B should really start using it. Can B save notes while indexing on demand i.e. if he is indexing a link he might want to index a few extra keywords (for querying or for reference) ? &lt;br&gt;&lt;span style="font-style: italic;"&gt;Yeah! B gets that too. If B checks the corresponding preference entry, the extension will prompt for extra keywords to save and index when B explicitly asks it to index something.&lt;/span&gt;  &lt;br&gt;&lt;br&gt;I will be good and &lt;a href="http://code.google.com/p/browser-extension-for-beagle/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;share&lt;/a&gt; this &lt;a href="http://beagle-project.org/Browser_Extension" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; new beagle extension&lt;/a&gt; with everybody, written by &lt;a href="http://filiasoc.blogspot.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; Tao&lt;/a&gt; as part of &lt;a href="http://beagle-project.org/Summer_Of_Code_2007" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;Google Summer of Code 2007&lt;/a&gt;. Soon to be found in &lt;a href="http://svn.gnome.org/viewcvs/beagle/trunk/beagle/"&gt; beagle trunk&lt;/a&gt;.&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6405624537427764106?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6405624537427764106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6405624537427764106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6405624537427764106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6405624537427764106'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/08/hey-firefox-beagle-this-now.html' title='Hey Firefox, Beagle This ... NOW!'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-7172979509453079109</id><published>2007-07-06T15:16:00.000-07:00</published><updated>2007-07-06T15:36:33.498-07:00</updated><title type='text'>Mr Beagle, you are on the air</title><content type='html'>Back in India, I did one good thing. Finished adding Alexis Christoforides' project of Google Summer of Code 2006 &lt;a href="http://beagle-project.org/Beagle_over_the_Network"&gt;Beagle over the network&lt;/a&gt;. Its a bit untested with the recent versions of beagle and I didn't read the code completely, so I left it in a &lt;a href="http://svn.gnome.org/viewcvs/beagle/branches/beagle-cutting-edge-branch/?pathrev=3799"&gt;separate branch&lt;/a&gt; for the time being.&lt;br /&gt;&lt;br /&gt;What can you do with this wonderful project ?&lt;br /&gt;- Start beagled on one machine&lt;br /&gt;- Add that machine (with port 4000) to the list of neighbourhood nodes via beagle-config on a second machine in the network&lt;br /&gt;- Remotely query the beagled on the first machine from the second machine&lt;br /&gt;&lt;br /&gt;The SoC project was a complete one, with GUI support. However, I only added the basic infrastructure and enabled the cli tool beagle-query to query remotely. I am not sure if querying for emails remotely makes sense, how will the results be opened ? As of now, only the filesystem backend is enabled to send query over the network.&lt;br /&gt;&lt;br /&gt;Ideally, beagle should automatically find out other networked beagled in the network. Don't despair, there was another SoC project in 2006, &lt;a href="http://beagle-project.org/Avahi_Integration"&gt;Avahi Integration&lt;/a&gt; by Kyle Ambroff doing exactly that. Sadly I am too preoccupied to work on integrating the Avahi work. But with that and the GUI parts of &lt;span style="font-style: italic;"&gt;Network Beagle&lt;/span&gt;, beagle would be useful in more ways than ever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-7172979509453079109?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/7172979509453079109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=7172979509453079109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7172979509453079109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7172979509453079109'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/07/mr-beagle-you-are-on-air.html' title='Mr Beagle, you are on the air'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-5219111190486527061</id><published>2007-05-17T19:23:00.001-07:00</published><updated>2007-05-17T19:23:39.344-07:00</updated><title type='text'>Silence of the Dog</title><content type='html'>Lately beagle releases have slowed down quite a bit; there were a few bug-fix 0.2.16.x release and another 0.2.17 bug-fix release (it was supposed to &lt;a href="http://0.2.16.4"&gt;0.2.16.4&lt;/a&gt;, but the changelog was too large for a point release). The underlying goal is to get ready for  0.3.0; svn trunk is changing so rapidly these days that it is difficult to isolate the simple ones and make them into a 0.2.x release. On the other hand, the changes are too major to be put into a 0.2.x release (they would also need extensive real life testing). &lt;br&gt;&lt;br&gt;Recently I moved beagle to use &lt;a href="http://www.taglib-sharp.com/"&gt;taglib-sharp&lt;/a&gt; for filtering music files from &lt;a href="http://entagged.sourceforge.net/"&gt;entagged-sharp&lt;/a&gt;. I was told entagged is no more actively maintained and taglib is definitely seeing a lot of rapid development. My timing was not quite right, the 4th March news &amp;quot;Entagged is unmaintained&amp;quot; is followed by the 28th March news &amp;quot;Entagged is maintained&amp;quot;. I came to know about it only after I made the transition. Too late! On the plus side, taglib# has support for larger number of formats and is being used by Muine and Banshee, so expect sharing of taglib-sharp libraries. Unfortunately, there are no taglib-sharp packages out there yet (there is a proposal for a debian package), so all the mono apps are currently including taglib-sharp by its source. We too initially source included it, then removed it and instead linked against the package. But if there are no packages for the major distributions, it might make sense to source include it; compiling Beagle is pretty demanding anyway. &lt;br&gt;&lt;br&gt;In other news, I used the extremely handy &lt;a href="http://www.mono-project.com/HeapShot"&gt;heap-shot&lt;/a&gt; to identify that instances of IndexReader were not being GC-ed even long after the corresponding method ended. Explicitly setting them to null immediately freed them. I suspect some thread local storage magic happening behind my back. Note to self, set IndexReaders to null immediately after they are closed. Did I say heap-shot is amazing ?! &lt;br&gt;&lt;br&gt;There are several more improvements to the speed and memory performance of IndexHelper and BuildIndex. One notable feature I added was to reduce re-indexing of files which could not be filtered before. Due to the inherent distributed nature of beagle indexing, the crawler is always separated from the indexer. So if the crawler finds some file which was not filtered before, it has to re-submit it to the indexer. Who knows! There might be a suitable filter now. The downside was that a lot of files were being repeatedly re-tried by the indexer, slowing down the whole process. I decided to store the files containing the filters and their last modified times in a  filterver.dat (akin to mozilla pluginreg.dat) and if the filters were not changed since last run, assume that there is no newer filter. Fair guess I would say.&lt;br&gt;&lt;br&gt;Beagle knew how to index email attachments for quite some time; some months ago it also got the ability to index archives. However all along this was done by extracting the included files to a temporary file and then indexing it. This was done primarily because of the way included content (aka child indexables) were handled and also due to the fact that some of the filters only worked on physical files and not streams. This whole temporary file business never pleased me, there were race conditions which could leave undeleted temporary files in the system, even small included files had to be written to disk and further, extracting the contents of an archive to index it defeated the whole purpose of archiving it. Last week, I added the infrastructure to allow indexing of archives and email attachments without extracting them, if the filter permits of course. The infrastrusture is there, the archive and email filters should be modified to take advantage of this. &lt;br&gt;&lt;br&gt;Finally, one feature I personally would like to see in 0.3 is support for &lt;a href="http://beagle-project.org/XMP_Sidecar"&gt;XMP sidecars&lt;/a&gt;. XMP sidecars allow users to add a separate file.ext.xmp file containing arbitrary metadata (but in the XMP format) about  file.ext. Really extensible solution for metadata. The main part of the code is in svn trunk; it still does not support renaming or deleting xmp files. Hopefully it will be finished in time.&lt;br&gt;&lt;br&gt;This will probably be my last post before my annual break to the land of mangoes (&amp;quot; &lt;a href="http://en.wikipedia.org/wiki/Mango"&gt;fruit of the gods&lt;/a&gt;&amp;quot;). Sadly, I have (knowingly) only tasted about a dozen varieties of mangoes, out of over 300. I will definitely try to increment the number this time. Next post, July. &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-5219111190486527061?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/5219111190486527061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=5219111190486527061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/5219111190486527061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/5219111190486527061'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/05/silence-of-dog.html' title='Silence of the Dog'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6082161703035236055</id><published>2007-05-03T11:58:00.000-07:00</published><updated>2007-05-03T11:57:25.970-07:00</updated><title type='text'>Upgrade to Spring</title><content type='html'>Yesterday in a fit of mind I decided to upgrade to Mandriva latest release. &lt;br&gt;The steps included &lt;br&gt;- backing up .kde, .kderc, .qt, .gtk* and .local&lt;br&gt;- logging out of kde&lt;br&gt;- setting up a mirror as a distribution source for urpmi (mandriva is offering &lt;br&gt;non-free e.g. sun-java in its free source these days, but I still need the &lt;br&gt;PLF sources for codecs, BCI enabled freetype and fontconfig and a few other &lt;br&gt;things)&lt;br&gt;- # urpmi urpmi&lt;br&gt;- # urpmi &amp;lt;bunch of&amp;gt; kernels&lt;br&gt;- # urpmi --auto-select&lt;br&gt;  and then selecting the ones I would like to upgrade from them&lt;p&gt;Soon I was running Mandriva 2007.1 Spring (Free). Yay! Its beautiful. The &lt;br&gt;Ia_ora theme and other Mandriva artwork is gorgeous. I legally own a XP cd, &lt;br&gt;from which I extensively use Verdana (for text) and Tahoma (for widgets). &lt;br&gt;They look wonderful as always with plf freetype (w/ hinting). I like to use &lt;br&gt;large fonts, enough to be readable 4 ft afar but somehow the deja or &lt;br&gt;bitstream fonts have a weird fuzziness in the curves of &amp;#39;s&amp;#39; and &amp;#39;o&amp;#39;s. I &lt;br&gt;cleared the settings of a test user account and a default new account looks &lt;br&gt;quite good (apart from the kbfx-styled mandriva menu).&lt;p&gt;KDE was upgraded to 3.5.6; I was actually using a few kde-3.5.6 packages from &lt;br&gt;cooker so there was no huge surprise. I was worried that mandriva would mess &lt;br&gt;up some of my settings when I log in for the first time as my normal user but &lt;br&gt;thankfully that did not happen. The system feels faster, konsole definitely &lt;br&gt;starts faster than before. Overall, I am extremely pleased with 2007.1; I &lt;br&gt;wish them all the best.&lt;br&gt;&lt;a href="http://wiki.mandriva.com/en/Releases/Mandriva/2007.1/Tour"&gt;http://wiki.mandriva.com/en/Releases/Mandriva/2007.1/Tour&lt;/a&gt;&lt;p&gt;Some minor annoyances:&lt;br&gt;- mandriva kernel (based on 2.6.17) still has the weird cpufreq bug where &lt;br&gt;scaling_max_freq is same as scaling_min_freq (thus rendering all the &lt;br&gt;governors useless). It is probably the same problem described in&lt;p&gt;&lt;a href="http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04484.html"&gt;http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04484.html&lt;/a&gt;&lt;br&gt;- Suspend to RAM is broken in mm kernel (Mandriva has moved to pm-utils and it &lt;br&gt;works like a charm w/ the default kernel)&lt;br&gt;- tmb kernel has some problems of high CPU usage when copying files and broken &lt;br&gt;resume from s2ram. I still need to test the other tmb versions. I really like &lt;br&gt;the tmb kernel improvements.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6082161703035236055?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6082161703035236055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6082161703035236055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6082161703035236055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6082161703035236055'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/05/upgrade-to-spring.html' title='Upgrade to Spring'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-7075379531714968464</id><published>2007-04-20T12:05:00.000-07:00</published><updated>2007-04-20T13:20:52.975-07:00</updated><title type='text'>Theory Guy...</title><content type='html'>&lt;p&gt;This is not really &lt;span style="font-style:italic"&gt;techie&lt;/span&gt; but has a somewhat tech-vs-theory war flavor. The following list came out of today's departmental Friday lunch. Top 10 &amp;quot;ways to tell a theory person from a systems person&amp;quot;:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;10. One gets job and another does not.&lt;/p&gt; &lt;p&gt;09. One likes 10000n^2 better than n^3.&lt;/p&gt; &lt;p&gt;08. Space-time is important outside Star-trek.&lt;/p&gt; &lt;p&gt;07. In therory they are same, but in practice they are not.&lt;/p&gt; &lt;p&gt;06. P is not equal to NP divided by N.&lt;/p&gt; &lt;p&gt;05. n^10 is efficient.&lt;/p&gt; &lt;p&gt;04. SAT (Famous NP complete problem also known as Satisfiability) is most of the times easy to compute.&lt;/p&gt; &lt;p&gt;03. (Specific to our department) One can be only be found across the street.&lt;/p&gt; &lt;p&gt;02. Its pronounced &amp;quot;Lee-nux&amp;quot; (not &amp;quot;Lai-nux&amp;quot;)&lt;/p&gt; &lt;p&gt;01. Computers do more than just email ?!&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-7075379531714968464?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/7075379531714968464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=7075379531714968464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7075379531714968464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/7075379531714968464'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/04/bu-vs-mit.html' title='Theory Guy...'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-3199448022432462990</id><published>2007-04-04T14:56:00.000-07:00</published><updated>2007-04-04T15:47:08.127-07:00</updated><title type='text'>TinyBeagle or a Lucene Example</title><content type='html'>Recently I read &lt;a href="http://www4.osnews.com/permalink?226455"&gt;this&lt;/a&gt; interesting comment in an OSNews article. It tried to briefly summarize what beagle is. I take users' comments very seriously and this person seem to know some internal of beagle, so I thought maybe he is true (modulo some factual errors). Maybe the only new thing in beagle is the crawler, the GUI and the scheduler; its mostly little C# glue code tying up a few third party apps.&lt;br /&gt;&lt;br /&gt;So, I wrote down a small Lucene.Net based &lt;a href="http://cs-people.bu.edu/dbera/blogdata/LuceneLocate.cs"&gt;file indexer and query program&lt;/a&gt;. You index by&lt;br /&gt;&lt;tt&gt;mono LuceneLocate.exe /path/to/index/dir index /directory/to/index&lt;/tt&gt;&lt;br /&gt;and query by&lt;br /&gt;&lt;tt&gt;mono LuceneLocate.exe /path/to/index/dir query query_term&lt;/tt&gt;&lt;br /&gt;Pretty simple program, 85 lines of actual code. Incredibly fast performance. Using external program ('cat') to index files in a directory (recursively), it indexes 180 files in 0.06 seconds. Query returning 44 results took 0.0015 seconds . Takes 24 MB virtual, 5.3 MB RSS-Shared. No GUI yet. I could have added a scheduler to pause for 10 seconds after every 10 files (5 more lines). This Lucene.Net based crawler and indexer beats beagle in performance but nowhere close to beagle.&lt;br /&gt;&lt;br /&gt;Maybe beagle is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; a lucene-powered locate. After all, to err is human.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-3199448022432462990?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/3199448022432462990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=3199448022432462990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3199448022432462990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3199448022432462990'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/04/tinybeagle-or-lucene-example.html' title='TinyBeagle or a Lucene Example'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8909317509910439705</id><published>2007-03-01T13:23:00.000-08:00</published><updated>2007-03-01T13:32:56.789-08:00</updated><title type='text'>And PLTC means ...</title><content type='html'>I just now saw the &lt;a href="http://www.doolwind.com/index.php?page=11"&gt;programmer's personality test&lt;/a&gt; webpage in Digg and decided to give it a curious shot. And ... my programmer personality type is &lt;a href="http://www.doolwind.com/programmertype.php?page=14"&gt;&lt;span style="font-weight: bold;"&gt;PLTC&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(Update: The link to my personality doesn't work. I thought they have one static page for each possible combination. I am probably wrong, let me add the full text here)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;You're a &lt;span style="font-size:180%;"&gt;P&lt;/span&gt;lanner.&lt;/b&gt;&lt;br /&gt;          You may be slow, but you'll usually find the best solution. If something's worth            doing, it's worth doing right.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;You like coding at a &lt;span style="font-size:180%;"&gt;L&lt;/span&gt;ow level.&lt;/b&gt;&lt;br /&gt;          You're from the old school of programming and believe that you should have an            intimate relationship with the computer. You don't mind juggling registers            around and spending hours getting a 5% performance increase in an algorithm.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;You work best in a &lt;span style="font-size:180%;"&gt;T&lt;/span&gt;eam.&lt;/b&gt;&lt;br /&gt;          A good group is better than the sum of it's parts. The only thing better than a            genius programmer is a cohesive group of genius programmers.&lt;br /&gt;&lt;br /&gt;This one I like the best.&lt;br /&gt;&lt;b&gt;You are a &lt;span style="font-size:180%;"&gt;C&lt;/span&gt;onservative programmer.&lt;/b&gt;&lt;br /&gt;          The less code you write, the less chance there is of it containing a bug. You            write short and to the point code that gets the job done efficiently.&lt;br /&gt;&lt;br /&gt;OMG. That's totally like me. Or whatever!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8909317509910439705?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8909317509910439705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8909317509910439705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8909317509910439705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8909317509910439705'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/03/and-pltc-means.html' title='And PLTC means ...'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-3582989642104181843</id><published>2007-02-19T19:11:00.000-08:00</published><updated>2007-02-19T19:16:19.024-08:00</updated><title type='text'>kBeagleBar is alive!</title><content type='html'>I did not guess that people still use &lt;a href="http://kde-apps.org/content/show.php?content=35781"&gt;kBeagleBar,&lt;/a&gt; there are packages built for it and there was even an &lt;a href="https://www.linux-magazine.com/issue/70/KTools_Beagle_Helpers.pdf"&gt;article&lt;/a&gt; about it and other KDE beagle search tools. Nice!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-3582989642104181843?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/3582989642104181843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=3582989642104181843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3582989642104181843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3582989642104181843'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/02/kbeaglebar-is-alive.html' title='kBeagleBar is alive!'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-3508359827034684995</id><published>2007-02-19T09:20:00.000-08:00</published><updated>2007-02-19T09:29:57.516-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application'/><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='interface design'/><title type='text'>Faceless Bugs and Advanced Users</title><content type='html'>These are really two very different topics but they came to my mind while reading about Linus' &lt;a href="http://lists.linux-foundation.org/pipermail/desktop_architects/2007-February/001129.html"&gt;Gnome patches&lt;/a&gt; and &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=408898"&gt;bugs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The first is about creating a new account when I need to report a bug or submit a patch for some software. Most of the projects prefer attaching to bugzilla or they send it to their member only mailing list. I am extremely reluctant to create new accounts, so I have created bugzilla and mailing list accounts for KDE and Gnome. That covers a lot of ground. But still now and then I face a need to send something to somewhere else and bam! Sign up for an account sir! There is definitely merit in this approach, since otherwise bugzilla and mailing lists would be flooded with spam. But it definitely keeps me from submitting patches or commenting on something due my lack of interest in new accounts. Last week, a &lt;a href="http://cs-people.bu.edu/paithan/"&gt;friend&lt;/a&gt; of mine (the &lt;a href="http://www.colby.edu/news_events/calendar/eventview.cfm?rID=46829&amp;bID=433814"&gt;inventor&lt;/a&gt; of Sperner's Game) was trying to install Kubuntu in his brand new Lenovo T60 when he spotted some typos in the installation windows. He was ready and willing to file a bug in Kubuntu and was told to create a new account for kubuntu bugzilla. As always, he was supposed to get a confirmation email.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The email came 12 hours later and I do not know if the bug was ever filed! Even if the email was prompt, the desire to report a bug has to be high enough to cross these technical potential barriers. *sigh*&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This week I made extensive addition to &lt;a href="http://beagle-project.org/Searching_Data"&gt;beagle query syntax&lt;/a&gt;. There is an open bug in bugzilla asking for a visual way to add these advanced query expressions in beagle-search. I was thinking how best to achieve that; it is not easy to capture the power of beagle query expressions in a gui. I found the answer while reading some posts in desktop-architect mailing list about Linus' patch. There is nothing like an expert user or a novice user. Users always try to act as if they are smart and take the path of the expert user. Presenting different set of options for these different class of users does not work in practice.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In a similar style, there is no need for a GUI for advanced query expressions. Novice users i.e. users who will simply enter search terms will never know what a full boolean query expression does (with those OR and excluded expressions). On the other hand, expert users who know how to deal with the boolean expressions, the different keywords to do property search and other advanced syntax can anyway write it by hand. In fact, it is much easier for them to write it by hand than to do it visually. In this matter, I like the approach taken by&lt;br /&gt;&lt;a href="http://www.google.com/advanced_search?hl=en"&gt;Google&lt;/a&gt;. I think I will push towards a simpler advanced search UI for beagle-search and Kerry, some simple choices like choosing type of file, extension, date range etc. Write the query by hand if you need that extra ounce.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-3508359827034684995?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/3508359827034684995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=3508359827034684995' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3508359827034684995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3508359827034684995'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/02/faceless-bugs-and-advanced-users.html' title='Faceless Bugs and Advanced Users'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-8359667234085396168</id><published>2007-02-11T19:02:00.000-08:00</published><updated>2007-02-11T21:10:35.282-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='indexing'/><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop search'/><title type='text'>beagle memory usage</title><content type='html'>Setup: Fresh run of beagled with only the kmail backend. IndexInfo report  about 13700 items i.e. mails and indexed attachments. Beagle version is post 0.2.16, so that includes the individual items in the archive attachments as well. I started beagled as exercise_the_dog, indexing finished within an hour and this is the state after indexing is over.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;VIRT      RES   SHR     COMMAND&lt;br /&gt;--------+------+------+--------------------&lt;br /&gt;167m    55m  11m     mozilla-firefox&lt;br /&gt;248m    29m  2856    X&lt;br /&gt;137m    20m  15m     amarokapp&lt;br /&gt;72812   19m  6884    beagled-helper&lt;br /&gt;89560   18m  13m     kmail&lt;br /&gt;35816   15m  11m     konsole&lt;br /&gt;42780   15m  14m     konqueror&lt;br /&gt;49088   12m  5860    beagled&lt;br /&gt;40320   11m  9524    kdesktop&lt;br /&gt;42004   11m  9.9m    basket&lt;br /&gt;32620   10m  9588    kmix&lt;br /&gt;43896   9252 6220    kicker&lt;br /&gt;37904   5884 3908    kded&lt;br /&gt;34560   5600 2680    net_applet&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Remember the rule: an approximate idea of the memory usage is given by RES-SHR.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-8359667234085396168?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/8359667234085396168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=8359667234085396168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8359667234085396168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/8359667234085396168'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/02/beagle-memory-usage.html' title='beagle memory usage'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6560853481909356310</id><published>2007-02-08T05:27:00.001-08:00</published><updated>2007-02-08T05:49:54.821-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='indexing'/><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='index'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop search'/><title type='text'>beagle:Eat less, talk less be smart</title><content type='html'>&lt;p&gt;Yesterday, &lt;a href="http://article.gmane.org/gmane.comp.gnome.dashboard.devel/4467"&gt;beagle 0.2.16&lt;/a&gt; was released. A couple of weeks back, we released &lt;a href="http://article.gmane.org/gmane.comp.gnome.dashboard.devel/4416"&gt; 0.2.15&lt;/a&gt; but I did not write about it. 0.2.15 came with a lot of performance and memory improvements, new backends, new features, &lt;a href="http://article.gmane.org/gmane.comp.gnome.dashboard.devel/4417"&gt;lots of important changes &lt;/a&gt;. In the process, it also broke a few things. Those were fixed and 0.2.16 is a purely bugfix release for 0.2.15. I am considering 0.2.16 the best ever beagle release. Incidentally, 0.2.13+ releases somehow or the other had some nasty problems.&lt;br /&gt;&lt;br /&gt;Combining 0.2.15 and 0.2.16, these are the major improvements:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;* Very important, the looping bug is fixed. I would even like to claim, fixed forever. I happened to find some important clue while scanning the logs and other information provided by some of our very friendly and helpful users. Eventually our 3 year old database schema was found to be incorrect. Joe finally &lt;a href="http://joeshaw.org/2007/02/07/457/trackback/"&gt;cleared the mess&lt;/a&gt;. Thanks Brian and Rick! This also means an end to the "log file filling hard disk" or "beagle indexing even after a week" type problems.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;* Beagle uses some external tools to filter files e.g. pdfinfo, pdftotext, mplayer yada yada. These programs are well written and almost always work. Except some very malformed or wrongly detected mimetype file is sent to them and they go berseck taking up insane amout of memory or CPU time. Since the early release, we used to maintain that there is no way we can control the external processes. After all, we just use 'em. Joe finally put an end to that excuse by using some smart &lt;a href="http://linux.about.com/library/cmd/blcmdl2_setrlimit.htm"&gt;rlimit&lt;/a&gt; tricks to limit the resources used by these external processes. We still cannot control how mplayer might behave if given an word doc file, but if it behaves badly it will be killed before too long.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;* Indexing data is a &lt;span style=""&gt;strenuous job. Think about all those heavy applications which process or generate these&lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;files. But people want indexing to be as silent as possible. There are frequently recommendations that beagle should use high nice, low system priority. low IO priority etc means to be as unobtrusive as possible. The fact is, beagle already does that. However, now we even go one more step by using &lt;a href="http://www.die.net/doc/linux/man/man2/sched_setscheduler.2.html"&gt;SCHED_BATCH scheduler policy&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are other side improvements too, RTF filter is new. The current one is based on the legendary &lt;a href="http://www.ctan.org/tex-archive/support/RTF-1_06a1/"&gt; RTF parser by Paul Dubois&lt;/a&gt;. Image filters are almost new; we now have Konversation (KDE IRC client) and KOrganizer (KDE tasks and eve nts scheduler) backends. By the way, soon after 0.2.16 was released, Opera webhistory backend was &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2007-February/msg00027.html"&gt;added to trunk&lt;/a&gt;. You can just drop the binary from &lt;a href="http://cs-people.bu.edu/dbera/blogdata/Opera.dll"&gt; here&lt;/a&gt; into your 0.2.16 /usr/lib/beagle/Backends folder and start using it, err... trying it. I do not know how complete it is.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I would like to end by thanking the excellent user base that beagle has developed. Without them, it would not be possible to fix a whole lot of these problems. Beagle would not be what it is today without them.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6560853481909356310?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6560853481909356310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6560853481909356310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6560853481909356310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6560853481909356310'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/02/beagleeat-less-talk-less-be-smart.html' title='beagle:Eat less, talk less be smart'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-6827523622447319356</id><published>2007-01-11T15:17:00.000-08:00</published><updated>2007-01-11T15:33:42.663-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application'/><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><category scheme='http://www.blogger.com/atom/ns#' term='tech tips'/><title type='text'>Seekable LineReader</title><content type='html'>Recently I need a way in StreamReader to get the position of a line which can be stored and later skip to that line directly. C# StreamReader API does not have any way of doing this, except calling Read() repeatedly and then doing the processing yourself. Which is clumsy. Note that, StreamReader.BaseStream.Position might be wrong due to underlying bufferring. I thought this should be a fairly common requirement and indeed, many people have same question on google groups or other forums. No good answer though. One reason is, such a thing does not really make sense for arbitrary Streams, since it might not be possible to seek in them.&lt;br /&gt;&lt;br /&gt;I needed such a thing desparately, so I created an interface:&lt;br /&gt;&lt;pre&gt;namespace System.IO {&lt;br /&gt;&lt;br /&gt; // A linereader interface&lt;br /&gt; public interface LineReader {&lt;br /&gt;&lt;br /&gt;   // Returns a position marker, which can be used to navigate the lines.&lt;br /&gt;   // Some implementations may only allow moving in the forward direction.&lt;br /&gt;   // Might be different from line number or file offset.&lt;br /&gt;   // Should only be used for traversal.&lt;br /&gt;   long Position {&lt;br /&gt;     get;&lt;br /&gt;     set;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Reads and returns the next line, null if EOF&lt;br /&gt;   string ReadLine ();&lt;br /&gt;&lt;br /&gt;   // Reads the next line and returns a stringbuilder containing the line&lt;br /&gt;   // The StringBuilder returned could be the same one used while reading,&lt;br /&gt;   // so it should not be modified and its content might change when readline&lt;br /&gt;   // is next called.&lt;br /&gt;   // This is the most worst horriblest API I ever designed, for sake of speed&lt;br /&gt;   // And thats why this should not be a public API.&lt;br /&gt;   StringBuilder ReadLineAsStringBuilder ();&lt;br /&gt;&lt;br /&gt;   // Skips the next line, return true if successful&lt;br /&gt;   bool SkipLine ();&lt;br /&gt;&lt;br /&gt;   // Skips required number of lines; returns actual number of lines skipped&lt;br /&gt;   long SkipLines (long n);&lt;br /&gt;&lt;br /&gt;   // Close the reader&lt;br /&gt;   void Close ();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Beagle source &lt;a href="http://svn.gnome.org/viewcvs/*checkout*/beagle/branches/beagle-cutting-edge-branch/Util/LineReader.cs"&gt;contains&lt;/a&gt; the interface and several implementations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-6827523622447319356?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/6827523622447319356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=6827523622447319356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6827523622447319356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/6827523622447319356'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2007/01/seekable-linereader.html' title='Seekable LineReader'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2917081893224704131</id><published>2006-12-31T14:32:00.001-08:00</published><updated>2007-01-04T05:09:34.823-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><title type='text'>Fasten your seatbelts; we are ready to ship</title><content type='html'>There was a &lt;a href="http://www.mail-archive.com/dashboard-hackers@gnome.org/msg02704.html"&gt;discussion&lt;/a&gt; going on in beagle mailing list sometime ago where I made a comment that &lt;span style="font-style: italic;"&gt;I dont think beagle is newbie ready  i.e. plug-and-play yet.&lt;/span&gt; Beagle fans did not understand my comment and people replied why they think I am wrong. I would be glad to be proved wrong; but all of their arguments were how they were using beagle since version x.y, how beagle was shipped and enabled by default since last z releases of some distribution and how someone is able to install beagle in a large enterprise. Duh! None of these prove that beagle is &lt;span style="font-style: italic;"&gt;newbie ready&lt;/span&gt;. All they do is show that beagle works and even I know that. 0/100.&lt;br /&gt;&lt;br /&gt;I have the feeling that some of the beagle devs and followers live in the garden of Eden surrounded by a high wall of reality. Sometimes they should go out in the streets, check the bugzilla of other distros, go through user blogs (which mostly contain complaints about how beagle does not work and how to disable it), and visit some user forums where a lot of questions are how to disable beagle from starting at startup. These are laborious jobs and not pleasing. A lot of them contain flames and invalid reasons. But almost always they are started by someone who found beagle causing trouble.&lt;br /&gt;&lt;br /&gt;Here are some links which can make your task easy:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="https://bugs.launchpad.net/distros/ubuntu/+source/beagle/+bugs"&gt;Ubuntu beagle bugs&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="https://bugzilla.novell.com/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;classification=openSUSE&amp;amp;product=openSUSE+10.2&amp;product=openSUSE+10.3&amp;amp;long_desc_type=substring&amp;long_desc=beagle&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=&amp;keywords_type=anywords&amp;amp;keywords=&amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;bug_status=NEEDINFO&amp;amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;emailassigned_to2=1&amp;amp;amp;emailreporter2=1&amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;emailtype2=substring&amp;amp;amp;email2=&amp;bugidtype=include&amp;amp;bug_id=&amp;votes=&amp;amp;amp;chfieldfrom=&amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time&amp;amp;field0-0-0=noop&amp;type0-0-0=noop&amp;amp;value0-0-0="&gt; OpenSUSE beagle bugs&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="https://bugzilla.redhat.com/bugzilla/buglist.cgi?component=beagle&amp;product=Fedora%2520Core"&gt;Fedora Core beagle bugs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;update &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://bugs.gentoo.org/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;amp;short_desc=beagle&amp;long_desc_type=substring&amp;amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;amp;status_whiteboard=&amp;keywords_type=allwords&amp;amp;keywords=&amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;email1=&amp;amp;emailassigned_to2=1&amp;emailreporter2=1&amp;amp;emailcc2=1&amp;emailtype2=substring&amp;amp;email2=&amp;bugidtype=include&amp;amp;bug_id=&amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;chfieldvalue=&amp;amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;amp;field0-0-0=noop&amp;type0-0-0=noop&amp;amp;value0-0-0="&gt;&lt;span style="font-size:100%;"&gt;Gentoo beagle bugs&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;  &lt;/li&gt;  &lt;/ul&gt; I sometimes make the rounds and all I see are &lt;span style="font-style: italic;"&gt;I make a point of uninstalling beagle on all my machines&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;The first thing I did after ... was to uninstall beagle and now my machine is happy. &lt;/span&gt; Silly men, how can they not like the doggy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2917081893224704131?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2917081893224704131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2917081893224704131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2917081893224704131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2917081893224704131'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/12/fasten-your-seatbelts-we-are-ready-to.html' title='Fasten your seatbelts; we are ready to ship'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-2764780183603008115</id><published>2006-12-30T19:49:00.001-08:00</published><updated>2006-12-30T19:49:10.209-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><title type='text'>Subversion arrives. Finally!</title><content type='html'>KDE uses SVN for their source code management. GNOME used to use CVS till yesterday, which means beagle too was managed with CVS. I do not know the technical details. but time a again we did face technical problems with CVS. I was mostly told that life would be easier with SVN and lo behold! GNOME has &lt;a href="http://live.gnome.org/SubversionMigration"&gt;switched&lt;/a&gt; to Subversion as its SCM (actually, still switching).&lt;br&gt; &lt;br&gt; The last time this was tried by the awesome GNOME guys, they later found a glitch and had to cancel the migration. As a result I lost a commit that I made within hours of SVN migration. This time I will play safe and watch it for a few days before committing anything. If everything works out, life should be easier. Joe already &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2006-December/msg00147.html"&gt;cleaned up&lt;/a&gt; quite a bit of the unused files and directories, renamed the Evo-mail backend correctly and updated the links et al. A New Year with a clean, new repo. Sweet.&lt;br&gt; &lt;br&gt; PS: There is one downside though. Joe (and others too) would like to use the &lt;a href="http://joeshaw.org/2006/12/30/444"&gt;SVN commit messages&lt;/a&gt; for creating Changelog files during creating a tarball. Which basically means others cannot observe the Changelog file between releases to figure out what was changed (neither I nor Joe updated the Changelog while committing, so this is a lame excuse). The real trouble is now I cannot write any lame jokes in my commit messages. Life would be serious now. Boo hoo.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-2764780183603008115?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/2764780183603008115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=2764780183603008115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2764780183603008115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/2764780183603008115'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/12/subversion-arrives-finally.html' title='Subversion arrives. Finally!'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-3012734424876210704</id><published>2006-12-17T15:13:00.001-08:00</published><updated>2006-12-18T05:47:00.975-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><title type='text'>My time with the doggie</title><content type='html'>Today I read about the Ohloh project (&lt;a href="http://ohloh.net/"&gt;http://ohloh.net&lt;/a&gt;) and added my favourite project beagle (&lt;a href="http://beagle-project.org/"&gt;http://beagle-project.org&lt;/a&gt;) to it. I was curious what it actually does.&lt;p&gt;It took them nearly 4 hours to download and analyze the source code. But it was worth the wait. It showed some interesting statistics, like 122,885 LOC codebase, 82 direct contributors (committing in CVS) and 13 of them in last 12 months.&lt;/p&gt;&lt;p&gt;Just for a light comparison, Firefox has a codebase of 157,207 LOC, Amarok has 169,288 LOC and (take this) PHP 6.0 has 599,805 LOC.&lt;/p&gt;&lt;p&gt;It was also amusing to see my share in the project: &lt;a href="http://ohloh.net/projects/3826/contributors/21154"&gt;http://ohloh.net/projects/3826/contributors/21154&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-3012734424876210704?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/3012734424876210704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=3012734424876210704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3012734424876210704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/3012734424876210704'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/12/my-time-with-doggie.html' title='My time with the doggie'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-4188049747538752884</id><published>2006-12-14T15:06:00.000-08:00</published><updated>2006-12-14T15:07:01.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beagle'/><title type='text'>beagle 0.2.14</title><content type='html'>Joe &lt;a href="http://mail.gnome.org/archives/dashboard-hackers/2006-December/msg00109.html"&gt;announced&lt;/a&gt; the release of beagle 0.1.4 few hours ago. Its a fascinating and shining new release containing exciting new features, lots of memory/speed optimizations and many bug-fixes as well. Here are the major ones which are readily visible:&lt;br&gt; &lt;ul&gt;   &lt;li&gt;Indexes tar, gzipped-tar, bzipped-tar, gzipped and bzipped files, in the filesystem as well as in email attachments. The results show you the exact file in the archive that matched the query.&lt;br&gt;   &lt;/li&gt;   &lt;li&gt;Do some smart tokenizing to allow matching 001234 to a query of 1234 and better matching of file names. No more missing files.&lt;/li&gt;   &lt;li&gt;Beagle can find and extract data itself using its dozen or more &lt;span style="font-style: italic;"&gt;backends&lt;/span&gt;. But sometimes its better for other applications to send data to beagle for indexing. Beagle had the infrastructure to act as a search/indexing service provider. The release contains an example C code to show how to do that; its pretty simple actually. Obviously python can also be used.&lt;/li&gt;   &lt;li&gt;Some cool signal mechanism which help to figure out what file in being currently indexed and for how long. This will be helpful if you feel beagle is taking ages to index some file.&lt;/li&gt;   &lt;li&gt;Use Xdg autostart mechanism to auto-start beagle. KDE4 will also implement xdg autostart mechanism. One more step towards being DE agonistic.&lt;/li&gt;   &lt;li&gt;The indexing information now explicitly mentions if the initial indexing is in progress. Also clients now have the option of being notified when the initial indexing ends.&lt;/li&gt;   &lt;li&gt;Lots of memory fixes. &lt;span style="font-weight: bold;"&gt;bhale&lt;/span&gt; just mentioned in the irc channel &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;holy crap, startup RSS for beagled is 15m...  &lt;/span&gt;beagled is below nautilus in mem usage...&amp;nbsp; im not believing my eyes :)&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt; Thank you for your myth on how beagle is a bloatware.&lt;/li&gt;   &lt;li&gt;API and beage-search support to know the &lt;span style="font-style: italic;"&gt;total&lt;/span&gt; number of documents that matched any query. Not the superficial imposed limit of 100 documents.&lt;/li&gt; &lt;/ul&gt; Go, get it!&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-4188049747538752884?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/4188049747538752884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=4188049747538752884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4188049747538752884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/4188049747538752884'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/12/beagle-0214.html' title='beagle 0.2.14'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-580443550967805643</id><published>2006-12-03T14:12:00.001-08:00</published><updated>2006-12-03T14:12:28.825-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='license'/><title type='text'>License to hack-debug-release</title><content type='html'>&lt;p&gt;I start with the disclaimer that I am not a lawyer. I am also not very careful in reading the EULAs (End User License Agreement - a short acronym of a long term usually describing an even longer gibberish english text). When I release my first piece code (was it JBabel or mGet ?), I put them in GPL (possibly v1). Of course I didnot know what was I doing - I was merely completing a formality during the fascinating experience of sharing one's program. With time, and during development of Beagle, I came to know about the various licenses. It was about this time that the GPLv3 debate started. Also, I started releasing verious kde-beagle softwares which required me to figure out the correct licenses for them.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Liceneses, I feel, serve two purpose, demand credit where its due and specify the amount of responsibility.&lt;/p&gt; &lt;p&gt;Authors of some projects just want to release code without claiming any credit. I did so too. Only to be pointed out by someone that I have to actually specify the terms for others to use my code. Since I dont want to be credit for the code, its natural not to held responsible for its damages either. That needs to be specified too. One can either cook up one's own license or just pick one from the sea of licenses (http://www.opensource.org/licenses/) . The license I found to do just that is the MIT license.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-weight:600"&gt;MIT (X11) License: &lt;/span&gt;&lt;span style="text-decoration:underline"&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, ...&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;The license is itself not copyrighted, so it can be modified if needed. A rather free-to-do license, except for this clause following the above text&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="text-decoration:underline"&gt;... subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Wikipedia tells me that the latter part is necessary for the copyright laws of US and other countries. The credit part is followed by the author responsibility part &lt;/p&gt; &lt;p&gt;&lt;span style="text-decoration:underline"&gt;THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT...&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Often, people use this clause to explicitly deny responsibility &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="text-decoration:underline"&gt;Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;I havent seen projects where the last clause wasnt present, so I assume it is not a necessary clause. I didnot use it myself when I released yaBi under MIT license. The core parts of Beagle and Mono are released under this license.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;My other project, kBeagleBar uses the fancy LGPLv2. I had to use LGPLv2 because I was using some source code from kde libraries. Note that, LGPL allowed me to use the library without any restriction, but I copied some code from a library source file - so I had to use LGPL. Similarly, I release kontrol as (distributed as a part of kbeaglebar) which uses the code from GPLed kerry, so its under GPL too. Also GPL and LGPL are copyrighted by FSF. But then again, I wouldnt dare to modify them myself.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;I am looking forward to GPLv3. No, not because I have any particular reason to like it. Because I hope to read it fully, understand it and read the various articles and blogs about it to understand the issues of free software licensing. Its always good to know where my rights end and start.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Even after all this, it will take me some more years to actually read EULAs. They are frightfully convoluted to confuse my little grey cells.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-580443550967805643?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/580443550967805643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=580443550967805643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/580443550967805643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/580443550967805643'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/12/license-to-hack-debug-release.html' title='License to hack-debug-release'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-711946705569473179</id><published>2006-11-26T09:03:00.001-08:00</published><updated>2006-12-18T05:47:49.332-08:00</updated><title type='text'>Bigger than life icon</title><content type='html'>Icons are small pieces of art I encounter in my everyday life. They are like&lt;br /&gt;apparels, you see them in all forms in every moment of life. They serve&lt;br /&gt;different purpose, keep you warm, keep you cool, keep you comfortable&lt;br /&gt;whatever but all them try to look good (some even make it their prime&lt;br /&gt;agenda). In human-computer interaction, icons are large, easy targets that&lt;br /&gt;serve as better visual cues than textual messages that needs to be parsed and&lt;br /&gt;pattern matched. A good icon make that experience fun and enjoying.&lt;p&gt;I started with the the usual KDE crystal icon theme, and then tried different&lt;br /&gt;icon sets. The tango icon theme is good, but like the usual gnome colours,&lt;br /&gt;they have a very low-saturated colours which look a bit drab and boring on my&lt;br /&gt;desktop. I am not looking forward to extremely gorgeous, highly saturated and&lt;br /&gt;colourful icons; my desktop is not a colour palette, but the art forms I will&lt;br /&gt;stare at a million times over months better be pleasant to look at. kde-looks&lt;br /&gt;has quite a few icon theme, and a lot of them are mixed icon theme. For a&lt;br /&gt;while, I tried KDE Crystal Diamond icons. It has good icons, except some of&lt;br /&gt;the icons are very light coloured, white based and its hard to make out the&lt;br /&gt;icon contents. Most of the filetype icons and the media-play (amarok)&lt;br /&gt;play/pause icons are like that.&lt;/p&gt;&lt;p&gt;I have heard a lot about Oxygen icons; unfortunately their license does not&lt;br /&gt;allow anyone to package them. Of course, I could download the svg icons&lt;br /&gt;directly from their svn and convert them to an icon theme locally. I need to&lt;br /&gt;install inkscape for that. Interesting enough, I found a forum post in&lt;br /&gt;sabayonlinux about using oxygen icons in current kde desktop. The user gives&lt;br /&gt;out the details of how to make an icon theme and later even provides a tar.gz&lt;br /&gt;package to install oxygen icons. Oxygen is work in progress, so that user&lt;br /&gt;replaced the missing icons by other icons. I think he violated their license&lt;br /&gt;but I have to double check. Anyway, I installed that icon them and its really&lt;br /&gt;good. Attention has been paid to every detail. Icons are 3d and 2d exactly&lt;br /&gt;according to their need, those that look good with shadows have them, the&lt;br /&gt;colours look just ok. All in all, I am pretty satisfied. I am looking forward&lt;br /&gt;to manually checking out the oxygen icons and making a theme out of it. That&lt;br /&gt;way, I will get the icons from oxygen as they are checked in. Good work,&lt;br /&gt;guys.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-711946705569473179?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/711946705569473179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=711946705569473179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/711946705569473179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/711946705569473179'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/11/bigger-than-life-icon.html' title='Bigger than life icon'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-115907862422791598</id><published>2006-09-23T23:07:00.000-07:00</published><updated>2006-09-23T23:21:31.823-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application'/><title type='text'>Mono.FUSE Filesystem for Digikam Tags</title><content type='html'>&lt;a href="http://fuse.sourceforge.net/"&gt;FUSE&lt;/a&gt; is cool anyway. And writing FUSE filesystems in C# is even cooler. Adjectives aside, I wrote a &lt;a href="http://cs-people.bu.edu/dbera/blogdata/FUSE-DigikamFS.zip"&gt;FUSE-DigikamFS filesystem&lt;/a&gt; for browsing &lt;a href="http://digikam.org"&gt;Digikam&lt;/a&gt; tags. Its much easier to browse the images organized by tags using konqueror or kuickshow. This way I can also share the tags mount-point by kpf (or some other HTTP server) allowing others to browse my images arranged by both folders (Albums) and tags.&lt;br /&gt;&lt;br /&gt;A sample session,&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[debajyoti@dbera Tags]$ pwd&lt;br /&gt;/home/debajyoti/Tags&lt;br /&gt;[debajyoti@dbera Tags]$ ls&lt;br /&gt;Artistic/  Favourites/  Fireworks/  Food/&lt;br /&gt;Nature/  People/  Places/  QuickCheck/  Season/&lt;br /&gt;[debajyoti@dbera Tags]$ ls Artistic/&lt;br /&gt;Black-White/  Mood/  Motion/  pa020099.jpg@&lt;br /&gt;pa020102.jpg@  Perspective/  Shadow/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you see, I use symlinks to overlay the images from tag filesystem. Works pretty cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-115907862422791598?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/115907862422791598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=115907862422791598' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/115907862422791598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/115907862422791598'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/09/monofuse-filesystem-for-digikam-tags.html' title='Mono.FUSE Filesystem for Digikam Tags'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31589523.post-115376830725515949</id><published>2006-07-24T12:04:00.000-07:00</published><updated>2006-12-18T05:49:56.146-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tech tips'/><title type='text'>Ed-ed</title><content type='html'>Who knew that 'vi' was based on the legendary editor 'ed'. Or, &lt;a href="http://cm.bell-labs.com/cm/cs/who/dmr/qed.html"&gt;inspired by&lt;/a&gt;. Being a die-hard vi-fanboy, it took me no time to get used to ed, at least being able to compose/edit/save simple documents. An &lt;a href="http://www.bath.ac.uk/bucs/docs/ub-4-1.shtml#sub25"&gt;ed-documentation page at BUCS&lt;/a&gt; provided me with a quick howto listing (all) the important commands. Actually, all the commands, since there are only a few of them. Unlike vi, where you have to know thousands of commands. Its wonderful how much simpler life becomes if we focus on functionality alone without caring for presentation.&lt;br /&gt;If you are comfortable with vi (or even with vim or with gvim but dont use the menu too much), I suggest you to give ed a try. You'll love it.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;(From the documentation page) An ed-quickcard:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;All the standard ed commands are listed below, together with a brief description of their function. Those commands which may be given with line addresses are shown with the default values of the addresses in the first column. For example, 1,$ for w means that the write command may be given with one or two line addresses to specify a particular line or a range of lines to be written to a file, and that if no address is given the default address is 1,$ (ie, all the lines in the buffer are written out). The default address . represents the current line and $ represents the last line in the buffer.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;The Input Commands&lt;br /&gt;&lt;br /&gt;Default Address  Command  Function&lt;br /&gt;.                a text   Append input text after addressed&lt;br /&gt;                        line.The last line input becomes the&lt;br /&gt;                        current line.&lt;br /&gt;.,.              c text   Replace addressed lines with input&lt;br /&gt;                        text. The last line input becomes the&lt;br /&gt;                        current line.&lt;br /&gt;.                i text   Insert input text before the addressed&lt;br /&gt;                        line. The last line input becomes the&lt;br /&gt;                        current line.&lt;br /&gt;&lt;br /&gt;The Edit Commands&lt;br /&gt;&lt;br /&gt;Default Address   Command   Function&lt;br /&gt;.,.               d         Delete the addressed lines from&lt;br /&gt;                          the buffer. The line after the&lt;br /&gt;                          last deleted line becomes the&lt;br /&gt;                          current line.&lt;br /&gt;                e file    Delete the buffer contents then&lt;br /&gt;                          read file into the buffer. The&lt;br /&gt;                          last line read in becomes the&lt;br /&gt;                          current line.&lt;br /&gt;                E file    As for e but no warning is given&lt;br /&gt;                          if a modified buffer has not been&lt;br /&gt;                          written out.&lt;br /&gt;                f file    Print current remembered filename&lt;br /&gt;                          if file not specified, otherwise&lt;br /&gt;                          set it to file.&lt;br /&gt;1,$               g/R/cmds  Perform cmds on all addressed lines&lt;br /&gt;                          matching regular expression R. Last&lt;br /&gt;                          line in which a match was found&lt;br /&gt;                          becomes the current line.&lt;br /&gt;.,.+1             j         Join together all the addressed&lt;br /&gt;                          lines. The resulting line becomes&lt;br /&gt;                          the current line.&lt;br /&gt;.                 kx        Mark the addressed line with the&lt;br /&gt;                          single lower case character name x.&lt;br /&gt;                          The addressed line becomes the&lt;br /&gt;                          current line.&lt;br /&gt;.,.               l         List the addressed lines showing&lt;br /&gt;                          non-printing characters and folding&lt;br /&gt;                          long lines. The last line listed&lt;br /&gt;                          becomes the current line.&lt;br /&gt;.,.               mA        Move addressed lines to follow line&lt;br /&gt;                          whose address is A. The last line&lt;br /&gt;                          moved becomes the current line.&lt;br /&gt;.,.               p         Print the addressed lines. The last&lt;br /&gt;                          line displayed becomes current line.&lt;br /&gt;                q         Exit from the editor.&lt;br /&gt;                Q         Exit from the editor with no warning&lt;br /&gt;                          if a modified buffer has not been&lt;br /&gt;                          written out.&lt;br /&gt;$                 r file    Read file into the buffer after&lt;br /&gt;                          addressed line. The last line read in&lt;br /&gt;                          becomes the current line.&lt;br /&gt;.,.               s/R/S/{g} Substitute string S for the regular&lt;br /&gt;                          expression R in the addressed lines.&lt;br /&gt;                          If g specified substitution is made&lt;br /&gt;                          globally throughout addressed lines.&lt;br /&gt;.,.               tA        Copy the addressed lines to follow&lt;br /&gt;                          line whose address is A. Last line of&lt;br /&gt;                          the copy becomes the current line.&lt;br /&gt;.,.               u         Undo the effect of the previous&lt;br /&gt;                          substitute command. The current line is&lt;br /&gt;                          reset to its value before that command.&lt;br /&gt;1,$               v/R/cmds  Perform cmds on all addressed lines&lt;br /&gt;                          not matching regular expression R.&lt;br /&gt;1,$               w file    Write the addressed lines into named&lt;br /&gt;                          file. The current line is not reset.&lt;br /&gt;1,$               W file    Append the addressed lines to the&lt;br /&gt;                          named file. Current line not reset.&lt;br /&gt;                x         Decrypt or encrypt the text according&lt;br /&gt;                          to an input key. The current line is&lt;br /&gt;                          not reset.&lt;br /&gt;$                 =         Print the line number of the addressed&lt;br /&gt;                          line The current line is not reset.&lt;br /&gt;                |cmnd     Pass cmnd to the UNIX shell to be&lt;br /&gt;                          executed. Current line is not reset.&lt;br /&gt;                A         Where A is one of the legal address&lt;br /&gt;                          forms listed above: locate addressed&lt;br /&gt;                          line and display it. The addressed line&lt;br /&gt;                          becomes current line.&lt;br /&gt;.+1               newline   Print the next line. Addressed line&lt;br /&gt;                /linefeed becomes the current line.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Obligatory &lt;a href="http://www.gnu.org/fun/jokes/ed.msg.html"&gt;jokes link&lt;/a&gt; (not a PJ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31589523-115376830725515949?l=dtecht.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dtecht.blogspot.com/feeds/115376830725515949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31589523&amp;postID=115376830725515949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/115376830725515949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31589523/posts/default/115376830725515949'/><link rel='alternate' type='text/html' href='http://dtecht.blogspot.com/2006/07/ed-ed.html' title='Ed-ed'/><author><name>dBera</name><uri>http://www.blogger.com/profile/14587148643204389255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_Dl_EHp-s13Q/SY9avCri1OI/AAAAAAAAABU/iGZF3n251eY/S220/me-dark.jpg'/></author><thr:total>0</thr:total></entry></feed>
