Spiral Dive

  Tuesday, December 31, 2002


Video is necessary.

Lawrence Lessig wrote what follows this. He's absolutely right. Is more safety always better? Who the hell is going to argue for less safety? Petty fascism is the perfect term for what's happening out there. It happens when security guards abuse their positions. It happens at borders when somebody makes an innocent crack and "offends" a border guard. The consequences for the individual can be immediate and extreme. The instigator or abuser can almost always claim that he was simply doing his job, and in the very worst of cases, "might" have overreacted a little bit. A friend recently told me that his friend had made a little joke crossing the border to Canada. The Canadian customs officials disassembled the inside of their car, removing panelling and so forth, seats, and many other things, in order to find "contraband". No contraband was truly suspected, of course -- it was just revenge for offense taken at something said. At the end of the demolition, they were sent on their way, car still disassembled, with a warning never to "mouth off" again.

That kind of petty power trip is something that I have had recent experience with. We were a group of professionals out enjoying ourselves...suffice it to say that in this case, the police officer in question picked on the wrong group of people. We complained vigorously after the fact to the police chief, event organizers, and succeeded in having sanctions taken against the officer. In all my life I'd never seen a police officer truly abuse his power until that day, and my perception and trust in police officers has been harmed as a result.

I think it is absolutely imperative that we install video cameras at all these security checkpoints. The only way we can guarantee courteous and respectful treatment from TSA personnel is if we videotape their every move. INS and customs officials do this now, and I think it works very well. It keeps government people in check when they are given power. It provides precise information for determining who is at fault in any given deteriorated situation. Both sides will be on their best behavior. If we're going to be searched, let's be taped.

back in the .... Where is the candidate who asks: Must we sell our soul to win this "war"? Where is the political party that demands respect for principles that I thought were fundamental. If we must detain Arabs, must we do so inhumanely? If we must frisk every air traveler, can't we at least build in checks to the system to assure that it is not abused? If we must fight to defend America, can it at least be America that we defend?

I'm all with Dave that this space will be the space for political action in the future. If only the future comes soon enough. [Lessig Blog]
3:13:07 PM    


Refactoring vs. Visual Studio.

It's been a longstanding peeve of mine that the Microsoft toolset has been generally better than the Java toolset. The MS stuff just seemed to perform better, have a more fluid UI, have great capability, and so forth. Recent tools have come a long way and I don't feel like a second-class citizen when I'm working in the Java world any more. The first of the "good" IDEs was JBuilder 4, and things have gotten a lot better since.

The thing is, I have been playing a bit with Visual Studio for .NET. I think that the Java land has finally pulled ahead, with support for refactorings. I've been making a lot more use of them over the past couple of months. There's just nothing there in Visual Studio at this point in time. There may be some plugins for VS that do the refactorings; I don't know.

So I'd say that at this time, the Java environments are some of the nicest and most advanced IDEs out there. Enjoy it while it lasts. Competition is a good thing.


3:01:21 PM    


  Monday, December 30, 2002


Mozart.

There's more than one virtual machine in the universe. The JVM is a pretty good one, for some (maybe a lot) of things. The CLR is good too. Here's another one: Mozart.

I don't know much about the quality of its implementation, but I sure like the science behind it. What these guys are saying is that programming can be broken down into a basic set of concepts like state, objects, functions, constraints, and so forth. There are some pretty advanced concepts in the system -- first order functions, the constraint systems, and some very cool distributed stuff. They built a VM that could do all that.

Microsoft's CLR was designed to run many languages, but is apparently particularly good (or only good, depending on your perspective) at running languages that look like C#. The Mozart VM seems like an attempt to substantially expand the capabilities of the VM, to push more into that base layer.

This strikes me as the right approach. It turned out the RISC wasn't such a hot idea after all. I think we have the same situation in language design. The problem is that the VMs haven't been designed with any notion of theoretical completeness coupled with efficiency for a greater number of programming languages; languages that do more complicated things easily.
10:15:06 PM    


Saving Milkmen.

I wrote this a while back on Slashdot.

Here's my take. The record companies are the milkmen of tomorrow. In the old days, milk was delivered door to door by milkmen. There was a certain convenience involved, but refrigeration, pasteurization, and the fact that you need to go to the grocery store anyway pretty much eliminated the need for them. They were optimized out of the process.

Artists today make their money performing. A very tiny percentage of artists make significant money from their recordings. Total, open promotion of their music is really in most artists' best interest -- they can fill their shows with fans who'll pay $10 a ticket, and buy a T-shirt for good measure.

In this world where fans listen to tons of different music for free, directly support their favorite artists, and creativity (rather than marketing) is rewarded, the record companies are...milkmen. Say goodbye.

Here, though, the milkmen have enough money to buy friends. And to buy laws that keep them in business. Push back, whenever you can. When M'shell releases an MP3 for $0.99, how much of that does she get? When broadcasting rights are negotiated with online radio stations, where does the revenue go? 90% artist? Somehow I doubt it.

Actors guilds have contracts that state the maximum amount an actor can pay an agent (10%). Great woe would become a record industry faced with an organized public, or organized artists. Deserved woe. :)

In the mean time, GENERAL COMPUTATION IS AT RISK. Your right to make any program you'd like, for your own purposes, to explore Raymond's noosphere, is at risk. Milkmen want laws and circuits to keep them in business.
7:22:42 PM    


  Sunday, December 29, 2002


101.

Friggin fever. It's just not letting me alone. Dammit. Makes it very hard to concentrate or do anything.
10:17:27 PM    


Unordered Trees and the TreeModel.

TreeModel isn't too hard to implement, but...just about every tree structure you'll have in a real program is unordered.  TreeModel really wants it to be ordered.  It seems that the Java library should provide an adapter class that applies a comparator (or natural ordering) to a simplified, unordered tree model.  Ordered event emitting is a pain in the ass.  I know this because I am doing it right now.

It's also a pain in the ass to reconcile changes in a data structure that can occur from any thread with delivery of change events to a primary swing thread. 


6:40:27 PM    

Microsoft and Java.

b. Microsoft notifies customers of the availability of Sun’s implementation via any and all Microsoft update services for the Windows PC Operating System or Web Browser on the commercial release date for such products;

That's from the proposed order, and it's by far the most important part.  What is interesting to me is how far this will be taken -- will this mean that when a new version of Java is available, MS will be forced to push the upgrade out through its channels?  This is a phenomenal win for Sun.

And that takes me down another path.  Exactly what is Java, anyway?  Right now, Java is anything Sun says it is.  Can Sun use their win in this case to push other technologies down the pipe the legal system is providing them?  What kinds of vulnerabilities does this open up in Microsoft?


3:15:19 PM    

Alive.

But just barely -- am pretty sick.  Crap.


1:30:49 PM    

  Friday, December 27, 2002


Associative Swing Models.

I've been continuing work on the associative models in between major coughing episodes (picked up some kind of virus).  My OneToMany association wants to be a Swing tree model, so I've been building that today.  Initial implementation is complete and really isn't all that difficult, except for the threading issues.  I'm not allowed to push events out to Swing on anything but the UI thread, so I relay all association events into the UI thread.  They're converted into events there.  There's a collapsing problem, though -- if a number of events pile up before they're processed, the early events may be referring to objects that no longer exist in the tree, or have moved to new locations. 

Some kind of general event consumer is necessary -- one that can suck in the queued events and emit an appropriate set of events to the JTree (or whatever).  While this is happening the model can change again, of course...I think I need to lock it down with a read lock while I'm emitting the swing events, then release it when I'm done. 

Thanks to Doug Lea for the super cool concurrency packages.  I think they're going to save me again.


11:18:52 PM    

Bleeps are Better.

The cool thing about watching the Osbournes on a french channel is that they leave all the swearing in.  It's all there -- every f&# and s#$t is said in glowing technicolor, and carefully translated into the equivalent french Canadian religious swearword equivalent.  Fun! 

After having subjected myself to two shows in a row, I was forced to conclude that it's actually funnier with the bleeps.  Some of the things these kids say to their parents and vice versa are pretty, uh, disturbing?  Bleeps are better.


11:14:22 PM    

  Wednesday, December 25, 2002


@%@%#$!^#*$@

I just launched two copies of TJ by accident and it trashed one of my files. Crap! Dammit. I was just about to back that stuff up and was just calling it up to look at in one more time. Son of a bitch. I haven't lost source in, hell, I don't know how long. I think I might have a backup on my web site somewhere but I better look. Crap. Dammit. Now I gotta reconstruct that whole file.
1:06:24 PM    


Association-centric modelling.

I've been really pleased over the last few days with the general association model I constructed. It's pretty clean to program with -- much of the bookkeeping is centralized. It also seems that for certain types of programs, starting with the notion that there will be associations between objects as a first step makes things easier. One problem is that conventional modeling tools like TJ don't support this. I ended up creating a "conventional" model first and keeping that as a reference. I then copied that model, pushed in the associations classes, then knocked out the TJ associations one by one, converting them into appropriate equivalents.

Some of the advantages:

  • Central, consistent handling of all associations.
  • Easy persistence.
  • Simple object lifecycle.
  • Fast alteration of association types when a design changes.

  • 9:20:18 AM    

      Sunday, December 22, 2002


    Stubborn Cats.

    There are two kinds of cats in the world.  There are cats that don't take crap, and cats that do.  My sister's cat doesn't take crap from people.  He's sitting there on a chair, and I give him a push.  He just absorbs my push, redirecting the energy into some cat energy zone, a place for that momentum.  Other cats will, at the slightest infraction, flounce off in a huff.  I can give Bailey (my sister's cat) a good shove, and he won't move.  I can do quite a bit, and every time I do it he'll just adjust and absorb and make it abundantly clear that under no circumstances will he be moving, and I might as well just give up now and no damn way is this chair anything other than his.  Of course this is a game I can win, and so I do.

    The wildcard is the tail.  Touch the tail and it really pisses him off. Ha ha.  I am the human.  I have no tail to piss me off with.


    10:06:03 PM    

    Government Efficiency.

    I hit the airport earlier today figuring that I was going to spend an awful lot of time in lines. Security lines, ticket lines, customs lines, etc...but not today. The flight got away on time, landed about ten minutes early...seat 1C had me out of the aircraft as soon as the door opened; first in line to customs, paid my duty, and I was out of there. The system worked, for a change.


    3:59:31 PM    

    Flying.

    On a plane to Ottawa, knocking out some additional stuff in my book. It's slow progress, but hey, Graham Glass' zinger about making 250k off of his Unix book has me getting back to work! It's going to be a strange book. In the opener I admit freely that it's a book of questions, not a book of answers. There's a new kind of system out there that we need to build -- it's a system that goes beyond objects. Beyond Objects is the title of the book. It's about knowledge, rule-systems, aspect-oriented programming, distributed fact bases, and the kinds of things you can build with them. I hope to get at the heart of why it's so difficult to build large-scale classic OO systems, and so hard to get some of the basic stuff right with them.
    1:45:51 PM    


      Friday, December 20, 2002


    Aspects.

    OK, I'm biting. Having just pain through the pain of sticking together JAMon and BCEL, I'd like to find another, more general solution. JAC and AspectJ seem to be frontrunners. JAC lets me construct some very cool, very general stuff...with no sourcecode modification. That being said, I thought the idea behind PROSE was pretty fantastic - insert and remove aspects at runtime, completely cleanly...wow.

    Let's see how I feel about all this by the end of the weekend. I'm taking my laptop with me to Canada for the holidays -- maybe I'll have something interesting by the time I get back.
    6:43:03 PM    


      Tuesday, December 17, 2002


    Graham Glass.

    Graham reposted some of his articles recently -- if you haven't read them you probably should.  Go see his weblog.  He's one of the guys I've admired the most over the years.  I thought JGL was pretty damn cool, so a few years back I wrote a generic collections library for Delphi (called DeCAL) that adapted the STL/JGL model to Delphi.  It was a great exercise.

    The thing about container libraries is, they just never seem to be right in multi-threaded environments.  Threading is general just seems too hard to do right; there needs to be better structuring at the language level and organizational level.  Common threading patterns should be part of the language, not glued in.

    There are parallel computing languages that do this kind of thing.  It's too bad that we don't have a mainstream one, but maybe with the advent of .NET we will get there.  Or if Sun gets off its ass and evolves Java, like Graham says they should.


    11:41:28 PM    

    MicrosoftWatch [via ScriptingNews]:  Box went on to call the development of a "data-oriented language" one of the "most interesting areas for innovation in the next five years."  Pardon me while I wipe the drool off my chin.  Hopefully, this new language will have explicit support for distributed operations.  Perhaps even along the lines of what I outlined in Neurotransmitters.

    Where can I sign up?

    [Sam Ruby]

    A data-oriented language?  We have one already.  It's called LISP.  Pick up Paul Graham's books and check it out again, if you haven't in some time.  LISP is just super cool and I can't for the life of me remember why I haven't done anything with it in so long.  I just wish LISP provided a little more structuring capability, and that it was easier to read...


    11:37:38 PM    

      Sunday, December 15, 2002


    Andy Richter Again.

    Ok, like, that last one wasn't so good, but dammit this one was funny.  Brain must stop hurting!


    9:58:18 PM    

    What I could be doing.

    I could be working on my book.  Or on the novel.  I could be investigating JXTA.  Or finding more agent technologies.  I could play with my Treo, or research further what hardware I should buy for a new system I want to build.  The football game is about as boring as football can get.  Today is filled with murk and fatigue.  I don't think it makes sense to even try.  Today the ideas just aren't going to flow.


    6:08:23 PM    

      Wednesday, December 11, 2002


    Test-Driven Democracy.

    I think America's political sphere could use a good shot of Kent Beck's philosophies. We try so many different things, in politics, and there's argument after argument about whether or not the policy in question has worked.

    Test-driven democracy puts the horse in front of the cart, and forces politicians to indicate, in advance, exactly how they're going to measure the effects of their policies. Of course, more arguments will break out on how to measure things, but that's a step in the right direction.

    For example, two years ago a tax refund was passed by the federal government. There were a whole series of promises attached to that policy. How has it all panned out? What was predicted as an effect of the tax cut? Politicians should make part of their laws tests that must be passed to ensure the effectiveness of the law. The law should self-invalidate if the desired effects are not achieved.
    8:27:47 PM    


      Tuesday, December 10, 2002


    It worked.

    I'm glad.  I got done what I wanted to.  The animation is choppier than I had hoped, and it jiggles too much, and I don't seem to be able to get the rule-by-rule animation that I was hoping for.  Something is implicitly running my rules, and I don't know what.  I'm also too tired to figure it out, and I have the board meeting in 6 hours.  I'll declare victory for tonight.

     


    1:28:36 AM    

      Sunday, December 08, 2002


    Andy Richter.

    Is this the funniest show on TV or what?  Dammit I can't stop snorting when I watch it.  I must sound like a madman.  It's great to get a break from coding annoying association stuff.  Watch Andy Richter or we'll perpetually be required to watch Entertainment Tonight.  See what hells await?  Watch in a responsible manner, or the consequences visited upon the American society will be your legacy.  Yes, you.


    10:14:41 PM    

    Associations.

    In my spare time I've been creating some general assocation handling classes for Java. It's an interesting experiment. I have an association manager and classes that represent various kinds of associations (one to one, one to many, many to many). Creating the basic association model and the test cases was fairly simple, but now I'm in the usability phase.

    Libraries need to be usable. You need to spend time ensuring that the people who call your API are going to like you. You want people to like you, don't you?

    I'm still working out the best patterns for handling associations from the perspective of the data objects. Do the data objects need to be able to "see" the associations? Usually not. Operations that affect the structuring of the data can usually be executed out of the data model. The whole point is to keep the data model focused on data.

    It's already obvious that handling object lifecycles is considerably easier with formally modelled associations. Enforcing constraints on associations is also cleanly handled - no more replicated logic. I guess I'm happy with the general shape of the thing so far.
    6:07:19 PM    


    Ontologies and Democracy.

    I was reading one of our local newsletters this morning as I sat in my local breakfast joint.  The editor of the newsletter was decrying the lack of information on the construction process for one of our local parks.  She'd made a call or two, and was told that the city "was following standard procedures" and wasn't going to get much more than that. 

    The thing is, most municipalities (and other governments) have a series of processes that they engage in.  Those processes spin off information, which is theoretically available to citizens.  The federal government has its FOIA system, but requests can take forever to get through, and there's just a hell of a lot of work that government staff have to do to get together a response.

    Here's a place where a good ontology can do a world of good (an ontology is a structuring of knowledge -- a way of understanding the meaning of raw information).  If government information sources keep their information structured in a well-defined ontology, the mechanisms necessary to retrieve information become much simpler.  The government can simply say that they provide a web service to give that information to the public; the public can then retrieve information and understand it with the ontology.

    By keeping the information well-structured, redaction can be applied where necessary.

    I'd like to be able to write a small program that reaches out over the web and tracks the progress of construction at a local park, or lets me watch the progress of a bill through a legislature.  Such a mechanism would result in substantially improved transparency of the government process.

    In short -- legislate the ontology and its basis.  Require (or request) that governments provide compatibility with such a system. 


    11:37:15 AM    

    Solaris.

    Didn't like it.  There just wasn't that much to it.  Yes, the nature of the "visitors" is in question; are they human/not/what?  In the end, who cares.  It just didn't do anything for me, and I'm all about weird little movies like this.  Damn I wish I could say that I enjoyed it. 


    11:29:53 AM    

      Saturday, December 07, 2002


    Synchronicity.

    Most of the time when the past reaches out for you, darkness follows.  Tonight I had something good come from somewhere I've been.  It's a good night, on many levels.


    1:29:03 AM    

    Delegates.

    Somebody please educate me. Why were delegates rejected again? Was it in favor of inner classes? Inner classes are pretty cool -- don't get me wrong. I like'em fine. But functional types (I just don't feel like calling them delegates) are pretty damn useful too. Each has its place. I need to go do some digging and find out why the argument went the way that it did. As I recall, Anders Hejlsberg (of Delphi and C# fame) wanted functional types. He had them in Delphi, and he has them in C#. He's right. You need them for stuff. Inner classes make some stuff easier, but make some stuff harder.

    There's room for both. I wish Sun would make it.
    12:05:14 AM    


      Thursday, December 05, 2002


    Open Updates

    Looks like Microsoft is taking something of a beating in court right now on the Java issue. I don't know whether they'll win or lose in the end, but if they win, there is some significant probability that Sun will get a writ forcing Microsoft to include the Java runtime in Windows.

    That's all well and good for Sun, at that particular moment in time. What happens in the future? What happens when Sun wants to push a new version of something out to its customers? What happens if some other company wants to?

    Right now Microsoft has a pretty cool update mechanism in place. It keeps track of various Microsoft components, allows you to install new versions, tells you when new versions of things are available, and will even download and install them automatically. That is a very substantial channel for controlling what is on the desktop.

    What we need is some kind of software distribution channel, just like the one Microsoft has, except that it's an open playing field. I think it would be very interesting if a judge forced Microsoft to include something like that.

    Through this channel other companies (not just Microsoft) could push new product, check versions, and keep their customers up to date. There is some risk of computer ecological disaster with a lot of stuff running around, but I think that engineering challenge can be solved. The bandwidth that underlies all of this must be provided by the companies, of course -- only the updating mechanism must be provided by Microsoft.

    There are a whole host of issues to be solved -- what about companies that don't act in a trustworthy manner? Who gets to be included in the software catalog? What about conflicting updates?
    10:15:18 PM    


    The VM or the Language?

    What I'd really like (though knowing Sun this isn't going to happen) is that this JSR release a reference implementation of this compiler for the new Java langauge that spits out standard byte codes which work on any 1.2 or greater JVM. Then we can all jump to the new Java language (via a reusable Ant task or Maven plugin) without waiting until every end user of our software is on JDK1.5. 

    Right now take up of JDK 1.4 is very slow since there are still so many people using JDK 1.2 and JDK 1.3 in production. I'd like us to be able to start using this new language now, without waiting for the entire planet to upgrade to the 1.5 platform before we can take advantage of the new language features.

    [James Strachan's Radio Weblog]

    I gotta disagree with James here...I'd much rather see the VM modified to do some of the cross-language things that we need.  Of course, maybe that is a Java VM 2.0 thing.  But that could take a very long time.  Looks like the current proposals are compiler-side.  I wrote a bit about functions in Java and how I think they would be useful.  I still think they'd be a powerful addition.  The for loop thing is extremely sugary.  Let's get functional types!!!


    11:09:45 AM    

      Wednesday, December 04, 2002


    Together/J.

    It's old news at this point that Borland has acquired TogetherSoft.  I wonder what this will mean for the future of TJ.  I've been a TJ user since V2; I bought it as of V3, and I've kept maintenance up on it ever since.  I got a pretty good deal back then -- it only cost me $1800 to buy when I did.  It's been worth every penny.

    Refactoring has become very popular lately -- true support for it in IDEs, that is.  With TJ's transformation capabilities (simultaneous round-trip engineering) I've had the equivalent for a very long time.  TJ has improved its refactoring capabilities in the most recent releases, adding features like "Extract Operation" and so forth.

    There's a lot done right, and some things done wrong.  The GUI builder part of TJ is very slow and primitive; it's so slow that I consider it to be unusable.  Take that with a grain of salt, though -- I work on a creaking old 600Mhz laptop, and I need to upgrade sometime soon (but I don't, because I love the 1400x1050 display.  It's the perfect size). 

    TJ also displays a big tree with everything in your project, which is just dumb.  What am I supposed to do, go hunt around in the tree for the methods that are in my current file?  I hate trees!

    I like JBuilder, but I can't stand Borland's upgrade policies.  As an Enterprise user, they hit me up for 70% maintenance per year.  Yes, it's worth it in terms of value provided.  But!  You need to look at it in terms of value differential from the other products that are available.  NetBeans is free, and provides great functionality.  Eclipse just gets better and better too.  And IntelliJ gives JBuilder a good run for its money.

    I don't use JBuilder much any more.  I use NetBeans for debugging and TJ for modeling.  NetBeans is a little clunky in places, but I just don't see spending piles more cash on JBuilder.

    Of course, upgrading my TJ is probably going to cost me 70% a year from now on.  That sucks.


    8:17:36 PM    

    More on Testing.

    I've tried creating a series of fine-grained tests this evening, as I worked through a new association library.  I didn't do it quite the way that Kent Beck wants me to; I was creating a fair amount of the structure of the system first.  For me that's a thinking process -- I really don't know the shape of the whole thing until I've meandered around the problem for a while.  I just don't see the point of writing too many tests early.  Yes, I know it's nice not to have to write them all at once (because that means there are tests that aren't going to get written), but the complexity just seems to preclude it. 

    When I did start writing the tests, I found that I definitely like the style of writing a test for what I expected and wanted, rather than what the code being supported actually did.  I found some problems with my API that way, and refactored that before continuing with the test coding.

    I also discovered that my testing routines could be very fine-grained.  Each line of code could check for desired results and fail if necessary.  It's unfortunate and annoying that I need to come up with so many failure messages.  It would be really nice if there was some way that a message could be auto-generated.  The message doesn't need to be particularly clear; I just need to be able to identify where it came from so I can do my fix.

    Tests need to be debugged, too.  If running tests is the primary way of developing code then the act of running the test needs to be under the debugger...this tightens the loop considerably.  It took a little tweaking to get TJ to do this right.  It's something that should be a default option.


    12:29:21 AM    

      Tuesday, December 03, 2002


    Test Driven Development

    So far I haven't seen anything relevant to the kind of programming that I do. I'm sure that these techniques are really valuable when you're dealing with algorithm and compute-intensive stuff, but at my company we don't really make those kinds of mistakes. They get ironed out really quickly. It's all the large-scale interactions, multithreaded, distributed stuff that is the really hard work. Networks that fail; users that do crazy things.
    1:54:26 PM    


      Monday, December 02, 2002


    I gotta run.

    Crap.  I gotta run, and it's late, and it's cold, and that's enough excuses for one night.  I shouldn't have gotten interested in BCEL and JAMon.  Oops.


    9:48:36 PM    

    Web of Trust 2.

    Here's a quick modification to OPML that will allow a web of trust in blogs. Dave Winer told me about OPML.  Why reinvent?  It's already almost right for what we want to do.

    By providing the rss, opml, trust factor and degree, all else is simple math. With this I can prioritize amongst new blogs according to the weight I give you, the weight you have given other blogs, etc...

    • rss = Where the RSS feed for the blog is (handy for automatic processing).
    • opml = Where the OPML for the target blog is. This can be read to do nested trust. Not necessary if you don't want to trust farther.
    • trust = Weighting factor for this blog/person. Multiply this by what is found in the OPML to trust indirectly. Defaults to 1.
    • degree = How far down the target blog's OPML to go. 2 means trust who you trust, 1 means just you. Defaults to 1.

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- OPML generated by Radio UserLand v8.0.5 on Tue, 05 Nov 2002 15:57:51 GMT -->
    <opml version="1.1">
    <head>
    <title>scriptingNewsLeftLinks.opml</title>
    <dateCreated>Sat, 05 Jan 2002 19:26:01 GMT</dateCreated>
    <dateModified>Tue, 05 Nov 2002 15:57:49 GMT</dateModified>
    <ownerName>Dave Winer</ownerName>
    <ownerEmail>dave@userland.com<;/ownerEmail>
    <expansionState></expansionState>
    <vertScrollState>40</vertScrollState>
    <windowTop>61</windowTop>
    <windowLeft>207</windowLeft>
    <windowBottom>860</windowBottom>
    <windowRight>354</windowRight>
    </head>
    <body>
    <outline text=DaveNet type="link" url="http://davenet.userland.com/" rss="http://www.scripting.com/rss.xml" opml="http://radio.weblogs.com/0001015/userland/scriptingNewsLeftLinks.opml" trust="1.0" degree="2"/>
    </body>


    9:19:47 PM    

    Web of Trust.

    Dave Bryson thinks we can use RDF to create a web of trust between bloggers.  I think it's a great idea.  Here are my thoughts on the subject:

    1. A web of trust can be used for a number of purposes.  Chief amongst these are rating content, and finding good new content.
    2. I control my web of trust file; I put the file on the web server.  This file is used for two things.  It helps me find the right content, and it lets others know what I find good.
    3. Being able to aggregate together trust files is a good thing.  Let's say I don't want to form my own trust file; I can just say use his and use hers.  Put them together; that's what I want.
    4. I want to be able to define degrees of separation.  If I trust Dave, I might also want to be able to trust those that Dave trusts.  But I want to be able to limit how far this goes.
    5. Weighting schemes can allocate karma amongst those I trust.  This is used to prioritize the information that is presented to me.  Trust is not just a binary decision; we can indicate those we particularly trust!  Order of information is important.
    6. RDF is a good format for saying things about other things; we might as well use it.  There are lots of libraries that know how to deal with it.

    7:12:50 PM    

    Test Driven Programming Before.

    Bob McWhirter thinks I should read it, and I'm about to start. I just read the preface, and my first impression runs something like this.

    I really wish I worked on a system that was amenable to this kind of automated testing. Most of the complexities I work with involve large numbers of connected users and integrations with highly varied target systems. The only thing I can think of right now is that with a better division of the system, we might be able to find a way to test parts of it automatically. The system as a whole is still highly difficult to test on an automated basis.

    I am hopeful that there are going to be techniques for dividing and conquering. We'll see.
    7:02:35 PM    


      Sunday, December 01, 2002


    Sunday Beer.

    Off to the bar; everybody needs their Sunday night beer. So do you. Get busy.

    Too much football and not enough work today...worked out only a few minor issues. Ten days and counting.


    8:42:45 PM    


    Boards of Canada.

    I have trouble listening to the BoC. Undeniably brilliant stuff; my problem is that I associate their music with some of the more negative parts of my life. Times that were hard...to listen to them is to bring that back, and bring it back too strongly.

    There are very few bands that can have that sort of effect on me.

    My suggestion is this: Go do something you love, then listen to the Boards of Canada. Cement that as your sonic memory of them. Don't do what I did. I can't listen to them any more.
    4:36:25 PM    


    Connecting Objects.

    I've just spent the past two hours with Together/J, creating a nice model of a timeline system I've been thinking about.  I'm happy with the way it's come together; all the relationships appear to be in the right place and it just screams "pretty" in UML, with nice annotations all over the place about the cardinality and nature of the relationships.  TJ has dutifully created all the requisite Collections objects for me, ensuring that I have a place for all the connections.

    Which is exactly what's bothering me.  Sure, I want to model everything this way, so I can see the relationships on my diagram.  But I don't want to use that kind of connection management.  In my model, just about everything needs to know how it's connected to everything else.  When an object is removed, I want to quickly remove all trace of it from the model.  This is a very general problem that most applications come across, and most of the time (unless simplicity is an issue) I like to have a connection manager class that knows how to create, constrain, and remove the relationships between the objects in a model.  This makes most aspects of lifecycle management pretty easy. Any object can quickly find out what objects are related to it, how they're related, and they don't have to keep track of (or listen for) lifecycle events.  Only the relationship manager does that.

    I wish my modeling tool supported this kind of thing.  It doesn't.  I wish Java had this pattern in it; it doesn't.  I am not a big fan of publish/subscribe.


    4:02:17 PM    

    Language Plugins.

    Separation of language and runtime is a good thing, without a doubt. .NET gets this right -- compile with whatever language you want, run on the same platform. So far, so good. But we're coders. And what's more, we're coders who have gotten used to some pretty cool toys. I don't know about you, but I like having syntax highlighting, refactoring, and so forth available to me. It saves me a lot of time.

    I'd like to see the Java platform (and .NET for that matter) support multiple languages more effectively. To do this and fully participate in a modern coder's style, a language plugin needs to do a lot more than just supply compilation from source text to some runtime format.

    It seems to me that if a platform can support multiple languages it should fully define various levels of support from a language runtime. Categories of support include compilation, inclusion of debugging information, evaluation of expressions at runtime given a context, and universal data structures that correspond to syntactic elements, refactoring support, and intelligent code completion. Your FORTRAN language pack for the Java VM should be able to indicate to the runtime (and any IDE) which of the general extension categories it supports.

    Most of the IDE vendors out there have created something like this for Java (and some, like TogetherSoft, have done it for other languages too). Many language people have done something similar for .NET, but the support doesn't seem to extend past compilation. I think the spec should be built into the platform. Languages will then be able to exhibit very advanced capabilities into a multitude of IDEs, and we'll all be better off.

    I'll be able to do my functional programming under some neutral VM, and I won't lose my super-cool code completion and other features like it.

    That's my language nirvana.
    1:49:59 PM    


    More Functional Java.

    There are plenty of smart people in the functional world. There are plenty of extra cool languages out there (OCaml is one of the most interesting ones, as is Haskell). With Java I think we are in a kind of 90/10 situation -- what key functional features might we add to the language and VM specification that will really help us write better code?

    Whatever we choose must have as minimal an impact on the language as possible. Strong typing is a considerable virtue, in my opinion. So are exceptions, so whatever functional notation we choose we will want to support exceptions fully.

    class Example {
    public function double ComputeThis(String p1, double p2) throws SomeException;
    public function double SecondOrder(ComputeThis computerThis, double outer) throws SomeException;
    } ;

    In that example I'm declaring a first and second order function, both of which are declared to throw an exception. We can now call these functions at will and have them participate fully in the exception mechanism. If a function is defined to take another function, it must declare in its throws clause a superset of the exceptions that are thrown by the parameter function (I think).
    1:34:03 PM    


    Functional Java.

    Joe's latest I think we're really getting at a similar thing : blocks and function pointers (and inner classes to a certain arguable extent) are closureish.

    C# has a similar system (delegates) that allows member functions to be defined, however it doesn't support the notion of inline functions (shame).

    Joe knocked one line out of my example that I think is somewhat important...you need to be able to declare higher-order functional types. That's just a function that takes a function that takes a function etc...these are pretty handy for solving certain types of problems. The point is, a function is defined in terms of its inputs and its output. Compatibility is pretty important -- the compiler can verify that two functional types are compatible quite easily.


    12:34:14 PM