Blogging Roller

Dave Johnson on open web technologies, social software and software development


inluminent.com.

Mr. Inluminent certainly has a winning approach to the "is my blog hot or not" competition. I learned from my referrer logs that he <a href= "http://www.inluminent.com/weblog/archives/theorem_as_software_price_goes_up_quality_goes_down.php#000213"> enjoyed the sexy image that accompanied my <a href= "http://www.rollerweblogger.org/page/roller/20021010#dave_on_software"> Dave on Software post.
Tags: General

RSS broken for way too long.

There was a double-escaping problem in Roller's RSS feed that prevented all links and lots of other HTML from working in AmphetaDesk, Aggie, and probably other aggregators as well. For some odd reason, Radio handled it fine so I never noticed the problem. The problem is fixed now on this site, and in the upcoming Roller 0.9.6 release.
Tags: Roller

Leo

As usual, the best photo was one taken by my Dad, with his superior camera and his superior composition skills. He has captured the essence of our four month old boy Leo. <img class="photo" src="http://www.rollerweblogger.org/resources/roller/essence-of-leo.jpg" hspace="5" vspace="5" align="left" alt="baby boy Leo at 4 months old" /> I don't mean to brag, but at this point in time I'm sure that Leo is the best baby in the world. He has been sleeping though the night for almost a month now, sometimes going out for 8 hours at a time. He is happy and laughing almost all of the time. And best of all, he is as healthy and fat as can be (100th percentile for weight!).

Tags: family

Monday quickies

Once I do some work with the mountain of digital photos I have taken recently, I'll have a little time to work on Roller tonight. But, before that here are some quickies:

Lance has added support to Roller for <a href= "http://www.devarticles.com/content.php?articleId=90&page=1"> Mitchell Harper's JavaScript-based WYSIWYG editor. It works only on IE,but it is still cool. Now Roller supports three editors: Ekit, the Harper special, and the plain old text box.

I think I read that <a href= "http://www.raibledesigns.com/page/rd">Matt added sort-by column to the Roller user table that appears on the new Roller 0.9.6 front page, but I can't find that email right now. That will make it easier to browse the blogs at FreeRoller.

There are a lot of cool blogs at FreeRoller that I have not noticed before. For example, <a href= "http://www.freeroller.net/page/cbeust">Cedric Beust's weblog and Ara Abrahamian's <a href= "http://roller.anthonyeden.com/page/ara_e">MemoryDump. Ara has some interesting ideas about an <a href= "http://roller.anthonyeden.com/page/ara_e/20021014">n-way metadata bus for Java persistence scenario. Cool idea.  He says MiddleGen may support this some day. Wow, I need to take another look at MiddleGen.

Tags: General

OFBiz-EE and the "generic object" approach

Scott from Atlassian wrote to tell me that OFBiz-EE can be used in all four of the persistence scenarios that I discussed yesterday. He wrote:

You have your JavaBeans already, you then need to create an entitymodel.xml file to represent your entities (which will then CRUD the relevant database tables), and you can use the API to store your changes to the database. However, the storing is not automatic - you would have to write the code yourself. [Scott from Atlassian]

But if you have to write the storage code yourself, can you really say that OFBiz-EE supports this scenario? I don't think so. OFBiz-EE takes a very different approach, not a bad approach, but a different approach.

I think OFBiz EE needs its own scenario - the generic-object scenario. I don't think it truly fits into any of the four scenarios that I listed. It does not really do anything to support the JavaBeans model (no introspection, no JavaBeans generation) and it does not do any code generation (except for the DDL, right?). So here is the new generic-object scenario that I have just added to the comparison to accomodate OFBiz-EE:

Generic-object: Start with a meta-data description of your desired database schema, generate DDL to create your database, and use a persistence API to store and retrieve generic data objects, with values stored as a hash of name-value pairs, to and from your database.
Tags: Java

XORM - for GPL apps only.

<a href= "http://www.russellbeattie.com/notebook/index.jsp?date=20021014#104120">Russell pointed out XORM, another Java persistence framework that sounds interesting. However, you cannot use XORM if you do not license your application under the GPL. That is a BIG limitation.
XORM beta 2 is an open source, "extensible object-relational mapping layer for Java applications. It provides interface-based persistence to RDBMSs using the Java Data Objects (JDO) API while allowing developers to focus on the object model, not the physical layer." XOTRM is published under the GPL.[from Cafe au Lait by way of Russell]
Tags: Java

Career Redux

The September 2002 issue of the Communications of the ACM has a very interesting article on career development by Peter J. Denning. Denning covers the ladder of competence and the different ways that people at these different levels work and the ways that they learn. He bases this in part on Hubert Dreyfus's AI writings from the 1960s and 1970s. Great stuff. Denning also has some insightful things to say about what he calls the self-directed and community-directed styles of career development. Well worth a read.
Tags: General

Java Persistence Frameworks, again

... and that is just a few of the recent posts ...

The topic of Java persistence frameworks just keeps on trucking through the Java blogs.  I think that the reason the topic keeps coming up is that there is no clear concensus on the "right way" to do persistence. I certainly don't know the right way. But anyway...

I'd like to understand the available tools a little better, so I've started looking at the tools mentioned in the above posts.  I found the feature comparison on the Cayenne project's Wiki to be helpful and I also found a very nice set of Java persistence framework development scenarios on the Hibernate website.  The Hibernate folks have outlined four development scenerios for using a Java persistence framework: top-down, bottom-up, middle-out, and meet-in-the-middle.  Here is my generalized description of these four scenarios, plus a fifth "generic-object" approach that I have added to accomodate OFBiz-EE:

Top-down: Start with an existing JavaBeans object model, develop a mapping that maps those objects to tables in your database, generate DDL to create your database, and then use a persistance API to persist those objects to that database.

Bottom-up: Start with an existing database schema, describe your database schema using using XML or some other meta-data representation, generate your JavaBeans object model, optionally add business logic to those objects, and use a persistence API to store and retrieve your objects.

Middle-out: Start with a meta-data description of your object model, generate your JavaBeans object model, generate DDL to create your dataBase, and use a persistence API to store and retrieve your objects.

Meet-in-the-middle: Start with an existing database schema and an existing JavaBeans object model, develop a mapping to map between the two, and use a persistence API to store and retrieve your objects.

Generic-object: Start with a meta-data description of your desired database schema, generate DDL to create your database, and use a persistence API to store and retrieve generic data objects, with values stored as a hash of name-value pairs, to and from your database.


I think the Hibernate guys have really nailed it.  Every tool I have seen supports one or more of these scenarios.  So I decided to use these scenarios as a way to compare the available Java persistence frameworks.  I started to build a table to compare the scenarios supported by the various persistence frameworks and some other factors that I think are important interesting (thanks ceperez): support for the JDO API, support for ODMG API, development activity, and database support.  

Here is the first cut of my comparson table, I will be trying to complete it over the next couple of days:

<table cellpadding="0" cellspacing="0" border="1" padding="2px" style="text-align: left; width: 100%; margin-left: auto; margin-right: auto;"> <td valign="middle" style="background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" align="left" height="30">Abra

<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Castor
JDO
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Cayenne <td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255);"><a href="http://jakarta.apache.org/commons/sandbox/sql/" style="font-weight: bold;">Commons
SQL
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Hiber
-nate
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Jakarta
OJB
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">OFBiz
EE
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Jakarta
Torque

<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">TJDO <td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Top-down <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Bottom-up <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">N
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Middle-out <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Meet-in-middle <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">N <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">N
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
Generic-object






Y


<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">JDO API
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">soon <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="font-weight: bold; background-color: rgb(238, 238, 238);">ODMG3 API
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">subset
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">License <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">LGPL
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Last release <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">0.9.6
Sept
2002
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">0.9.4.1
November
2002
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">1.0a3
Sept
2002
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">1.1.4-b
Oct
2002
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">2.0-b2
July
2002 <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">2.0-b
Sept
2002
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">SF Activity
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">19.4% <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">-
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">98.3%
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">- <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">99.9%
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">- <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">98.9% <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">- <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">95.3%
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">SF Downloads <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">7
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">-
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">2698
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">-
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">775
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">- <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">86869
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">- <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">278
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Developers <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">3
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">3
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">3
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">11
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">17
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">11 (1)
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">10 (2)
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">7
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">MySQL <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">PostgreSQL <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">HSQL <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Oracle <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">SQL Server <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">DB2 <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Sybase
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">

Footnotes:
  1. There are 11 developers on OFBiz, not sure how many really work on the Entity Engine
  2. There are 10 developers on Turbine, not sure how many really work on Torque
Other notes:
  • I took JGrinder and JRF out of he mix because they seem to be a little too intrusive.  They force your to make your persistent objects extend framework objects and they don't seem to offer any tools to help you generate DDL or persistent objects.
  • I'm going to limit myself to open source frameworks for the time being, but I'd also like to consider Oracle's TopLink, CocoBase, Oracle's BC4J, and the commercial JDO implementations.  
  • I'm also going to ignore EJB CMP for now.
  • Blank cells still need to be filled in and hints are appreciated
  • A dash "-" indicates "not applicable.
By the way, Roller uses the bottom-up approach.  Roller uses Castor, but not the Castor Source Generator.  Instead, Roller uses XDoclet to generate the persistent data objects, Struts form beans, and the Castor Mapping file all from the same source meta-data.  The Castor/XDoclet combo is not perfect, but I still don't know that moving to a new framework would be an improvement.  We might just be exchanging one set of idiosyncracies for another set.

Tags: Java

It's tricky?

I think my <a href= "http://www.rollerweblogger.org/page/roller/20021012#blogging_is_difficult"> Blogging is Difficult post was a little corny, overdone, and maybe gave people the wrong impressions. Writing things for my weblog is not difficult like some painful chore that I dread to do each day. It is quite the opposite. I enjoy it and sometimes I have to hold myself back.

What makes blogging difficult is that sometimes I write things that I later feel to be stupid and embarrasing. I think I'm being little too sensitive and self-conscious about this. My readers probably don't even notice the things that I consider to be stupid and embarrassing.

Another thing that makes blogging difficult is mixing the professional and the personal. Part of the reason that I write a weblog is professional. I want to improve my communication skills and I want to build a reputation as a software architect and developer. Again, I think I'm being too sensitive. I don't worry about the effect on my professional image of wearing shorts & berkenstocks, taking breaks for disc golf, and cranking up the Clash at work. So why should I care about having some fun on my weblog? As long as I don't mention my employer by name and I speak about work only in vague generalities, I'm fine - right?

I'll stop the meta-blogging/navel-gazing now and return you to my normal disjointed ramblings. That is what I promised and that is what I will deliver.

Tags: General

It worked

and I'm back from work. I'm taking a break before going out to dinner with the little guys. Andi is taking the littlest guy out with her friends.

I'm reading the Java weblogs and finding that the topic of persistece frameworks is up again. I think it is interesting that Rebelutionary writes about <a href= "http://radio.weblogs.com/0107789/2002/10/12.html#a968"> OFBiz and it's generic data objects at about the same time that Russell is writing about what seems like the polar opposite of that: having to repeat field names in DDL, SQL, DAO classes, EJB mappings, form beans, and JSPs.

Tags: Java

Off to work.

I've got to go into work today to wrap up a demo I've been working on and to help a sales engineer prepare for an important demo next week. I like it when a little bit of work can have a big impact - assuming of course that everything works. In this case, that is a big assumption.
Tags: General

Blogging is difficult

Blogging Roller made blogging easy for me
I'd just blog about Roller and related stuff

I hoped I that eventually, I would find my way to other voices
But blogging is difficult: I've got rules in the back of my mind
Don't blog about politics and start argumemts
Don't blog about family and day-to-day life, that'll bore people
Don't blog about work, because your employer may be reading
Censor yourself!

The bloggers that I enjoy reading are the ones that break these rules
I can't enjoy blogging unless I start breaking some of these rules

Tags: Blogging

Number of units sold

I think number of units sold is a big factor in the <a href= "http://www.rollerweblogger.org/page/roller/20021010#dave_on_software"> Dave on software curve. If you have sold hundreds of thousands or millions of units of your software then you have the resources to fix lots of bugs, do usability studies, write a really nice installer, etc. You also have the motivation to do do things right the first time because one irritating bug can cause a tremendous number of tech support calls.

Tags: General

Speaking of quality.

I was not really happy with the quality of my writing on last night's <a href= "http://www.rollerweblogger.org/page/roller/20021010#dave_on_software"> Dave on software post. My writing sounds crazy and rambling. I actually pulled the story a couple of times to try to fix it. Then I realized two things. Firstly, the story had already been cached by my reader's RSS aggregators. And secondly, like it or not, "crazy and rambling" is my own personal style and I shouldn't try so hard to hide that.

Continuing on the quality theme: Rebelutionary noticed a Roller bug. Roller's RSS syndicator does not expand macros in weblog entries. That is now issue <a href= "http://opensource.atlassian.com/projects/roller/ViewIssue.jspa?id=10110">ROL-64.
Tags: Blogging

Commons SQL

[with <a href= "http://jakarta.apache.org/commons/sandbox/sql/">Commons SQL] generating other stuff from your XML file should be trivial; like the Castor mapping file or beans to map 1-1 to your relational model. Just use the commons-sql beans with Velocity or Jelly etc. [James Strachan]
Now I see how Commons SQL could be useful in Roller. We need a better way to generated DDL for varous databases and we need a better way to generate Castor JDO mappings and data objects as well. We've been <a href= "http://sourceforge.net/mailarchive/forum.php?thread_id=1134736&forum_id=9297"> talking about this for a while, maybe Commons-SQL is part of the answer.
Tags: Java

Dave on software

I'm going to go out on a limb here and post for all to see my recently developed theory of commercial software quality and value vs. software price. Three disclaimers are necessary. First: I am a heads-down, propeller-head, bits-and-bytes, grunt-coder, who reads Slashdot for news - so what do I know. Second: my theory is based mostly on hearsay and second hand knowledge. And third: I believe that pretty much all software sucks. So, saying that PhotoShop or Dreamweaver "rocks" is somewhat disingenuous on my part. Anyhow, please bear with me and take a look at my whiteboard:

diagram of software quality: price related to quality

The basic idea here is that software quality and value goes up as the price of one installation of the software goes up until you get to around the $3K to $5K price range. After that, quality and value start to drop off and around $20K to $50K they fall right off the cliff.

From my graph you can see that I consider consumer software like Quicken, Office, and PhotoShop to be pretty good stuff, with good value and few major flaws. You can continue to get better quality and value as you get into the AutoCAD and Microsoft Visual Studio Enterprise price levels, but after that quality and value start to drop off. Once you get up around the $100K to $1M level you are in the painful world of systems integrators, e-Commerce consultants, and enterprise software. At this level, usability features that you take for granted in consumer products are often missing, installation instructions can run into the hundreds of pages, and teams of consultants are needed to do almost any customizations.

As a J2EE developer who works in the field of enterprise software, I want to do better - I want to learn how to make software suck less. But, enough about me. Let's talk about you. What do you think? Is there any truth to my theory? Am I totally wrong about this? Is there any insight here, or am I just being petty? Does the ROI of the big expensive enterprise software make it the most valuable of all, quality be damned?

Tags: humor

Matt's working too

Matt is picking up my slack and making bunch of usability and UI enhancements to Roller 0.9.6-rc1. He has done the most work in this area of any of the Roller crew and he the best looking Roller based weblog around - based on his x2 theme which is now part of the Roller distribution.

There have only been four downloads of Roller 0.9.6-rc1 so far and I can understand that. Who'd want to download and install Roller only to have to do it again next week. Still, we are getting some good bug reports and finding things that should be fixed before the final 0.9.6. I don't want to release 0.9.6 until our two big customers are happy with it. I'm hoping to get some time this weekend to wrap up the User Guide, fix some RSS output issues, and wrap up the pluggable authentication stuff. Hopefully, 0.9.6 final will be the weekend after that.

Tags: Roller

Spoils of the dot-com crash

I just bought a Dell 450mhz PC with 256mb RAM, 8gb disk, 17 inch monitor, keyboard, track-mouse, 2 power-strips, and a UPS for $100. What a deal! I'm working on setting it up for my wife tonight instead of working on Roller.

Tags: General

Rollout

Matt Raible has installed RC1 and is finding and fixing some small issues. Hopefully Anthony Eden will be trying RC1 tonight. In other news... Anythony reported a problem with Roller 0.9.4's RSS output that still needs to be fixed.

Tags: Roller

Watch out, Russell's coming back

Okay, I'm too tired right now to rant. But I'm going to. And when I do it's going to be long. It's going to be hard. It's going to be a rant like you've never seen a rant before in your life.[Russell Beattie, posting at a temporary URL ]
Tags: Blogging

« Previous page | Main | Next page »