<?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; GUI</title>
	<atom:link href="http://blog.cyberborean.org/tag/gui/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.cyberborean.org</link>
	<description>by Alex Alishevskikh</description>
	<lastBuildDate>Wed, 18 Jan 2012 07:52:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Jacinth</title>
		<link>http://blog.cyberborean.org/2006/10/17/jacinth</link>
		<comments>http://blog.cyberborean.org/2006/10/17/jacinth#comments</comments>
		<pubDate>Tue, 17 Oct 2006 08:48:25 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Jacinth]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://cyberborean.wordpress.com/2006/10/17/jacinth/</guid>
		<description><![CDATA[I&#8217;ve registered new project on SourceForge. Jacinth is an embeddable WYSIWYG HTML editor for Java/Swing, perhaps well-known for Memoranda users. It has been developed as a part of Memoranda and now it is available as a separate library. Actually, this is the first step in Big Memoranda Refactoring process (aka Memoranda 2.0). Jacinth is a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve registered <a href="http://sf.net/projects/jacinth">new project</a> on SourceForge. <strong>Jacinth</strong> is an embeddable WYSIWYG HTML editor for Java/Swing, perhaps well-known for <a href="http://memoranda.sf.net">Memoranda</a> users. It has been developed as a part of Memoranda and now it is available as a separate library. Actually, this is the first step in Big Memoranda Refactoring process (aka Memoranda 2.0).<br />
<span id="more-139"></span></p>
<blockquote><p>Jacinth is a red transparent variety of zircon used as a gemstone.</p></blockquote>
<p>(<a href="http://en.wikipedia.org/wiki/Jacinth">Wikipedia</a>)</p>
<p>Jacinth is a Swing component, based on default JEditorPane which is a common foundation for Java styled text editors. It is extended with convenient Actions framework and dialogs for text searching, inserting objects etc. Actually, Jacinth implements a complete and ready to use solution of a WYSIWYG styled editor which can be easily integrated into the Swing applications.</p>
<p>Jacinth includes a demo application (<code>net.sf.jacinth.demo.App</code>)  &#8211; a simple editor which can create and edit HTML files in local filesystem:</p>
<p><img src="http://cyberborean.org/blog/wp-content/uploads/2006/10/jacinth_scr.jpg" alt="Jacinth demo editor" /></p>
<h3>Features</h3>
<ul>
<li>Block formatting (<code>P, H1-H6, PRE, BLOCKQUOTE</code>, block alignment)</li>
<li>Inline formatting (<code>B, I, U, EM, STRONG, CODE, CITE, SUP, SUB</code>, custom font/color style)</li>
<li>Inserting lists (<code>UL, OL</code>)</li>
<li>Inserting and updating images, links and tables with special dialog boxes</li>
<li>Inserting special Unicode characters, rules and linebreaks</li>
<li>Find and replace functions</li>
<li>Unlimited undo/redo support</li>
<li>Default clipboard operations</li>
<li>Customizing editor look (text fonts, colors, etc) with an external CSS file</li>
<li>Synchronized WYSIWYG and HTML-source modes</li>
</ul>
<p>All editor operations are available as the Swing Actions, so it is easy to implement them in client application as the buttons and menu items (see the demo app for example). Also there are two prebuilt toolbars which can be displayed along with the editor pane.</p>
<p>There are no file releases yet, but sourcecode is available via anonymous CVS.</p>
<h3>Problems</h3>
<p>Almost all editor limitations and problems come from its parent &#8211; JEditorPane+HTMLEditorKit. In fact, this part of Swing libraries is based on ancient Sun HotJava and seems to be abandoned long time ago together with that browser. It is buggy, clumsy and intricated and there is a little hope that somebody in Sun would go to improve it now. So, if you are used to deal with modern valid W3C (X)HTML, you probably will be discouraged looking at your pages opened with Jacinth as well as at old-style clumsy HTML it produces.</p>
<p>Therefore, Jacinth is a rich-text editor component for Java apps, rather than a general-purpose HTML editor (except for very simple and straightforward HTML). Though, there is a hope that one day we will have an opensource implementation of a fully standards-compliant Java browser/editor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/10/17/jacinth/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Tips &amp; Tricks:] Required text fields in Swing</title>
		<link>http://blog.cyberborean.org/2006/05/07/tips-tricks-required-text-fields-in-swing</link>
		<comments>http://blog.cyberborean.org/2006/05/07/tips-tricks-required-text-fields-in-swing#comments</comments>
		<pubDate>Sun, 07 May 2006 17:53:47 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Howtos]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">https://cyberborean.wordpress.com/2006/05/07/tips-tricks-required-text-fields-in-swing/</guid>
		<description><![CDATA[This article starts a &#8220;Tips &#38; Tricks&#8221; serie of &#8220;Chronicles&#8221; which is a result of my comeback to heavy coding. The posts in this serie are the bits of coding experience, a small inventions and solutions which every programmer does everyday. Read the latest Tips&#38;Tricks in Technology::Coding category. Swing dialogs by default have no idea [...]]]></description>
			<content:encoded><![CDATA[<p><em><br />
This article starts a &#8220;Tips &amp; Tricks&#8221; serie of &#8220;Chronicles&#8221; which is a result of my comeback to heavy coding. The posts in this serie are the bits of coding experience, a small inventions and solutions which every programmer does everyday. Read the latest Tips&amp;Tricks in <a href="http://cyberborean.wordpress.com/tag/technology/coding/">Technology::Coding</a> category.<br />
</em></p>
<p>Swing dialogs by default have no idea about &#8220;required&#8221; text fields, that is the fields which should be filled to perform a task. In this article I suggest a simple way how to automatically highlight the fields which have to be non-empty.</p>
<p><span id="more-97"></span></p>
<p>Our required fields will be highlighted when empty and switched to default look when a user enters a data into them. To track the changes of a field&#8217;s content we will use <code>DocumentEvent/DocumentListener</code> mechanism. <code>DocumentEvent</code>&#8216;s are generated by underlying <code>Document</code> model when it is changed by some way. Listening to these events is more reliable way than tracking the user actions (such as key pressings) directly, because it is guaranteed that any content change (including possible changes made by program itself, pasting the clipboard content from a context menu etc) will be monitored.</p>
<p>To listen these events, we should create an implementation of <code>DocumentListener</code> interface:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.BorderFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.border.Border</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.event.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.JTextComponent</span><span style="color: #339933;">;</span>
...
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HighlightListener <span style="color: #000000; font-weight: bold;">implements</span> <span style="color: #003399;">DocumentListener</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #003399;">JTextComponent</span> comp <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">Border</span> defaultBorder <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">Border</span> highlightBorder <span style="color: #339933;">=</span>
            <span style="color: #003399;">BorderFactory</span>.<span style="color: #006633;">createLineBorder</span><span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #003399;">Color</span>.<span style="color: #006633;">ORANGE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> HighlightListener<span style="color: #009900;">&#40;</span><span style="color: #003399;">JTextComponent</span> jtc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        comp <span style="color: #339933;">=</span> jtc<span style="color: #339933;">;</span>
        defaultBorder <span style="color: #339933;">=</span> comp.<span style="color: #006633;">getBorder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// Adding this listener to a specified component:</span>
        comp.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">addDocumentListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// Highlight if empty:</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">maybeHighlight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> insertUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        maybeHighlight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> removeUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        maybeHighlight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> changedUpdate<span style="color: #009900;">&#40;</span><span style="color: #003399;">DocumentEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        maybeHighlight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> maybeHighlight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>comp.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
            <span style="color: #666666; font-style: italic;">// if a field is non-empty, switch it to default look</span>
            comp.<span style="color: #006633;">setBorder</span><span style="color: #009900;">&#40;</span>defaultBorder<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">else</span>
            <span style="color: #666666; font-style: italic;">// if a field is empty, highlight it</span>
            comp.<span style="color: #006633;">setBorder</span><span style="color: #009900;">&#40;</span>highlightBorder<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// ... more actions</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>To add a highlighting functionality to a text component we should simply instantiate our <code>HighlightListener</code> with this component:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">...
<span style="color: #003399;">JTextField</span> myField <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextField</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">new</span> HighlightListener<span style="color: #009900;">&#40;</span>myField<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
...</pre></div></div>

<p>Note that <code>HighlightListener</code> constructor is parametrized with <code>JTextComponent</code> class, so it can work with any children (<code>JEditorPane</code>, <code>JTextArea</code>), not only with <code>JTextField</code>.</p>
<p>Our <code>HighlightListener</code> monitors the updates of a component document model and checks if the text is empty or not. If it is empty, it will be highlighted by adding a thin orange border:</p>
<p><img src="http://cyberborean.org/blog/wp-content/uploads/2006/05/reqfield.png" /></p>
<p>Otherwise, the border will be reverted to its default look.</p>
<p>The code of <code>HighlightListener</code> can be customized for:</p>
<ul>
<li>Another highlighting method</li>
<li>Additional highlighting conditions &#8211; e.g. we can check the content against a regular expression for required input format (valid email adresses for instance)</li>
<li>Additional actions &#8211; e.g. to enable/disable the &#8220;OK&#8221; dialog button if required data is not entered.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/05/07/tips-tricks-required-text-fields-in-swing/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 [...]]]></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&#8242;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>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/04/24/filesystem-is-evil/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

