My Stuff
Love
Respect
Admiration
My Amps
Links
Archives


Add this feed to a running copy of BottomFeeder

Linux World 2006 Speaker

Tuesday, September 30, 2003

 
FINALLY

OK, I got everything switched over and ok. As you can see, the template has been changed. Now, you might ask me, "Blaine, Why did you change the layout of your blog?" Well, I could say I was sick of the old one, but the truth is simple this: the old one got trashed for some odd reason. So, why not start new? I got almost everything back except for the comments. I plan on getting them assed back REAL SOON. So, don't fret, a minor bump in the road. Anyway, I hope everyone finds their way here!

Comments

 
The Eyes of Alice Cooper

Wow....Again, Alice surprises the hell out of me. The man simply always amazes and I never know what to expect from an Alice release except quality. This is no different! Some of the songs are just plain flat out rock, some punk, but all are loud. They have Alice's trademark snarls and lyrical play. I always thought "Last Temptation" was the closest that he had gotten to the 70's Alice sound, but this one takes the cake. The production sounds awesome! It's going to take several listens to catch everything since Alice always hides a few surprises underneath the covers so to speak. Anyway, a GREAT ALBUM from the MASTER! What are you doing still reading this? GO BUY THE DAMN THING!

Comments

 
Cult Of Dead

The Squeak Wiki is a wealth of information and I enjoy reading it. I regularly read the changes page to see what's new and changed. Well, I came across this excellent article by Jim Benson called:
Cult of Dead. It's a great read. It take a critical look at our community (Squeakers and even Smalltalkers) and pulls no punches. Great stuff!

Comments

 
You made it

Welcome to my new place on the web. If you're seeing this message, you made it...=) Now, I can get back to the business of blogging....=)

Comments

 
Alice Cooper Release Day

Yep, the new Alice Cooper is released today and I can't wait to head down to the local record store and pick it up. Every Alice is worthy of celebration. The master calls my name. I must go!

Comments

Monday, September 29, 2003

 
Moving Domains

Alright everyone. I'm switching domain servers, so the old links to my posts might stop working. I updated all of the links to use my "www.blainebuxton.com" domain name instead of "members.cox.net/blainebuxton". This will probably be the last post I make to the blog at this location. I'll be switching over to a new service tonight. In the iterim, everything is successfully going through my domain name. It's just when I switch servers there might be problems...=) So far, so good though...Sorry for the short notice, but this has to happen in part because of the move to Nebreska. But, I promise once it moves...It's staying for a LONG TIME. Again, I apologize....Please update your links and your RSS feeds!

http://members.cox.net/blainebuxton/weblog/blogger.html is now: http://www.blainebuxton.com/weblog/blogger.html

The RSS feed changes from: http://members.cox.net/blainebuxton/weblog/index.rdf to: http://www.blainebuxton.com/weblog/index.rdf

THANKS AND SORRY!

Comments

 
Ruby Interview With Matz

A friend sent me this link to an interview with Matz, the inventor of Ruby. I met Matz briefly at LL2 and loved his talk. He's one of my new heros. I love the way he thinks and Ruby is an absolute pleasure to work with. I always refer to Ruby as the new Smalltalk with funny syntax and without the environment (I would love to write an environment for it!). Anyway, go read the interview and have F-U-N! Matz Interview

Comments

 
Bloated IDEs

James Robertson made a great blog entry this morning about IDEs: IDE Fun.

The funny thing is that I can start and shutdown Dolphin Smalltalk 6 times while trying to startup Eclipse ONCE. Squeak is the same way (I think I might have gotten 7 out of Squeak though). Maybe everyone should try it as a fun experiment. I mean, I've never had Smalltalk image from any vendor that didn't come up in seconds on modern computers. At work, I have 768 megs of RAM and a Pentium 4, and Eclipse still goes off to lala land (hitting the disk drive for 5 minutes) several times in a day. I still think Eclipse is the best IDE for Java, but I wind up using Scite for all my non-Java needs (html, javascript, ruby, etc) simply because it comes up quickly and doesn't bog me down at all....=) It's a simple text editor that doesn't pretend to be anything more with highlighting and searching.

But, then again, if I had my choice....Oh, how I can't wait to be back in Smalltalk land....21 days till the love is back! But, for now, No sleep till Smalltalk...=)

Comments

 
Erlang
I got the following reply from Alan Kay on the Squeak Mailing List when I replied about Erlang to a fellow Squeaker. I thought it was cool that he too thought it was worthy of looking at.

Hi Folks --

Erlang is worth looking at.

At 11:53 AM +0000 9/29/03, Blaine Buxton wrote:
    Hey,
    I've been reading up on Erlang myself. They have an approach where everything is a process and you send messages to these processes.

This was the approach of the original Smalltalk. It is also used by David Reed in the object-process scheme in Croquet (back to the future!).

    Just imagine having a separate process for each Squeak object.

Andreas Raab has made process switching in Squeak extremely efficient ....

    They argue that processes should be as easy to create as objects. You would think this would kill performance, but actually, the systems they have written in it scale very well (the web server they wrote in Erlang can handle 10x the capacity of a Apache server, if I remember correctly). They also boast numbers of 99.99999% availablity for the Ericsson switch that was written in mostly Erlang. Now, those boasts are what got me interested. It is a functional language and they are big on no mutable state like most functional languages. They argue that Erlang makes multi-processing easy and in fact easier than single process systems. They seem very anti-OO on their list,

Then they don't understand OO or history ...

    but I have found that the whole process thing maps very well to objects.

It does.

    But, I haven't gotten that far. It just seems they have been scarred by the {} crowd and static typed OO systems.

These are OO systems?

    I haven't had a whole lot of time to really get much deeper than that. I bought the book and have been working through some of the examples. They do a lot with pattern matching

Again, like Smalltalk-72.

    and it's made me think about certain programming topics differently.

As I mentioned, this approach is well worth studying. It also harks back to the tail-recursive ideas of Actors (Carl Hewitt) which were derived from Smalltalk, but have many interesting contributions of their own.

Cheers,

Alan

    I know I wasn't the person you were asking for the answer, but I thought I'd chime in.
    ------------------------------------------------
    Blaine Buxton
    My Amps: Smalltalk, Lisp, and Ruby
    http://www.blainebuxton.com

      From: Daniel Vainsencher
      Hi Richard.

        "Richard A. O'Keefe" wrote:
        I like Smalltalk (and Erlang and Prolog) a lot

      [snip]

      Sorry about the off topic interjection, but can you write a paragraph or
      two about Erlang? I've tried to get the flavor of it from
      site/documentation, but haven't quite made it yet.

      Daniel


Comments

 
Could Javascript be more elegant than Java?

I'm starting to believe that I should really try to get Rhino plugged into our Java environment at work. I have wanted it before, but ran into problems that I shall not mention here. Anyway, I would have a dynamic, prototype-based, and functional language at my disposable that takes a lot less code to express the same idea than in Java. Excellent article...Read it now!
Event Handlers and Callback Functions - article - w3future.com

Comments

 
More Javascript Stuff To Read

Think Javascript is not advanced? Go read this blog entry and then read the links. Who would have a thought?! I'm becoming impressed. The prototypical guys might be winning....=) Good reading...
Curiosity is bliss: Advanced Javascript links

Comments

 
Important Words in Marriage

I picked this up from Joeri's Weblog. I must say it's a very good list and great advice.

  • The 6 most important words: 'I am sorry, I was wrong'

  • The 5 most important words: 'You have done it well'

  • The 4 most important words: 'What do you think?'

  • The 3 most important words: 'I love you

  • The 2 most important words: 'Thank you'

  • The most important word: 'WE!'

  • The least important word: 'I'


  • Comments

     
    Do Not Read While Drinking Coffee

    Thanks to Micheal Lucas-Smith for this funny link: RoShamBo Programming Contest

    Comments

    Sunday, September 28, 2003

     
    Funny FedEx Commercial

    I about rolled over the floor laughing when I saw this commercial: Funny FedEx Commercial.

    Comments

     
    Congratulations RAM

    Just wanted to congratulate my friend, Ram Nukala and his wife on the upcoming new Smalltalker set to appear in January! Ram told me last night that they were expecting a new child. WAY TO GO! Ram also showed me some new code he had been working on using JavaScript and CSS. Very cool stuff. I was extremely impressed. He had written a simple rules engine in JavaScript that could be run on both the client and the server. The code was very small and he did his best to convince me on the powers of a prototypical language. I'm thinking he might be succeeding...=) Anyway, I can't wait to see the pictures of their new baby when it is born! CONGRATS, my friend!

    Comments

     
    Call me a nut as well...

    James Robertson has been called a "nut" in one the java newsgroups. Too funny. Read about it here. It's nice to be in the company of fellow nuts...=) I think you know you are pushing people's buttons when they have to go to the level of calling you names. How "smart" of them...

    Comments

     
    More thoughts on VMs

    I read Richard Demer's comments on VMs and now, this whole idea of a universal VM has got me thinking. My thoughts are that I think current VMs are too static. Why couldn't we make features loadable via shared libraries? Want to have more byte codes? Plug in a new "feature" into the VM and your new byte codes work. Want to support type safety? Plug that in too. Now, I would recon that some features might actually clash with others, but then, we could partition our VM so that multiple languages could run in the same space. Binding features at runtime to VMs sounds like a cool idea for research...Maybe I should chalk this up to YAPTD (yet, another project to do)? Anyway, it would be fun to play with, I must admit....=) I wish I was going to Lightweight Languages this year and discuss this with the folks there. Some extremely bright folks out there!

    Comments

     
    Re: Nifty Trick

    Got the following reply via email about my Nifty Trick post. I've posted my reply along with the original email. Enjoy!


    Hey,
    First off, thanks for your comments! I thought about doing it the way you specified. But, I decided the proxy was too much. Here's why: There's only a handful of methods that need to be recorded in the public interface of the agent actually. And I thought the #triggerCommandEvent was easier to implement. Now, the agent simply "broadcasts" events and doesn't care if anyone is recording them or even listening to them. So, you could have mulitple recorders listening to the same agent. The tape registers itself as a listener on the agent object only when it is in "reocrd" mode. Otherwise, the tape is not registered and does not care what the agent is doing. Actually, the tape has several states it can be in and this is implemented via the State pattern. So, it's acutally, the "record" state that registers itself to the agent and unregisters when stop is pressed. I need to put up the source for the Agent program soon. But, I love these types of design discussions.

    I posted the nifty trick simply because "walking the stack" is a pretty cool feature of Smalltalk and most dynamic languages actually. I must admit that I try NOT to use it, because like you said, "it makes the code less portable", but I knew when I wrote the agent that it would just run in Dolphin. Also, I thought it was cool to generically "record" the method by walking the stack and then calling that method with its parameters on any object that implemented that protocol. Now, my code for the Java Serialization is a different matter. I want to make that portable as I can. But, I thought I would at first implement it in Squeak and then worry about portability issues.

    Thanks for reading my blog!
    ------------------------------------------------
    Blaine Buxton
    My Amps: Smalltalk, Lisp, and Ruby
    http://www.blainebuxton.com

    >From: Reinout Heeck
    >To: blainebuxton@hotmail.com
    >Subject: Re: Nifty Trick...
    >Date: Sun, 28 Sep 2003 14:23:16 +0200
    >
    >Your blog's reply box only allows 400 characters :-/
    >So I respond by email.
    >
    >
    >
    >----------
    >
    >
    >It seems to me that when you use your code to replay the 'tape' the
    >actions get added to the tape once more.
    >
    >Is this the intended behavior or do you switch to a different object
    >(no recording) when playing back?
    >
    >
    >
    >Allow me to suggest a variation:
    >
    >remove the calls to #triggerCommandEvent and instead wrap the Agent
    >with a generc proxy, implement #doesNotUnderstand: on the proxy to
    >both record the message and resend it to the Agent.
    >
    >Advantages:
    >
    >1) no more stackwalking so more portable code
    >2) possibility to wrap multiple recorders around one Agent
    >3) more generic: you can now record messages to any object type
    >4) decoupling: the Agent does not take on the responsibility of
    >recording. (The developer does not need to remember to insert 'self
    >triggerCommandEvent' in the right places)
    >5) clearer code:
    >
    >Agent>>withRecorderOnTape: aWriteStream
    >
    > ^Recorder on: self tape: aWriteStream
    >
    >
    >
    >Recorder>>doesNotUnderstand: aMessage
    >
    > tape nextPut: aMessage.
    > ^subject
    > perform: aMessage selector
    > withArguments: aMessage arguments
    >
    >
    >
    >Disadvantage:
    >this breaks encapsulation, the calling code needs to know which
    >message sends need recording and which don't and send them to the
    >correct object (agent vs wrapped agent), see 4) above.
    >
    >
    >
    >Cheers!
    >
    >Reinout
    >-------
    >

    Comments

    Saturday, September 27, 2003

     
    Nifty Trick...

    OK, in my MS Agent Remote Control program I needed to record the actions that one can do to the agent object. I have an agent object that wraps the COM object. Here's an example of a public method that does some action that I need to be able to "record" and playback:

      speak: aMessage
        self triggerCommandEvent.
        self control speak: aMessage

    Now, self control returns the COM object. The method: #triggerCommandEvent is where things get interesting, though. Every method that needs to be recorded and played back calls this method first thing. Now, here's the implementation of the #triggerCommandEvent:

      triggerCommandEvent
        | stackFrame |
        stackFrame := Processor activeProcess topFrame sender.
        self triggerCommand:
          (Message
            selector: stackFrame method selector
            arguments: stackFrame arguments)

    This method is very interesting in that I don't have to have a specific piece of code in every method that wraps their parameters and name. Now, I have one method that I simply call and it walks up the stack picks off the information for me and then, wraps it in a Message object that can be used to call this object again. Now, notice that I didn't specify "self" in the message. It's because the message might not be coming back to me. There's an object that records these "actions" and call it a tape. This tape can be "played" back on any object. So, when you're playing with the agent and press "play". It plays back the "tape" on the agent object. But, what happens when you want to output the script? Well, I created another object that has the same public protocol (interface if you will) as my agent object. Now, we simply play the tape back on this object and the "script" object writes out JavaScript code instead of triggering actions on the agent.

    The thing I like about this is that there are several ways to do this, but being able to walk the stack allows you to do some rather elegant things and some less typing...=) Now, the above code is different in every Smalltalk, but you can do it. You can even do this concept in most dynamic languages. I know this isn't the greatest show of Smalltalk's abilities, but it's one of those things that I thought was nifty.

    Comments

     
    More interesting stuff to check out

    Another language I need to check out. Lots of documentation on their site and I think there is a Squeak version. I'll have to see where they are as well...=) So much cool stuff, such little time! E Language

    Comments

     
    Lightweight Languages Conference

    It's that time of year again and it looks like I'm going to miss it because I'll be in Nebreska. The things one does to get back to Smalltalk...=) Last year was a blast! I'm sad that I'll miss it this year. Last year, Erlang opened my eyes. I haven't been able to really sit down with it yet. I've read a lot of the material and know it's something to play with. Also, Todd Probstring gave an excellent talk on usability and language design. I wonder what the eye openers will be for this year? Wish I could make it....=)
    Spotted in Squawks of the Parrot

    Comments

     
    Great Quote

    "I have always wished that my computer would be as easy to use as my
    telephone. My wish has come true. I no longer know how to use my
    telephone." - Bjarne Stroustrup

    Taken from Dan Sugalski's blog. Thanks!

    Comments

     
    IO Language

    Yet another language that I need to check out: IO. I would like to thank Jim Menard for pointing this one out to me! It looks very cool, like a mix of JavaScript and Smalltalk. Very intriguing. I will have to check this out ASAP! I can't wait to start on my prototypical language journey. I've already started really studying JavaScript. I've studied JavaScript before, but the prototype thing went over my head, but now, it seems to make a lot of sense and i need to spend sometime with it to get my head around it. It might be the next logical step....=) I guess we'll see. I'll keep everyone posted on my thoughts!

    Comments

     
    Pot Meets Kettle Or Thoughts on VMs

    Alright, noticed some discussion on James Reobertson's blog about monocultures and the JVM. Read all the gory details here: Pot Meets Kettle. Now, I know the JVM is very unfriendly to dynamic languages. But, the Microsoft's .NET VM might be in the same boat. Now, they have gone to lengths to make it better for dynamic languages, but I'm taken by to the Lightweight Languages Conference in which I had a chance to talk with Dan Sugalski for a little bit. Now, we talked about the Zork VM and a host of other things. But, the discussion on the .NET VM was very intriguing as was his thoughts on Parrot. Now, what we talked about could fill a lot of entries in my blog, but the thing that stuck out in my mind is that he said that a VM couldn't be everything to everyone. He said that the Parrot VM was an effort to have a common VM for Perl, Python, and Ruby, but there were several challenges that were not apparent at first. While all 3 are dynamic scripting languages, they have feature differences and these differences add up. The thing about a VM is that its tailored to run fast for its languages. So, naturally, Parrot is made to be fastest for Perl with Python and Ruby coming in second. Likewise, the .NET VM will probably be tailored to run C# and VB.NET faster than any other language. I think this is the guideline that Sun takes with Java. It's nearly impossible to satisfy everyone because certain features can degrade performance for other languages. It's a give and take. And it comes down to a language design issue. I think this is where the IBM Universal VM failed. It wasn't fast enough for the Java folks and not flexible enough for others. A universal VM can not be at two places at one time if you know what I mean. Plus, the response for the IBM universal VM was also lackluster. Everyone was too busy finding out that the "hottest new language" at the time was not ready for prime time (of course, I'm talking about Java). Now, Java has come a long way, but I think people are seeing it's shortcomings and it never delivered on its promises (remember the hype that is was EASY?). MS is making the same claims with .NET and they too have missed the boat.

    All this talk of a universal VM also makes me think, why do we have VMs to begin with? It's to abstract ourselves away from knowing about the computer architecture we are running on. And why do we need to do this? One it makes write once, run everywhere a reality. But, it also makes certain abstractions possible because they are directly available in the machine code instruction set. I think a universal VM complicates things and there's too many design decisions that impact other factors. It seems like an impossible problem to satisfy everyone. But, I do think we could have VMs that are tailored to certain feature sets. Why not let the {} crowd have their .NET and Java VMs?! Let us Smalltalkers and dynamic languages have ours and let the functional language dudes (and dudettes) have theirs! So, then we would only be dealing with a handful of VMs, but the features targeted to perform best for what features you want.

    I'm going to have to do more thinking on this, because something is starting to sound like me like why can't we have VMs where can request and plug-in the features we want at run-time? Hmmmm.....Maybe the thoughts on a static instruction set VMs is the wrong answer for a universal VM, but a more pluggable VM. So, if you want static typing and it's benefits, then you use that instruction set...I wonder if this is possible? I'm thinking it is, but we need to change our thinking on VMs....Just a thought!

    Comments

     
    SONAR 3

    New love is around the corner and I can't wait! It's being released this Monday and I pre-ordered my copy. I can't wait to get the Ultrafunk Sonitus:fx Suite because I've been using all of those effects in FruityLoops and love the hell out them! Now, I will finally have their kick ass phaser and compresser in SONAR!!! YIPPEE! Something else to play with on my vacation before the trek out to Nebreska. Check out the love here: Sonar 3 Details

    Comments

     
    Seaside's Can Of Whoop Ass Opened On Java Struts

    It looks like Java Struts is all wet with this side by side comparison: Seaside's Can of Whoop Ass

    And Java developers wonder why I say Smalltalk kicks so much booty. It's nice to have a little proof....=) I'm simply amazed by the numbers. I would also expect the Smalltalk version to have way less bugs as well. Thanks for Chris Double's blog for this info!

    Comments

     
    Talk Like A Pirate Day

    Did anyone else know that September 19 was talk like a pirate day? Me neither, MATEY! AARRGGHH, SHIVER ME TIMBERS! AY, YE YOUNG LITTLE LAD WE SHALL NOT FORGET THIS YEAR NEXT! AARRGGHH!!!

    Comments

     
    Frustrations with Java

    This article from David Buck explains exactly my frustration with Java and why I'm going back to Smalltalk. Read it: Smalltalk Debugging and Productivity.

    Java is just now getting tools like we are used to Smalltalk, but they still have a long way to go. We recently switched up to Java 1.4 at work and I was excited because I had been hearing about it being able to "HotSwap" code. Well, I tried it out and it worked! Finally! But, over the course of the day, I found it could not handle "complicated" cases or would fail without reason. I finally boiled it down that it could only handle simply method changes. If you added a temporary variable, it failed; added an instance variable, it failed; or added a new method, you guess it, failed! So, my take was that it was better than I had before, but it still is pale compared to what I am used to in Smalltalk.

    Another funny thing is that I am amazed that most Java developers don't even want these features or see the benefit! I've sat with countless develoepers that when I showed them that they could inspect code from Eclipse while the program was running, their jaws hit the floor. Now, they love the features now, but the thought never occured to them to try. But, in Smalltalk, it's a fact of life and you miss it and groan about it not being there in other languages.

    The environment is the most powerful feature of Smalltalk and it's what makes it so cool. Without the environment, I guess we would call it Ruby or something...=)

    I love David's blog because he's been showing the cool things you can do in Smalltalk and not in other languages...=) I got a few tricks up my sleeve that I plan to show as well. One such trick is one I did for the MS Agent Remote Control.

    Comments

    Friday, September 26, 2003

     
    October 21, 2003

    Will see the release of a bunch of Kingsley Moog CDs! I'm so excited! Four of my favorite synth albums of all time are the Perrey-Kingsley albums! And now, they are releasing the Kingsley solo albums! This is great news! I can't wait! But, I will have the new Alice Cooper to keep me company till then...=) Moogy madness coming soon...Why isn't electronic music like it was back in the 60's? Good electronic albums are too few and far between these recent years.

    Comments

     
    Shocked

    Here's a news article on local Kansas City metal band, Thrust. I have one of their records and was waiting for the next one before I left Kansas. I saw these guys a couple of times live and they slayed. One of the best bands in the KC area! Anyway, I was shocked to read the following news:
    THRUST Singer Seriously Injured In Motorcyle Crash. My deepest condolances go to his family and band mates. I hope he recovers and is back on the stage soon. Rock on, brother...

    Comments

     
    Grandmother Sued By RIAA

    It seems the RIAA and their lawsuits against fans of their musicians keeps getting better. Personnally, it makes me not to want to buy anything from a major label anymore. Support your independent artists and labels! But, if you want a good laugh, simply click away...=) You'd think they would have gotten their facts right, but it seems it's hard to pinpoint a person to an IP address...SHOCKER! Grandmother Sued By RIAA

    Comments

    Thursday, September 25, 2003

     
    History Repeats Itself

    So, I read the book "Peopleware" on the plane flight to my interview for my new job. It was a quick and easy read. I can not recommend it highly enough. Anyway, I'm amazed at how much knowledge and tidbits there are about how to make our life as programmers easier and more enjoyable. There's lots of talk about managing, environments, and motivation. It's assembled as a bunch of short essays. It's a short book, but man, did it's morsels ring true. So, what's my point now that I've gushed about this book? I'm simply amazed how much of it has been forgotten! I work in a cube less than 30 square feet right now as we speak and they talk about optimal environments where they recommend 100 square feet! Plus, there's a bunch more! I think it should be required reading for any computer programmer or manager. Now, I think if we were all aware of the information in this book and in others, maybe our industry wouldn't be in the mess that it's in now! I'm currently reading, "The Psychology of Computer Programming" and my jaw is always on the floor. Again, it has lots of great advice and knowledge that I think is lost or is being rediscovered. I was shocked to read about "Egoless Programming" which sounds a lot like agile/XP methodologies and this was written in 1971!!!!! WHOA! My point with this entry is simple: How do these books get forgotten? It amazes me. But, I for one, will not let them be and will use their knowledge in my current activities. I hope you do too. You can buy Peopleware here and Psychology of Programming here. Happy reading and let's make our industry stronger and not forget where we've been! If anyone knows of any other books like these from the past, let me know! So far, I would rank these as high as the mythical man month!

    Comments

     
    Love is in the air...

    WOW! This is too cool...Check it out! Smalltalk Reports from 1991-1996. Get those flashbacks ready! Smalltalk Report Back Issues

    Comments

    Wednesday, September 24, 2003

     
    Fun Music

    OK, Am I the only nut that *loves* the Spy Kids soundtracks? The mix of styles from rock to synth madness to lounge to to latin to surf to everything in between is a lot of fun. Reminds me of a less experimental Mr. Bungle. I can't stop listening to them. Even the little pop songs on the new 3-D soundtrack are good! And I generally don't like a lot of the new pop...=) Now, they were written by Robert Rodriegues who also directed and wrote them. WOW! He's also responsible for "Once Upon a Time" and "Desperado". I need to hunt down those soundtracks too...=) I think I got a new soundtrack composer that I like...=)

    Comments

    Tuesday, September 23, 2003

     
    Excellent Article On Software and The Construction Metaphor

    A friend of mine sent this link to me and it's a great read! It points out why using the construction metaphor to do fixed planning is just flat out wrong for software. And he explains its wrong because it fails in construction as well. He gives several examples from construction where they are taking a more agile approach and being successful. Maybe this agile thing goes beyond software and can be used for any project where interaction and cooperation is necessary. Go read it now!
    Construction

    Comments

     
    Smalltalk Catch Phrases

    Ok, I've been thinking how cool it would be to have t-shirts with catchy little slogans for Smalltalk. Here's a few I thought of:
    Point, Click, Been There, Done That. (this one makes me laugh, but I think it's too negative)
    Felt The Hate? Feel The Love Of Smalltalk (one of my faves!)
    self become: Brilliant (hehehehe)
    Tired Of Typing? Try Smalltalk! (This works on two levels: typing as in into the keyboard and typing system)

    That's it for now...=) ENJOY!

    Comments

     
    Jean Michel Jarre

    If you have never heard this great artist, then what's wrong with you? Hehehehe, just kidding. My wife turned me on to this guy when she rented one of his live DVDs....It was incredible. I've been in love with the music ever since. So, I've been trying to buy anything I can get my hands on. All of his early material simply flat out rules. No one touches him. His later stuff is a little hit and miss, but still much better than a lot that is out there. So, who is Jarre? He's a french musician that writes electronic music. Now, by electronic, I don't mean techno or some lame new age crap (even though that's where you find his material). He writes music from the heart with a lot of cool sounds. I can say enough good things about this man. So, go buy "Oxygene" or "Equinoxe" and feel the love!
    Jarre's Website

    Comments

     
    Seaside and Javascript

    Another future project thought, these guys are starting to pile up! But, I thought I'd write down what I'm thinking so if I EVER have a lack of projects, I can simply look through my blog history, right? Anyway, I'm currently working on a Java project and one of the biggest issues is validation. And I've been thinking, wouldn't it be cool to be your business rules in one location where both Java and Javascript could understand them? I'm thinking something like Jess, but have it also run in Javascript. Now, you might ask, "Why have it run in Javascript?" Well, you could send your validation rules for that page down and have your Javascript interpret them. This way you could do client side validation without duplicating code on the server because they would be looking at the same code base! I would love to try this out as an addition to Seaside. I'm thinking if I get my prolog implementation (or shall I say prolog-based) or even a CLIPS engine working in Squeak, then have Javascript generated for the web pages, I would be golden! Is this another BIG project? YOU BET! I've been accussed of thinking "TOO BIG" before, but man, I think this would be so cool....I'm thinking it might possibly be the "killer" developer app for SMALLTALK! We're the best...LET'S PROVE IT! (well, we've already done that, but we can always use more feathers in our caps...right?)

    Comments

    Friday, September 19, 2003

     
    More Prototypical Objects

    Sam Griffth sent me this kick ass explanation. ENJOY!

    First off, it is possible to use a class based OO system to implement a
    prototypical OO system and vice versa. One of the very first Smalltalk
    programs created at PARC was a prototypical OO system. ThingLab used
    prototypical objects in it's domain space to do it's work, but it itself was
    implemented with classes and prototypical objects at the same time. Part of
    the SELF research idea to use prototypical objects was derived from the SELF
    team having seen the ThingLab work. Link to ThingLab papers and version
    ported to Squeak, including the original PARC paper:

    http://www.2share.com/thinglab/ThingLab%20-%20index.html
    http://www.cosc.canterbury.ac.nz/~wolfgang/NewHome/cosc414/projects/thinglabFolder/html/thinglab.html
    http://minnow.cc.gatech.edu/squeak/607
    http://portal.acm.org/citation.cfm?id=357147&jmp=references&dl=GUIDE&dl=ACM&CFID=11111111&CFTOKEN=2222222

    As for what a prototypical OO language gives you that you don't get in a
    class based one is conceptual purity and all messaging is based on
    delegation. Classes are really about type definition and organization of
    the instances of that type. With prototypes, you don't have a class. You
    just create one instance that you clone over and over again. And all the
    instances made from it know it. Your parent is whomever you cloned from.
    Your parent has methods that you may not have, so instead of looking to a
    class as something different or special, you end up with just the object you
    cloned from. No differentiation is made.

    In a prototypical world, you start with one bootstrap object that knows how
    to add/remove/run methods on itself and how to delegate to it's parent if it
    has one. From that, you can clone it (call it c1), add new attributes to
    the new cloned object, add methods to that new cloned object, clone c1 to
    make c2, etc. Now when you do cloned to get c1, c1's parent was the
    bootstrapObject, when you cloned c2 it's parent was c1. So when you send a
    message to c2, if it doesn't have it, it delegates the lookup to c1 which
    then will delegate it to bootstrapObject if needed, etc.

    There is no need for classes in this model. It is much more like nature.
    All mammals share traits that they inherited by being fertilized from an egg
    and sperm, but there really is no 'class' of mammals. That is a man made
    idea for our organization to show that we saw that the DNA is common and
    they have common traits, etc. From the outside it looks like that you are
    inheriting from the class of mammal that you are (human lets say), but what
    really happens in the reproduction process is that the DNA from the mother
    and father are cloned by the RNA bands and combined together in a process.
    This makes a new specific kind of instance much like if I had a multiple
    parents clone, which is possible in a prototypical OO system as well.

    I hope all this makes sense.... Let me summarize....

    Prototypical OO systems are based on cloning and delegation. A much simpler
    model based all in instances.

    Comments

     
    Future Project

    OK, as soon as I finish my Java Serialization framework and JXTA port in Squeak. I think my next project will be to update the Prolog implementation in Squeak. The original version was written in Smalltalk/V and I remember trying to load it into a 3.4 Squeak image and getting all kinds of errors. It comes on the CD that comes with the Squeak Blue book by Mark Guzdial (the CD is worth the price of book alone, but the book is EXCELLENT). I like the idea of Prolog and it would be a fun port. I've been interested in learning prolog for a while and this would be a perfect excuse to learn the language along the way. I already have several Prolog books and I thought about starting to use the examples in those as the beginning tests. Now, if I can find the author and get their blessing....=)

    Comments

     
    Java Serialization 0.2 Released

    Alright, I broke down last night and moved all of my java serialization code to the DVS system in Squeak. I must admit that it was really easy and it took me every bit of 5 minutes to get everything saved correctly. Why did I make such a fuss over this? Anyway, the mind boggles...So, the new release can read in Java class files now. The writing out of Java objects is still uhm, broken and is still be written. The tests are also still not there. The first thing I'm going to do when I go on vacation is to write all of the tests in a portable fashion. RIght now, all of my tests are in workspace (I know, I know, BAD PROGRAMMER!). I also know SUnit is a butt simple framework and I have no excuse not be using it. I've been using it on my reversi program. So, expect 0.3 to be released sometime in November at the latest with simply the tests written. I'm doing nothing more until some basic tests are in place.

    As always, if anyone has any suggestions, let me know!

    Comments

     
    Four Covers!

    The new Alice Cooper will have 4 covers! Guess who's going to be buying all 4? Yep, you guessed it me! I'm a huge Alice Cooper (even met the man once!) and I can not wait for his new record to come out! The Coop is back. My only regret right now is that it looks like I'm going to miss him on this tour (which S-U-C-K-S). But, it's the difference between being happy in the long run or short run...=) I can miss Alice on one tour since I've seen him twice on every tour since "The Last Temptation". BTW, it's only 11 more days to wait!

    Comments

    Thursday, September 18, 2003

     
    Excellent Article on Why Ant Leaves A Lot To Be Desired

    Just read this excellent article about Ant: The Sum of Ant

    I've always felt Ant was wrong and that a scripting language would be better for what it does. It's nice to see people on the same wave length. Thanks to Sam Griffith for pointing this one out (we're thinking on the same wave length again!).

    Comments

     
    Amen, brother

    I could not have said this better myself. An explanation of what people are doing wrong with XML and why there is false hope in the promises:
    XML Abuse

    Comments

    Wednesday, September 17, 2003

     
    Yummy Musical Madness

    Can you hear the brewing of madness?
    Automatic Music Audio Analysis

    Comments

     
    Brain Teaser

    Aoccdrnig to a rscheearch at an Elingsh

    uinervtisy, it deosn't mttaer in

    waht oredr the ltteers in a wrod are, the olny

    iprmoetnt tihng is taht frist

    and lsat ltteer is at the rghit pclae. The rset

    can be a toatl mses and you

    can sitll raed it wouthit porbelm. Tihs is

    bcuseae we do not raed ervey

    lteter by it slef but the wrod as a wlohe.

    Comments

     
    Prototype-based Languages

    OK, There's been discussion on the Squeak list about this and I thought I'd start doing some research. I came across this page for the Self language. Now, does anyone know of any implementations of Self that run on Windows?

    Comments

     
    Excellent Article On Dysfunctional Companies

    Read it now! It's a good read. How does your organization compare? 3 signs of a dysfunctional company

    Comments

     
    Why HotMail Sucks #239

    I get the following error message in a simple html document: "This server is too busy. ". The URL is even funny: http://by8fd.bay8.hotmail.msn.com/toobusy.html. I would have figured they would have made it look nicer. Anyway, I thought MS had lots of money and thus, enough money for servers? I find it amazing that .NET is getting so much publicity and yet, their own stuff doesn't work. I get at least 3-5 error pages back from hotmail everyday. Usually, they are erronous (ie. there wasn't an error really, but it decided to send me one). Once I have some time, I'm setting up my web server to serve up my email...This is just absymal.

    Comments

     
    Java Serialization

    I finally registered Java Serialization on Squeak Map this morning! Check it out: Java Serialization. I looked at the dates for what I have right now and it says "May 2002". I have had a new version in the works for about 6 months that read Java class files and writes java object back out. I refactored a bunch of stuff as well. It's the first thing to get done during my vacation starting on Oct. 11! I might try to get a release out before that (but, it will probably be VERY BUGGY!).

    I would like to thank everyone for their encouragement on me getting up on Squeak Map! I'm offical now!

    Comments

     
    More Science

    Study: Sleeping position and Personality

    It says I'm in the minority in that I sleep in the "freefall" position. Only 6.5% sleep this way....It also says I'm brash and gregarious. I can see the gregarious, but I've never seen myself as brash...Fun read anyway. It's amazing the stuff that they can correlate to our personality....=)

    Comments

     
    Nuclear Reactor Out Of Spare Parts

    Check this out: Freshman Makes Nuclear Reactor Out Of Spare Parts! COOL!

    Comments

    Tuesday, September 16, 2003

     
    Mod Smalltalk

    Rejoice, ye fellow sinners! Now, we can run Squeak as a mod in Apache! Chalk this up as something else I need to look at when I get some time! Go to Mod.Smalltalk.org Main Page now!

    Comments

     
    Get Thrashed

    Apparently, they are making a documentary on the thrash scene in the 80's. I can't wait to see this since I was a part of it. Now, it was hard to be in the heart of it because I was in Alabama. But, I remember following all of the fanzines and buying records like a madman. Thrash still has a special place in my heart. I still think it's the best form of metal next to NOLA sludge. It's being done by an MTV producer so let's hope he doesn't mess it up by saying "Metallica were the first thrash metal band..." Grrrrr....It was EXODUS people...EXODUS....=) Man, I'm going to have to put on some of those albums from back when Exodus, Metallica, Megadeth, Slayer, Anthrax, Death Angel, heathen, etc R-U-L-E-D. Oh, and did I mention that I'm getting new albums from Death Angel, Heathen, and Exodus this year? Those guys were some of my faves (I even want to call a project of mine: Heathen in reference to that band, we'll see). THRASH!

    Comments

     
    BottomFeeder

    OK, every morning that I get into work, BottomFeeder is the first application I start up now. I'm totally into this blogging thing now. I love reading a lot of different people's blogs. Each have their different ways of expressing ideas. Some are formal, some are informal (like mine), but all are informative and fun to read. So, just wanted to write a note to say thanks to the BottomFeeder guys. Oh, do you not have Bottom Feeder? Go here now and get addicted!

    Comments

    Monday, September 15, 2003

     
    Synth madness

    I need to check out Audio Mulch when I get some time too. Looks very cool!

    Also, I found PortMusic which is a bunch of cross-platform music APIs for sound, midi, and files. VERY COOL! I might not have to learn DirectX after all...=)

    I need time...=) I want to hook these MIDI APIs up to my FS1R and let the madness begin!



    Comments

     
    Smalltalk to Java

    Someone else on the same wavelength except for where I'm trying to mimic Java without the VM. He puts Smalltalk on top of the VM. I'm thinking there might be sinergy here and I can't want to play with it! Anyway, it's written for Dolphin Smalltalk, check it out here. Add this to the list of things to play with on my "in-between jobs" vacation. I'm thinking we're going about the same problem in two different ways. I'm trying to fool a Java VM into thinking it's talking to another. But, his approach is to connect to Java like you would a COM model. I think they are complimentary methods! In fact, it might be nice to use this when I'm debugging the Java test harness code in my stuff. Man, I need time for Java Serialization so I can take the next logical step: FULL RMI SUPPORT!

    Also, I loved his comment "Continue to use your legacy Java code as you migrate to a more grown-up language… ". Preach on brother! Preach on!

    And yes, I'm still at W-O-R-K!

    Comments

     
    Weight Watchers Update

    OK, a while back I mentioned that I had joined Weight Watchers and that I had lost some weight. Well, I'm happy to report that I'm still going to Weight Watchers (I'm actually addicted to it, not a bad thing to be if you ask) and I've lost a whopping total of 45 pounds! YEAH! The only problem is that pants keep falling off and it's been pissing me off. So, it's off to the mall to buy a belt to support my new waist line...I'm only 8 pounds away from my first big goal: to be under 200 pounds! And then, the next stop is G-O-A-L (for you non-WW folks, that means I'll be at my goal weight).

    Comments

    Sunday, September 14, 2003

     
    Wish Item For Nebreska

    I was thinking it sure would be fun to be find someone who wouldn't mind a keyboardist in their thrash metal band. I love metal, but I must be the only keyboardist who doesn't worship at the altar of the Orbital. I mean, I think they are very cool, but what happened to the cool synth music from the early 60's (Perrey and Kingsley...the best), early 70's (Jarre, Synergy, and Wendy Carlos rule), and hell even some of the 80's were alright. But, what do we have today? I mean I can only think of a handleful of synth bands I like like Eat Static, Amon Tobin, Hallucingen, Celldweller, and Assemblege 23. I want to do thrash metal with dancy synth blurps all in it. I don't want it to be industrial. I'm thinking funky music with real musicians with heavy as hell guitars and spacey keyboards. Think Ozric Tentacles meets Bay Area Thrash (think old Metallica Cliff Burton era, Slayer (pre-Divine Intervention), Heathen, etc) mixed with a little good ole funk (think Parliament and Bernie Worrell)...

    I know it's a long shot...But, damn it sure would be fun to be in a band again....On second thought, maybe I'll create it myself....=)

    THRASH!

    Comments

     
    Getter/Setter Issue

    So, I've been following the discussion on the PragProg list and the discussions always make me think. It's one of the last forums left where everything doesn't turn into madness. But, I digress. So, recently this discussion has come up and over the years I've waffled from the use getters/setters when you need them to all of the time. I like using getters/setters all of the time now because it helps when you want to refactor code and you might want to throw away an instance variable. Now, usually, I simply use the getter/setter methods to do something else (forward calls) or at the very least be able to look for references to those methods. I think using getters/setters sets you up nicely for the future. On the other hand, how pragmatic are they? Are they the simplest thing to do? Well, I don't think they complicate matters too much and are not that much more code to write. I also believe you should only expose the getters/setters that need to be. I generally like to have my objects be behavior rich and try at all costs not to expose the getters/setters, but sometimes you just have to. But, now, I'm starting to think that if you have a simple enough object why bother with getters/setters. If you need the added flexibility in the future or if you change the instance variable, then you can simply just change it internally and no one else changes.

    I can see the pluses and minuses of each side, but I think I still fall on the use them all of the time side. Just because I like being consistent. And I think being consistent always makes code cleaner and more maintainable. People know when they look at my code that there will always be a getter/setter (and that the setter might do extra things like broadcast change events, check rules, etc) for each instance variable. This makes my code predictable from a maintainability point of view. I also think getters/setters make your code more readable no matter whether the language is Java, Smalltalk, Ruby, etc...

    Before I close this entry, I will mention Squeak has a really cool property that will automatically create getters/setters when they are called if they don't already exist. This means while you are writing code, you can define your instance variables and then assume that the first time they are accessed via a getter or setter that the method will be called. Now, if you're being a "good do bee" and writing your tests, then these methods will be automically generated for you the first time you run a test that exercises code that hits that getter or setter. Pretty cool huh? You don't have to explicitly write the code for it! Now, I think that's pragmatic....They even cooler thing is that it should be easy to write code that does this in any Smalltalk! You can attempt the same in Ruby (just insert a method at run-time) or any dynamic language for that matter...Very cool!

    Feel free to comment!

    Comments

     
    New PragProg Reply, but this is on getters/setters, etc...

    >From: "andrew cooke"
    >Aryeh M. Friedman said:
    >
    > >> Setters/getters are in my "evil stuff list", because they focus on the
    > >> data
    > >> part of objects, not on the behavior part.
    > >
    > > Exspecially when people go to an extreme like using getters/setters
    > > for all queries/assignments (even "private ones") for example I saw
    > > someone
    > > do a ctor that literally was this:
    > >
    > > Foo::Foo(int x, int y)
    > > {
    > > setX(x);
    > > setY(y);
    > > }
    >
    >this can be useful when you need to maintain some kind of additional
    >condition in the class - changing x also implies something else changes.
    >
    >of course, it's better to avoid this by making sure the fields are
    >orthogonal, but that's not always possible.

    I don't know if anyone else has read "Streamlined Object Modeling" book, but nonetheless, it's an excellent book on object modeling that I find myself accessing a lot. Anyway, they use accessors for each of their variables, but state whether the getter/setter is public outside of the class or not (in Java, this means defining as protected, package private, private, or public...In Smalltalk, it's a matter of putting a comment in that says that this method is private or public). I think making accessors all public to outside classes is a bad idea. I think you should only make public what you need to. Now, there are some cool things you can do wtih setters like run business rules to verify that the object can be set into myself. I also have special setters for collections like addToxxx and removeFromxxx so that 1) I can use reflection like on a JavaBean and 2) run business rules to make sure the object can be added. I mentioned "Streamlined Object Modeling" because they have a very nice write up about how to use getters/setters and collection setter methods and how to deal with business rules and verification in your objects.

    Comments

     
    Siren
    Oh my, this sounds like too much fun! I guess I'm going to have to finish my install of VW sooner than I thought! I've been wanted to play around with MIDI in Smalltalk for a long time, but have been stopped by the DirectX API. I haven't had a lot of time to look into it though. But, I go this route instead: Siren. Now, I've tried playing with MIDI in Squeak with some success and I was even looking in the route. But, I never got Siren to work in Squeak on Windows. Oh well, I can't wait till this comes out. It sounds exactly like what I've been looking for! A Smalltalk way to make MUSIC! It would be so cool to do a whole Alto Dorado song in Smalltalk since that's what the name is inspired from! Too much fun....Now, I have to wait to October until I have time! Of course, I still want to learn the DirectX APIs and really do MIDI in Squeak as well...=) But, sometimes, you just need instant gratification. I wonder how this is going to sound with the FS1R (greatest synth ever MADE PERIOD!) or Nova or Sid? Hmmm, the possibilities!!!!!!

    It seems the article lists some alternative implementations for Siren like Ruby and Erlang (which I find very interesting, since I find Erlang intriguing to say the least). I would be very interested in see what transpires. I've only skimmed the article, but I have read a lot about Siren in the past. I hope to see their comments on why they would move it away from Smalltalk. I can see audio generation a problem, but dealing with MIDI in Smalltalk should pose no problems whatsoever. It'll be interested! I'll post my thoughts when I'm done (the article is short).

    Comments

    Saturday, September 13, 2003

     
    Underdogs

    We went to go Seabiscuit last night and I must say that it is the ultimate "underdog" store where substance triumphs over style. It made me think of a song that I play everytime I go to anything where I'm competing (whether it be for a job, a contest, etc). It helps me not get intimidated by the folks who are all style (look perfect, smell perfect, act perfect) and no substance. "When ability is highly overcast, I'll make sure you'll never last". Just click here for the lyrics of the song I'm thinking of. Who said heavy metal wasn't uplifting....=)

    Comments

    Friday, September 12, 2003

     
    New Job

    It's official. I accepted a new position this morning. I will be starting my new job on October 20. I will be leaving the fine state of Connecticut and traveling all the way to the wild, wild west of Nebreska. So, you might be asking why would I travel all the way to Nebraska for a job? Simply put: the most amazing team I've ever had the experience of witnessing. I was floored during my entire interview. Now, you might be asking, what's so great about this team?! Well, they are a true XP team, they manage themselves, and there are no titles. What you have is a well-oiled team that kicks a lot of booty and I'm proud to become a member on October 20. They even use a little language that I talk about a lot here. I'll give you a hint, it begins with an S. Still guessing? OK, I'll spell it out S-M-A-L-L-T-A-L-K!!!!! Yes, I will be returning to the Smalltalk fold after 4 years! I never left, but it will be nice to do it for my day job again. They also do Java, but I will be doing very little. I would like to thank: Bart Weller and Stve Wessels for being my cheerleaders and great friends. You guys are the best! I would also like to thank my wife for being incredibly supportive during this time. I did a lot of soul searching in Connecticut and I knew this was the team that I was destined to be a part of. I can't wait to start! Of course, I will miss the team I'm on right now in Connecticut. They have been a lot of fun and the reason for my leaving is not due to them, but to a certain consulting firm that shall remain nameless in these pages because of their ethics, inexperience, and inability to work with anyone else except themselves. I'm leaving behind great friends and long hours. I look forward to having time to work on music and posting JavaSerialization project on Squeak Map!

    Comments

     
    Static Typing And Racism

    I gleaned this from the comp.lang.smalltalk.advocacy newsgroup. I find this a great way to explain the benefits of dynamic typing/late binding systems. I know this might be a little going overboard or inappropriate, but I think it hits right on the head!


    The opposite is static typing, which makes me think
    of a segregationist, racist society, vs. an "open
    society".

    Variables in a program are like *rooms* through
    which objects pass. In a racist society some
    waiting rooms were reserved for the *white objects*
    only. No matter how capable a black object you were,
    you were not allowed to enter rooms or areas which
    had the type-declaration "for whites only" attached
    to them.

    In an open society you can enter rooms and places
    based on your abilities and credentials, on what
    you are capable of, not on how you look or are
    "labeled" in your passport.

    Similarly in a dynamically typed language you
    can choose and reuse a class/object which *does
    the job* - regardless of what its class is called!
    Such a society, and such a program therefore would
    seem to be more efficient in their use of resources.

    So isn't it time we liberated programming from
    the racism of manifest typing! Shouldn't we
    assess objects based on what they can do, instead
    of judging them based on their /declared/ type?

    ~:-)
    -Panu Viljamaa

    Comments

    Thursday, September 11, 2003

     
    The Final Debate Rages!

    The latest entry:
    >From: "kups28"
    >Certainly if you're seeing code or hearing people say
    >they're using final because they're code is perfect,
    >that's the wrong reason.

    I wasn't claiming it to be a reason, but an implication. I think by using final, you're implying that your code is perfect. I think I would look at anyone funny who came right out and said their code was perfect...=)

    >Anti-object think? Subclasses should have access to all methods
    >in its suprclasses? I couldn't disagree more. One should always
    >have the option to have private methods to manage the private
    >details of an object. That's part of encapsulation, supports the
    >open-closed principle and so on... Many times I've used private
    >methods to do work with instance variables that you clearly want
    >to be private.

    I tend to think of encapsulation from a different point of view. I look at encapsulation from outside of the object. I view a subclass of another object to be from the inside. Now, since I think a subclass is inside the object, then yes, I do believe it should have access to all of the methods of the super class, but not its instance variables. The reason I don't believe in giving direct access to instance variables of the super class is because it's too easy to change the super class. With methods, you can deprecate them if need be.

    I think we just have different opinions on where subclasses lie in regards to encapsulation. I see subclasses as having the inside track and you're opposed to that. I think that's too conservative and you probably think my definition is too liberal. I think if someone is subclassing your class, they should have all of the inside knowledge they need. My point is that you never know how someone might extend your class and they might want to do something before/after a private method that you have implemented. Now, the developer could 1) either beg you to make it not private or 2) copy the private method verbatum and then make their changes.

    The anti-object thinki comment might have been a little bit overboard....=)

    >One example that comes to mind is an object that has an internal
    >hashtable that it needs to manage. Perhaps for performance, it
    >needs to change the number of buckets in the hashtable once it grows
    >to a certain size. If the class doesn't/shouldn't/etc. expose the
    >hashtable to its subclasses, I sure as heck wouldn't want to make a
    >the hashtable management method protected.

    Alright, in this example, I would refer to the "hashtable" by an interface and if I needed to change implementations of the hashtable for performance I could. I would simply change the object that is internal to my class. I tend to use interfaces in my instance variable declarations where *I think* there might be issues like this one. That way my object that uses the hashtable calls the interface and the implementation of the hashtable can change. I usually provide a method to initialize the instance variable so subclasses could change the implementation if they like. I would make all of the hashtable management in the hashtable implementation and my containing class would simply switch out implementations (the logical for when to switch would not be in the containing class at all, I would ask the implementation if it was getting to big and if so, would the next implementation be). This makes the hashtable a strategy pattern that knows what its next strategy is possibly.

    >That may not be a typical example. Perhaps a better one would be
    >an object that manages i/o details to from a database, file, etc.
    >I can think of compelling reasons never to expose some of those
    >details.

    Again, I would have an object that exposes what I needed from the file, database, etc and then simply have implementations that went to the database or file. The containing class wouldn't care. Now, would I subclass those implementations? No.

    I guess the bottom line is that I don't like to limit people when they are using my code. I never want someone to go "if I could only change this one aspect of my superclass". People can be very inventive and copy/paste gets around a lot. Then, we have code duplication complicating matters. Don't laugh, at my work, this is how someone got around a lot of private code that another developer had written. I kid you not.

    I just think we have different experiences. I've had several bad experiences with both private and final. It sounds like you have the opposite experience. I think it's hard to come to a conclusion or have a clear winner. I think it's whatever works for the both of us.

    >Your comment about never knowing what people will do with your
    >class is a valid point. But I still think there's room for
    >having well thought out private, protected, and public methods
    >(Java terms here, but I'm really thinking of whatever the
    >equivalents are in other languages).
    >

    I think everyone tries to have their designs well-thought out. I just think circumstances change and code needs to be as flexible as possible. I just think adding private/final makes things too rigid.

    Comments

    Wednesday, September 10, 2003

     
    The Final Saga

    Jeremy Dunck had the following to say on the pragrammatic programmers list:
    >From: "Jeremy Dunck"
    >Reply-To: pragprog@yahoogroups.com
    >To: pragprog@yahoogroups.com
    >Subject: Re: [pragprog] Whose word is final?
    >Date: Mon, 08 Sep 2003 21:24:52 +0000
    >
    > >From: "Blaine Buxton"
    > > >From: Ged Byrne
    > > >In 'Effective Java' Bloch goes to the other extreme.
    >
    > > >
    > > >His argument is that inheritance provides an
    > > >additional interface to your objects. If you allow
    > > >somebody to extend your objects in a way that you
    > > >never imagined, then you are forced to either always
    > > >support that unintended use for the entire life of the
    > > >object or upset users of your interface when things
    > > >change.
    > >
    > >I think making your objects all final is going way to far.
    >
    > >I have not found the changing
    > >super class to a problem on any system that I've worked on. Good design
    > >always makes things easier.
    > >
    >
    >This conversation has been more enlightened than most I've seen on the
    >topic, but here's an article that might help:
    >
    >http://www.joelonsoftware.com/articles/FiveWorlds.html
    >
    >Different strokes...
    >
    >I personally, as an in-house developer, -hate- banging my head on sealed
    >classes. Significant project risk comes from this kind of surprise.
    >
    >Also... Regarding using mostly interfaces instead of actual class types in
    >Java-- sounds like you want a dynamically-typed language.
    >
    > -Jeremy

    Hmmm....You bet I want a dynamic language! I wonder which one I'm thinking of....=) I would have posted my reply, but someone beat me to it.

    Comments

     
    Overtime

    Johanna Robinson has some thoughts on overtime. It's schocking to know 40% percent work over 50 hours a week. How depressing. My job has been in crunch mode since I got here. I have averaged over 50 hours per week! I included vacation time in the average number which did not drive it down by much. I'm not proud of that number and I'm quite ashamed of it. The number means less time with my wife, less time with my pets, less time for music, and less time for Smalltalking. In fact, I'm writing this blog from work right now at 12:40am in the morning while I wait for something to finish processing. I love the thoughts of Mr. Robinson and just found his blog. More managers should follow his lead! Oh, how I dream of working on a real XP team!

    Comments

    Tuesday, September 09, 2003

     
    More thoughts on debug vs. optimize

    I actually thought of a legimate reason not to leave the debug option on during runtime: security. But, I thought if your server is behind a firewall, then this isn't that big of deal. Only if your server is exposed to the outside world. It's a shame they didn't add security to the debug server of Java. But, it's still a good idea to leave debug turned on always for your compiles. Your code is still ready to be debugged when you go want to turn on the debug options on the JVM. There are no security flaws in this, only if you turn debug mode on your server.

    Comments

     
    javac -debug vs. -optimize

    Alright, another Java whine is up today. This entry is about a discussion I've been having at work about using the debug and optimize flags at compile time for Java programs. My take is that the debug option should ALWAYS be turned ON and optimize should be turned OFF. Now, when I mean ALWAYS I mean ALWAYS! So, I get the "But, Blaine surely not meaning a system in production, right?" and my reply is "you bet your ass I am". It's at this point that I get the puzzled expression that would make you think I have 6 heads. And then, I get a little chuckle about navitity. Next, comes the "But, Blaine the program will run MUCH slower and our infrastructure would never stand for that!" I then counter with "Yes, debug does slow down the program, but not by much...And the gains that you get from being able to see a program running and watch it as it fails are ENORMOUS!" I continue by asking if the production support staff would like this. I always get a "WELL HELL YEAH WE WANT THAT!" from the production support folks. Can you blame them? We as developers always have the luxury of debugging our program and watching things as they happen. It allows us to fix our programs quicker and see the state of the application at run-time. Why wouldn't we want this level of flexiblity for a production system? In production, you want a quick turn around time for bug fixes and it's easier to see the problem if you can watch it the state of the application as it's happening! The time saved in fixing production critical bugs more than makes up for the cost of a few missed milliseconds I think. The production/maintenance support staff should have the same or better tools than we as developers do. Logging, etc are for being able to see what a program is doing when it fails. Surely, writing a log entry is more expensive than leaving debugging on. The argument for speed is starting to make sense isn't it? I like to work on live programs and not dead ones. Working on an application while it's running is way more powerful than looking at logs and finding that the piece of state that you need has not been logged! Grrrrrr....Oh well, some food for thought for the day!