inluminent.com.
RSS broken for way too long.
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!).
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.
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.
XORM - for GPL apps only.
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]
Career Redux
Java Persistence Frameworks, again
2002-10-10: James Strachan - Commons SQL
2002-10-10: Jason Carreira - Commons SQL
2002-10-10: BeBlogging - Java Persistence Frameworks
2002-10-10: ::Managability:: - OBiz Turning OO on its head?
2002-09-23: Rebelutionary
2002-09-22: Joe's Jelly: ROI on O/R bridges
2002-07-19: Rebelutionary - Portable CLOBs
2002-07-15: Blogging Roller - Java Persistence Frameworks
... 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:
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:
- There are 11 developers on OFBiz, not sure how many really work on the Entity Engine
- There are 10 developers on Turbine, not sure how many really work on Torque
- 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.
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.
It worked
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.
Off to work.
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
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.
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.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.
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:
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?
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.
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.
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.
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 ]
« Previous page | Main | Next page »