Posted by Eitan Suez
Fri, 27 Jun 2008 18:50:00 GMT
Just posted a new release. See downloads. Enjoy!
/ eitan
no comments
Posted by Eitan Suez
Mon, 11 Feb 2008 18:47:00 GMT
A patch release of JMatter is out today, which fixes these minor issues discovered after last week's release:
- a rendering issue with the login panel
- issue with persisting BigDecimalEO's
- a bug in minimizing a maximized internal frame (reported by alexcrown (thx))
- a classloader issue that manifested itself with a webstart-deployed app
Thanks, / Eitan
2 comments
Posted by Eitan Suez
Wed, 06 Feb 2008 21:18:00 GMT
This past October, the Naked Objects group announced version 3.0 of their framework. I know that this version was in the works for some time. Like previous versions, this one keeps pushing the envelope, now offering an HTML-based interface to a nakedobjects system, among several other big features.
The Fall of 2007 was a busy time for me. When the news came out, I did not have or take the time to acknowledge this milestone and participate in the discussions.
I would like to acknowledge this achievement and albeit belatedly, congratulate Richard Pawson, Robert Matthews, and all involved in making this release a reality: congrats!
no comments
Posted by Eitan Suez
Tue, 05 Feb 2008 16:19:00 GMT
The JMatter project was fairly dormant during the Fall of 2007. But no longer.
Let's begin with a formal announcement of a new release of JMatter (4 Feb 08). The release notes detail some of the new features.
Let us know what you think.
Watch for new developments in 2008.
Tags release | no comments
Posted by Eitan Suez
Mon, 16 Apr 2007 17:19:00 GMT
The CSS implementation in the JMatter subversion (see 'css support coming for jmatter')
is not in any way dependent on the JMatter codebase.
In fact it's a standalone implementation that can be used in any Swing application.
I would like to announce today that css4swing is officially open-sourced (GPL).
Here's the subversion URL:
http://svn.jmatter.org/css4swing
Enjoy!
/ eitan
no comments
Posted by Eitan Suez
Thu, 05 Apr 2007 20:33:00 GMT
I believe I have on my hands a decent implementation of a subset of the CSS standard for Swing, and I've started integrating it into JMatter.
The integration is checked in to the JMatter subversion trunk.
In fact, I just finished documenting the feature. You'll find a new chapter (14) both in the online browsable html version of the documentation and the online version of the PDF (see here).
I plan to cut a new release of JMatter over the coming days. If you happen to be working against svn trunk, please play around with this if you have a chance and send me feedback.
I'm personally quite excited about this. I believe that CSS significantly simplifies styling and tweaking a swing UI, without having to touch the code. Also, it reuses knowledge that we already have.
Again, all the details are in the documentation, and please don't hesitate to post your questions to the mailing list.
Thanks, / eitan
2 comments
Posted by Eitan Suez
Thu, 22 Mar 2007 20:18:04 GMT
Check out this blog by Andres Almiray regarding the Desktop Matters conferences, and specifically JMatter (!).
no comments
Posted by Eitan Suez
Wed, 21 Mar 2007 20:52:00 GMT
It's been over a week since the Desktop Matters conference where I presented on JMatter. Although I did blog about general impressions of the conference on my java.net weblog, I'm not sure why I haven't really started collecting my thoughts of the conference as they apply to JMatter.
So here is a first post. Hopefully this will not be the last on this topic.
The Desktop Matters conference lasted approximately 1.5 days. It started on a Thursday afternoon and ended late on Friday. Throughout this time, we listened to various speakers talk about some aspect of Desktop development.
One particular session, given by Ben Galbraith, made some interesting points:
- It tried to summarize current pain points with Java Swing
- It tried to express visually the need for a framework for building applications with Swing
This was the list of pain points:
- GUI Creation and Maintenance
- Concurrency
- Binding and Validation
- Various API Problems
What I find interesting is trying to gauge JMatter against each of these points. Does JMatter help mitigate these problems?
JMatter completely does away with the first: "GUI Creation and Maintenance." With JMatter it's not even a question of how easy is it to create and maintain your GUI. GUI Creation and maintenance disappears.
The second pain point speaks to the fact that developers have to be very careful to perform UI-related operations on the event dispatch thread, and conversely to ensure that non-ui operations (particularly long-running ones) are performed off that thread. Again, in this respect, JMatter completely removes this burden from the plate of the application developer. Methods are exposed as actions using a simple convention. The framework ensures that the action is invoked off the edt and that the view for the object that the method returns is constructed back on the edt.
The third point is likewise addressed by the framework. Your model objects automatically bind to the framework's views. You don't even need to learn or concern yourself with an API for data binding. JMatter works at a higher level. Much of the burden of validation is lifted and custom validation can be added by overriding the validate() method.
The last point wasn't too clear to me. I assume it spoke to the fact that the Swing API in general is very large, very complex, and not very consistent in many respects. It may not apply at all to JMatter since you typically rarely even interface with Swing. You might for the purpose of creating and plugging in custom views for types. This task is by its very nature somewhat challenging, but nothing that an experienced Swing developer cannot tackle.
Let's discuss the second issue: Swing is by no means a framework for building business applications. It is nothing more than a toolkit for building user interfaces. No one is certain why in the web world we have dozens of higher level frameworks to choose from and yet in the Swing world, folks have only recently begun considering the development of such frameworks.
I propose that JMatter fills this void. JMatter addresses comprehensively the task of building business solutions. Furthermore, it does so at a much higher level than most other APIs.
I recall a claim that used to be made a long time ago about the difference between a mac (i'm talking about v6 or v7) and a pc (back in the days of windows 3.1). Whether justified or not, the claim pointed out that with a mac, users typically were able to focus on the task at hand. While with a pc (at least in those days) one fiddled a lot with dos, autoexec.bat and config.sys and for the most part one remained distracted from the job they had to accomplish.
This is a major lesson about usability. Folks such as Jef Raskin wrote about the locus of attention.
I believe that JMatter frees developers in an analogous manner. We're not talking about UIs here. I'm basically saying that this framework lets developers focus on the business domain and keeps the plumbing out of their way. An apt analogy?
no comments
Posted by Eitan Suez
Wed, 07 Mar 2007 23:10:00 GMT
We've all had to implement this feature as developers.
Today, many frameworks such as Tapestry for example,
will provide components out of the box that will automatically
take care of paging a listing on your behalf.
JMatter also provides paging out of the box. When I sat
down and started to think about this feature, I saw a
certain pattern. One's first, naive implementation of
paging might consist of a simple forward and back navigation
buttons:
< >
Shortly afterwards comes the request for the ability to navigate
to the first and last page in a listing, and so they are added:
<< < > >>
Then embellished, like so:
<< < [Page 3] > >>
Over time, paging has evolved to let you navigate to a number
of pages in the vicinity of the current page:
1 2 .. 7 [Page 8] 9 .. 13 14
This is what most web-based applications do today.
What I realized is that paging, taken to its eventual limit,
is essentially embodied in the behaviour of a scrollbar. Most
scrollbars provide continous scrolling. Whereas in the case of
paging, the scrolling is more discrete. The more pages there
are, the less this discrete behaviour is apparent. What's nice
about today's scrollbars is that their size is inversely proportional
to the length of the list. The larger the list, the smaller they
are. Scrollbars have the advantage of giving you more of a visual
perspective of where you are in the list. And you can simply drag
the scrollbutton to any location along its dimension.
JMatter's Swing-based view mechanism defines a view implementation:
a component named PageScrollBar which extends Swing's JScrollBar,
shown at the bottom of the following listing:

As usual, developers of JMatter applications need not concern themselves
with this at all. It's bundled into the framework and it just works.
If however you feel the need to customize the way this scrollbar looks
or behaves, it's easy enough with a little Swing experience to make
the desired revisions.
no comments
Posted by Eitan Suez
Wed, 07 Mar 2007 18:35:00 GMT
I have been working at implementing the codebase that I call
a framework that I named jmatter for quite some time.
Looking back, I realize that I have on very few
occasions actually expressed (or attempted to express)
what I have constructed. Most of the time, you may say that
I was not completely conscious of it.
UI
Part of JMatter is a user interface for business applications
that I wrote in Java Swing. With respect to the UI, the fundamental
design boils down to:
- essentially designing an ooui, a ui that mirrors the underlying
business object model
- mvc: views are listeners on model objects and as the model
objects change, the views reflect the change
Persistence
Another aspect of JMatter deals with persistence. I wanted transparent
persistence. Most of the work is delegated to Hibernate. Some of
the conveniences I developed included the automatic construction of
mapping files from the objects. This effort has in a sense been
nullified by the fact that JPA does this too, and perhaps they do
it better because a combination of reflection and interpreting of
annotations is translated to the underlying metamodel that Hibernate
uses at runtime. The xml mapping files are but a marshalled version
of this information.
Core
On to the heart of JMatter. I realize now that I have never
really written down what this heart is. In a sense it's a metaobject
protocol for Java. JMatter contains a number of classes that model
types (ComplexType), instances (EObject), fields (Field), and methods
(Command / EOCommand). Java of course has a reflective API. But by
writing my own, one that lives on top of the language, I was now in
a position to, in a sense, define my own language. If I wanted to give
commands special features, I could write them in. Take for example
the notion in JMatter that a command can be designated as "sensitive."
Another, that a field can be marked "Required" which has implications
in terms of the behaviour of CRUD operations. Another is the fact
that these types themselves are all EObjects which means they can
be persisted and manipulated directly from the UI. Though at the time
of writing, they cannot be created (yet).
I ended up defining all kinds of rules and conventions for constructing
business applications. And this system can in time adapt to all kinds
of situations. Now that JMatter is open source, it has a diverse and
growing community, with diverse needs. JMatter has changed over the last few
months to address not only bugs, but desires for this system to meet
these users' needs.
We still have many items on the drawing board, much of it has to do
with providing implementations for cross-cutting concerns that are not
yet addressed. Implementing reporting: defining, saving, editing,
and running reports that produce PDFs for example, all directly from
the UI. Finishing Authorization. I'm proud of the fact that the basic
design I have is very simple and clean. But this work is not yet
complete. Scheduling features could use a number of improvements.
Still, much is already in place, and the user interfaces of JMatter
applications, both in terms of their richness and simplicity, is something
that I am proud of.
Many things go into making
a project or a product successful. Trusting the community. Managing
the project with responsibility. Communicating with the community.
Integrating patches. Providing good documentation. Perseverence and
keeping the momentum going. Today we have more tools at our disposal
than ever to keep the momentum going, from blogs to mailing lists,
subversion repositories, great tools for producing documentation, content
management systems and much more.
no comments