<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cyberborean Chronicles &#187; PIM</title>
	<atom:link href="http://blog.cyberborean.org/tag/pim/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.cyberborean.org</link>
	<description>by Alex Alishevskikh</description>
	<lastBuildDate>Wed, 16 Dec 2009 04:33:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting new mail onto the desktop</title>
		<link>http://blog.cyberborean.org/2006/09/12/getting-new-mail-onto-the-desktop</link>
		<comments>http://blog.cyberborean.org/2006/09/12/getting-new-mail-onto-the-desktop#comments</comments>
		<pubDate>Tue, 12 Sep 2006 15:24:56 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Essays]]></category>
		<category><![CDATA[Howtos]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cyberborean.wordpress.com/2006/09/12/getting-new-mail-onto-the-desktop/</guid>
		<description><![CDATA[I had nice last weekend gathering new harvest of apples, drinking fresh apple juice and playing with SuperKaramba widgets &#8211; a good opportunity to take a sort of &#8220;recreational programming&#8221;. Perhaps all modern KDE users know those nice resource eaters eye-candies which are living right on the desktop surface and displaying the clocks, calendars, weather [...]]]></description>
			<content:encoded><![CDATA[<p>I had nice last weekend gathering new harvest of apples, drinking fresh apple juice and playing with <a href="http://netdragon.sourceforge.net">SuperKaramba</a> widgets &#8211; a good opportunity to take a sort of &#8220;recreational programming&#8221;. Perhaps all modern KDE users know those nice <s>resource eaters</s> eye-candies which are living right on the desktop surface and displaying the clocks, calendars, weather forecasts, system monitors and so on.</p>
<p>Instead of developing some Yet Another Big Animated Clock, I decided to write something practical. What I&#8217;d like to have is a widget which would ask my e-mail client (<a href="http://kmail.kde.org">KMail</a>) for the headers of the latest unread messages to show them on the desktop.<br />
<span id="more-133"></span></p>
<p><img src="http://cyberborean.org/blog/wp-content/uploads/2006/09/skkmail.jpg" alt="skkmail.jpg" /></p>
<p>Two buttons in the top bar are for checking new mail from a server and for opening new message window. Clicking on the top bar somewhere else will open main KMail window.</p>
<p>SuperKaramba comes with a <a href="http://netdragon.sourceforge.net/api.html">Python API</a>, so everyone who is familiar with Pyton basics can write her own widget (aka &#8220;theme&#8221;) as a Python script. In my case, I wrote two scripts &#8211; one is for widget output and another as a simple KMail folder API wrapped around DCOP calls.</p>
<h3>Patching KMail</h3>
<p>There was a major problem &#8211; KMail DCOP interface had no a call to get unread message headers; only getting a number of them is possible. So I have had to dig into the KMail sourcecode (my current version is 1.9.4) for to add new function to FolderIFace interface (<code>folderIface.cpp</code>).</p>
<h4><code>kmail.diff:</code></h4>
<pre class="brush: cpp">
diff kmail/folderIface.cpp kmail_patched/folderIface.cpp
147a148,162
&amp;amp;gt; QStringList
&amp;amp;gt; FolderIface::unreadMessageHeaders()
&amp;amp;gt; {
&amp;amp;gt;      QStringList msgs;
&amp;amp;gt;      mFolder-&amp;amp;gt;open();
&amp;amp;gt;      for( int i = 0; i &amp;amp;lt; mFolder-&amp;amp;gt;count(); i++) {
&amp;amp;gt;          KMMsgBase *msg = mFolder-&amp;amp;gt;getMsgBase(i);
&amp;amp;gt; 	     if (msg-&amp;amp;gt;isNew() || msg-&amp;amp;gt;isUnread()) {
&amp;amp;gt; 	       msgs.append(msg-&amp;amp;gt;fromStrip() + &quot;\\t&quot; + msg-&amp;amp;gt;subject() + &quot;\\t&quot; + msg-&amp;amp;gt;dateStr());
&amp;amp;gt;          }
&amp;amp;gt;      }
&amp;amp;gt;      mFolder-&amp;amp;gt;close();
&amp;amp;gt;      return msgs;
&amp;amp;gt; }
&amp;amp;gt;
diff kmail/folderIface.h kmail_patched/folderIface.h
61c61,62
&amp;amp;lt;
---
&amp;amp;gt;     virtual QStringList unreadMessageHeaders();
&amp;amp;gt;
</pre>
<p>After adding new function header to <code>folderIface.h</code> and rebuilding KMail, new DCOP call &#8220;<code>kmail FolderIface unreadMessageHeaders</code>&#8221; became available to get the list of message headers in format &#8220;From/Subject/Date&#8221; divided by tab characters (<code>\t</code>).</p>
<h3>Sourcecode</h3>
<h4><code>skkmail.py</code>:</h4>
<pre class="brush: python">
import karamba
import kmail

text = []
images = []
clickAreas = []

# Define widget area width here (height is adjusted automatically)
s_width = 350

# If an actual height is above this value, a widget area will be clipped
maxHeight = 600

# Margins inside a widget area
s_x = 10
s_y = 10

def _update(widget):
    global text, images, clickAreas, s_width, s_x, s_y
    x_gap = 10
    y_gap = 4

    s_height = 14
    s_col1 = (s_width-x_gap)*0.66
    s_col2 = s_width
    s_col3 = (s_width-x_gap-16)*0.33

    folderFont = &quot;Franklin Gothic Medium&quot;
    folderFontSize = 14

    for t in text:
        try:
          karamba.deleteText(widget, t)
        except:
          pass
    for i in images:
        try:
          karamba.deleteImage(widget, i)
        except:
          pass
    for c in clickAreas:
        try:
          karamba.removeClickArea(widget, c)
        except:
          pass
    text = []
    images = []
    clickAreas = []
    folders = kmail.getFolders()
    y = s_y + 25;
    for f in folders:
        msgs = f.unreadMessages
        if (len(msgs) &amp;amp;gt; 0):
            y0 = y
            t = karamba.createText(widget, s_x+15, y, s_width, s_height,
                f.name+&quot; (&quot;+str(len(msgs))+&quot;)&quot;)
            karamba.changeTextFont(widget, t, folderFont)
            karamba.changeTextSize(widget, t, folderFontSize)
            text.append(t)
            images.append(karamba.createImage(widget, s_x-10, y, &quot;icons/folder.png&quot;))
            y = y + s_height + y_gap*2 +10
            for m in msgs:
                t = karamba.createText(widget, s_x+20, y, s_col1, s_height, m[0])
                text.append(t)
                t = karamba.createText(widget, s_x, y+s_height, s_col2, s_height, m[1])
                text.append(t)
                t = karamba.createText(widget, s_x+20+s_col1+x_gap, y, s_col3, s_height, m[2])
                karamba.setTextAlign(widget, t, &quot;RIGHT&quot;)
                text.append(t)
                images.append(karamba.createImage(widget, s_x, y, &quot;icons/mail.png&quot;))
                y = y + s_height*2 + y_gap*2
            clickAreas.append(karamba.createClickArea(widget, s_x-10, y0, s_width, y-y0,
                &quot;dcop kmail KMailIface selectFolder &quot;+f.path+&quot; &amp;amp;amp;amp;&amp;amp;amp;amp; kmail&quot;))
            y = y + y_gap*2
    if (y &amp;amp;amp;lt; maxHeight - 20):
        karamba.resizeWidget(widget, s_width+s_x*2, y+20)

#this is called when you widget is initialized
def initWidget(widget):
    bgImage = karamba.createBackgroundImage(widget, 0, 5, &quot;icons/bg.png&quot;)
    karamba.resizeImage(widget, bgImage, s_width+s_x*2, 20)
    logo = karamba.createImage(widget, 0, 0, &quot;icons/kmail.png&quot;)
    t = karamba.createText(widget, 35, 5, 100, 20, &quot;new mail&quot;)
    karamba.changeTextFont(widget, t, &quot;Franklin Gothic Medium&quot;)
    karamba.changeTextSize(widget, t, 16)
    karamba.createClickArea(widget, 0, 0, 100, 30, &quot;kmail&quot;)
    karamba.createImage(widget, s_width+s_x*2-18, 7, &quot;icons/mail_get.png&quot;)
    karamba.createClickArea(widget, s_width+s_x*2-18, 7, 16, 16, &quot;dcop kmail KMailIface checkMail&quot;)
    karamba.createImage(widget, s_width+s_x*2-40, 7, &quot;icons/mail_new.png&quot;)
    karamba.createClickArea(widget, s_width+s_x*2-40, 7, 16, 16,
        &quot;dcop kmail KMailIface openComposer &#039;&#039; &#039;&#039; &#039;&#039; &#039;&#039; &#039;&#039; &#039;&#039;&quot;)
    _update(widget)

#this is called everytime your widget is updated
#the update inverval is specified in the .theme file
def widgetUpdated(widget):
    _update(widget)

#This gets called everytime our widget is clicked.
# Middle button click forces to check new mail
def widgetClicked(widget, x, y, button):
    if (button == 2):
        kmail.dcopCall(&quot;kmail KMailIface checkMail&quot;)
</pre>
<h4><code>kmail.py:</code></h4>
<pre class="brush: python">
#!/usr/bin/python

import os, subprocess, string

def dcopCall(call):
  cmd = &quot;dcop &quot;+call
  pipe = subprocess.Popen(cmd, shell=True, bufsize=1024, stdout=subprocess.PIPE).stdout
  res = pipe.read()
  pipe.close()
  return res

class Folder:
  path = &quot;&quot;
  name = &quot;&quot;
  unreadCount = 0
  unreadMessages = []

  def __init__(self, path):
    dcopCall(&quot;kmail KMailIface getFolder &quot;+path)
    self.path = path
    self.unreadMessages = self.getUnreadMessages()

  def getUnreadMessages(self):
    r = dcopCall(&quot;kmail FolderIface unreadMessageHeaders&quot;)
    ss = string.split(r, &quot;\\n&quot;)
    msg = []
    for s in ss:
        if (len(s) &amp;amp;gt; 0):
            msg.append(string.split(s, &quot;\\t&quot;))
    unreadCount = len(msg)
    if (unreadCount &amp;amp;gt; 0):
        self.name = string.strip(dcopCall(&quot;kmail FolderIface displayName&quot;))
    msg.reverse()
    return msg

def getFolders():
    r = dcopCall(&quot;kmail KMailIface folderList&quot;)
    folders = []
    for f in string.split(r, &quot;\\n&quot;):
        folders.append(Folder(f))
    return folders
</pre>
<h4><code>skkmail.theme:</code></h4>
<pre class="brush: python">
# you can change initial widget position, area size and updatin interval (default = 1min)
karamba x=100 y=100 w=400 h=200 interval=60000
defaultfont font=&quot;Franklin Gothic Book&quot; fontsize=12 color=230,230,230
</pre>
<p>All code above is <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>&#8216;ed.</p>
 <img src="http://blog.cyberborean.org/wp-content/plugins/feed-statistics.php?view=1&post_id=133" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/09/12/getting-new-mail-onto-the-desktop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memoranda 1.0-RC3 released</title>
		<link>http://blog.cyberborean.org/2006/07/03/memoranda-10-rc3-released</link>
		<comments>http://blog.cyberborean.org/2006/07/03/memoranda-10-rc3-released#comments</comments>
		<pubDate>Mon, 03 Jul 2006 17:33:37 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Memoranda]]></category>
		<category><![CDATA[PIM]]></category>

		<guid isPermaLink="false">https://cyberborean.wordpress.com/2006/07/03/memoranda-10-rc3-released/</guid>
		<description><![CDATA[By many reasons, we had no new Memoranda releases for really long time. But meanwhile, there were some notable improvements towards 1.0 Final release so today I released the 1.0 Release Candidate 3 version. It can be downloaded from here. It is a full distribution, that is it includes sourcecode, all dependency libraries and the [...]]]></description>
			<content:encoded><![CDATA[<p>By many reasons, we had no new <a href="http://memoranda.sf.net">Memoranda</a> releases for really long time. But meanwhile, there were some notable improvements towards 1.0 Final release so today I released the 1.0 Release Candidate 3 version. It can be downloaded from <a href="http://prdownloads.sourceforge.net/memoranda/memoranda1.0-rc3-20060703.zip?download">here</a>. It is a full distribution, that is it includes sourcecode, all dependency libraries and the prebuilt JAR (build 20060703.15). This release is tagged in CVS repository as <code>v1_0_RC3</code>.</p>
<p><span id="more-112"></span></p>
<h3>Major updates</h3>
<p>The most important feature which was introduced is the competed mechanism of &#8220;hierarchical tasks&#8221;. Before, the projects had only a flat list of &#8220;todo&#8221; tasks but now it is possible to create tree-like task structures where every task can be extended and detalized by any number of subtasks:</p>
<p><img src="http://cyberborean.org/blog/wp-content/uploads/2006/07/mmd20060703.gif" alt="Hierarchical tasks structure in Memoranda 1.0-RC3" /></p>
<p>The mechanism and data model of hierarchical tasks was implemented by Ryan Ho with assistance of Michael Bernadsky  but it had no user interface for a long time. The user interface (new tasks editor) has been developed by Jyrki Velhonoja and me using a wonderful Swing hack called <a href="http://java.sun.com/products/jfc/tsc/articles/treetable1/index.html">TreeTable</a> &#8211; a combination of JTree and JTable JFC/Swing components.</p>
<p>Note that new task mechanism is backward-compatible &#8211; that is your existing (flat) to-do lists should be seamlessly integrated into new hierarchical data model. They simply will be interpreted as one-level task sets and you can extend them with subtasks as you wish.</p>
<p>Another innovation is the improved notes editor with customizable fonts for paragraphs, headers and monospaced text (see new &#8220;Editor&#8221; tab in &#8220;Preferences&#8221; dialog). Also there is an option to antialias the text of notes.</p>
<p>The sourcecode got some refactoring. I moved the code of WYSIWYG HTML editor into the main Memoranda codebase to avoid version conflicts (before it was a separate &#8220;htmleditor&#8221; CVS module and JAR-file). So, you should not check out this module anymore &#8211; it is obsoleted. I plan to start new separate project for the editor, because it can be used in many applications, not only in Memoranda.</p>
<h3>What&#8217;s next?</h3>
<p>The final release &#8211; I believe. During two years we added a lot of new features and fixed the most of the bugs. It is more than enough for the First Final. We also need the user&#8217;s documentation &#8211; I have a draft of it but it is seriously outdated &#8211; it reflexed some ancient beta-version and it needs to be synchronised with the current state of Memoranda.</p>
 <img src="http://blog.cyberborean.org/wp-content/plugins/feed-statistics.php?view=1&post_id=112" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/07/03/memoranda-10-rc3-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filesystem is evil</title>
		<link>http://blog.cyberborean.org/2006/04/24/filesystem-is-evil</link>
		<comments>http://blog.cyberborean.org/2006/04/24/filesystem-is-evil#comments</comments>
		<pubDate>Mon, 24 Apr 2006 15:10:41 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Essays]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">https://cyberborean.wordpress.com/2006/04/24/filesystem-is-evil/</guid>
		<description><![CDATA[Do we need a better way to store and organize our data or we are doomed to stick with old unefficient tools?

Pete was at his computer when the phone rang.
— There are representatives of XYZ corp. here, — said Pete&#8217;s boss. — They liked our offers and want to sign a contract. Is it ready?
— [...]]]></description>
			<content:encoded><![CDATA[<p><em>Do we need a better way to store and organize our data or we are doomed to stick with old unefficient tools?</em><br />
<span id="more-81"></span></p>
<blockquote><p>Pete was at his computer when the phone rang.<br />
— There are representatives of XYZ corp. here, — said Pete&#8217;s boss. — They liked our offers and want to sign a contract. Is it ready?<br />
— Yes, it is. — answered Pete confidently. He had prepared the text of contract a week ago.<br />
— Great, print it and bring it here, please.<br />
Pete put the receiver down and opened the folder named “Contracts” in his “My documents” hierarchy. There were about two hundreds of files, but there was nothing with name about “XYZ”. He browsed few old subfolders of forgotten purpose and obscure names but found nothing too. Being a bit surprised, Pete opened the &#8220;Recent documents&#8221; list but it was full of newer files. The worst thing was that Pete couldn&#8217;t recall a name of the file. He even didn&#8217;t remember when exactly he had working on this document. Pete sorted the files in &#8220;Contracts&#8221; by date of modification, but there were a couple of dozens of files edited at the last week. “When it was? Tuesday or Wednesday or..?” He started to open the documents one by one and it took for about ten minutes. Nothing like.<br />
Pete browsed the root of “My documents” folder (turned into a dump of useless trash for ages) and some other folders, where as he thought the document accidentally might be. Nope. He mopped his brow and loosened the tie. “I have to remember where I saved that damned file. Well, I came to the office, as usual read my email, then played Lines until the boss called me and asked to prepare the contract for XYZ. I took a standard corporate template for contracts and started to work. I had been interrupted few times for checking and answering email and once for lunch. I remember also that after lunch I worked around another urgent document, then got back to the contract and completed it before the end of workday&#8230;”<br />
“The search! How could I forgot about it!” Pete quickly ran the file search and typed “XYZ contract” in the search field. He leaned back in the chair and started to look at the flitting indicator. On 16 minute of the search, the phone rang again.<br />
— You should not hurry <em>so much</em> anymore. — said boss. — We have lost that customer.</p></blockquote>
<p>Pete could not find the document and upset a deal.</p>
<p>This sad but edifying story might be a source of many fair conclusions. Someone would say that the Pete&#8217;s company needs CRM. Someone else would mind that Pete should spend less time to play Lines but more to keep his harddisk in order and so on. But I told this story not to show the advantages of enterprise automation and not for moralizing on such slovens some users are. This is a typical “use case” story of using a software tool. A tool that is in our way everyday.</p>
<p>This is a filesystem.</p>
<h3>Can we ever live without it?</h3>
<p>A hierarchical filesystem is a sort of fundamental computer concept which has almost never been seriously revised against utility, user efficiency and usability. Everyone knows that computers store data in files and folders. It&#8217;s a matter of course and it seems like a natural phenomenon, like air we breath and like the sun which rises on the East everyday.</p>
<p>Most of the “non-technical” people think that the filesystem is a necessary technological principle of a computer long-term memory. “Ok, if there was no another way, we have to live with it.” And producers of operating systems silently keep this opinion.</p>
<p>It is wrong. It is misleading. You are deceived. Everybody who more or less understands how a computer works knows that the filesystem has no relation to physical organisation of a disk memory. This is merely an invention of early OS developers who cooked that &#8220;convenience&#8221; once in the 60&#8217;s. There are no any &#8220;folders&#8221; and &#8220;files&#8221; inside the computer. This is a programmatic imitation, a phantom superstructure above real physical disk sectors and cylinders and there are myriads of alternative ways for it. <em>The filesystem is not a necessary part of a computer</em>.</p>
<h3>What&#8217;s wrong with it?</h3>
<p>My criticism is not against the filesystems as they are. I believe there is a number of excellent, fast and reliable filesystems with advanced security, journaling and many other useful features. They are doing their job and doing it well. My criticism is against the practice of providing filesystem as an end-user tool.</p>
<p>I&#8217;d be very surprised if I ever met some developers convenience or raw technology feature which became a good user experience. I&#8217;m sure the <em>good things</em> all come from careful studying the human&#8217;s tasks, goals and contexts of use. The task of “to store whatever” is too general to be succesfully implemented. It is nobody&#8217;s experience. It is a bare abstraction in hope of adaptation to the real world by the users themselves. It is like a software for “doing anything” which makes a user to define “what” and “how” to do. Sort of meccano, but not a tool.</p>
<p>Users usually have no task “to store” their data at all. It seems the only case is when they back their data up to DVD-R or to another archival media. Many of them even have troubles with understanding the “saving” and “loading” operations. I&#8217;ve written a document in the Word, isn&#8217;t it already in the computer? The knowledge of “saving” and “loading” files and of distinction between long-term and operating memory, between harddisks and RAM, is needless for users. It makes them to learn for unnecessary things and keep in mind a weird two-part model of a computer storage system. It has no relation to their tasks. It is in their way just because there is a <em>bad design</em> which is countlessly reproduced for 40 years without any improvements.</p>
<p><img src="http://cyberborean.files.wordpress.com/2006/04/macosx.png" alt="macosx.png" align="right" />Try to invent an universal and intuitive definition of a “file” using no technical jargon. “This is a document or an image or an audioclip or a program or anything else&#8230;” Anything else what? “Anything what we can save to disk” — is only answer. It could work in the times when the disks (I mean the floppies) were an important part of everyday user experience. Everybody knew that data and programs were on the disks and the disks were the real tangible things. But many users nowadays have no idea what the disk is at all, except for CD and DVD (remember an anecdote that many Mac users have seen a hard disk first on new OS X icon) . The concept of a file is particularly technical and it can be defined in the best way simply as “a storage unit”. It might be useful in context of eventual data backup, restoring or transferring, but not for user&#8217;s everyday tasks.</p>
<p>Another weakness of filesystem usability is a tree-like hierarchy. The problem with hierarchical structures is that they have extremely poor scalability. They could work well for 720K or 1.4M floppies with few directories and few dozens of files, but now our storage capacities are thousands times greater. It is proven that usability of hierarchical structure falls exponentially with number of levels and number of items in them. In practice, a structure with more than even two levels substantially impedes the search of a specific choice. Creation of a good intuitive structure (e.g. a catalog) is a very complex task of information design which requires special recursive techniques such as prototyping, card-sorting, careful testing etc. The most of us in real life have no time and skills for that, so the structures we create ad-hoc today, become the dreadful puzzles for us tomorrow. And the filesystem provides us with everything to create those puzzles but doesn&#8217;t help us to unscramble them.</p>
<h3>Outlook instead of Explorer?</h3>
<p>New paradygm of personal resource organization should be based on a simple axiom: “Whatever a user does, she does her tasks on her projects.” A <em>task</em> is an activity to achieving specific <em>goals</em> using specific <em>resources</em> and <em>tools</em>. A <em>project</em> is a common context of more than one tasks. For instance, Pete&#8217;s task was to write a text of contract, his goal was to have the text completed and approved, the resource was the contract itself and the project was dealing with XYZ corp. This is a natural model of human horme and it should go out of scope of special project-management and scheduling software to be a foundation of entire human-computer interaction framework. These ideas were (in very roughly and initial form)  implemented in the <a href="http://memoranda.sf.net">Memoranda</a> project. I believe evolution of this kind of software will replace traditional file managers from their position of main user interface to navigate over resource collections.</p>
<p>It should change the way of everyday personal computing and make it more simple and natural. Instead of creating informal and often casual folder structures, a user would have a personal project-management framework for managing information resources as the internals of her projects. Resources are associated with tasks of the projects, so it would be easy to navigate and find them. In fact, it should be enough to go into the specific project context to get all related resources in the way.</p>
<p>It is not too futuristic. Though it seems rather hard to overcome 40 y.o. conventions, there already are the software which is passed through the files and folders and provide high-level, sofisticated and task-centered data structures.</p>
<p>E-mail clients, personal information managers (PIMs) and calendars working this way for decades. Many of the multimedia software provide their own media libraries management without obvious relation to the filesystem. For instance, working with my <a href="http://amarok.kde.org">amaroK</a> mediaplayer, I only care to put my new media files into a known single folder. The program monitors that folder and automatically updates the media collection, so I can easily find any song browsing the collection by artist name, album title, year, genre and so on. All modern Development Environment software (IDE&#8217;s) has advanced project-management tools for software development tasks including resources (sourcecode) management. At last, the Pete&#8217;s favourite Lines remembers the game score results and even if it doing so with files, a gamer doesn&#8217;t care about it.</p>
<h3>Conclusion</h3>
<blockquote><p>
&#8230;<br />
Pete put the receiver down and clicked on “Dealing with XYZ corp” project icon on his desktop. In the list of tasks sorted by date he clicked the “Prepare the contract” item and the first thing that catched his eyes was the icon of the document in the resources area. He selected “Print” in the context menu and there was exactly 10 seconds since he had stopped to talk with the boss.</p></blockquote>
<p>Somebody would object this is how an accurate user usually does with the folders and files. But why our software requires us to be so accurate and doesn&#8217;t help us if we aren&#8217;t get its high standards? Nowadays, the computers are smartest of the artificial things. And I&#8217;m wondered why they still supply us with information storages not smarter than a table or a bookcase.</p>
<p>I have a cranky idea: “Would we have to pay many thousands of bucks for CRM, ERP and other enterprise software functions, if our personal tools were a bit more sophisticated?”</p>
 <img src="http://blog.cyberborean.org/wp-content/plugins/feed-statistics.php?view=1&post_id=81" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/04/24/filesystem-is-evil/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About Memoranda: Part II</title>
		<link>http://blog.cyberborean.org/2006/01/07/about-memoranda-part-ii</link>
		<comments>http://blog.cyberborean.org/2006/01/07/about-memoranda-part-ii#comments</comments>
		<pubDate>Sat, 07 Jan 2006 20:09:06 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Essays]]></category>
		<category><![CDATA[Memoranda]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://cyberborean.wordpress.com/2006/01/07/about-memorandapart-ii/</guid>
		<description><![CDATA[
The first part  is here.
Memoranda
I began to think about changing jNotes name as far back as I started to work at Version 2. It seemed to be basically new product, rather than just new version of jNotes. Another reason was annoying confusion with another software called JNotes &#8211; some Java stuff related with Lotus [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-36"></span><br />
<em>The first part  is <a href="http://cyberborean.wordpress.com/2006/01/05/about-memoranda-part-i/">here</a>.</em></p>
<h3>Memoranda</h3>
<p>I began to think about changing jNotes name as far back as I started to work at Version 2. It seemed to be basically new product, rather than just new version of jNotes. Another reason was annoying confusion with another software called JNotes &#8211; some Java stuff related with Lotus Notes. So, I posted my thoughts to the mailing list and asked people to suggest new names.</p>
<p>Ten variants of new name were proposed:</p>
<ul>
<li>InteliNotes
</li>
<li>Notestopia
</li>
<li>Memoranda
</li>
<li>LineUp
</li>
<li>Jot
</li>
<li>NoteSoup
</li>
<li>MyNotes
</li>
<li>NoteBurn
</li>
<li>Jilofax
</li>
<li>Chronicles (my variant)
</li>
<li>&#8230; oh no, &#8220;jNotes&#8221; forever! (another my variant)
</li>
</ul>
<p>As a result of voting, the “Memoranda” name invented by Iv&aacute;n Ribas was selected. I very liked that name and voted for it too. At the end of September 2003 we registered new project on SourceForge, moved the codebase and made new release under new name. New <a href="http://memoranda.sf.net">web-site</a> had been launched at the same time. The <a href="http://jnotes.sf.net">old site</a> was remained as a home of jNotes 1.0 (currently inactive).</p>
<p>Since then, among increasing stability, the software got a lot of new features. The most important ones are:</p>
<ul>
<li>
<b>Summary page (&#8220;Agenda&#8221;)</b><br />
A &#8220;today startup page&#8221; which summarize information of active tasks of all projects and upcoming events of this day.
</li>
<li>
<b>Hierarchical tasks</b><br />
Now the tasks of a project have hierarchical structure, so that every task may contain sub-tasks.
</li>
<li>
<b>Multiple notes per day</b><br />
until recently, a single calendar date was associated with a single note. Now it is possible to have few notes associated with the same date.
</li>
<li>
<b>14 national localizations</b><br />
Now Memoranda speaks Catalan, Chinese, Chinese (Taiwan), Dutch (Belgium), Dutch (Netherlands), Finnish, France, German, Hungarian, Italian, Japan, Russian, Serbian and Spain. The language of GUI is selected automatically depending on user&#8217;s system locale settings.
</li>
</ul>
<p>The current status of Memoranda is 1.0 Release Candidate 2. The next release (I hope) will be final.</p>
<div align="center">
<img src="http://cyberborean.files.wordpress.com/2006/01/memoranda10rc2.png" alt="memoranda10rc2" /></p>
<p><b>Memoranda 1.0-RC2 screenshot</b></div>
<h3>Who did it</h3>
<p>Many people in different time took part in Memoranda development. Above all, these are code commiters:</p>
<ul>
<li>Patrick Bielen (pbielen)
</li>
<li>Ryan Ho (rawsushi)
</li>
<li>Yunjie Liu (noregister)
</li>
<li>Iv&aacute;n Ribas (ivanrise)
</li>
<li>Carel-J Rischmuller  (carel-j)
</li>
<li>Jeremy Whitlock (jcscoobyrs)
</li>
<li>Jyrki Velhonoja (velhonoja)
</li>
</ul>
<p>And those who were not the developers, though they did the great help for the project:</p>
<ul>
<li>Thomas Chuffart
</li>
<li>Willy Dobe
</li>
<li>David Nagy
</li>
<li>Kenneth J. Pouncey
</li>
<li>Sava Rados
</li>
<li>Michael Radtke
</li>
<li>Milena Vitali-Charewicz
</li>
<li>Toru Watanabe</li>
<li>&#8230; and everyone I may have forgotten, sorry.
</li>
</ul>
<p>(all people listed alphabetically by their second names)</p>
<p>I don&#8217;t say thanks because this is <em>our</em> software, not my own ;-)</p>
<h3>Memoranda 2.0 ?</h3>
<p>My thoughts on Memoranda future are coming soon, so <b>the saga continues&#8230;</b></p>
 <img src="http://blog.cyberborean.org/wp-content/plugins/feed-statistics.php?view=1&post_id=36" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/01/07/about-memoranda-part-ii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About Memoranda: Part I</title>
		<link>http://blog.cyberborean.org/2006/01/05/about-memoranda-part-i</link>
		<comments>http://blog.cyberborean.org/2006/01/05/about-memoranda-part-i#comments</comments>
		<pubDate>Thu, 05 Jan 2006 20:25:28 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Essays]]></category>
		<category><![CDATA[Memoranda]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://cyberborean.wordpress.com/2006/01/05/about-memoranda-part-i/</guid>
		<description><![CDATA[Memoranda is an open-source and cross-platform (Java) software for personal projects scheduling and diary management. I have started it as an opensource project on SourceForge in 2003 and it grows out of jNotes software developed in 2002.

jNotes
As far as I remember, I always worked in multitasking mode and was involved in few projects simultaneously. Once [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://memoranda.sf.net">Memoranda</a> is an open-source and cross-platform (Java) software for personal projects scheduling and diary management. I have started it as an opensource project on SourceForge in 2003 and it grows out of jNotes software developed in 2002.<br />
<span id="more-33"></span></p>
<h3>jNotes</h3>
<p>As far as I remember, I always worked in multitasking mode and was involved in few projects simultaneously. Once I had an idea that I needed something to help myself to manage that &#8220;concurrency&#8221; and organize my work &#8211; a kind of scratchpad or notebook to quickly make and find text notes and to-do&#8217;s. I tried out few software tools but I didn&#8217;t find what might exactly fit my needs. Some of them were heavy project-management tools with a lot of features which were useless for me, while others, on the contrary, had no features I expected. So, I decided to write that tool with my own hands.</p>
<p>My requirements were simple — it should be quick lightweight tool to easily keep brief daily notes and to-do lists. I thought it might be a simple text editor with a calendar interface. Instead of keeping batches of “YYYYMMDD” text files (as I did before), I should be able to select a date with a calendar widget and immediately get a text I had written then, or start an empty page if there was no text. No relations with files (no opening and saving operations) and quick navigation were the special points.</p>
<p>Later I decided that to-do lists were better to implement as special checklist widgets, rather than as simple text. In this case, it would be possible to count progress of the projects. So, they became an another concern, separated from text notes. Although I had no strong needs to schedule time events, I thought it would be an useful and popular feature (and later I convinced it was really so).</p>
<p>I wrote this tool in my spare time for one month and called it “jNotes” &#8211; &#8220;Java + Notes&#8221; (I had no long thinking about its name, you see ;-). It was released on SourceForge in July, 2002.</p>
<div align="center">
<img src="http://cyberborean.files.wordpress.com/2006/01/screen1.gif" alt="jNotes screenshot" /></p>
<p><img src="http://cyberborean.files.wordpress.com/2006/01/screen2.gif" alt="jNotes screenshot" /></p>
<p><img src="http://cyberborean.org/blog/wp-content/uploads/2006/01/screen3.gif" alt="jNotes screenshot" /></p>
<p><b>jNotes 1.0 screenshots</b>
</div>
<p>jNotes 1.0 had a plain-text editor for diary notes, to-do checklists editor and events scheduler/notificator. The notes had been grouped in the “books” and to-do items in the “projects”. All data stored transparently as XML files, but the notes editor worked with plain-text files, that is it could be used as an usual text editor. There was also an export feature to save a whole notes book as an HTML file.</p>
<p>It was proved to be a simple but really helpful tool, and it got some popularity with time.</p>
<h3>jNotes 2</h3>
<p>In the end of 2002, when jNotes became rather stable and bugs-free software, I summarized my personal experience of using it together with users&#8217; feedback and started to think about next version. There were some new ideas and it was clear that the software required a much of redesign to those ideas could be implemented.</p>
<p>jNotes was not longer a tool for my personal needs only, and my needs were changed. It was obvious that the ad-hoc design of jNotes 1.0 should be reinvented on more common and consistent basis. After investigating of users activity models and imagined use cases, I invented a new concept of a project. This concept became a foundation for new user experience.</p>
<p>A project in new version considered as a date-oriented collection of text notes, tasks and links to resources. The concept of “books” were discarded, but the collections of notes became integrated into the projects together with tasks. The concept of the tasks were revised too — no longer one-day todo items with boolean “done or not” status, but the processes within the project&#8217;s time bounds. They got a start and end date, priority level and percentage of completion. The links to project-related resources were another innovation. Any local file or URL can be included as a “shortcut” into the project&#8217;s resources list for quick access to them with suitable external application.</p>
<p>The second version of jNotes was written almost from scratch for three months and the first Alpha release was appeared at May, 2003.</p>
<div align="center">
<img src="http://cyberborean.files.wordpress.com/2006/01/jnotes2.jpg" alt="jNotes 2.0a screenshot" /></p>
<p><b>jNotes 2.0-alpha screenshot</b>
</div>
<p>An unsignificant amount of code was inherited from version 1, but almost everything had been rewritten &#8211; an object model, user interface and so on. The software got a new WYSIWYG styled text editor with HTML export/import, unlimited undo buffer, find&amp;replace functions and many other improvements and new features.</p>
<p>The alpha of the Version 2 quickly became even more popular than jNotes 1. At July, 2003 I got an offer of help from another developer. Patrick Bielen got involved into the project and started to contribute very enthusiastically. Iv&aacute;n Ribas  joined us a little later. Besides, we got a big deal of patches, bug reports, translations and other useful stuff  from numerous mailing list members. So, at September, 2003 there was a little but real opensource community.</p>
<p><b><a href="http://cyberborean.wordpress.com/2006/01/07/about-memoranda-part-ii/">Part II &gt;&gt;</a></b></p>
 <img src="http://blog.cyberborean.org/wp-content/plugins/feed-statistics.php?view=1&post_id=33" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/01/05/about-memoranda-part-i/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
