<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Eitan Suez&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/" />
<modified>2007-03-11T07:42:20Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/eitan/44</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2007, eitan</copyright>
<entry>
<title>Desktop Matters Retrospective</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2007/03/desktop_matters.html" />
<modified>2007-03-11T07:42:20Z</modified>
<issued>2007-03-11T07:42:11Z</issued>
<id>tag:weblogs.java.net,2007:/blog/eitan/44.6787</id>
<created>2007-03-11T07:42:11Z</created>
<summary type="text/plain">An essential ingredient for a community is periodic face-to-face meetings. Although events such as JavaOne have served the purpose in the past, this event was stricly about the Desktop, and (unlike JavaOne) was very small and most intimate. I most...</summary>
<author>
<name>eitan</name>


</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>An essential ingredient for a community is periodic face-to-face meetings.  Although events such as JavaOne have served the purpose in the past, this event was stricly about the Desktop, and (unlike JavaOne) was very small and most intimate.</p>

<p>I most enjoyed getting to meet a number of java.net bloggers such as Kirill Grouchnikov, the author of the Substance look and feel, and members of the Sun Swing team including Shannon Hickey, Chet Haase, Hans Muller, and Richard Bair.  Of particular interest to me was the chance to meet people behind independent open source frameworks such as Wolf Paulus, the author of SwixML.  It's also always a pleasure to revisit with old friends Ben Galbraith, Dion Almaer, and Scott Delap, whom I know from speaking tours with NFJS (no fluff just stuff).</p>

<p>What I value most about such conferences is the chance to connect with the community, the people who were drawn to this conference, speakers and attendees alike, because of their involvement with desktop technologies in some respect.  They came to share and discuss.  This was not a dead audience.  Talks were interactive, and Ben made sure to heckle speakers that didn't get their fair share of questions.</p>

<p>Personally, I was very humbled by the feedback I received about my talk.  There's nothing more encouraging to one's work than getting positive feedback so personally.</p>

<p>I enjoyed informal conversations with fellow speaker Kai Toedter of Siemens, and Etienne Studer who delivered two presentations:  the first on the ULC product from Canoo (which imho rocks), and the second on IntelliJ IDEA's GUI designer where Etienne's facility in the environment made me reconsider my own intimacy with the product.  It was also an honor to get to meet and listen to the people behind JIDE.  David Qiao gave a great talk.</p>

<p>So, now that DM is over, and now that I'm home, I can finally say that I feel like I know at least a few members of my community, and it's a good feeling.</p>
]]>

</content>
</entry>
<entry>
<title>All sorts of matter..</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2007/03/im_excited_abou.html" />
<modified>2007-03-06T18:57:25Z</modified>
<issued>2007-03-06T18:57:18Z</issued>
<id>tag:weblogs.java.net,2007:/blog/eitan/44.6750</id>
<created>2007-03-06T18:57:18Z</created>
<summary type="text/plain">I&apos;m excited about the upcoming Desktop Matters conference, which takes place March 8-9 this week in San Jose, CA.  This conference is a first of its kind, focusing on Swing and other desktop technologies.</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: JavaDesktop</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>I'm excited about the upcoming Desktop Matters conference, which takes place March 8-9 this week in San Jose, CA.  This conference is a first of its kind, focusing on Swing and other desktop technologies.
</p><p>
The conference is organized such that it has a single track, which I very much like.  As much as it's nice to have a choice of talks to attend, I believe there's more value in everyone being in on what goes on, in sharing a common experience.  It's not unlike how TV used to be.  I recall a place and time where there was only a single national television station.  If a movie was on, everyone watched it, and there's something nice about that.
</p><p>
Personally, I will be attending the conference as a speaker:  I will be showing off my project:  <a href="http://jmatter.org/">JMatter</a>.  It's been a little over six months since I announced the project as open-source.  Our mailing list has grown to over 100 users and the feedback has been extremely positive.  Some of my favorites are:  "you should be speaking about this at JavaPolis" and "the documentation is outstanding."  Speaking of the documentation, I have recently expanded it and it now stands at roughly 200 pages.  The manual is now available in print as a self-published book from <a href="http://www.lulu.com/content/710734">lulu.com</a>.
</p><p>
I am looking forward to meeting the members of the rich client community at Desktop Matters.  Sometimes as developers we overlook the importance of attending a conference.  Listening to a talk or speaking with a colleague can be a catalyst for new ideas, and reinvigorates us when we get back to coding.  Perhaps I'll see you there.
</p>]]>

</content>
</entry>
<entry>
<title>That Open Source Feelin&apos;</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/12/that_open_sourc.html" />
<modified>2006-12-04T18:38:25Z</modified>
<issued>2006-12-04T18:38:16Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.6086</id>
<created>2006-12-04T18:38:16Z</created>
<summary type="text/plain">A public thank you to Sun Microsystems for choosing
to side with its community, to side with the open-source community on Java.</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>I wanted to wait for the dust to settle a bit before
airing my comments on the now dated news that Sun
Microsystems has open-sourced Java.</p>

<p>I recall clearly a period of activity on java.net where
many (including me) voiced their desire to see Java 
open-sourced.</p>

<p>Now that this has happened I'm amazed at the correlation
of this event with my own experiences.  In my career 
I've open-sourced two projects:  <a href="http://ashkelon.sf.net">ashkelon</a>
and <a href="http://jmatter.org">JMatter</a>.</p>

<p>Each time the process of letting go and embracing open
source was very difficult, even arduous.  I took what
felt like forever to arrive at the decision.
Surprisingly after the decision was made, the feeling was
very positive, very rewarding:  that I'd shared my work with
the community.  The same thoughts reverberate:  "why did it
take me so long to do this?"  I believe the reward is of 
equal or greater magnitude to the effort;  that is, it's worth
doing.</p>

<p>With my first project, I hadn't yet read Eric Raymond's
Cathedral and the Bazaar.  I was a novice when it came
to managing an open source project.  I still regret that
I wasn't able to make the project flourish, though I
don't regret for a moment open-sourcing the project.  Many
used my code and some sent me improvements.  There was
also at the time an obstacle to this project:  the fact
that one could not legally publish online javadocs for
Java's APIs.</p>

<p>Another correlating fact was my choice of license.  Both my
projects are available under the GPL.  So it's a great feeling
of validation to see that Sun has also chosen this license.</p>

<p>One odd way to describe how I feel about Sun open-sourcing Java
is that the positive feeling is of equal magnitude to the
negative feeling I had when hearing the news of the Novell
ship sinking.  It gives me hope for the future.</p>

<p>In my mind the parallels that exist between
the events that play out in real life: the battle being 
waged between the forces of open and close code, and between
the Star Wars saga are striking.  I don't mean to sound 
cheesy here, but we see time and again how sometimes organizations
exert their force by proxy, sometimes anonymously (as in the
case of SCO).</p>

<p>One item I've been ranting about to friends (and on this
site) for too long is how companies can get away for charging
people for software they don't use.  Each time I purchase 
a notebook computer and quickly wipe the disk clean to
install Ubuntu, I pay the famous "microsoft tax" for a license of
windows I did not ask for.</p>

<p>I would like publicly thank Sun Microsystems for choosing
to side with its community, to side with the open-source community
on Java.  I sincerely hope that a few years from now Sun will be able
to say:  "we made a good decision;  and it has paid off handsomely."</p>
]]>

</content>
</entry>
<entry>
<title>Where Swing should Venture</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/06/where_swing_sho.html" />
<modified>2006-06-29T17:05:10Z</modified>
<issued>2006-06-29T17:04:52Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.5123</id>
<created>2006-06-29T17:04:52Z</created>
<summary type="text/plain">An increasing number of frameworks are appearing that I 
find particularly interesting.  They&apos;re web AJAX frameworks
where the details of the HTTP communication and of all
the HTML and JavaScript on the front-end are hidden behind
a Swing-like API.</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: JavaDesktop</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>An increasing number of frameworks are appearing that I 
find particularly interesting.  They're web AJAX frameworks
where the details of the HTTP communication and of all
the HTML and JavaScript on the front-end are hidden behind
a Swing-like API.</p>

<p>Here are some of these new frameworks:</p>

<ul>
<li><a href="http://nextapp.com/">NextApp's Echo2</a></li>
<li><a href="http://www.j-wings.org/">WingS</a></li>
<li><a href="http://code.google.com/webtoolkit/">Google's GWT</a></li>
</ul>

<p>It's also worth mentioning that <a href="http://www.canoo.com/ulc/">Canoo ULC</a> also provides a 
Swing-like API, but they're trying to leap-frog AJAX 
altogether:  they deploy Swing thin clients.</p>

<p>Even though this model is new and not yet "fully" proven,
I find it very promising.  Up until now, web developers
have had to master multiple different technologies including
Java, Servlets, JavaScript, HTML, HTTP, session management
and cookies, and the idiosynchracies of various web 
browsers on a multitude of platforms.</p>

<p>These frameworks promise to collapse all of these layers
down to one.  That's tremendous.</p>

<p>So I was thinking, if what is essentially a Swing-like 
API can be used to build rich web applications, would
it be possible to extend Swing in such a way that a
deployment switch controls whether we produce a 
web application or a ...   Swing application?</p>

<p>I suppose we could think of this in reverse:  can an 
HTML look and feel be constructed for Swing?</p>

<p>The end result would be the same:  we'd write a single
application, using <em>The</em> Swing API (not a Swing-<em>like</em>
API) and we'd be able to target the web without any
extra effort.</p>

<p>So, my message in this blog is:  I think Swing 
should venture in that direction.</p>]]>

</content>
</entry>
<entry>
<title>I&apos;ll have Spam, Spam, Spam, sausage, eggs, and JMatter please..</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/06/ill_have_spam_s.html" />
<modified>2006-06-23T07:10:02Z</modified>
<issued>2006-06-23T07:09:40Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.5080</id>
<created>2006-06-23T07:09:40Z</created>
<summary type="text/plain">For some reason, I did not catch the wonderful Monty Python Flying Circus episodes in my youth. Recently in the USA on public TV they&apos;ve started airing re-runs. So it was not until maybe a few months ago that I...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: JavaDesktop</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>For some reason, I did not catch the wonderful Monty Python
Flying Circus episodes in my youth.  Recently in the USA
on public TV they've started airing re-runs.</p>

<p>So it was not until maybe a few months ago that I got a great
big laugh watching the classic <a href="http://en.wikipedia.org/wiki/Spam_%28Monty_Python%29">Monty Python Spam episode</a>, wherein everything on the menu has Spam
in it.</p>

<p>Earlier this week I proudly announced that I'd finally open
sourced <a href="http://jmatter.org/">JMatter</a>, a framework that 
I've been developing for a good while, for developing rich
client applications at very high productivity levels.</p>

<p>I never really blogged about it, feeling it was not appropriate
to promote code that was proprietary.  For some reason, even
now I have a little difficulty with this.  So I thought <em>why not
try to do it with a little humour?</em>  That usually makes the SPAM
go down a little easier.  :-)</p>

<p>On a more serious note, I've been delighted at the response to
my announcement.  We already have a thriving mailing list, terrific
discussions, and I've had the good fortune that a few fellow
developers have blogged most favourably on JMatter.</p>

<p>If you have a little time, I invite you to check it out!</p>]]>

</content>
</entry>
<entry>
<title>A Harness for Swing</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/05/dreaming_of_a_s.html" />
<modified>2006-05-04T13:36:28Z</modified>
<issued>2006-05-04T13:36:19Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.4636</id>
<created>2006-05-04T13:36:19Z</created>
<summary type="text/plain">I was thinking about this a while back and it struck me as interesting that as a GUI toolkit, Swing is different from a number of other GUI toolkits out there that were born out of the need for creating...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: JavaDesktop</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>I was thinking about this a while back and it struck me as interesting that as a GUI toolkit, Swing is different from a number of other GUI toolkits out there that were born out of the need for creating a graphical desktkop system.  Namely, GTK has GNOME (and Xfce), Qt had KDE, and MFC has Windows.</p>

<p>What does Swing have?  SwingSet2?  Not really.  There are indeed thousands of rich Swing applications that exercise Swing.  NetBeans being a very serious one developed by Sun, the same organization that develops Swing.  One could also say, "look SWT doesn't have a desktop either,  they just have Eclipse."  So, you are right, it's not fair to make such a comparison.  Nevertheless, it does not mean that it would be a bad idea to have such a project drive the evolution of Swing going forward.</p>

<p>There's nothing like a full-fledged desktop system used by thousands of people daily to serve as a complete harness for a robust GUI API.  A desktop system probably exercises all facets of such a toolkit:</p>

<ul>
<li>Does the toolkit provide a complete suite of widgets that can support a very dynamic user interface?</li>
<li>Are the widgets rich enough?  Are they flexible enough?</li>
<li>Is the performance of the toolkit's components being put to the test on a regular basis?</li>
<li>How well do the components interact with each other?</li>
</ul>

<p>I see an interesting development going forward.  I recall reading that someone has ported most of GTK to MacOSX.  That is, very soon, Apple users will be able to run GTK apps alongside their Cocoa apps.  It is my understanding that GTK also works on Windows.  Swing has been in a unique position for a while of being able to run multiple platforms.  Others are catching up.  And they do have some advantages, having multiple language bindings possibly being one such advantage.</p>

<p>In all fairness, I should mention an excellent project out of France whose goal is to create a desktop system for Java written in Swing:  <a href="http://www.jdistro.com/">JDistro</a>.  What I'm really interested in is a stronger coupling, a stronger feedback loop between two teams:  one developing a Swing Desktop System, and another supporting its development by making improvements in the Swing toolkit.</p>
]]>

</content>
</entry>
<entry>
<title>Thought Catalysis</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/05/thought_catalys.html" />
<modified>2006-05-03T15:42:33Z</modified>
<issued>2006-05-03T15:42:25Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.4625</id>
<created>2006-05-03T15:42:25Z</created>
<summary type="text/plain">Recently some new ideas have come to me out of activities that I did not expect would generate any. In this blog entry I&apos;d like to enumerate sources or catalysts for ideas, for generating thoughts. Revisiting things you already know:...</summary>
<author>
<name>eitan</name>


</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>Recently some new ideas have come to me out of activities that I
   did not expect would generate any.  In this blog entry I'd like 
   to enumerate sources or catalysts for ideas, for generating 
   thoughts.</p>

<ol>
<li><p>Revisiting things you already know:  you will likely see them from a new
point of view.  This will usually happen because time has passed.  You've
changed, you're not exactly the same person you were when you originally
studied the material.  That's what happened to me as I prepared to give 
my set of talks at NFJS last weekend.</p></li>
<li><p>Attend talks given by others.  It's very likely that the same topic 
will be presented from a different angle, a different point of 
view.</p></li>
<li><p>Get together with other developers.  A NFJS conference might 
do the trick.  JavaOne is coming up.  Maybe your local JUG meeting.</p></li>
<li><p>Even if a topic is not related to the work that you're currently doing,
you might be surprised to find once in a while that a situation is
discussed that is analogous to yours, albeit in a different domain,
a different context.</p></li>
<li><p>Provoke thoughts in others.  That has the tendency to amplify the thought
process.  You might not be prepared for an avalanche of feedback, ideas
triggered by your original provocation.  That happened to me recently
after I demo'd some software I was working on to a couple of friends
/ colleagues.</p></li>
<li><p>A few friends recently decided to get together for Friday lunch meetings.
It's been a great opportunity to discuss what each of us are working
on, articles or books we came across that grabbed our attention or interest.
We always have more to talk about than time available, which is a 
positive sign.</p></li>
</ol>]]>

</content>
</entry>
<entry>
<title>MVC without leaks implies generic VC</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/05/mvc_without_lea.html" />
<modified>2006-05-02T15:03:11Z</modified>
<issued>2006-05-02T15:03:01Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.4619</id>
<created>2006-05-02T15:03:01Z</created>
<summary type="text/plain">How many times have we heard or preached (or both) the important lesson of not having our business logic &quot;leak&quot; into the client tier. Each time we hear it, we nod our heads and say &quot;how true,&quot; and get serious...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>How many times have we heard or preached (or both) the important lesson of not having our business logic "leak" into the client tier.  Each time we hear it, we nod our heads and say "how true," and get serious for a moment.</p>

<p>The idea of logic leaks applies to other aspects of development, not just the client tier.  For example, the Hibernate project is very concerned about not leaking persistence issues to other application tiers.</p>

<p>As I was thinking about this notion of business logic leakage, a very interesting thought came to me.  Say for example that we define a business object, maybe a <code>Customer.</code>  Furthermore, let's say we define a number of fields on this object:  name, date of birth, etc..  The minute we put down in our text editor the lines:</p>

<pre><code>&lt;caption&gt;Name:&lt;/caption&gt;
&lt;input type="text" name="name" /&gt;
</code></pre>

<p>..is the minute we've crossed the line;  we have violated the DRY principle.  We have just leaked business logic into our view.  From now on, if we rename the field, we must do it in two places:  in the model and in the view.</p>

<p>Now, imagine being in the process of developing an application consisting of a dozen business objects, each with a half dozen fields.  Model changes are going to occur.  They're going to imply making changes in more than one place.</p>

<p>Given this, it's no wonder that resistance to change grows as a project gets larger.  Yet business change is inevitable.  People talk about the high cost of building software.  It's no wonder the cost is high if we have to manually make each change twice.  Not only is it more work but also error-prone.  The essence of DRY is eliminating that duplication.</p>

<p>So, having provided a context, I can finally describe this small epiphany I have had in a short sentence:</p>

<blockquote>
  <p><em>If we're going to have a model-view-controller system 
  without business logic leaking into the view, then we 
  must construct generic views and controllers.</em></p>
</blockquote>

<p>What does that mean?  Take for example, the CRUD scaffold generators in Rails.  The code duplication is still there but at least the duplication is automated.  Admittedly not bad for a first pass.</p>

<p>The other interesting tidbit that sort of "falls out" of this small thought exercise is:</p>

<blockquote>
  <p><em>GUI is plumbing</em></p>
</blockquote>

<p>I've been saying this for a couple of years now but it is still my hope that some day everyone will have good GUI plumbing for their software applications.</p>]]>

</content>
</entry>
<entry>
<title>Stoked: Not Just for Surfers Anymore</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/05/stoked_not_just.html" />
<modified>2006-05-01T21:18:41Z</modified>
<issued>2006-05-01T21:18:33Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.4618</id>
<created>2006-05-01T21:18:33Z</created>
<summary type="text/plain">I sometimes enjoy describing feelings a software developer might experience, at certain moments during development. For example, a while back I blogged about &quot;Grazie Signore&quot; moments. This past weekend I attended the Northern Virginia Software Symposium and was fortunate to...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Extreme Programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>I sometimes enjoy describing feelings a software developer might experience, at certain moments during development.   For example, a while back I blogged about <a href="http://weblogs.java.net/blog/eitan/archive/2005/05/grazie_signore.html">"Grazie Signore" moments</a>.</p>

<p>This past weekend I attended the Northern Virginia Software Symposium and was fortunate to have a little time to spend with my NFJS comrades.  A most vivid comment that Justin Gehtland made during one discussion was how stoked he was about this software we were discussing.</p>

<p>It occurred to me on the plane ride back to Austin that the term "stoked" is normally used to describe the feeling one gets when surfing.  Perhaps it's also applied in the context of extreme-sports related activity.</p>

<p>To my wonder, the term could be applied, and very aptly so, to moments that we, geek software developers, have in our work.  That feeling arises when we do something that we think is extremely cool, that perhaps hasn't really been done in that particular way.  For example, I sensed that feeling when reading a weblog I came across on java.net a while back, having to do with a very cool idea that occurred to one of the <a href="http://wicket.sourceforge.net/">Wicket Framework</a> developers.  See <a href="http://weblogs.java.net/blog/timboudreau/archive/2006/02/wicket_swing_hm_1.html">Wicket + Swing == hmmm...interesting...</a>.</p>

<p>I believe that this feeling is the driving force behind the hordes of us out there, of any age, who spend their spare time coding, pursuing the creation of something that, to them, is so incredibly cool.  So, just like surfers can't stop surfing and continually strive to be in that most special state of being stoked, so do software developers.</p>]]>

</content>
</entry>
<entry>
<title>A better way to build business software applications</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/04/a_better_way_to.html" />
<modified>2006-04-21T00:33:57Z</modified>
<issued>2006-04-21T00:33:51Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.4547</id>
<created>2006-04-21T00:33:51Z</created>
<summary type="text/plain">Each time I look at the task of constructing a business software application, I see tremendous repetition.</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>Each time I look at the task of constructing a business software application, I see tremendous repetition.  Each application has many facets, most of them are generic.  Yet each time we appear to rebuild each facet from scratch.  For example, we construct new authentication screens.  We build an object model for our domain.  We must construct mechanisms for browsing and searching objects, mechanisms for creating new objects, for viewing objects, for editing and deleting objects:  the CRUD (Create, Read, Update, Delete) operations.  Let's also not forget validation.</p>

<p>Oftentimes, we deal with scheduling activities and must develop or integrate calendars into our software applications.  Inevitably, our customers will require a mechanism to produce reports.  We will also supplement our user interfaces with wizards, by walking a user through a series of steps.  We need to persist our objects to databases, we need an authorization mechanism.  We need audit mechanisms to find out when information was edited, by who.</p>

<p>Many of these tasks are generic, orthogonal to the problem domain.  Must we keep on constructing new implementations each time we start on a new project?  Is it even feasible to produce implementations of these concerns (e.g. authentication, authorization, CRUD, a user interface, searching, reporting, wizards, etc..) that are completely decoupled from the business domain in question?  Can we even entertain the thought?</p>

<p>To me, the NakedObjects framework is a proof of concept.  It demonstrates that it is indeed feasible to implement many of the various concerns of application development generically.  Usually the tradeoff is adherence to certain framework conventions, though others have shown that many of these conventions are not absolutely necessary.</p>

<p>Look at the scaffolding generators in Ruby on Rails.  Trails is another project that embodies these same ideas.  The idea is basically that a domain model can be constructed that is to a large extent ignorant of the context it runs in.  This sounds like the Spring Framework and Dependency Injection.  But it goes well beyond injecting transactional rules or turning JNDI on its head.  Indeed, a long time NakedObjects proponent, Dan Haywood, is working on his own framework (see <a href="http://www.essentialplatform.org/index.html">Essential</a>), and is leveraging the Spring Framework for it.  The Naked Objects folks have recently coined the term "The Naked Objects Architectural Pattern" to categorize frameworks that adhere to their architecture concepts and ideas.</p>

<p>In Ruby, one uses the piece of metadata <code>:attr_reader</code> to tag fields that one wants to expose with getter methods.  In NakedObjects, there's a <code>fieldOrder</code> piece of metadata to relate how fields should be laid out on a form in a user interface.  It is specified in a manner analogous to Ruby's <code>:attr_reader</code>.  This manner of specifying metadata is also in line with the DRY (Don't Repeat Yourself) principles given to us by the pragmatic programmers.  It expresses our intent succintly and without duplication.</p>

<p>Let's set aside the "can it be done" question for a moment and envision the rewards.  What do we have to gain as an industry if we manage to develop a system that provides generic implementations for these generic aspects of business application development?</p>

<p>Imagine an ecosystem, similar to Eclipse, but not for tooling.  Instead, this ecosystem would be a runtime infrastructure ecosystem, where providers supply competing implementations of these various concerns (this is what Rails is evolving towards by the way).</p>

<ul>
<li>developers would spend the vast majority of their time directly addressing customers' problems</li>
<li>conversely, very little time would be spent building software infrastructure</li>
<li>software infrastructure would become standardized</li>
<li>development time and cost would decrease dramatically</li>
<li>infrastructure components would be of higher quality</li>
<li>the size of the code that pertains directly to a specific project would shrink dramatically</li>
<li>our abilitly to read, understand, and extend other people's code would likewise improve</li>
<li>we would have true decoupling of concerns</li>
<li>the developer would simply plug in their object model (the data and behaviours) into a 
 an infrastructure that would supply everything else</li>
<li>we'd be able to pick which aspects we want to include in our application at deployment time (the true, original vision of J2EE by the way)</li>
<li>our applications would inherit new features when infrastructure upgrades came along,
 without even altering a single line of code in our applications</li>
</ul>

<p>I'm not even mentioning the benefits to developer-customer relations, the closer mapping between a user interface and its object model with direct benefits to customers' understanding of the logic behind a business application (hence the term "Naked Object").</p>

<h2>Aside</h2>

<p>Many people have been saying "Move over Java, Ruby is the new language in town."  I do agree to some of the arguments but not all of them.  How much of this is a language issue?  I do admit that maybe implementing such a system is easier and simpler in Ruby.  But that does not mean that it cannot be done in Java.  Java has reflection.  Java does not have mixins.  Java has AOP.  So there are tradeoffs.  I suppose if you really want to do it from scratch, Ruby might be a better choice, from a certain point of view.  If you're building a rich client that needs to run cross-platform with a minimum of fuss, I'd say that Java is the better choice.  Smalltalk could be just as good a choice, perhaps a better one.  Paul Graham says it's LISP and I know he's got some very good reasons.</p>

<p>My contention is that the debate has been focusing disproportionately on the language as the root enabler of frameworks such as Rails.  The ecosystem I dream of can be constructed in Java.  We would reap serious savings in development time, development cost, similar to the time and cost savings that are being boasted about by the Rails community.</p>

<p>I have developed my own framework that embodies these ideas.  At this time, this framework addresses only workgroup business applications.  It does not tackle the important issue of transport.  I have recently employed this framework to construct a small solution for a customer.  The numbers are in line with my expectations.  On this particular job, I spent under two weeks implementing the solution when the original estimate had been in the order of two months.  So how much does this have to do with language?</p>

<p>[Footnote:  blog entry cross-posted on Eitan's personal weblog]</p>]]>

</content>
</entry>
<entry>
<title>Proposed Annotations Enhancements</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/02/proposed_annota.html" />
<modified>2006-02-15T23:27:59Z</modified>
<issued>2006-02-15T23:27:51Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.4132</id>
<created>2006-02-15T23:27:51Z</created>
<summary type="text/plain">I think these should make for a nice extension to the existing Java 5 Annotation API: From an Annotation, one should be able to navigate back to the programming element that it annotates. For example, a method annotation clearly marked...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: JDK</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>I think these should make for a nice extension to the existing Java 5
Annotation API:</p>

<ol>
<li><p>From an Annotation, one should be able to navigate back to the programming element that it annotates.</p>

<p>For example, a method annotation clearly marked with a Target 
 of ElementType.METHOD cannot say getAnnotatedElement().getName(),</p>

<p>There are two problems here.  The first is the lack of the
  getAnnotatedElement() method
The second is the fact that an AnnotatedElement is too primitive
 of an interface.  You cannot actually invoke getName() on an
 annotated element.  I feel that there should exist a basic
 ProgrammingElement implemented by or extended by all annotated
 elements.</p></li>
<li><p>The default value for an annotated element should not be restricted
to a constant expression.  Instead, the value should be a code block.</p>

<p>For example, let's assume that I want to annotate methods to
 give them a caption.  By default, the caption should be some
 kind of derivation from the method name it is bound to.</p>

<p>That is,</p>

<pre><code>class MyClass
{
  @MyMethodAt(caption="The X Method")
  public void method x()
  {
    // ..
  }
}


and


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyMethodAt
{
  public String caption() 
     default
     {
       return getAnnotatedElement().name();  // see [1]
     }
}
</code></pre>

<p>As far as I know, this is currently not possible.</p></li>
</ol>

<small>* Entry cross-posted on my personal weblog</small>]]>

</content>
</entry>
<entry>
<title>Skip the Compile</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2006/01/skip_the_compil.html" />
<modified>2006-01-31T15:30:47Z</modified>
<issued>2006-01-17T22:19:55Z</issued>
<id>tag:weblogs.java.net,2006:/blog/eitan/44.3959</id>
<created>2006-01-17T22:19:55Z</created>
<summary type="text/plain">It seems to me that many issues that come up in Java stem from the &quot;I don&apos;t want to have to recompile my code&quot; argument. All kinds of design decisions stem from it too. We end up with systems that...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: JDK</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>It seems to me that many issues that come up in Java stem from the
"I don't want to have to recompile my code" argument.  All kinds of
design decisions stem from it too.  We end up with systems that 
are written in two or more languages.  What I mean is that we
usually end up with a mix of Java code, properties files, xml files
and other stuff.  The properties files and xml files can be viewed
as interpreted mini-languages that bypass the Java compilation hurdle.</p>

<p>Many debates surrounding Java 5 annotations also are related to this
issue:  many have argued that they don't want to have to recompile
their code to revise the value for a piece of metadata.  Fair enough.</p>

<p>How many times have you heard or read of a selling point for a 
software framework or product or solution being "and you can make
changes to the system without having to recompile the code."  I 
must admit I'm sure I used that line more than once before (in my
early days programming :-)).</p>

<p>So here's what I find interesting:  instead of coming up with all
kinds of schemes to get around the problem, why don't we just deal with 
the root cause?  I think it's staring at us in the face:  why don't we 
simply program in an interpreted environment?</p>

<p>I think we all must admit that it's much nicer to be able to make
a change to a web page or a template or a piece of code and very
quickly turn around and test the change without having to recompile.
Compare that to the way a jsp works:  compile the jsp into a servlet
and compile the servlet into bytecode.  It's true that servlet 
containers are easily configured to 'autoreload' jsps.  So in this
case, it's really no big deal.</p>

<p>But that's not what I'm talking about here.  What I'm talking
about is if we need the equivalent of a config file, we don't
have to go out-of-band and step out of the Java environment
and start our new metalanguage in a properties or XML file
like James Duncan Davidson did with Ant or like we do every day.  We would simply
write source code.  An entire thick layer of nonsense design
decisions would simply disappear.  No more debates about put
this code here or there depending on whether we want to incur
the cost of a recompile.</p>

<p>This essentially is the argument for internal domain specific
languages (DSLs).  So Rake files are not written in XML like Ant is
but instead they're interpreted by Ruby, the same interpreter
that you use to write your Rails app (note: ruby and rake and rails are discussed here as means to provide an illustration.  this entry is _not_ about 'ruby is better than java' but rather about the more general idea that 'interpreted might be better than compiled, from this point of view anyway').</p>

<p>More and more these days I'm coming to think that a single or unified
underlying model for interpreting stuff would be a good, pleasing thing.
I like this kind of simplification.  We end up with a more uniform 
system, and spend less time reinventing the wheel.</p>

<p>I find it most interesting that for some reason, discussions around
this basic issue never seem to come up.  What comes up are people
talking about or trying to solve the symptoms of the root cause, but
the root cause seems to evade us.</p>

<p><i>Note: this entry is cross-posted on my personal weblog</i></p>]]>

</content>
</entry>
<entry>
<title>Ubuntu Review</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2005/12/ubuntu_review.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-12-14T19:58:55Z</issued>
<id>tag:weblogs.java.net,2005:/blog/eitan/44.3801</id>
<created>2005-12-14T19:58:55Z</created>
<summary type="text/plain">Approximately in June or July of 2005, I started weaning myself off of my powerbook G4, and learning the Gnome environment under Ubuntu (v5.04, now v5.10). Overall, it&apos;s been a terrific experience, and it&apos;s looking like I&apos;ve come here to...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: linux.java.net</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>Approximately in June or July of 2005, I started
weaning myself off of my powerbook G4, and learning 
the Gnome environment under <a href="http://www.ubuntulinux.org/">Ubuntu</a> (v5.04, now v5.10).</p>

<p>Overall, it's been a terrific experience, and it's looking
like I've come here to settle down.</p>

<p>So I thought I'd summarize my experiences, from my perspective
as a Java software developer, and as a computer user in general.</p>

<h2>The Good</h2>

<p>Here are a few things I really like in Ubuntu / Linux:</p>

<ul>
<li><p>The Gnome Epiphany Web Browser:  my favorite browser.
See my <a href="http://weblogs.java.net/blog/eitan/archive/2005/12/an_epiphany.html">blog entry</a> on the subject.</p></li>
<li><p>Edutainment + kids games:  On linux, one can download a number of games for children that are of high quality from the point of view of the material they cover.  Sure, some games like supertux, are just plain fun 'mario brothers' style games.  But many can be powerful tools that can hone the brain power of children.  Here are some of them:</p>

<ul>
<li>kturtle (logo programming)</li>
<li>gcompris</li>
<li>tuxmath / tuxtyping</li>
</ul>

<p>My kids and I also very much like supertux, tuxracer, and tuxkart.  I'm particularly proud of my 3 year-old who is now a supertux champion and has mastered the arrow keys, the enter key, the control key, and spacebar.</p></li>
<li><p>Quality open source desktop applications.  Who said that open source can't produce desktop apps of higher quality than their commercial counterparts.  If you thought the adobe had the best vector graphics editing application, take a look a inkscape.  For pictures, check out the beauty of f-spot.  For spreadsheets, I think gnumeric is terrific.</p></li>
<li><p>Authoring tools.  A number of different technologies can be used to write books or articles.  Docbook is one and docbook support in the form of toolkits, documentation, utilities and more is the strongest on linux.  Many love LaTex.</p>

<p>I particularly appreciate lyx, a wonderful wysiwym editor that does all the heavy lifting for you.  If you're about to write a book and don't have in-depth knowledge of docbook or latex, then I believe lyx is the right choice.</p></li>
<li><p>Strong pdf support.  One can easily produce a pdf version of a document, translate a postscript file to PDF.  I recently printed a web page to a postscript file and then translated it to PDF.</p></li>
<li><p>editors galores.  Lots of editors to choose from.  gedit, kedit, kate, jedit, and many more besides.</p></li>
<li><p>apt-get and the amazing synaptic package manager.
Want an app?  Just wish it and a few seconds later it's completely
installed on your system, along with all its dependencies.  That's the magic of the synaptic package manager.  apt is the technology that makes it happen and the synatpic front-end gives you no reason to ever fall back to the command line.</p></li>
<li><p>strong printer support</p>

<ul>
<li>lj3200 which i'd given up on entirely with my mac (hp did not 
make apple drivers for this specific version), worked like a charm
with linux, without having to install drivers</li>
<li>doing duplex printing with my brother 5150D at the office</li>
<li>doing network printing to an hp inkjet printer</li>
</ul></li>
<li><p>wifi worked for me out of the box.</p></li>
<li><p>the sleep feature works just fine but does not conserve the battery charge
nearly as well as my powerbook did.  hibernate then is the alternative,
which has worked great for me for many months, up until a recent kernel
update.</p></li>
<li><p>strong device support in general:  plugged in my camera and automatically
started downloaded photos, without even having to download anything.</p></li>
<li><p>amazing endless suite of kde apps.  from kontact to koffice, kde is simply
an amazing source of seemingly boundless energy.</p></li>
<li><p>kde and gnome apps can run side by side</p></li>
<li><p>terrific support forums</p></li>
<li><p>java:</p>

<ul>
<li>unlike the last OS i worked on, there are no issues regarding obtaining
the latest java udpates on time</li>
<li>all the java ides work with it: intellij, eclipse, and netbeans</li>
<li>have the option of building java applications that use the gtk toolkit</li>
</ul></li>
<li><p>latest firefox</p></li>
<li>endless supply of artwork for customizing background image,
login manager, login splash, window decorations, icons, and themes</li>
<li><p>freedom!</p></li>
<li><p>no viruses, no symantec, no mcaffee</p></li>
<li><p>complete desktop customization features, especially with kde, although in the end i prefer gnome;  i find myself forever tinkering on kde, and more productive on gnome.  each has their strengths and together they make for an even better distribution: a wider array of choices;  sometimes you get this feeling though that the velocity on the kde projects is just so amazing..</p></li>
<li><p>i <em>love</em> the ability to assign keyboard shortcuts to <em>anything</em>
i rarely touch the mouse and am in complete control</p></li>
<li><p>ruby.  if you're doing ruby development, installing the toolstack, including rails is a snap.</p></li>
<li><p>cost.  i don't have to pay for additional apps.  my notebook cost me approximately 1/3 the price of my last one.</p></li>
</ul>

<h2>The Bad</h2>

<ul>
<li>projector support is not really there like it is on a mac</li>
<li>sleep does not conserve battery well</li>
<li>had some hickups with hibernate after a kernel update</li>
<li>have some weird totem/video problems at the moment, though there's no lack
of video players for gnome or kde, this one happens to be the default and
for some reason hangs when attempting video playback</li>
</ul>

<h2>Summary</h2>

<p>The main reason I switched to ubuntu is that I can now compile and launch
my java apps in 1/2 to 1/3 the time it used to take me on my last laptop.
I used to run a 1GHz powerbook G4.  Now I run a 1.7GHz intel centrino
(same amount of ram on both).  That's a serious advantage.</p>

<p>Finally, contrary the general perception, I don't compile my gnome apps
or kernel.  I download and install precompiled binary distributions of
all my apps.</p>

<p>I'm very satisfied with Ubuntu and in the event that you're looking for
the right home, I hope this short review was helpful.</p>]]>

</content>
</entry>
<entry>
<title>An Epiphany</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2005/12/an_epiphany.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-12-14T17:48:43Z</issued>
<id>tag:weblogs.java.net,2005:/blog/eitan/44.3796</id>
<created>2005-12-14T17:48:43Z</created>
<summary type="text/plain"> Everyone stands behind their favorite web browsers. Firefox definitely appears to be at the forefront. But then you come across people who prefer Camino, for example, which is a web browser that uses the Gecko layout engine but taylors...</summary>
<author>
<name>eitan</name>


</author>
<dc:subject>Community: linux.java.net</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>
Everyone stands behind their favorite web browsers.
Firefox definitely appears to be at the forefront.
But then you come across people who prefer Camino, 
for example, which is a web browser that uses the 
Gecko layout engine but taylors its user interface 
to fit the MacOSX mold, so to speak.  Camino 
indeed is pretty cool and pretty fast.  If you run
macosx, you should definitely check out Camino.
</p><p>
In a similar vein, I recently (maybe two-three months
ago) came across <a href="http://gnome.org/projects/epiphany/">Epiphany</a>..and i'm in love.
</p><p>
Epiphany is to Gnome what Camino is to MacOSX:  a web
browser that uses Gecko but its UI uses the Gnome and
GTK APIs for a user interface.  Epiphany was designed to
fit in on a Gnome desktop.  Indeed, it is the endorsed
web browser for Gnome.
</p><p>
But that's not the reason I so love Epiphany.  Epiphany's
philosophy appears to be along the lines of <em>stay out 
of the user's way</em> and <em>less is more</em>.
</p><p>
So, beside the fact that Epiphany has the following
favorable traits:
</p><ol>
  <li>it just works
  <li>it has a simple, minimal menu structure
  <li>it supports tabbed browsing
  <li>it highlights bits of strings on a page when doing
      incremental find's
</ol>
<p>
the feature that really speaks to me is the design of its
bookmark system and the way in which you can customize 
the browser with actions for URL handling without having
to write any code.
</p><p>
This is subtle but a most wonderful feature.  Allow me
to illustrate.
</p><p>
When you launch Epiphany, you won't find two text fields
at the top edge of the window: one for the URL address 
and another for doing the Google search.  Instead you'll 
find a single text field where the URL address is entered.
</p><p>
How then does one perform a Google search without having to 
first visit google.com?  By writing a plugin. Here's how:
</p><ol>
  <li>visit google.com
  <li>enter a search string, for example: testing
  <li>bookmark the search results:
     name the bookmark "Google this"
     
  <li>edit the bookmark:  in the url string, replace
    the word "testing" with "%s". You've just parametrized
    the URL.  save the bookmark.
</ol>
<p>
  Now, open a new browser window and type "java" in the
  URL field.  You'll notice that a pull down menu will appear
  containing the option "Google this."  Selecting
  that option will automatically visit the google search
  URL, replacing that "%s" in that bookmarked url with 
  the search string you entered in the url field.
  It's a dynamic bookmark.
</p><p>
  How wonderful!  In my browser, I've configured four such
  dynamic bookmarks:  google search, wikipedia search,
  dictionary search, and ashkelon search.  So now when
  I'm coding I can just type in the url field: "String*"
  and select the 'ashkelon search' option from the
  Epiphany context menu, et voila: i get my ashkelon 
  (javadoc) search results.
</p><p>
  In addition to this cool search feature, if you type a substring
  of the name of a bookmark in that magic url field, that bookmark
  will show up in the context menu as well.
</p><p>
  If you do use Gnome, I highly encourage you to give Epiphany
  a try.  It's a stable and robust browser.  But just as importantly
  it's well-designed.  If you don't use Gnome but would like to
  give it a whirl, I strongly recommend the ubuntu distribution.
  Last note: Epiphany also works on KDE.
</p>]]>

</content>
</entry>
<entry>
<title>Humane Interfaces:  Setting the Record Straight</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/eitan/archive/2005/12/humane_interfac.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-12-14T16:20:24Z</issued>
<id>tag:weblogs.java.net,2005:/blog/eitan/44.3793</id>
<created>2005-12-14T16:20:24Z</created>
<summary type="text/plain"> Every so often I go and read the wisdom of elharo over at cafeaulait.org. So today I came across this specific entry discussing &quot;humane&quot; interfaces: http://www.cafeaulait.org/oldnews/news2005December7.html Here is a snippet from elharo&apos;s blog entry: &quot;More buttons/methods does not make...</summary>
<author>
<name>eitan</name>


</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/eitan/">
<![CDATA[<p>
Every so often I go and read the wisdom of elharo over at cafeaulait.org.
</p><p>
So today I came across this specific entry discussing "humane" interfaces:
</p><p style="text-align: center;">
   <a href="http://www.cafeaulait.org/oldnews/news2005December7.html">http://www.cafeaulait.org/oldnews/news2005December7.html</a>
</p><p>
Here is a snippet from elharo's blog entry:
</p><blockquote>
"More buttons/methods does not make an object more powerful or 
 more humane, quite the opposite in fact. Simplicity is a 
 virtue. Smaller is better."
</blockquote><p>
Hearing stuff like this makes my blood boil.  I am a disciple
of Jef Raskin (z"l), the person who designed the first Macintosh,
the author of the book "The Humane Interface" (THI).
</p><p>
My goal in this entry is very simple:  to prevent the perversion
of the meaning of the word "Humane", to set the record straight.
</p><p>
I read Raskin's THI a number of years ago, and don't have it in
front of me at the moment.
</p><p>
The claim made by elharo is simple:
</p><ul>
  that an apple iPod user interface, or the imac's new 
  remote control, with its 4-5 buttons is better or
  superior to the 100-button remotes from hp and gateway.
</ul><p>
That's absolute nonsense.
</p><p>
The 100-button remotes are infinitely better.  The ipod has 
serious usability issues.  The problem was easily illustrated 
to me one day when I tried to teach my poor daughter to use the 
ipod's interface a year or two ago (she was 4 or 5 years old).
</p><p>
The poor girl was getting so frustrated that pushing the sequence
of buttons I instructed her to push did not have the desired outcome.
Instead of scrolling a song list, the volume would go up!
</p><p>
Why??  The ipod only has three or four buttons.  That's not enough
to express 100 different operations. So the buttons must be overloaded; they must be made modal.  That is, the same button
does different things in different contexts.  This is precisely
what you want to _avoid_ when designing a _humane_ interface.  With the 100-button remote, there's no ambiguity, no context, no modality.
</p><p>
With the 100-button remote, you don't have to remember to press a sequence of buttons in a specific order, with specific time intervals between the button presses.  With the 100-button remote, the operation boils down to pressing a single button.
</p><p>
Even better: once you've performed an operation once or twice, you've formed the habit. Doing the same operation again later would take you no time, because you now know that the second button from the left on the top row is the one you want.
</p><p>
I have nothing against the apple ipod.  it just has an in-humane 
interface, that's all.
</p>
<p>
Why am I talking about iPods on a Java weblog?  Because the same principle behind designing the interface for a remote control applies to designing humane interfaces in our software applications.  elharo brought up remotes as an analogy in the context of designing interfaces for List or Array objects, stating that such a class should have a minimum of methods, and that its design was consequently better.
</p>
<p>
We're all in one way or another responsible for designing interfaces.  Let's make sure they're humane.  If you haven't already read THI, I highly recommend you do.  Here's the link:</p><p style="text-align:center;">
<a href="http://www.amazon.com/gp/product/0201379376/104-7232126-4081541">http://www.amazon.com/gp/product/0201379376/104-7232126-4081541</a>
</p>]]>

</content>
</entry>

</feed>