<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Ken Arnold&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/" />
<modified>2006-05-18T17:31:27Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/arnold/35</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2006, arnold</copyright>
<entry>
<title>JCP Wants You, Sort Of, It Thinks...</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2006/05/jcp_wants_you_s.html" />
<modified>2006-05-18T17:31:27Z</modified>
<issued>2006-05-18T17:31:20Z</issued>
<id>tag:weblogs.java.net,2006:/blog/arnold/35.4825</id>
<created>2006-05-18T17:31:20Z</created>
<summary type="text/plain">The Java Community Process wants you to join, but they need to make people more important if they want you for real.</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[The Java Community Process -- they want you, but it seems like they still don't
quite know what to do with you.

<p> As I briefly mentioned in a previous blog, the JCP people want you to sign
up as an individual member.  And you should, really, it's a good thing.

<p> But that's not good enough -- if you're going to be there you ought to count more.

<p>  The final decision maker in the JCP is the
Executive Committee (EC), one for ME and one for SE and EE.  Each EC has 16
members, and <a href="http://jcp.org/en/participation/committee">here they
are</a>.

<p> You can see that the EC for J2EE has two actual individuals.  J2ME has none.
So as individuals you have (maybe you've already done the math) 2 of 32
members.  While this is a nice, comforting pair of powers of two, it tells you
where you are.

<p> This is fundamentally broken.  It is broken in two major ways:

<p> <li> Obviously there are simply too few actual individuals on the EC.  The
two J2EE members are both very good people who deserve our admiration and
thanks.  But the <a href="http://jcp.org/en/procedures/jcp2">principles of the
process</a> say that the ECs represent "a cross-section of both major
stakeholders and other members of the Java community".  Two of sixteen in one
case, and zero of sixteen in another, isn't much representation for us
individuals who are being pushed to sign up.  If we sign up, where is our
practical representation as major stakeholders?

<p> <li> More subtle, 30 members are companies.  People show up to represent
them, but it is (say) IBM that is a member of the J2EE EC, not the current
human being they ask to do that job.  What this means is that even for the
commercial stakeholders, only a very, very few actually get representation in
the final decisions.

<p> In political terms, this is an oligarchy, a governing system where the
final decisions are in the hands of an elite.  This is further reinforced by
the selection model.  Sun gets one seat.  Five seats are elected.  The other
ten are nominated by Sun and ratified (or, theoretically, not) by members.  In
other words, these ten are chosen by one-candidate elections.

<p> Or to put it another way, if the individual members rose up in unison, we
could elect, at most, five of sixteen members.  For the rest we would have to
vote down company after company, or person after person, until Sun nominated them someone we wanted.

<p> Or, more simply, it's "You discuss, we decide."

<p> As individuals we should join, but the JCP needs a more open system that
allows all stakeholders, not primarily the largest, a part in the final
decisions.  More members should be elected.  Equally important, it should be
<em>people</em> on the EC, not companies.  Yes, people should be elected to
represent commercial interests.  A person with good understanding of the
telecommunications industry, say, could be elected, and while they might be
employed by one company, they should be expected to represent a set of
commercial interests that elect them, not just that one company.

<p> The <a href="http://www.jini.org/jdp/">Jini Decision Process</a> has many
different requirements so is probably not simply transplantable.  But it has a
system that has individuals elected by both commercial and individual blocks.
This gives it a structure that represents more stakeholders at the top.

<p> Politically, the technical term for this is "representative democracy".

<p> Or, as it is commonly known, "The worst form of government.  Except all
the others."  It is time for a less worse form of governance in the JCP.]]>

</content>
</entry>
<entry>
<title>A Second Language for the JVM!!</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2006/05/a_second_langua.html" />
<modified>2006-05-16T21:44:50Z</modified>
<issued>2006-05-16T21:44:09Z</issued>
<id>tag:weblogs.java.net,2006:/blog/arnold/35.4774</id>
<created>2006-05-16T21:44:09Z</created>
<summary type="text/plain">Is it really a new thing?</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Virtual Machine</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[Graham Hamilton today said that with Visual Basic, we now have a second language for the JVM!  As if that's new!

<p>
<a href="http://www.robert-tolksdorf.de/vmlanguages.html">One web page</a> lists nearly 200 languages, most custom or unknown (Jacl, E, yoyo) but many well known (Ada, COBOL, forth).

<p> I suppose for marketing reasons this might be a good thing to say because the market has ignored this.  And Graham is right that extending the VM to support other kinds of languages is a very good thing to do.  But let's not forget the actual state of the world.]]>

</content>
</entry>
<entry>
<title>Getting underway</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2006/05/getting_underwa.html" />
<modified>2006-05-16T19:24:26Z</modified>
<issued>2006-05-16T19:24:17Z</issued>
<id>tag:weblogs.java.net,2006:/blog/arnold/35.4768</id>
<created>2006-05-16T19:24:17Z</created>
<summary type="text/plain">Un-live blogging the opening keynote</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p> Nice music.  No network.  Blog as if there was one...

<p> Every year they don't start this on time, and every year I show up on time
anyway.  Every year they do something interesting with the music.  Sometimes
more interesting than music, but this year definitely not.  World fusion (isn't
all music these days?).

<li> Ah, the lights dim, time (one assumes) to see the promo intro.

<li> Yup, promo intro.  Theme this time: Cute.  Oh, actually it's real people
doing real things, no doubt all enabled by Java, though Bozo alone knows how.
But it's cute, real people.

<li> And now, John Gage -- back again!  He always makes this thing work.  He
does look older.  Of course, I don't...  He keeps the edge off the thing
becoming boring, that edge that something exciting is still going on.  In the
first days it was obvious.  Now you have to work at it, but it's there.  And
John brings it out.

<li> Ah!  Jini!  He mentioned the get-together last night.  Subversive guy.

<li> I understand what they're trying to do with the mandatory schedule builder
thing, but I only plan some sessions.  I often figure out on the moment which
one I'm going to.  I wonder how that will work given that I "must" use Schedule
Builder.

<li> "Beautiful systems" says Grady Booch.  Good for him.  Software done right
includes aesthetics, not just for the pleasure of it, but because
well-engineered systems are beautiful and poorly engineered systems are ugly.  I've <a href="http://www.artima.com/intv/taste.html">said so myself</a>

<li> CEO Schwartz.

<li> "Free Niagara" box.  Go to the sun web site.  He says.

<li> Shilling for the Java Community Process individual membership.  They'd
better be shifting how it works -- the overall board has been
owned by companies, not individuals.  So we can all join and vote and talk, but
unless they have changed things, the final decision is in the hands of the board.
(If the network was working in here I could find this out before posting, hint,
hint.)

<li> Zander's back on stage for a change.  Still has a good suntan...

<li> Ah, the first of the pseudo-conversations.  "So, what's going on at
Motorola?"  This was not (I'm sure you'll be shocked) a surprise question.
Call me a cynic...

<li> The Dukies look nice this year.

<li> Canonical: Linux on Niagara sounds nice.  Ubuntu on servers sounds nice.

<li> Marc Fleury: JBoss joining NetBeans.  Need a <em>company</em> behind any
successful open source software?  People see what they want to see.

<li> Rich Green, back at Sun.

<li> "Open Source Java?" asks Jonathan of Rich...  Hand wave, hand wave, mumble
mumble..  "I will go figure that out: It isn't a question of 'Whether' but a
question of 'How'."  (Will D.C. climb back on that bronco?)

<li> Handoff of the show itself to Rich?  Interesting...

<li> Get the Java EE new standard team up on stage.  And who is it?  Why, it's
a group of individuals -- who represent companies.  More cynicism, I know, but
if individuals are so important, where are the individual developers on this
team?

<li> Now the VP of Java.  Handoff again.  Tag team shows lose focus, but it's
hard to put in everything that needs to be here (not to mention everyone with
pull who wants to be there).

<li> Ah, here come the canned demos.  More canned dialog too, I'm sure.
(Canned demos are inevitable because who wants to be the demo that doesn't
work?  Canned conversation is, too, but it's more wince-worthy.)

<li> GlassFish seems very interesting.  All open source.  Have to try this
puppy out.

<li> The problem with all these demos is that you don't know what's canned and
what's actually easy for me.  The Ajax stuff, for example -- how much work was
it hooking it up to google maps?  Is that programmed in, or did they set that
up in advance, but I'd have to do it myself?  And so on.  Clarity about this is
really helpful, but it's really rare.  I honestly have very little idea what work these
tools would save me because I can't tell the two apart.

<li> Uh, .Net/JavaEE interoperability in partnership with MicroSoft?  What
nefarious plot is this? ;-)  Tango is a cute project name -- too cute, really,
but at least it's not boring.

<li> OK, I'm already bored with the name "Tango".  I take it back.

<li> OK, the rose in the teeth -- a couple points for the Tom Lehrer reference.

<li> Nobody around me even knows the name of this next project on display.  They lost folks --
too many things one after the other, especially that aren't that far apart in the
application area.

<li> Oh boy, graphical programming.  Works in the small, fails in the large,
always has.  People keep repeating the same attractive errors.  Insurance
there is a notion of an <a href="http://insurance.cch.com/Rupps/attractive-nuisance-doctrine.htm">"attractive nuisance"</a>, something that entices people to
do something that is bad for them.  Maybe we need to have a
list of known software attractive nuisances.

<li> BEPL Engine, that's what the project is.

<li> Battery running low, damn.  I'll blame it on them for starting late and
running late.  Must be their fault...

<li> "OpenJava EE".  I guess you gotta have a new name or marketing hasn't done
its job.

<li> John Gage back, finally.

<li> Now to find juice and network!  And see if I can sneak into a session <em>unscheduled!</em>  I've left bail money with a friend...]]>

</content>
</entry>
<entry>
<title>Harmony</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2005/06/harmony.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-30T19:29:21Z</issued>
<id>tag:weblogs.java.net,2005:/blog/arnold/35.2809</id>
<created>2005-06-30T19:29:21Z</created>
<summary type="text/plain">Open Source Java</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>J2SE</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
I&apos;ve been waiting all conference to see something that can be exciting about the future of Java itself, not just for individual subparts of the Java community.

So now I&apos;ve found something.  Apache is starting a serious project to create an open source implementation of the Java VM.  Folks have tried this occasionally, but it usually dies quickly because it&apos;s a mess o&apos; work, and only gets to be more so over time.  But Apache has a track record, and a serious shot from their side has a good chance of success.

The project is named &amp;#8220;Harmony&amp;#8221;.  Check it out.

</content>
</entry>
<entry>
<title>Names matter</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2005/06/names_matter.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-29T00:27:28Z</issued>
<id>tag:weblogs.java.net,2005:/blog/arnold/35.2759</id>
<created>2005-06-29T00:27:28Z</created>
<summary type="text/plain">What are name tags for?</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p>A clue for the folks who run this conference: When I run into someone I've met at last year's JavaOne, what's the first thing I want from the conference badge?  Let me give you a hint: it isn't to see whether they have the same X-Ray of a cell phone that every other attendee has.  This may come as a surprise, but trust me on this.<br />
<p><br />
I want to know their freakin' <strong><em>name.</em></strong><br />
<p><br />
I'm particularly bad at names, but I know I'm not the only one who needs the help.  This is why conference badges traditionally have names on badges that are large enough to be read from a few feet away, sometimes even across a room, and occasionally are readable from low Earth orbit.  This allows you to be reminded of someone's name when they greet you without peering in way that at best makes your memory failure obvious, or at worst will get you slapped.<br />
<p><br />
This year's badges have print you can only read by grabbing the tag and pulling it up to your eyes, or by getting your nose closer to some folks than is actually healthful.<br />
<p><br />
Whoever designed the badges needs to be forced to put <em>their</em> noses close to all the attendees until they get the point.</p>]]>

</content>
</entry>
<entry>
<title>Miss Manners at JavaOne</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2005/06/miss_manners_at.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-28T07:16:11Z</issued>
<id>tag:weblogs.java.net,2005:/blog/arnold/35.2735</id>
<created>2005-06-28T07:16:11Z</created>
<summary type="text/plain">Be thoughtful.</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
On behalf of a friend: When you leave a BOF early, can you please close the door quietly?  It seems basic courtesy to those left behind.

As a counter-courtesy, maybe speakers at BOFs where there is no amplification could repeat questions?

Next: Which fork do you use to skewer an ignorant speaker?

</content>
</entry>
<entry>
<title>Generics Considered Harmful</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2005/06/generics_consid_1.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-27T18:53:50Z</issued>
<id>tag:weblogs.java.net,2005:/blog/arnold/35.2709</id>
<created>2005-06-27T18:53:50Z</created>
<summary type="text/plain">&amp;#8220;Complexity budgets&amp;#8221; are important.  Too bad we didn&apos;t think that way earlier.</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>J2SE</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[I don't know how to ease into this gently.  So I'll just spit it out.
<p>
Generics are a mistake.
<p>
This is not a problem based on technical disagreements.  It's a fundamental language design problem.
<p>
Any feature added to any system has to pass a basic test: If it adds complexity, is the benefit worth the cost?  The more obscure or minor the benefit, the less complexity its worth.  Sometimes this is referred to with the name &#8220;complexity budget&#8221;.  A design should have a complexity budget to keep its overall complexity under control.
<p>
Generics are way out of whack.  I have just finished (well, nearly) my work in the fourth edition of <a href="http://www.kokogiak.com/amazon/detpage.asp?sb=s&#38;asin=0321349806&#38;field-keywords=java+programming+arnold&#38;schMod=books&#38;type=">The Java Programming Language</a>.  I am glad to say that David Holmes, not I, was the one who covered generics.  Just reviewing it and reading the specifications was enough to put my brain through a cuisinart stuck on &#8220;pulse&#8221;.
<p>
We went through that chapter multiple times, consulting with several people who wrote the specs and are otherwise experts.  We were only able to cover the highest level in the book, and it's still pretty hard to understand (although David exceeded himself in making it as comprehensible as possible).
<p>
Learning to use generified types can get very complicated.  It's hard to understand why you cannot do some things without casts, for example.  But writing generified classes is rocket science.  Here's one that showed up at the very last minute: It's a bad idea to declare a type that returns an array of a type parameter.  That is, you shouldn't do this:
<pre>
    interface Holder&lt;T> {
        T[] toArray();
    }
</pre>
Why, you ask?  Well, the problem is that <tt>T</tt> might itself be a generic type.  That is, someone might declare a <tt>Holder&lt;Set&lt;String>></tt>.  And, ... uh, hold on, I'm trying to remember the issue here...
<p>
Actually, I'm only mildly embarrassed to say that I've forgotten.  But I remember that it took a few back-and-forths between David and the advising expert so that David &mdash; remember, David is the guy who has been writing a chapter on generics after several months of experimentation and research and over a year of thinking about how to approach it &mdash; could understand the problem.  So our book recommends against it because it isn't good.
<p>
Although there is an exception.  It's okay to do this if the method takes as a parameter an array of <tt>T</tt> or a <tt>Class&lt;T></tt> object:
<pre>
        T[] toArray(Class<T>);
</pre>
That's OK to do.
<p>
Which brings up the problem that I always cite for C++: I call it the &#8220;<i>N<sup>th</sup></i> order exception to the exception rule.&#8221;  It sounds like this: &#8220;You can do <i>x,</i> except in case <i>y,</i> unless <i>y</i> does <i>z,</i> in which case you can if ...&#8221;
<p>
Humans can't track this stuff.  They are always loosing which exception to what other exception applies (or doesn't) in any given case.
<p>
Or, to show the same point in brief, consider this: <tt>Enum</tt> is actually a generic class defined as <tt>Enum&lt;T&nbsp;extends&nbsp;Enum&lt;T>></tt>.  You figure it out.  We gave up trying to explain it.  Our actual footnote on the subject says:
<blockquote>
<tt>Enum</tt> is actually a generic class defined as <tt>Enum&lt;T&nbsp;extends&nbsp;Enum&lt;T>></tt>. This circular definition is probably the most confounding generic type definition you are likely to encounter. We're assured by the type theorists that this is quite valid and significant, and that we should simply not think about it too much, for which we are grateful.
</blockquote>
<p>
And we <em>are</em> grateful.  But if we (meaning David) can't explain it so programmers can understand it, something is seriously wrong.
<p>
So now we know it's complex.  But if it really saved your programming butt a lot it could be worth it.  So what does it save you?  It saves you making mistakes, like putting a String in a list that should only contain Longs, or attempting to pull out a String from such a list.
<p>
But we have a demonstration proof that we can live without it, namely that we have for nearly a decade.  Of course there are such bugs in code, and if you generify a bunch of code you might even find one or two that were waiting to bite you (unless that code is actually orphaned).  But I have yet to find someone who believes this to be a major source of error in their code, compared to other problems.
<p>
So we have a feature whose complexities are high, whose learning curve is steep, and whose benefit is limited.  And add to that the feature is ubiquitous -- with Java 5 it is nearly possible to write code that doesn't interact with generics.
<p>
The complexity of Java has been turbocharged to what seems to me relatively small benefit.  I don't see that the value is there to justify the cost.  Not that we can change things, but I think we should at least view it as an demonstration proof of the value of an explicit complexity budget against which features must be justified.  Without such a budget, it feels like the JSR process ran far ahead, without a step back to ask &#8220;Is this feature really necessary&#8221;.  It seemed to just be understood that it was necessary.
<p>
It was understood wrong.]]>

</content>
</entry>
<entry>
<title>Oh no, not again</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2005/06/oh_no_not_again.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-27T13:30:42Z</issued>
<id>tag:weblogs.java.net,2005:/blog/arnold/35.2700</id>
<created>2005-06-27T13:30:42Z</created>
<summary type="text/plain">Thanks for all the fish...
</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[So we begin again.  Another JavaOne.
<p>
The place has certainly calmed down.  Which is to be expected.  The first JavaOne was at the rush of the .com boom.  Everything was new, everyone was doing business with everyone else, new ideas, new possibilities.  Every corner hid a new frisson.  You felt you could just live off the vibes.
<p>
By now it's much more staid.  After all, Java isn't this amazing new thing, it's a well-established part of the programming field.  Then, finding someone with six months Java experience was really amazing, and that was almost certainly "playing with it because it was interesting".  Now it's just another language that pops up on resumes everywhere The price of success, of course, is that you are now established.
<p>
For those who enjoyed the whirlwind, though, you have to dig harder.  There are still a lot of really cool things that are being done.  Some are just cool because they're cool, no matter the language.  Others are cool because Java makes them possible.  There are still things that Java does that other languages just can't do, or can't do smoothly, mostly having to do with mobile code, security, and nearly complete platform transparency.
<p>
I'm going to be looking for those.  Plus, of course, looking for folks I meet only here, once a year.  Frankly they're more interesting than a lot of the sessions.  While it's nice that someone is presenting the current draft of version 1.3 of the JSR 9,324 spec on adapting to .... <em>[snore].</em>  Hey, it's probably important to someone, and if it's right up my alley I'm there, but generally I'll find out about this stuff when I need to, and faster by using online docs.
<p>
But the arguments in the hall about Jini vs. JXTA are not online docs.  The folks at tables by themselves, who you ask to sit with and then get to know -- they're not online docs, either.  The people who are still nutty enough to be running around causing a fuss <em>without being paid to</em> are online nuts, but they're not online docs, at least not ones you're going to run into.  (Paying people to cause a fuss is pretty pathetic, and has <em>always</em> looked pathetic, yet marketing folks keep trying it, which is even more pathetic.)  The unknown ideas that show up that get you thinking a new way?  Who is going to point you at those online docs?
<p>
Which is why the BOFs are often more interesting, more vital in both senses, than the talks.  Look around.  Find a couple you not only don't recognize, but that look like they might open to something new.  If you haven't been to two or three BOFs like that, you've wasted your trip.
<p>
After ten years of JavaOne it can't be the exciting innovation it once was, but it still has exciting innovations.  So post up the sideways things, the interesting things you're going to look at.  Let's help each other find the good stuff, the stuff you might not put into your trip report, but that you regale others with over coffee or beer.  It can't be <em>all</em> spark anymore, but let's keep connected to the spark anyway.
]]>

</content>
</entry>
<entry>
<title>Unicode marches on</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2005/06/unicode_marches.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-06T14:04:08Z</issued>
<id>tag:weblogs.java.net,2005:/blog/arnold/35.2544</id>
<created>2005-06-06T14:04:08Z</created>
<summary type="text/plain">Ah, Unicode meets Java and life gets odder...</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>J2SE</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[I'm working on the 4th edition of <i>The Java Programming Language</i>,
and everyone of course has heard of the major new features.  One of the
odd little corners, though, is that Unicode has now grown beyond a
16 bit character standard, and so has lots of interesting new
complications.  Trivially, every method in the <tt>Character</tt>
class that asks about a <tt>char</tt> now has an overload to which
you can pass an <tt>int</tt>, and several other methods about strings
and characters take <tt>char</tt> arrays that can be one or two in
length to hold the larger characters.  I'm sure that this will
matter to somebody.
<p>
What <em>I</em> always look for, though, is the new version of the
Unicode book.  In about 1,000 pages of technical text, one can find
out amazing things about various languages and writing systems.
Our book already has an exposition on title case (which is a third
case beyond lower and upper case, used in Croatian).  Case again
rears its head for Georgian which has an upper case, but the upper
case is considered archaic, so while <tt>toLowerCase</tt> will
translate any upper case Georgian letter to its lower case equivalent,
<tt>toUpperCase</tt> will not do the opposite.
<p>
And so it goes.  One of my favorites is <tt>\u09F8</tt> (which looks
sort of like a backward <tt>N</tt>).  This is a <a href="http://www.unicode.org/charts/PDF/U0980.pdf">Bengali</a> currency
symbol that means &#8220;one less than the denominator&#8221; in a fraction.
I don't know what this is really for, but I've always assumed it
was the way that Bengalis did the equivalent making things look cheaper
by pricing things for $19.99 instead of $20.00.  So instead of
writing &#8220;19&nbsp;<sup>31</sup>/<sub>32</sub>&#8221; or &#8220;19&nbsp;<sup>15</sup>/<sub>16</sub>&#8221;, they just made a mark that meant
&#8220;Doesn't look as expensive as it really is!&#8221;  Saved a lot of time
and trouble, no doubt.  Maybe it means something else, and I may
be just about to find out from some Kind Reader,
but I've thought sometimes that we ought to extend Java that way:
Allow <tt>\u09F8</tt> in expressions such as &#8220;<tt>\u09F8</tt>&nbsp;<tt>/</tt>&nbsp;<tt>i</tt>&#8221; to mean
&#8220;figure out what <tt>i</tt> is, subtract one, and then divide by
<tt>i</tt>&#8221;.  How useful!
<p>
Well, today I finally got my copy of the Unicode 4 book, and I've
opened it right up to the choicest bit: <tt>\u2600</tt> -
<tt>\u26FF</tt>.  That's where they put the &#8220;Miscellaneous Symbols&#8221;,
and they are quite <a href="http://www.unicode.org/charts/PDF/U2600.pdf">a
miscellaneous lot</a>.  This is where you can find the hammer and
sickle sign for communism alongside the peace sign.  Want a snowman
in your text?  Try <tt>\u2603</tt>.  Writing a horoscope?  Here are
your astrology symbols, right next to the religious and political
symbols, such as the one for Iran (<tt>\u262C</tt>).
<p>
I've always figured that some of this got here as pranks.
Maybe in each version the leader of the group or the
person who wins the karaoke contest gets to add one personal symbol.
I don't know, but it might explain why, tucked in between the card suits
and a set of basic Western musical notations, is a symbol for &#8220;hot springs&#8221;
(<tt>\u2668</tt>).
<p>
Well, this version's karaoke star was a recycling nut, I guess.
There are 12 symbols for recycling added.  And maybe this year's
drunken evening was at the casino because now we have images for
all sides of a six-sided die.  (Not D&#38;D players, clearly, as we
have no images of 20- or 12-sided die sides.  Maybe next time.)
<p>
Of course, Unicode 4.0 is not just about adding a second kind of
umbrella symbol (<tt>\u2614</tt>, which is just like the existing one
except that it has little raindrops above it; for versimilitude, I
guess) or a steaming coffee cup (<tt>\u2615</tt>, so you can have
coffee in your hot springs).  That's just where groupies like me
go to look at the seamy underbelly of character encodings.
<p>
No, it was mostly about adding new entire character sets, such as
<a href="http://www.unicode.org/charts/PDF/U1800.pdf">Mongolian</a>, <a href="http://www.unicode.org/charts/PDF/U10480.pdf">Osmanya (Somali)</a>, and <a href="http://www.unicode.org/charts/PDF/U1400.pdf">Canadian Aboriginal</a>.  Many added
sets were historic.  Unicode is not only for modern languages, but
also provides standard ways to encode ancient languages.  So <a href="http://www.unicode.org/charts/PDF/U10000.pdf">Linear B</a> (an ancient Greek script) is available, as are <a href="http://www.unicode.org/charts/PDF/U16A0.pdf">Runic</a> and <a href="http://www.unicode.org/charts/PDF/U1680.pdf">Ogham (old
Irish)</a>.  They also added <a href="http://www.unicode.org/charts/PDF/U10400.pdf">Deseret</a> and <a href="http://www.unicode.org/charts/PDF/U10450.pdf">Shavian</a>, scripts desinged for
writing English phonetically (Shavian was designed by playwright
G.B. Shaw.  Mark Twain also invented <a href="http://www.mantex.co.uk/samples/spell.htm">such a system</a>, but his dropped
redundant letters (&#8220;c&#8221; can be written with &#8220;s&#8221; or &#8220;k&#8221;) and then
reused them.  This had the advantage of not requiring an entirely
new typographic system, or a new Unicode block set, so he remains
unrecognized by the Unicode committee.)
<p>
The really neat thing about this is that these are all characters.
I mean, real actual characters to Java.  You can write your identifiers
in ancient Irish or Scandanvian Runes.  Although it raises some
interesting questions, such as: What would Homer name a loop index
variable?  Or, Should you use Shavian instead of ASCII for English
variables to help the reader pronounce the names correctly?  Or if
you name identifiers using <a href="http://www.unicode.org/charts/PDF/U10380.pdf">Ugaritic</a>, which is a cuneiform system, do you
need to be able to print out your code on clay tablets?
<p>
Unfortunately Java does not (yet) allow you to write numbers in
non-ASCII scripts, but if we are fortunate, we could someday be
able to write our constants using <a href="http://www.unicode.org/charts/PDF/U10140.pdf">ancient Aegean numbers</a>.
<p>
Time to start lobbying!]]>

</content>
</entry>
<entry>
<title>Ludicrous as a Balm for Patent Idiocy</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2004/11/ludicrous_as_a.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-11-26T22:43:33Z</issued>
<id>tag:weblogs.java.net,2004:/blog/arnold/35.1761</id>
<created>2004-11-26T22:43:33Z</created>
<summary type="text/plain">Stop thinking so hard: My &quot;ludicrous patent&quot; theory really isn&apos;t such a big change.  It might just have a useful effect, though.</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[Pamela Jones's <a href="http://www.groklaw.net/article.php?story=2004112304372122">GrokLaw</a> website has kindly noticed my suggestion <a href="http://weblogs.java.net/blog/arnold/archive/2004/11/selfenforcing_p_1.html">to make ludicrous patents a form of fraud.</a>  She raises a few questions that overlap
with some from other folks, so I thought I'd clarify my thinking.  What the heck -- I've not nothing else to do on Thanksgiving.
<p>
One phrase I am known for repeating is "You're thinking too hard."  I use it to mean that someone is looking for a complicated, subtle meaning instead of a simple one.  Often it seems that if you <em>pretend</em> the solution is simple, it becomes so.
<p>
So I have to say to PJ: "You're thinking too hard."  Here are her concerns (quoted from her blog):
<ol>
<li>You'd have to define a clear line in the sand, a definition of obviousness that couldn't be stepped beyond unless it was on purpose, and I don't see how you could. Maybe you do. But no law can be so vague that it's impossible to know precisely when you are breaking it. How could you define clearly enough where that line is?
<li>Who do you punish?
</ol>
The first is actually (to me) quite simple.  The relevant standards for a patent are (a) that it must be not obvious "to one normally skilled in the art", and (b) not already be public knowledge.  The phrase "normally skilled in the art" has well-defined meaning in patent law, sufficient to under-pin the whole structure.  So let's just reuse that: A patent is "ludicrous" if it is "trivial to one normally skilled in the art."  Note the range opened up between "obvious" and "trivial".  On a scale from 1 (stupid) to 10 (Einstein), we could say that an idea is "obvious" if is a 6, and so any patent should be a 7 or above.  Whether an idea is a 5 or 6 or 7 is something reasonably people could argue about, and so is not fraud to disagree.  But at some point -- let's call it 3 -- it's just plain trivial.
<p>
This is the level of precision of most legal standards.  These words are then interpreted by judges to apply to particular instances, which nails it down harder and harder.  But the word "trivial" (or the phrase "trivially obvious") fits into the structure quite nicely.
<p>
As for prior art, I would say a patent is "ludicrous" if it steps on prior art "widely known to those normally skilled in the art."  In <a href="http://tinyurl.com/6d4wf">our current poster child</a>, I would say that finding folks who have heard of "not equal" operators for comparing objects, pointers, or references would be pretty damn easy.  It's probably hard to find normally skilled folks who <em>haven't</em>.
<p>
Liability is even easier.  Those who are in a position to profit from the fraud are liable.  Typically this is the patent's actual owner, who may or may not be an inventor.  In our particular poster child, this would be MicroSoft.  I use the phrase "actual owner" because people who are clever should not escape their responsibility by hiding the patent in a shell company or something.  Like with any other fraud, you cannot escape liability easily.  If you buy a patent, you buy the risk.  So don't buy a patent that is likely to be ludicrous.
<p>
Others have worried about the new lawsuits involved.  First, remember that if you file a claim on a ludicrous patent, you only get paid if you win.  This is real incentive to avoid that.  And there are protections in the legal system against frivolous suits, which would equally apply here.  Remember, the idea is to leverage the existing systems to address the problem, not invent an entirely new system.  Standard safeguards and rules apply.  We're just defining a new form of fraud, based on existing standards for fraud and patents.  Once we've set up the language reasonably, most things should just follow naturally.
<p>
I don't declare for or against software patents here.  We can leave that for some other time.  But politics is the art of the possible, and I think that this suggestion actually is slightly near <em>possible</em>.  And I think it would make a difference.  And, like PJ, I like the idea of someone getting legally smacked for being "ludicrous".  That alone would be worth it.]]>

</content>
</entry>
<entry>
<title>Self-enforcing Patent Sanity</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2004/11/selfenforcing_p_1.html" />
<modified>2008-05-30T18:31:23Z</modified>
<issued>2004-11-23T02:44:37Z</issued>
<id>tag:weblogs.java.net,2004:/blog/arnold/35.1751</id>
<created>2004-11-23T02:44:37Z</created>
<summary type="text/plain">Why  not pay foxes to guard the henhouse from other foxes?</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p>
There are many suggestions for fixing the patent system, from abolishing it to radical surgery.  Many of these are praiseworthy in design, but most suffer from a severe problem -- You can't get there from here.  Wonderful end results are nearly impossible to attain because the forces defending the status quo are powerful and have little stake in the resulting system.
<p>
So here's an idea that actually gives some major players a strong stake in the outcome and could have a big impact: Declare that ludicrously obviously invalid patents are a form of fraud.  And enforce that by giving anyone who proves patent fraud by ludicrosity gets paid triple their costs as a reward, plus any damages they can show were caused by the issuance of the patent.
<p>
As a starting point, I would define a "ludicrous" patent as one that any practitioner normally skilled in the art would recognize as having prior art.  MicroSoft's is our  most recent poster child, who seems to be seeking <a href="http://tinyurl.com/6d4wf">a patent on an IsNot operator</a> that checks if two pointers point to the same place in memory.  In other words, it's like C's "p1 != p2" where p1 and p2 are pointers.  Uh, hello?  Can we say prior art, like almost any machine instruction set?  And can we say "obvious" as in "done in almost any language you can name that has pointers or references"?
<p>
I model this on "whistle-blower" laws that encourage private citizens to ferret out fraud against the government by giving successful ferreters a chunk of the recovered money.  This means that the gov't itself doesn't have to do anything to ensure that a bunch of investigators are always looking for fraud against it.  If someone has a good case, the perps pay the investigator.  And it also keeps the number of frivolous fraud suits down, because a frivolous fraud suit gets you nothing.
<p>
Here we create a herd of patent lawyers who will invest their own money knocking down patents that are ludicrous and collecting bucks.  Sometimes they'll get a nice payment from a simple letter that shows the holder that they will lose the case.  Sometimes they will win big bucks when someone defends one of them.
<p>
It also creates a liability for filing ludicrous patents, which (beyond filing costs) there is none now.  It helps protect every major player who isn't using patents as offensive weapons.  And another set of major players -- the patent lawyers -- have new ways to make money.
<p>
To be fair to those holding patents the predate this rule, I would give holders one year to voluntarily void any patents they hold, but after that, all unexpired patents would be fair game.
<p>
So what so you?  How about we pay the lawyers to sue the lawyers to keep the pool cleaner?]]>

</content>
</entry>
<entry>
<title>Patentably idiotic</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2004/10/patentably_idio.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-10-07T19:59:40Z</issued>
<id>tag:weblogs.java.net,2004:/blog/arnold/35.1631</id>
<created>2004-10-07T19:59:40Z</created>
<summary type="text/plain">Kodak helps us prove that software patents are broken.</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p> The Kodak <i>v.</i> Sun suit has <a href="http://news.com.com/Kodak+wins+Java+patent+suit/2100-1014_3-5394765.html">gone against Sun.</a>  This is hard evidence
that the software patent system is deeply broken.  I know this isn't
news; you probably already knew.

<p> One approach is to think that software patents are just plain
wrong.  Maybe so, but this isn't obvious to me.  Patents have
protected other technologies,  and they might be able to handle
software.  Software patents <i>as currently done</I> are broken,
dangerous, and frankly f'ing insanse, but maybe it's fixable.  Or
at least we can lower the temperature of this hot tub in Hell.

<p> Any mitigation must start with the basic problem of knowledge:
Almost nobody with actual authority in software patents is competent
to understand software.  Patent examiners (I'm sorry to say) are
not our best and brightest.  The Patent Office doesn't pay enough
to attract or keep top level folks.  Juries (like the one in this
case) are picked from the normal jury pool.  Imagine trying to
explain the difference between (say) virtual memory with paging vs.
an on-chip CPU cache to mother.  And then remember that your
mother is smart enough to avoid jury duty.  Not to mention that the
judge is a lawyer, most of whom have only the most basic scientific
training.

<p> In short, everybody who has the power to make judgements is
almost certainly unqualified to do so.

<p> My favorite solution would be to fire all the examiners and
replace them with 25 actual experts, and let them grant (say) 30
patents a year (with maybe a unanimous vote for adding more).

<p> But we could also require that the "jury of peers" be peers of
computer people.  Those of us who are computer folks could join
that jury pool and be exempt from other jury duty.  Then maybe the
jury deciding this kind of stuff might have a chance at having a
clue.  This would be especially good because patents are only supposed
to cover thing not obvious to your average pracitioner in the field.
Who better to judge besides a jury practiioners in the field?

<p> We could also make software patent grants provisional for 6
months.  They get published and the outside world has a chance to
throw prior art at it to see if it sticks.  A lot of companies would
be highly motivated to try knocking patents down before they cause
any damage.  It would be a way of drafting highly competent technical
folks from these companies into the process of weeding out the
idiocies.

<p> These are just some ideas, but it's a pretty depressing situation
and we oughta do <em>something</em>...]]>

</content>
</entry>
<entry>
<title>Knowing What&apos;s Where</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2004/06/knowing_whats_w.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-06-30T22:34:01Z</issued>
<id>tag:weblogs.java.net,2004:/blog/arnold/35.776</id>
<created>2004-06-30T22:34:01Z</created>
<summary type="text/plain">So far today the most interesting talk I&apos;ve been to is the one on RFID techonology by Sun. They&apos;ve built it on Jini and Rio, which itself is built on Jini, and they have an impresive platform for dong stuff...</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Community: Jini</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p>So far today the most interesting talk I've been to is the one <a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=9682&form=searchform">on RFID techonology by Sun.</a>  They've built it on Jini and Rio, which itself is built on Jini, and they have an impresive platform for dong stuff with RFID applications.  The match is good because these systems require customization and smarts at the edge of the network, where the data is gathered, because otherwise too much data would be sent back to the central processing systems.  Jini is built on the idea of moving behavior to where it's needed.  They also have to deal with failures all the time, so having something that is low maintenance to install and heal is critical.

<p>What's going on with RFID itself is also interesting.  We're getting to the point where tracking objects -- real objects -- will be a major focus of computing.  When you can know where every piece of paper is in your files we will have a new scale of relationship modeling.  (Well, new to most -- in the past anyone dealing with this much specific information was using large-scale systems that were very hard to build.)  I think there will be a lot of interesting work in figuring out how to correlate all the information in a timely fashion.

<p>Tomorrow's candidate for "Most Likely to be Wow" is <a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=10983&form=searchform">the Orbitz talk.</a>  Ever thing you book on Orbitz runs on a Jini backplane.]]>

</content>
</entry>
<entry>
<title>Community Session Tonight</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2004/06/community_sessi.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-06-30T00:20:56Z</issued>
<id>tag:weblogs.java.net,2004:/blog/arnold/35.149</id>
<created>2004-06-30T00:20:56Z</created>
<summary type="text/plain">... wherein we shamelessly plug a fun event tonight ...</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p>Tonight we'll get a look at several of the communities.  Don't miss it.  Jini, JXTA, Java Community Process, and java.net will all have a chance to give a whirlwind presentation (and prizes), and then you'll get a chance to corral folks about any one you're interested in.  Question about JIni?  Ideas about JXTA?  Complaints about the Java Community Process Just come in, see what's up, get some food and drink, maybe win a prize, but most certainly find some real stuff out from the folks who are doing it.]]>

</content>
</entry>
<entry>
<title>The Unexpected Newborn Adult</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/arnold/archive/2004/06/the_unexpected.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-06-25T06:40:10Z</issued>
<id>tag:weblogs.java.net,2004:/blog/arnold/35.667</id>
<created>2004-06-25T06:40:10Z</created>
<summary type="text/plain">... wherein we start gearing up for the upcoming (or incoming) JavaOne conference and wonder how each year the same things can be new, over and over again ...</summary>
<author>
<name>arnold</name>

<email>arnold@moonhill.org</email>
</author>
<dc:subject>Community: Jini</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/arnold/">
<![CDATA[<p>
JavaOne is next week.  Of course you know that.
<p>
The folks who do Java stuff out in the world have ranged from intrigued to fanatic about Jini and JavaSpaces, but those who set the schedule always seem to have something else to talk about.  Somehow the Jini/JavaSpaces stuff is always "new".  It's been "new" for over six years now.  Last year it was part of the emerging technology track over five years after it emerged.  This year it's apparently "unexpected".  I kid you not: The track it's in is "Intruiging and Unexpected: New and Cool".
<p>
Let's get real.  Jini is in mission critical web sites (<a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=10983&form=searchform">this year's talk by Orbitz</a> might get your attention, for example).  Companies have been run for years on its software.  Sun itself is betting its <a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=9682&form=searchform">RFID strategy on Jini</a>.  Large scale systems use JavaSpaces, starting with its introduction six years ago as a show-wide demo, and including (this year) a <a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=10756&form=searchform">a large grid-computing system</a> by a major investment company to follow on from <a href="http://www.jini.org/Newsletter/ShopTalk/oliver.html">last year's talk by Freddie Mac</a>, among others.
<p>
The one talk you <em>must</em> go to if you have any doubts is <a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=9523&form=searchform">the overview of where the whole technology stands</a>.  Your head will spin as you are whirlwinded through a survey of what's actually happening in the marketplace, both in industry leaders and startups.  Then make up your own mind.
<p>
But to Sun this stuff seems to be perpetually arriving.  New.  Every year it's new.  Which <em>is</em> unexpected.  You'd think Sun would have noticed by now that it isn't new, that Jini and JavaSpaces are being used in ways where, if they didn't do the job, they would be chucked out before the company failed.  Intruiging, isn't it?
<p>
For many folks at Sun there are two kinds of Java: J2EE and J2ME.  Everything else is just baggage.  And these folks seem to control the agenda for JavaOne.  The number of rejected talks by big projects using Jini, JavaSpaces, and other Java technologies is pretty amazing.
<p>
The Jini community -- inside Sun and out -- keeps sticking to it, thank goodness.  This year, as in the past, we'll just make our own conference-within-a-conference.  Your primary resource for this is probably <a href="http://user-fsommers.jini.org/jiniguide.html">Frank Sommer's summary of what's shaking with Jini and JavaSpaces at JavaOne this year</a>.  There are a lot of things going on, and more things happening informally.  Keep your eye out for the Jini folks, both from Sun and otherwise.  There will be many around.
<p>
Maybe it's time we started passing out "Ask Me About Jini" buttons.  Start our own pyramid scheme.  If Sun won't bother to make Jini and JavaSpaces visible -- even squelch them in this most public Java forum -- we'll just have to make it happen ourselves.  Join in, or at least give <a href="http://www.javaone04.com/catalog/catalog/sessionDetail.jsp?hd=true&SESSION_ID=9523&form=searchform">the overview talk</a> a listen to see whether you ought to care.  I think you'll be surprised how this perpetual newborn is already a responsible (if cool) adult.]]>

</content>
</entry>

</feed>