Spiral Dive

  Wednesday, April 30, 2003


Sometimes Relational is Better.

I just came across another one of those problems I encounter from time to time, where trying to cram something into an object model just doesn't work.  In this case I have a many to many relationship between two classes.  Each class wants to be able to look up the other by its ID.  Hibernate does a good job of generating a relationship table that can hook these two classes together.  All is fine so far.

Now I want to characterize, optionally, each link between the two objects with a number or string.  In the relational world it's simple -- just add the field to the association table and move on to the next problem.  But we're dealing with objects, and it isn't so easy.

Sure, I can create an intervening object that contains the value I want, and I can reset the maps to point to it...but it's harder to look things up fast.  What I want is an association class here -- UML lets me do this, but...object-oriented collections libraries generally don't.

The java.util Collections library gives me key and value, but no ability to stuff something else in there, unless I use a pair-like class that sits in the middle. And since I want this relationship to be bidirectional...yuck.

See how complicated such a simple thing becomes? 

Hibernate provides "persistence for idiomatic Java", but every once in a while that's not such a good thing.  There's more to the world than objects; they do a decent job of expressing things but not a perfect one.


11:03:25 PM    

A good Java blog

. I just ran across an interesting Java related blog. A good read! [Mark Watson's Blog]

Hey, somebody thinks I have something to say.  Thanks.  Now that's one person.  Where the hell are the rest of you?  :)


10:28:52 PM    

On Hibernate.

Spent some time with Hibernate last night and I am moderately impressed. It is somewhat labor-intensive to produce a schema...you need to spend time building out an XML file that describes your object model. It doesn't read your model to figure out this information. There is some work that's been done on automatic generation of the XML mapping but it doesn't seem to be complete.

The schema generation seems to be good and efficient. You can control quite a bit of what happens with the generated schema, which is a mixed blessing. I wish I wasn't so close to the relational model when using Hibernate, but maybe that's unavoidable, if you want to achieve good performance.

Next I plan to try out TJDO and see what it does.


10:22:23 PM    

Car Insurance Liability Cutoff

From the save the world department...I was thinking the other day about no-fault car insurance. To some extent, you can save money in society by providing this kind of insurance. In Canada no fault is present in many places. If you're in an accident and no-fault rules are at play, the two insurance companies split the bill for any repairs and medical stuff that accrues.

It doesn't exactly seem right to be blamed for half of an accident when you haven't done anything wrong. Cars are getting more and more expensive to buy and repair these days. The problem is the fragility of the car that you might hit. You can be driving a car that is quite sturdy and not subject to much in the way to damage, but your insurance is still going to be high because you don't have any way of knowing what the other guy is driving.

Maybe we can build a hybrid system where the driver at fault is liable for some of the expenses of the other side. Let's say we set that limit at $15,000. If you want to drive a $100,000 Ferrari on the road, you better buy insurance that's going to cover damage to the othr $85,000, because the guy who hits you isn't going to be liable for it.

Similarly, if you drive a car that is extremely vulnerable to damage (and a lot of car manufacturers do this intentionally), you can expect your insurance rates to be higher as there is an increased chance you'll be paying some of your own damages.

We need to provide some kind of market force that will cause consumers to buy cars that can take a bump or two. We also need to ensure that a driver doesn't have to be worried about hitting some ridiculously expensive vehicle on the road. People who want to drive something extremely expensive should have every right to, but shouldn't expect others to pick up the tab when it gets damaged. They can get their own insurance for that.


10:21:49 PM    

  Tuesday, April 29, 2003


iTunes.

Looks like Apple has unveiled iTunes.  At $0.99 per song, I guess it seems like a decent deal.  But...I have to wonder.  How much of that money actually goes to artists?  The usual 1%? The labels have cut most of their costs out of the equation, but I'd be shocked if this were passed on.

Meanwhile, we have Hilary Rosen writing Iraq's new IP law.  Talk about having the fox in charge of the henhouse. Every media company is chomping at the bit for laws that will preserve their stake in future entertainment, even as they become less and less necessary.


9:47:57 PM    

  Saturday, April 26, 2003


My Environment.

Listening to: Morel, AlpineStars, Sasha.

Thinking about: Fuzzy Metamodels, Organizing a Legal Case, Timelines.

Liking: My flat panel monitor.


12:25:57 PM    

Static vs. Dynamic Typing.

Manageability has a few words on this topic.  I think it's the wrong pivot. 

const and brethren are a fine-grained solution to a non-problem.  You need a larger unit to work with. The key is mutability.  When I first started coding in Java, I was shocked (shocked!) that you couldn't manipulate strings.  How could you write a real program, I asked myself.  We have all since realized that we very rarely need to manipulate a string in any complex way -- passing them around and concatenating them together constitutes almost all of our usage.  I can't even remember the last time I used a StringBuffer.

As with Strings, there's a lot of other stuff that benefits from immutable structuring.  Have an access control list?  Don't add "editing" methods to it.  Add methods that return a new ACL, or have an ACLBuilder class. 

The most important reason to do this is scale.  Immutable structures scale like crazy because you can freely share the inner parts of them, without fear.  When your app gets up into the gigabytes of real-time data (like ours does) you want that scalability.

By engaging in compression and immutability exercise we have had good results.  I'll leave it at that.

Immutability does another thing for you -- speed.  The compiler gets to do all kinds of interesting things when it knows that things are going to be modified.  I'm not saying that Java VMs necessarily do this now -- they do some of it.  They can do more in the future.  Speed is also derived from having fewer allocations, and less work for the garbage collector.  You're going to share that immutable instance, whenever you can.

Immutability is such a useful thing that it should be built in somehow.  Shouldn't the garbage collector be finding and sharing your immutable objects, automatically?  That's a more correct systemic solution to the problem.


11:43:12 AM    

Music Companies and P2P.

I've been pleased to see that the music biz has finally lost one in court.  I've no love for the industry -- I think they exist to screw artists and push commercial crap at us.  Most artists end up with nothing when they interact with Sony and the like.  I don't think society should expend any effort protecting them -- they perform no useful function.  The artists make their money from concerts, not recordings -- so anything that promotes their music is good for them. 

Under the music industry's arguments, anything that can be used to move their copyrighted material around is infringing.  What this means is that every OS manufacturer is infringing when they include and ftp client and server with their OS.  The ftp programs are can be used to do both legal and illegal things.

What the judge has said is that a searching and classification mechanism, in and of itself, cannot be infringing...a company has to have the ability to screen what is happening.  There has to be a central server involved, or some direct control.

I think it is a landmark decision, and one that will be heavily tested in court.  It's not often that a judge just "gets it" like this, to this extent.

What's really going on, under the covers, is an attack on general computation.  I have written about this before -- essentially, do we have the right to construct and use general purpose computation devices?  I fit this notion into the same category as free speech.  In our society we have a highly guarded right to say what we want.  We should similarly have the right to unrestricted computation.

I know it sounds a little far-fetched...but what if it's illegal to run something like Linux, because it does not contain government-mandated digital rights management software. Believe me, the entertainment industry complex wants to take your right to general computation away from you.  They want laws that will cement their role as a gatekeeper in the digital world, where they will take a toll from all future transactions even though they add no value.

What's going on at the legal level is ultimately about long-term positioning and the long-term viability of the music industry. Artists and consumers don't benefit from "the industry", but there is still confusion on this point.  While that confusion exists they are seeking through legislation to be given a permanent sort of legitimacy.


10:24:02 AM    

  Wednesday, April 23, 2003


AOP Patent Part Two.

I referred to this patent earlier, and I need to retract and clarify.  After looking at a bit of history it appears that Kiczales was involved in the origination of CLOS, and the metaobject protocols that were developed for it.  They chose not to self-cite for AspectJ.

The reason they chose not to cite is that the publishing of the CLOS metaobject material would have made a new patent impossible.  I believe that if material has been published for a year, you can't patent it.  There is a book written by Kiczales and others on the metaobject protocol which certainly counts as publishing.

I suppose the claim can be made that AspectJ is different, but I don't see it is a unique and non-obvious evolution of CLOS's capabilities.


12:49:07 AM    

Big Heaps and Lisp

I am pretty happy with just about everything I've read about LISP lately -- seems like a language that I need to revisit, need to work with again.  You can read through some of the success stories for places like ITA Software -- quite impressive.  There was an alarming comment at ITA, though -- Carl De Marcken noted that Lisp garbage collectors just aren't capable of handling multiple gigabytes of information. 

Java collectors seem to do a decent job of this.  I don't know if Carl's comment was out of date, if the Lisp GC tech has improved since then, or if it is just his particular kind of data that has the problem, and the problem wouldn't really exist in other apps.

It's a worry.  There are a pile of useful things you can do, but if it can't scale up into gigabytes of data there's a problem.  Of course, maybe we shouldn't need gigabytes to solve our problem.  Time for some math.  The Java VM doesn't seem to be very compact with memory, and it is very easy to write space-inefficient code in Java.


12:42:13 AM    

  Sunday, April 20, 2003


That Nasty AOP Patent.

I might have to retract what I've said: I am still trying to figure out when defadvice became part of LISP.   I should know soon. 

Have a look at the patent.

Having skulked all over LISP in the past week, re-orienting myself, I have once again been perusing the wonders of CLOS.  CLOS is the Common Lisp Object System, and is one of the original metaobject protocols.  CLOS is incredibly sophisticated; it really puts the Java object model to shame.  You can define new classes at runtime, rewire existing ones, and generally do some pretty amazing stuff.  There's a feature that's of particular interest: defadvice.  Yes, it's the same advice that the Xerox/Parc patent people are yapping about.  Defadvice lets you wrap up functions with :before, :after, and so forth.  It chains things together.  In short, it does everything that AspectJ does.

In the very most optimistic reading of the AspectJ patent, the most the Xerox people can claim is that they did it on Java.  Big deal.  CLOS has been around since, what, 1990?  The research is even older than that.  Let's check the dates on that AspectJ patent again, shall we?

It is astonishing and incredibly dishonest of Xerox that they do not even mention CLOS in their list of references.  The introduction of aspects to the Java platform is important.  Let us be clear: crosscutting originated with LISP, and may have been elsewhere, even earlier.

What this patent needs is a good spanking in the courts, with Xerox paying the legal fees in the end.


11:30:27 AM    

Going Elsewhere.

"The goal was to give senior officers an incentive to stay with the company when many were being offered more generous packages to go elsewhere," said American CEO Don Carty in a prepared statement from the airline's Fort Worth (TX) headquarters. "We did not give our senior executives a pay increase. In fact, I gave up my salary entirely for the last quarter of 2001, and my entire senior management team took voluntary pay cuts." -- Don Carty, American Airlines

I would like to know who is offering these "senior officers" more generous packages.  Let's see -- they're screwing up AA big time, and somehow they're such a rare commodity that no-one else can do their jobs?  Bullshit.  This is exactly what's wrong with corporate America.

Untalented and inattentive boards, picked for their star power rather than their capabilities, let the executives of the company run amuck.  I find it very hard to believe that there aren't senior managers at American who would be willing to "step up" from their mid-level positions into executive positions, and find a way to make it work.  They're probably bring a level of real-world experience to the job that is sadly lacking in the current top-heavy top-end.


11:13:01 AM    

  Saturday, April 19, 2003


Did he really just say that?.

A couple of people have expressed some shock and just-shy-of-outrage that I would so openly question one of our historical Great Leaders of the object-oriented revolution, Himself of course being none other than Grady Booch.

[The Mountain of Worthless Information]

I gotta agree with Ted on some of his points.  I think the larger question is figuring out exactly how useful object-oriented programming really is.  I spent some serious time going back over some LISP stuff over the past week, and given the place where my thoughts have been lately (rule systems, fact-based stuff, distributed programming), it's clear to me that LISP has a tremendous amount to offer.

Key features include the phenomenal ability of S-expressions to get just about anything from A to B.  AOP-like features are part of every implementation (it's part of CLOS), and the LISP systems should, in theory, easily outperform Java.  The compilers are supposed to be that good.  I don't know if they are yet.  In short, I get 90% of the stuff I would have had to build with Java for free.  Sweet. 

It's just tough to know where to start.  I am just going to swing right into it and see what happens...


6:37:23 PM    

Back from Brazil.

Many things on my mind:

  • Planes are the best place to think
  • I have rediscovered LISP
  • It's trickier than I thought to build a Gator forward propagation network
  • It's trickier than I thought (but very rewarding) to design your own forward propagation language
  • Rule languages end up looking a lot like LISP
  • Why not just use LISP instead?
  • Computer is back in working order, after I thought I busted it

It's different in Brazil.  You'll have six people in a room watching you, and their job is just to pick up any odd bit of knowledge you throw off, on the off chance it will be useful.  Labor is cheap down there.  It's a beautiful place -- if I go back, I'll plan on spending some serious time looking around, instead of travelling back and forth to the office.


6:32:23 PM    

  Friday, April 11, 2003


Notebooks.

I am starting to think that the very best thing a programmer can have is a good notebook.  At least if you're the same kind of programmer as me.  I like sitting in my neighborhood joint, having a bit of breakfast or lunch, and noodling my way through an idea or two.  You'd be amazed at how creative you can be with a blank sheet of paper in front of you.

I've been trying to figure out for a while why my creativity in front of the computer seems to have dropped.  I like working things out away from the machine.  I think it's because there are too many possibilities, too many things you can do.  I am vulnerable to Ole Eichorn's "warping off" problem.  When it's just me and my notebook, there ain't no warping off.

Today I was thinking about the fundamentals of logic and rule languages, like CLIPS.  I think there's a simpler set of underlying concepts, a simpler syntax that's possible.  The result seems to be both more readable and more expressive.  It also appears to be possible to make it much easier to directly influence the creation of the resulting rule network, and specify its structure.

You do this indirectly with RETE engines today, but Gator networks are much more efficient.  The trouble is, you have to optimize the Gator network, and that isn't so easy.  I decided to start with a syntax that would permit the direct specification of the network, and back-fill the optimizer later on.  Maybe I'll regret it.

I found that by blending a few ideas from functional languages and typing together, you get to something pretty cool...where a statement is essentially a set of function calls that are executed in a row.  Each does "something", like define templates/patterns/rules, and so forth.  You then define what should happen when you run a certain kind of function within another structure. 

I realize that's very unclear, and I'll have to put some examples together.  They'll be forthcoming after I return from Brazil.  I am taking JavaCC 3.0 with me, and I hope to put together a little compiler for my language.


3:21:51 PM    

Off to Brazil.

It should be fun, but the trip is business.  We have a partner down there we need to educate on our product.  I think I'll have one day.  It should be a gentle introduction to Rio de Janeiro, and I can figure out if I ever will want to come back...


3:09:05 PM    

  Thursday, April 10, 2003


Massive Force on Minimal Danger.

"A flood of fire vis-a-vis the slightest threat or what is perceived as such: air raids and tank fire and heavy machine gun shooting in a crowded downtown. The civilian victims undoubtedly amount in the hundreds. It is a military culture which is the cause: the massive use of force against the least danger, so much the worse for civilians. The British army gives a contrary example: that of patience and reserve. To preserve the future, even if it means to take risks."

That from Le Monde, a French newspaper.  I find it instructive to extrapolate these comments out of a military context and into our domestic social context...what is the Patriot Act and its siblings, if not the application of this doctrine to the population?

The right wing believes that rights are important, unless they interfere with actual or perceived security of some group.  Then anyone who opposes the imposition of that measure is anti-american.


11:05:40 AM    

Now They're Cheering!

And it's a good thing...there are a lot of open questions on how things are going to be run.  I think that the Americans should do a few things almost immediately:

  1. Offer rebuilding compensation for all civilian buildings mistakenly targetted.
  2. Bring in groups of doctors to deliver aid in the hospitals and ease the burden on the Iraqi medical system.
  3. Create an official opposition consisting of prominent and appropriate Iraqis.  This group would provide constructive criticism of the forthcoming military government.
  4. Apologize to Al-Jazeera and rebuild their studio, or offer alternate accomodations.

One of the things I find hard to understand is the continued references by many Arab commentators to the "humiliation" of the Iraqi people. What they're saying is that they'd rather see millions die under Saddam than have the Americans liberate the country.

I used to be pretty anti-war.  I like to think that it was because of the weasel nature of the Administration's position -- they kept saying that they were doing this to go after weapons of mass destruction, and we all know that is simply not true.  There were and are good reasons to do this, but they don't have anything to do with terrorism.  That essential lie sitting at the heart of American policy was very hard to deal with.

At this point no WMD have been found, and no significant quantities are likely to be found.  Further claims of terrorist presence within Iraq appear to be unfounded.

I really want to believe that we are the good guys in all of this...and the images of the cheering Iraqis on TV have brought a sense of relief to me that was a long time in coming.

The question is, what to do now.  The sheer lunacy and bias of much of the Arab world's coverage of Iraq continues to amaze me...the truth has to be somewhere in between what they're saying and what Fox is saying. 

The only truth I know is that the Administration took a huge gamble and it appears to have paid off.  Let's see if the reconstruction of Iraq is accomplished with something resembling the speed with which the military objectives were achieved.


10:55:17 AM    

  Wednesday, April 09, 2003


They're Not Cheering.

Of course they're not -- yes, they are happy that Saddam is going, going, gone.  But they are scared of the American army, and what's more, they've been bombarded on TV by images from the Arab press showing nothing but the brutality of American troops.  They have not been seeing anything that remotely resembles balanced coverage of the war.  So as far as they know, as far as they've been told, they're being invaded by colonialists who are committing "genocide" (according to one commentator) against the Arab people.

That this is not true will slowly be demonstrated to them over the next few months.  They will come to understand that the Americans are not staying.  Trying to stay in this country is not only undesirable for an administration, but is politically impossible -- Americans want their troops to come home as soon as possible.  Any notions of colonialism are ridiculous.


10:46:42 AM    

  Tuesday, April 08, 2003


RIAA vs. Us

I'm getting sick of subsidizing these people.  You should be sick of it too.  There are University students getting sued right now for running file sharing systems.  These systems happened to be used to share music, but they were sharing other things too.  The point is that society gets to make a choice: Do we want to be able to share information with each other freely, or would we rather inhibit that to serve special interests?

RIAA's barratry is an attempt to inhibit the use of technology that can index and exchange files.  There was a bill before congress that would have mandated the presence of digital rights technology in all computation devices (which has the consequence of eliminating general purpose computation).

The thing is, in the big bad new world, people can move information around freely.  There isn't anything that's going to stop them, and there shouldn't be.  Why should society pay the costs of enforcing laws that benefit only a few vestigial corporations?  It's a well-known fact that the average artist (in fact the vast majority of artists) would be much better off if their music was freely available and they weren't tied to record companies.

Here's my stance: If the "record companies" don't want people "stealing" their precious product, then they shouldn't release it digitally.  Go ahead and sell it on cassettes or whatever else you want.  Go back to vinyl.  Society shouldn't slap draconian information transfer laws on its members just on the off chance that someone is going to send a bit they shouldn't.

The feeble attempts at "legit" online music I've seen all have one thing in common -- they feed virtually all income generated to the record companies instead of the artists, keeping those artists pressed under their thumbs for as long as possible.


10:44:28 PM    

The Real Problem.

I note the release of GLUE 4 -- seems like a very solid step forward in the distributed application arena.  I am impressed with how simple it makes the creation of web services, and how flexible it seems to be.  I can't help but wonder, though...it just doesn't seem like the real problem to me.

I believe there's a different kind of system waiting out there for us.  It's still a little dark and formless for me, but I can see the shape of it now.  I've built some of it.  It's a new kind of computational system, waiting to be built. 

Here are some of the issues I see.

  1. Nothing is truly synchronous.  You can think something is synchronous, but as soon as you scale it up, it isn't really synchronous any more.  It can't be.  You can want it to be, but if you make that mistake, you'll regret it.
  2. Leasing is everything.  JINI introduced me to this idea in detail, and I think leasing should be forced right down into way that systems exchange information with each, at low levels.  Specifically, when one system makes a request of another (asynchronously), it must continue to show interest in the results of that request.
  3. RISC metamodels don't cut it.  Why should a metamodel be limited to classes and methods?  Why do we draw such a distinction between the logic of a system and its metamodel?  Rule-based metamodels are a way out of the stagnation computer science is currently experiencing.
  4. You don't have one metamodel.  You have a whole bunch of them in any complex system, and you better figure out how they can all co-exist.  Better yet, figure out a way that they can merge with each other, automatically, and have it all just work.  Hint: tuple spaces/statement models/rdfs.  Except that RDFS doesn't go far enough: It's just data, and therefore rather uninteresting.
  5. Push messages.  Whatever's at the bottom of this stack needs to be peer to peer, be able to punch through firewalls, be monitorable, be measurable, be be be...yes, aspects are the way to go here.  But there's more than one way to get at that.
  6. Location vs. Existence.  Systems that rely on identifiers to coalesce bother me -- it's just wrong somehow.  Yes, I am somewhere, but in computation, it's more important that I am something.

Yes, I know what to do about all of this...it's a lot to pull together, but it the combination of it all represents a different and I believe better way of solving many of the problems we face writing complex systems.


12:53:44 AM    

  Monday, April 07, 2003


Daughter from Danang.

I am struggling to organize my thoughts on this thought-provoking documentary.  I found it fascinating, at first, as the apparent protagonist wound her way through a culture that had become so unfamiliar to her.  She was overwhelmed by the attention and by the need of her relatives. 

The PBS web site gives us some insight into the complex emotions the filmmakers were feeling, and that Heidi and they knew that some would react negatively to her behavior.  I do react negatively.  I don't know if I have the right to judge in any way, but I feel, in some extended way, ashamed of what Heidi represents.  Perhaps her selfishness or inability to comprehend Vietnamese culture are a result of her apparently harsh upbringing.  My sense is that she went to Viet Nam expecting to find something for herself; she expected to receive emotion, to receive welcome.  She did not anticipate that she would need to give of herself.

What has disturbed me the most is that two years after the film was made, she had not yet made any progress in integrating these emotions; in dealing with their results.  I wonder if perhaps Heidi attends church on Sunday with her family, and puts money in the collection plate that would help her forgotten family. 

Someone I was with, once, came from Viet Nam when she was six.  She has sacrificed a great deal for her family, and never complained.  She too was raised in America, but raised by Vietnamese.

My overwhelming feeling from the film was that in the end, Heidi had nothing of value to offer her Vietnamese family.  She must now live with the knowledge that she is the kind of person who will abandon family; those in need.  I wonder if it affects her, or if Pulaski and franchises are a sufficient opium to ward that pain, hide it away.


11:12:45 PM    

Generalized Exception Handling.

I've been noodling around some ideas on this topic...specifically, what do you do when your big system has problems.  How do you handle exceptions in a rigorous way?  By rigorous, I do not mean "we catch all the exceptions".  So what.  What kind of exception are you catching?  What are you doing with it?  What are the appropriate set of actions you can take at that point?  How are you going to know what actions are appropriate without knowing the specific type of exception you're being handed?

Here is a chunk of something that's in progress.

General exception handling is a difficult problem for most large-scale applications.  By large scale I mean an application that makes extensive use of the modern practice of combining software from many different systems.

Exceptions (and general program errors) fall into three main categories:

  1. Fatal errors – the execution of the program cannot continue.  These are very rare, particularly in Java.
  2. Continuable errors – execution of a particular logic path or transaction must be abandoned, but the system is intact and can continue to function.
  3. Localized errors – an error has occurred in a very specific place, but can be “side-stepped” and logic can continue.

We will also often want to log an exception, but not necessarily all.  This leads to the general notion of exception categorization, which is generally done by subclassing exceptions.  The problem with subclasses is that they provide only a single inheritance model, and we often need more.  We can use interfaces as tagging mechanisms, and let the typing mechanism in Java do the work for us.  Here are some examples:

Throwable -->

    Fatal -->

        NoMoreFilesFatal

        MissingResourceFatal

    Continuable -->

        IOError

        CommunicationsCon-->

            NetworkCon

            InterfaceCon

    Localized -->

        NotFoundLocal

        ParameterMissingLocal

 You get the idea...the beauty is that you can write code like this:

 try {
    ... stuff ...
} catch (Fatal f) {
    .. do emergency cleanup ...
    throw f;
} catch (NotFoundLocal nfl) {
    ... we want to do something very specific with these kinds of exceptions...
} catch (Continuable c) {
    ... log the serious error and so forth  ..
} catch (Localized l) {
    ... skip over the current item, optionally doing some extra work...
}

You can easily create a mixture of general and more specific exception handling...the inheritance mechanism can be used to "roll up" classes of exceptions into something that is throwable (and catchable) in the system.

If we derive our exception classes and cause them to implement these general or more specific interfaces, then we can easily handle the various classes of exceptions that occur in a system like ours.  The bottom line is that we can create a set of very general exception handling techniques, where we use interface tagging to rate the "severity" and "class" of the exception and create general responses to the errors.  These will provide far more robust error handling than our current exception subsystem.


7:25:41 PM    

  Saturday, April 05, 2003


An Exhausted People.

"All are liars. Bush is a liar. Saddam is a liar," the man said. "We are an exhausted people."

That from an Iraqi citizen in line.  It's probably fairly representative of the average opinion over there, right now...and completely understandable.

The good thing about all the "suicide bombers" emerging towards the American military is that there will be just that fewer fanatical idiots in the world.  My understanding is that the average suicide bombing simply isn't militarily significant, and the solders will, in general, have absolutely no trouble eliminating them.  Every once in a while one might get through...

The recent explosion of a car being driven by a pregnant woman is very sad.  Three US soldiers and the woman died...my guess is that some of the not-so-nices over in Baghdad loaded her car with explosives then forced her to drive it to the checkpoint...where they killed her and the soldiers.


10:53:08 AM    

Borland Gets Theirs

I used to like Borland stuff. I spent a long time building apps with Delphi and a good deal of time with JBuilder as well. The technology was always pretty good -- not always perfect, but pretty good. Nothing has ever touched Delphi for sheer speed and usability in a development environment. JBuilder was pretty damn good, too.

The thing that always bothered me about Borland was their increasingly nasty and aggressive upgrade cycle. Once upon a time you could buy a Borland product for $300. Every two years they'd release something new and it was generally worth the $150 or so you'd have to pay to get it. They also released regular patches and upgrades for their products.

The last year or two you've had to pay way more than that. It's effectively shut the hobbyists out of the market, and I think that's sad. Borland used to generate a lot of business there.

Now they're just interested in selling you on their very short upgrade cycle. You get almost no benefit from having owned their products before. It's "pay up" time. And patches are practically a thing of the past. Significant problems with their products usually are just left hanging, and as a user you're expected to buy the latest release to get fixes you should have had in the first place.

That's why I'm so pleased with Eclipse, and so happy that I have a choice. Let's see how their upgrade cycles and expenses do in the face of serious, free competition. You're not going to find a lot of developers cheering Borland on -- they've been screwed by the pricing and upgrade policies too many times.

Borland will have to rethink its pricing model. They can tackle this from a product lock-in standpoint, keeping developers who use the other, licensable technologies that ship with JBuilder, but that's going to be a stretch. Most of what's shipped with JBuilder comes in other forms, from other organizations, and is often free. So what is JBuilder really about?

IntelliJ is better for refactoring. Eclipse is better for speed, and has massive support (plus is better for refactoring too). Enterprise-level development can benefit from JBuilder, but there are some pretty good libraries out there that will make a serious dent.

I need to make a call to my Together/J representative to find out how my maintenance terms are going to change. Will this be the end of TJ as my modelling tool of choice? I hope not -- I hope they are not going to charge me a 75% "maintenance" fee on a $6000 product. I have been paying around 18% (I think) which I consider quite reasonable. All development on TJ seems to have stopped -- I haven't seen anything new from them in a really long time.

It all adds up to a restructing and implosion, in my opinion. Still, for the sake of the brilliance of TJ, I hope they can do something with at least that product. I won't be coming back to JBuilder, even if they couple TJ to it. I won't use JBuilder just to get at the capabilities in TJ. I have my good ole TJ license still working for me, and I'll continue to use that one for my basic modelling, even if it doesn't work with later versions of Java.


1:04:13 AM    

  Friday, April 04, 2003


Race and Reparations

There's a case before the Supreme Court right now -- it's an appeal by a white student who was denied acceptance at a Michigan University. She believed that she was denied a position because she was white, that a person of color "unfairly" took her place. The case has attracted the attention of the right wing everywhere...who see a great opportunity to lock in the status quo.

The idea is that everything in our country should be color-blind; that we should strive for an ideal, and that no adjustments for history are permissible, let alone wise. A simple reading of this case would tend to agree -- yes, we should not discriminate against a white student for being white. But can we say that not giving someone a bonus on their application score is the same thing is discriminating?

All things being equal, I would agree with the plaintiff in this case. They're not.

If you want to put this case into perspective, look up the Tulia 46. Read about that case, and particularly what's happened just in the last few days, and decide for yourself if the playing field is truly level. 46 Blacks in Tulia were convicted on the unsubstantiated word of a single, miserable, lying police officer -- one who was demonstrably racist. In one day, the police of this town threw half of the Black population in jail.

This didn't happen in 1918. It didn't happen in 1940. It happened three years ago. What's more, the Attorney General of Texas refused to even pursue the case. Diligent efforts by civil libertarians resulted in the vacating of a whole series of these convictions, and a judge has just thrown out the rest.

Perhaps you believe that reparations are pointless, and unnecessary, at this point in history.

I believe that reparations are a critical part of rectifying the black (and minority) experience in this country. I believe that the most promising and powerful form of reparations are the affirmative action programs our education institutions have implemented.

It is the right kind of reparation, the most elegant, and the one that truly moves us towards the goal of a society of fairness and opportunity for all.


1:05:34 AM