Saturday, September 10, 2005

XML Generation In Smalltalk

Tim Jones showed a simple way to generate XML in Smalltalk. And then Michael Lucas-Smith showed an even simpler way which is very close to what Seaside does for HTML generation (using #doesNotUnderstand:). In fact, I wrote one for Squeak a long time ago for myself that does exactly what Michael and Tim did (my DNU code calls the Tim-like code and compiles it on the fly so to make debugging easy and future hits quick). Anyway, I found that I needed something different for attributes so I created the ability to churn out XML from arrays. Here's some code from one on my tests:
xml := BtbXmlRenderer on: writeStream.
xml render: #(first arg1: 'value1' arg2: 'value2'
(second (third '"fun"'))
(fourth)
(fifth #sixth: 56)).

And this generates the following XML:
<?xml version="1.0"?>
<first arg1="value1" arg2="value2">
<second>
<third>&quot;fun&quot;</third>
</second>
<fourth/>
<fifth sixth="56"/>
</first>

I made all objects implement #renderXMLOn: so that I can use Arrays, Blocks, or anything else to make it easier to output XML in the future. It also means I can use all three approaches to generate one XML document. I think this is a perfect example of polymorphism and the power of dynamic languages at its finest. So, we have three ways of generating XML and I found that each has its advantages at different times. My point to this post was to show yet another way to generate XML using Smalltalk. Keep the Smalltalk flowing!

Monday, September 05, 2005

FTPlets

Apparently, Avi Bryant made an interesting challenge to create a dynamic FTP server. I love the idea of using existing protocols in creative ways. What about a dynamic CSS or Subversion server? Or even automatically save code to a version control system based on submissions to the FTP server and tags things on a per session basis. I'm excited to hear more as this develops. Can you imagine using existing tools for your front-end? Then, people can use the tools that they are most comfortable with.

Good OO Thoughts

From Steve Dekorte's blog:
The amount to which the program is object oriented has an inverse relation to:

1. the number of arguments passed in message calls
2. The number of instance variables in the objects

I tend to use "7 +/- 2" rule. If I have 5 or less instance variables in my object, then everything is cool. I'm even OK with 7, but 9 is on the cusp of too many. The reason why is because too many instance variables is not only a code smell, but your object is getting away from having one responsbility and needs to be broken up.

Arguments are little bit more restrictive. I try to keep them below 5. Otherwise, you're writing big methods and well, your methods should do one thing and nothing more.

Of course, the rule above is excellent, as is the "DRY, Shy, and Tell The Other Guy" rule from the Pragmatic Programmers. They are just some things that I strive for when programming.

Sunday, September 04, 2005

Rule #67 in Design

NEVER clean up resources you did not create

I hate to pick on Java, but I found a great example of this in the Java API of all places in the javax.swing.text.html.parser.Parser class. I removed a lot of the code from the method to concentrate on the violation:

/**
* Parse an HTML stream, given a DTD.
*/
public synchronized void parse(Reader in) throws IOException {
/* LOTS OF CODE REMOVED */
try {
/* WHACKED */
parseContent();
/* WHACKED */
} finally {
in.close();
}
/* MORE CODE DELETED */
}

Basically, you pass in a Reader object that obviously you have to CREATE. And what do they for you? They free your resource that you passed in. Heaven forbid, you would like to do something else with it. Besides, why would you do that? Well, that's not the point. In design, I NEVER clean up a resource I did not allocate. If it is passed into me, I do what I need to do with it and that's all. On the other hand, if I allocate it, I take pains to make sure I deallocate it. This is what I did in my C/C++ days and it was a great rule of thumb that prevented a lot of problems.

Friday, September 02, 2005

Is That All?

Taken from the comp.lang.smalltalk.dolphin:

> Besides the IdeaSpace, what else is new?

Well, off the top of my head, and in no particular order:
1) New look tools with sliding panes (imaginatively called Slidey Inny
Outey Things, SIOTs) :-)
2) New look Resource Browser with iconic categories and preview pane.
http://www.object-arts.com/dow nloads/6.0/images/d6rb.png
3) New look View Composer with sliding resource toolbox and Inspector
panes.  The View Composer now supports undo.
http://www.object-arts.com/dow nloads/6.0/images/d6vc.png
4) Improved garbage collector giving approximately 20% speed
improvement overall.
5) Compiler now supports true block closures and not just a
Smalltalk-80 block semantics.
6) All code editing is now done using the Scintilla code editor.  This
means we get away from the vagaries of the Windows Rich Text Control
and also we now have auto completion (IntelliSense).
http://www.object-arts.com/dow nloads/6.0/images/d6ac.png
7) New "literal filer" for storing views which opens up the resources
such that their contents can be refactored etc.  Storing resources in
this way also greatly simplifies the image stripping process at
deployment.
8) New Sockets2 package that uses overlapped/blocking calls rather than
asynchronous messages.  The old package is provided for backwards
compatibility.
9) The Refactoring Browser rewrite tool has been included as a plug-in
in the class and system browsers.
http://www.object-arts.com/dow nloads/6.0/images/d6rwt.png
10) The class and system browsers now have a Code Mentor plug-in that
comments on the style of your code.  It runs the analysis in the
background as you work and is based on the SmallLint facility that
comes with the refactoring engine.
http://www.object-arts.com/dow nloads/6.0/images/d6cm.png
11) Views now support background colour inheritance.
12) New TabViewXP view that supports XP-style tab views in all
orientations (unlike the standard Windows control).
13) Dynamic syntax highlighting in all workspaces as you type.
14) Workspaces highlight compilation errors and warnings with squiggly
underlinesand will display help for these when the mouse hovers over
them.
15) Various new view controls such as: SysLink, LinkButton,
MonthCalendarView, SpinButton.
16) Windows XP application manifest is now included as part of the
version resource in deployed executables.
17) Application deployment now creates a complete XML based contents
list of the entire application.  This can be browsed from within
Dolphin using a class browser to see exactly what methods and classes
are present in the application.
http://www.object-arts.com/dow nloads/6.0/images/d6cm.png
18) New Method Explorer which replaces the old Method Browser to
provide a hierarchical trail of browse requests.  The aim, like with
the IdeaSpace, is to reduce the number of open windows while working
with Dolphin.
http://www.object-arts.com/dow nloads/6.0/images/d6mex.png
There are dozens of other minor enhancements and bug fixes and probably
some other fairly major ones that I've forgotten but the above should
give you a flavour of what is coming in Dolphin 6.
Best regards,
--
Andy Bower
Dolphin Support
www.object-arts.com

WOW! That sure is a lot of stuff to pack in for a release. I'm beyond excited. I'm so lusting for Dolphin 6.0. I feel like a kitten that can see the cream, but can't lap it up. Dolphin on!

Thursday, September 01, 2005

What kind of technology do you want to create?

From Donald Norman's "Things That Make Us Smart":
When I speak of the power and virtues of technology, I am referring to soft technology: technology that is flexible, that is under our control. Hard technology remains unheedful of the real needs and desires of the users. It is a technology that, rather than conforming to our needs, forces us to conform to its needs. Hard technology make us subservient; soft technology puts us in charge. Automating tends to be a hard use of technology. Informating tends to be soft.

So, when you are creating your next program or framework, think to yourself, "How would I want to be treated?" I bet you would prefer soft technology over hard. Let's make the user experience better all around. I promise to take the above quote to heart in my future endeavors. Take the oath and let's start delighting our users together.

Tuesday, August 30, 2005

Coheed & Cambria

So, I was watching Fuse with my wife the other night and thank goodness for Tivo. I was enthralled by this one commercial with this great music and montage of creepy images. At the end of it all, it showed the roman numerals, "IV" and that's it. We reversed back and got the band name, "Coheed & Cambria". Well, I googled and got to their band page. From there, I listened to some more samples and I was hooked enough to buy one of their CDs. It has to be one of the most incredible pieces of music that I have heard in a long time. It's pure and simple rock with lots of melodies and harmonies. Gorgous does not do it justice. I can't stop listening to it. I've now got all of their CDs on order and I can not wait until their new album, "IV" comes out at the end of September. If you want an idea of what to expect, it's progressive rock without being pretentious and the albums are concepts based around a science fiction story which they have graphic novels for. I'm getting the novels next week. Mark my words, these guys are going to be HUGE. I hope to make a trip to Lawrence, KS in October to see them. I didn't know people still made ROCK records like this anymore. Apparently, they do and there's a whole genre of bands doing stuff like this. Thoughtful, arty music, but with their feet firmly planted in creating memorable hooks. This is what made Black Sabbath, Led Zeppelin, Yes, and Queen great. ROCK ON!

Sunday, August 28, 2005

Too Funny

I see the next shirt that I'm going to have to buy. CLASSIC! The Ruby guys are really giving java a lot of hell. A light-hearted jab in good fun. Ruby on!

Saturday, August 27, 2005

Excited about Squeak 3.9

Traits will come with Squeak 3.9. How awesome is that? Prepare to have another weapon added to your arsenal. Of course, if you can't wait like me, you can download it now in 3.8 via SqueakMap. Squeak on!

VOIVOD Guitarist DENIS 'PIGGY' D'AMOUR Dead Of Colon Cancer

It was reported yesterday that Piggy of Voivod died of cancer at the age of 45. Wow. It took me years to get into Voivod, but once I "got it", they've been one of my faves. Piggy was an incredible and unique guitarist. He will be missed. I got to meet him at Ozzfest a couple of years ago and they were incredibly nice and appreciative. I can't believe another hero is gone. I will be spinning "Dimension Hatross" and "Nothingface" in remembrance. RIP, brother.

Friday, August 26, 2005

The Future and The Ordinary

Suppose you are absolutely certain that a technology that you know about will succeed. How long will it take to have a major impact? Warning: Technologies take a surprisingly long time to become accepted.

The above quote is taken from Donald Norman's "Defending Human Attributes in the Age of the Machine". He gives insight in why new technology takes so long to adopt and even gives some examples of outmoded technology that we still use (the "qwerty" keyboard). Then, he explains several examples of modern technology and how long it took them to be accepted. The numbers are staggering. The television took seventy years from inception to acceptance! He gives a lot more examples and it's quite the read.

Where am I going with this? I think this applies to computer languages and frameworks. The rest of the industry keeps edging toward Smalltalk and Lisp. The road to Smalltalk was started with C++ (by mimicing OO features) gaining acceptance. Later, it was java (VM, garbage collection) and now, python and ruby (late-binding, dynamic typing, closures, etc). Each jump has taken about ten plus years each. What will the next jump be? I'm hoping it will be toward the image because it's the only piece missing. But, we still have about ten years before critical mass. Are you patient? I think I can be.

Each technology jump toward Smalltalk should be celebrated. I tend to be disappointed with each jump because it's not far enough, but I should be happy. Everyone is one step closer to feeling the love. Oh, I can wait ten years for love. Can't you? Now, the question is how long will it be before prototype languages are accepted? I'm betting at least twenty years from now. Well, that's a lot of time to be ahead of the curve and kicking everyone's butt don't you think?

Thursday, August 25, 2005

Service Provider Went Nuts

If anyone sent me email today and I haven't replied, please resend it. My service provider's email server went nuts and I know I lost some email, but I don't know how much. So, if you don't have a reply from me, I'm not ignoring you. Thanks!

Wednesday, August 24, 2005

Amen, brother

Sam Tesla has a simple prayer that we should all say several times everyday. Right on!

I, Prototype

...unfortunately, Self was not the last object-orientedprogramming language. Self does have some claim to be the lastinteresting object-oriented programming language, or at least the lastinteresting modern OO language with most languages coming afterwards,C++, Java, C#, Cb, being as distinguisable as Coke from Pepsi orMalboro from Rothmans: you dont drink the drink, you drink theadvertising (Twitchell 2000). In Self, at least you can hear yourselfscream.

I must admit that I agree. The above quote is taken from the paper, Attack of The Clones.It's a paper that shows some of the patterns from GoF book implementedin Self. It has to be one of the best reads I've come across. It'scertainly entertaining. Here's some more:
Anotherlovely, natural example of dynamic inheritance in Self. You could dosomething almost as nice Smalltalk using doesNotUnderstand but theSmalltalk Companion doesnt talk about it because, well, theyre wimps(Alpert et al. 1988). You can also do exactly the same thing inSmalltalk using Wrappers (Brant, Foote, Johnson & Roberts 1998).

TheSmalltalk companion is one of my favorite books and I wouldn't callthem "wimps", but it just made me chuckle. And I can't forget this one:
How hardcore do you want to be?
How many lifetimes to you want to waste?

Idon't want to be hardcore and I'm tired of wasting lifetimes...=) Thisarticle is just another one that is making me fall in love with Selfand prototype-based languages more and more. I can't wait to implementand play with these in Io.

Monday, August 22, 2005

Bob Moog Dead at 71

It's sad when your heros start dying. Moog synthesizers are known around the world as being the best. Moog was one the first electronic instruments makers (apparently, he was inspired by what he saw at Raymond Scott's house). He started out making Theremins which are the things responsbile for all of those eerie sounds in 50's horror and sci-fi movies. He's been such a fixture and icon in electronic music. I'm so shocked. I was hoping to meet him one day and thank him for all of the good that he put into the world. Love is lots of knobs and flashing lights to make wonderful sounds. He was the inventor and catalyst for it all. He will be missed. I'm going to go plug my mooger foogers in right now and play in remembrance. Why can't the good ones live forever?

Shameful and Unprofessional

Iron Maiden was pelted with eggs at their last show of Ozzfest. Here's a personal account taken from Blabbermouth:
The manager of a well-known heavy metal band (*NOT* IRON MAIDEN) who attended this past weekend's Ozzfest show at the Hyundai Pavillion in Devore, California has submitted the following first-hand account of the evening that will surely go down as one of the most shameful moments in recent rock history (NOTE: at his request, the author's identity is being protected by BLABBERMOUTH.NET):

"Saturday night's Ozzfest at the Hyundai Pavillion near Los Angeles was a debacle on so many levels, I am still in shock as I write this. As a fan of many of the bands [Saturday] night, one can only hope this was an isolated incident, but sadly, it most likely wasn't. As many of you have heard already, co-headliners and metal legends IRON MAIDEN were pelted with eggs, bottle caps, beer cups, spit on, had people from the Ozzfest camp talking over the PA during their set, had 'Eddie' delayed from his onstage entrance, had members of the [BLACK LABEL SOCIETY] entourage rush the stage with American flags, and had the PA intentionally turned off over 6 times, all by the OSBOURNE CAMP.

"While it's still unclear as to the exact reasons why the terrorizing started (rumors abounded as to why, with everything from Bruce calling out Ozzy in the U.K. rock magazine Kerrang! on the widely known fact that Ozzy uses a teleprompter, to various vague references said on stage about a 'reality show' at an Ozzfest stop in Detroit), one thing was very clear: The whole thing stunk, and left me, and nearly all of the 40,000+ heavy metal fans in attendance angered and disappointed. Not that behind the scenes bickering or magazine trash talking is anything new to rock fans, but the shocking lack of professionalism at one of the largest stops in North America in front of 40,000 + spectators, at the hand of the Osbournes was nothing short of disgusting.

"It all began early in the afternoon, when many side stage bands were openly approached in clear view of everyone backstage by Sharon and Kelly Osbourne to 'join them in throwing eggs at IRON MAIDEN this evening.' All the bands were encouraged to rally the other side stage bands to do so. Members and/or friends of the hardcore band BURY YOUR DEAD were seen actively trying to encourage other side stage bands to 'join in the fun.' Thankfully, many side stage bands angrily declined.

"Later that evening, as IRON MAIDEN came on stage, their intro was interrupted by [BLACK LABEL SOCIETY] hanger-on and biker wannabe Big Dave, who was at the soundboard loudly chanting 'Ozzy, Ozzy' over the PA. MAIDEN opened their set and the entire band was pelted from the front row with eggs, beer, beer cups, spit, and various other objects by an Ozzfest-credentialed, bandana-wearing, Osbourne entourage. IRON MAIDEN, ever the professionals, continued through their set, and by the time they launched into their second song, 'The Trooper', Bruce changed into a civil war-era, red coat and began waving a Union Jack — British flag. Then, someone in, or associated with, BLACK LABEL SOCIETY tried to rush the stage waving and American Flag with the words 'Don't fuck with Ozzy' scrawled across his bare chest. He was tackled and beaten by MAIDEN crew and promptly thrown off stage.

"As 'The Trooper' ended, frontman Bruce Dickinson, with characteristic spunk, launched into a scathing attack on the people terrorizing his band, calling them 'a sorry excuse for an Ozzy Osbourne fan,' and wondering aloud how, 'three dozen eggs could get snuck into the front row of Ozzfest by people with Ozzfest laminates?' Though he never named names, all in attendance could understand who he was referring to. Nicko McBrain ran up to the front asking Bruce to hold on while he cleaned egg off his drums. He then stated the the next song wouldn't be heard on 'Your local cocksucking corporate radio station, wouldn't be seen on MTV anymore, and sure as hell wouldn't be played on a fucking reality TV show,' met by a huge roar from the crowd.

"During the song 'Hallowed Be Thy Name', Bruce, after only the first two lines, stopped singing and ran to the front row, firing back at his terrorizers, saying 'That asswipe right there, with the curly hair, the fucking glasses, and Ozzfest laminate throw his fucking ass out of here right now. It's gonna take more than eggs to stop IRON MAIDEN, and if it wasn't for a lawsuit, I'd rip your fucking head off right now, you piece of shit!!!!' He had the various attackers ejected and continued with a blistering version of the song until right before the big sing long at the end, the PA was INTENTIONALLY cut off. When it came back, Bruce launched into another scathing attack saying that they were supposed to play a shorter set than normal today, and only play 55 minutes, but IRON MAIDEN can't drive 55, or play 55, and were going to play our whole fucking set tonight.

"The band endured six more 'PA cuts,' including having the power to their amps turned off at one point. When the PA would come back on, they would simply launch into the next IRON MAIDEN classic, never missing a beat. Frankly, with every PA cut, the band just got meaner and meaner, playing each new song with an anger and a fire that was at times, simply astonishing to watch. Bruce began the introduction to IRON MAIDEN with a speech about 'Your constitution has something about 'We The People.' Well let me tell you, the only reason we are up here tolerating this bullshit, is because of you people. You have been amazing Glen Helen, and there are A LOT of IRON MAIDEN fans here tonight,' eliciting a huge roar from the crowd. He continued, 'It's gonna take more than eggs to stop IRON MAIDEN, NOTHING is going to come between us and our fans, and it will be death before dishonor, this is 'Iron fucking Maiden',' which was greeted by a thunderous applause. During 'Iron Maiden', longtime MAIDEN mascot Eddie was purposely delayed from making his entrance, making a brief appearance at the end, and one could only wonder as to how. As the band closed there set with a furious version of 'Sanctuary', the PA was again cut only to have Big Dave repeatedly chant 'Ozzy' over the PA, while the band tried to say goodbye to their fans. The now-furious crowd angrily drowned him out with chants of 'MAIDEN, MAIDEN.'

"Then, not 10 seconds after MAIDEN left the stage, Sharon Osbourne walked on stage and predictably, tried to give MAIDEN some fake, half-hearted praise about how they'd like to 'thank IRON MAIDEN,' and what a wonderful band IRON MAIDEN are, and how their crew were 'fantastic,' then sneering, 'But Bruce Dickinson is a prick.' The entire crowd, now fed up with the entire affair, began loudly booing her, pelting her with beer cups, and yelling 'bitch.' She tried to carry on, adding that 'Bruce had disrespected Ozzfest,' only to be drowned out by an ocean of boos, and soaked with beer. She slammed the microphone down and stormed off stage. Many in the crowd, fed up with what they had just witnessed, especially considering that many had come solely for MAIDEN, and paid upwards of $150 to do so, left in droves. SABBATH played to maybe half the audience that was there prior, and seemed stagnate compared to the band preceding them. As a huge fan of SABBATH, I honestly couldn't stand to watch them.

"I've seen IRON MAIDEN probably 10 times in my life, and frankly this was the very best IRON MAIDEN show I've had the pleasure of witnessing. You DON'T want to fuck with IRON MAIDEN. The more the Osbournes tried to fuck with them, the better they got! IRON MAIDEN was on fucking overdrive! Considering the amount of terrorizing and intimidation that IRON MAIDEN had to deal with at the hands of the Osbournes and the other side stage and main stage bands participating, they were the consummate professionals. They had the crowd in the palms of their hands, and IRON MAIDEN and Bruce Dickinson proved beyond a shadow of a doubt why they are the greatest metal band on earth right now, and quite possibly, the classiest, too.

"The Osbournes are drunk with power. Shame on them, and shame on ANY of the bands that participated in the terrorizing and intimidation. It was disgusting display, that NO BAND should have had to endure, but especially a legend like IRON MAIDEN. That fact that it happened in front of 40,000+ people, at a Clear Channel-sponsored event, while Hyundai Pavilion Security turned a blind eye and let the Osbourne camp pelt one of the main headlining bands with eggs, beer, and spit, was simply inexcusable.

"I will proudly be attending next year's MAIDEN fest, and as much as I hate to say it, I can't bring myself to spend another dime on the Osbournes.

"Ozzfest, hang your head in shame."

Indeed...I can't believe this happened. This takes unprofessional to a whole new level. I have new found respect for Maiden for putting up with so much crap. And if it is true that Sharon had anything to do with it, I might have bought my last album of any of the bands involved and seen my last Ozzfest. I can't express how unmetal and deplorable this was. Up the irons.

Fly On The Wall

I wish I could be a fly on the wall at the Vancouver Lisp User's Group when Avi gives his Seaside talk. I think it would be not only a fun talk, but I would love to hear the resulting conversations. Avi has taken the basic continuation-based web server that started in Lisp and has taken it much further. The suggestions of Lispers would especially be interesting. Makes me wish I lived in Vancouver.

Team Design

I was reading "The Cognitive View: A Different Look at Software Design" by Robert Glass. And the following quote struck a chord with me:
Those same researchers have been looking into team design. And
they’ve found that, in many ways, it’s a shared form of individual
design:
  • The teams create a shared mental model.
  • Team members, sometimes in their own minds and sometimes in the group, run simulations against the shared model.
  • The teams evaluate the simulations and prepare the next level of the model.
But in some ways these efforts are unlike individual design:
  • Conflict is an inevitable part of the design process. It must be managed rather than avoided.
  • Communication techniques become a vital part of the design process.
  • Issues sometimes "fall through the crack" because no individual claims responsibility for them.

I'm always preaching about a "common vision" on the teams that I'm on and I always feel strongly about obtaining it. All of the successful teams that I've been on have had this "common vision". It's a shared goal and reaching for the same target. Without it, every individual has what they think the design should be and you end up with an unmaintainable big ball of mud. It's his first bullet point! A well-oiled agile team achieves all of the first bullet points and knows how to manage the last set. In fact, the last set of bullet points really boils down the problem of unsuccessful teams well. Healthy conflict resolution is paramount to a successful team. Mr. Glass goes on to define what a consider to be the definition of a good IT manager:
In managing design, managers can focus on communication facilitation and conflict resolution as their contribution to design. The empirical studies researchers further suggest that management of design should be the management of the key issues that arise during the design process.

The manager's job should be removing obstacles from the software designers and coders and not standing over you make sure you get your job done. If as a manager, you have an employee that you have to stand over to get their job done, then you've hired the wrong person. You should be making sure your developers have a proper road to race toward the goal on.

There's a lot of nuggets of information contained in and all in all a good read.

Dynamic Languages Help You Design

Darrell Norton makes some interesting observations from "The Cognitive View: A Different Look at Software Design" in his blog entry, Dynamic languages work closer to how you design software. He combines points from this article with the one I mentioned earlier. All three articles are worth a read. I especially love this quote at the end of Darrell's blog entry:
"when I want to focus on the domain problem and not the implementation in curly braces, End If's, or angle brackets, dynamic languages are a (good) answer."

Why REPL is a good thing

Here's a great article on why REPL (read-evaluate-print loop) is a good thing. He mentions using IronPython for .Net, but you can get the same functionality in java with Jess, Groovy, jRuby, and of course, jPython. I love the mentions of Smalltalk. REPL allows you to try out designs and code out quickly. Smalltalk compiles code when you save and you never notice it. One thing that people don't realize is that you are inside a running system that you can change. Any change you make to the system is live, it's not operating on a dead instance of the system. It's the same functionality that gets blank stares at "Ruby On Rails" demos. Sad thing is we've had this for over 20+ years in Smalltalk and Lisp. I'm just glad our industry is finally coming around.

Sunday, August 21, 2005

Cool Pavement Drawings

Juian Beever is a pavement artist that does great work. Check out his website and go down to the 3D illusions gallery. INCREDIBLE! Here's one to whet your appetite:



I would probably walk around that if I saw it! Great optical illusions. MAD FUN!

Saturday, August 20, 2005

Kent Beck vs. Alan Cooper

My friend, Larry Brodahl, sent me a classic article debating Extreme Programming vs. Interaction Design from both of their visionaries. I would love to see more debates like this. I wish they would have continued this discussion. It felt unfinished. It was a great debate! We should always be interested in doing things better. And that is what these types of discussion allow. They make us look at what we are doing and question what is not working.

By the way, if you have never read "The Inmates Are Running The Asylum", you need to now! I can't wait to read "About Face 2.0" now.

Friday, August 19, 2005

Object Inheritance

I've long been a fan of "Streamlined Object Modeling". It's a book I keep coming back to over and over. I was reading it recently and wondered why I never noticed the connection with prototyped delegation and what they call "object inheritance". The book is a collection of domain modeling patterns and several use "object inheritance". One pattern in particular expresses the relationship between an actor and a role. For example, let's look at some java code:
/**
* The common behavior of the actor and the role
*/
public interface PersonProfile {
public String getName();
public void sendEmailTo(EmailAddress another, String message);
}

/**
* The actor's behavior
*/
public interface Person extends PersonProfile {
public void setName(String aName);
public void setEmail(EmailAddress anAddress);
}

/**
* The role's behavior
*/
public interface Employee extends PersonProfile {
public BigDecimal getSalary();
}

The implementation is not important. I wanted to show example interfaces and to show the relationships. The point to object inheritance is that the Employee forwards the calls for PersonProfile on to a Person that it holds on to. This allows you to pass around the role or actor through the same interface. Now, you might be thinking that's a lot of forwarding going on. It is. Now, you could get fancy by using a Proxy and an InvocationHandler. In fact, I do something similiar in Smalltalk when I compile the forwarders on the fly. It's a great modeling technique and is useful in several contexts for expressing clarity in the model. Prototype programming languages make this modeling technique easy to implment (no duplication or coding gymnastics required) by the use of traits. Simply put, traits is a composition technique to combine collections of behavior with data to construct objects. To learn more about traits, read the paper, Organizing without Classes.

The good news is that it's simple to do this technique in Smalltalk by use of the Traits package. Ruby even has it through its Delegate framework. Once you start thinking in Traits, it's hard to go back. Have fun with this new technique and happy coding!

"Streamlined Object Modeling" has the best discussion of modeling and implementing business rules in object-oriented languages that I have ever seen as well. It's a great book all around that balances theory and implementation. It's filled to the brim with great advice that every business modeler should know.

Thursday, August 18, 2005

More Good News

It seems BEA is looking at scripting languages to add to its arsenal of products. It seems dynamic languages are making all kinds of head way in the world. ROCK!

SmallHttpUnitTest Rewrite Update

After finally fixing SmallHttpUnitTest for VisualWorks and having talks with several folks at Smalltalk Solutions, I felt it was time to revamp SmallHttpUnitTest. For one, it was slightly misnamed in that the tests are really end-to-end acceptance tests. I was trying to make the navigation easier through the objects. But, somewhere I made a wrong turn. I started to really look at the Selenium Testing Framework. It runs your tests in the browser via Javascript. Nice. It's simple and it works with a nice a table structure like FIT. You can even command it remotely from another language as well such as Smalltalk, java, Ruby, and more.

Well, it all got me thinking how nice it would be to drive the browser like Selenium does, but with the nice object traversal that I used for SmallHttpUnitTest. You can command Internet Explorer, Firefox, and Opera via Javascript. It's a slightly different idea from Selenium in that the web page that you're loading does not need to have any Javascript loaded. The Javascript works externally via a script that runs the web browser via COM (for Microsoft) and I'm still researching Firefox/Mozilla (but, I know its possible to drive them with Javascript as well). It would seem some Ruby people had the same idea! But, I want to take it further. Javascript makes a lot of things easy since it is so well-integrated into the browser.

The pieces of SmallHttpUnitTest that are in Smalltalk will be re-implemented in Javascript. A lot of the browser handling code is no longer needed! The Smalltalk piece will be an external application that watches what you do as you're traversing your web application and takes notes. Once you've finished navigating, you could update your asserts for each page load and have Smalltalk generate the Javascript for you. I'm doing the proof of concept for Internet Explorer since I am more familiar with the OLE/COM model to drive IE. But, I expect Firefox to be a no brainer. I should only have to replace one object and everything will just work. So, you could have one script that drives both. There's a few more surprises that I want to work out and I will be blogging about them. I have a lot of work ahead of me. This a completely different approach than what I was thinking of doing at Smalltalk Solutions. I've been slow doing the prototype, but I have been a busy boy!

You might be wondering how I got the DOM searching of HttpUnitTest working in Javascript since it uses generators and doesNotUnderstand: a lot. Well, that's a topic for another blog entry. Let's just say that higher order functions are your best friend.

Wednesday, August 17, 2005

Java's Coolness Declining

It seems Apple is dumping java for Cocoa development. I've felt the java coolness factor on the decline for awhile now and scripting languages on the rise with the developer of Rails getting Google hacker of year. I love seeing dynamic languages getting more of the lime light. It's going to be interesting how Python and Ruby will change developer's perspectives. No matter what, it will be a fun ride.

Shocked

I used to hate Slipknot. I thought they were the worst band. I hated their first two albums, I hated their look, I hated everything about them. So, I'm watching Fuse and they sneak in their latest song, "Before I Forget" and I thought, "Wow, what a great song!" Well, I then notice the masks and think, "There's no way this is Slipknot. This ROCKS!" Well, to make a long story short, I bought the album on a whim expecting it to have that song and maybe two others. Imagine my surprise when I loved every song on this album! The amazing thing is that I hate all their albums still (I tried them again). "Vol. 3" has a great mixture of different songs. It's not all one trick. So, I work my way to "Stone Sour" and I love it too. I'm just shocked how a band can go from awful to awesome in my eyes. I can't stop listening to either "Stone Sour" or "Vol. 3". I hope they keep up the great work! This ain't nu metal anymore.

Touche Pussycat!

I overheard this on the ruby mailing list from Florian Groß:

Eric Mahurin wrote:
The biggest problem I have with being able to add/remove/modify methods of an object (using a meta class or directly in the object's class) is the future of optimization in Ruby. Adding methods may not cause too much of an issue, but modifying them sure could.

"Researchers seeking to improve performance should improve their compilers instead of compromising their languages."
-- An Efficient Implementation of SELF, a Dynamically-Typed Object-Oriented Language Based on Prototypes, July 1989

I love this reply! What a great quote. It ties in nicely with "premature optimization is the root of all evil." Amen, brother! Just remember, people used to think Lisp and Smalltalk were too slow as well. Virtual machines used to be a dirty word. Now, java and c# are two of the most popular corporate languages and they both run off VMs. I love the prototype parts of Ruby. They are especially great for debugging specific instances and other things. Let's make our languages more dynamic, not less. More is less.

Sunday, August 14, 2005

Offensive

I just found this document on the net entitled "How To Become A Hacker" By Eric Raymond. I read through a bit of it and I couldn't believe it. I stopped reading it immediately. Am I the only programmer offended by crap like this? I hate the words "geek" and "nerd". And "hacker" to me means someone who programs Big Balls Of Mud and doesn't care. This kind of junk just keeps stereotypes of smart people alive. It's derogatory and offensive. It's like the stereotypes of southern people. We don't all live in trailer parks and listen to country music. It's just like not all smart people are social misfits, play dungeons and dragons, and can't wash ourselves properly. I'm tired of the demonizing of intelligent people. We are the problem solvers of the world and you'd think that would be respected and revered. You'd think we wouldn't perpetuate bull crap like this. OK, ok, I'll get off my soapbox.

Saturday, August 13, 2005

I Couldn't Have Said It Better

Hwee Boon Yar states, "Smalltalk just fulfills most of my needs more easily." I couldn't have it said it better myself. Despite some of my blog entries, I don't totally hate java. I'm still looking for the perfect language. I'm just amazed in terms of productivity that nothing has yet to surpass Smalltalk that I can find. Of course, that's not to say that Smalltalk doesn't have some warts, but they don't get in my way.

Friday, August 12, 2005

Thinking Forth

It seems Vincent Foley has been hooked by Leo Brodie's "Thinking Forth" as well. I blogged about it a while back. It's an excellent read. If you don't care for Forth, you still need to read the chapters: Preliminary Design/Decomposition, Detailed Design/Problem Solving, Factoring, and Minimizing Control Structures. It's full of great advice and remember it was written in 1984. Another depressing example of how our industry forgets past lessons. But, I think this trend is changing. Many of us are exploring the past and uncovering lost gems. We shall not make the same mistakes again.

Thursday, August 11, 2005

Smalltalk Shop

Alright, who didn't tell me about the Smalltalk Shop? They have the classic balloon in a poster and t-shirts with that hot new balloon logo. You can even get the logos in different colors! I think I might be buying some stuff soon...=)

Sunday, August 07, 2005

Annotations

Well, with all of the noise generated by generics in the java world, it seems annotations got lost in the cracks. They allow you to add metadata to fields, methods, and types. With this metadata, you can reflect at compile-time or run-time. This opens a lot of cool possibilities in java! So, I got down and started to write some example code. One of the first snags that I ran into is that they can not be subtyped even though the syntax for creating them is similiar to interfaces. The second snag was adding behavior which didn't suprise me, but I wished for it. Annotations allow you to capture data into structures. But, the more you play with them, the more you desire to use polymorphism instead of using instanceof everywhere. I think it would have made annotations way more powerful and cool. It just seems they went half way. Why didn't they just make annotations full objects? Anyway, they are still a welcome addition to the language and they are the reason that EJB 3.0 is a lot simpler to create entities. Anything that makes java/j2ee simpler is alright by me.

Huh?

I've been reading up on java 5.0 and I came across this tutorial on the new generics framework.
A note on naming conventions. We recommend that you use pithy (single character
if possible) yet evocative names for formal type parameters.

Huh? I couldn't believe my eyes and what I was reading. But, here's the code sample:
public interface List<E> {
void add(E x);
Iterator<E> iterator();
}
public interface Iterator<E> {
E next();
boolean hasNext();
}

I can see why so many java advocates have been clamoring about the complexity. Shouldn't we be making the code more readable? The paper goes through the problems with generics and addresses each one. It leaves you asking yourself, "Is this going too far?" It especially gets messy around how to treat subclasses and interfaces. The answer makes everything more restrictive which sounds good on paper (if you like type safety), but it also reduces polymorphic possibilities. I shutter at the thought of the code that I will come across from inexperienced OO developers. Much like I have seen "private" misused in method declarations. I expect to see generics misused to be more restrictive that they need to be as well. I applaud the effort to reduce the need to type cast, but what price shall we pay for safety? Generics do make like easier for some issues, but it complicates others. Is it really worth it? I find unit tests a much better tool to fix type issues than enforcing type safety.

Omaha Smalltalkers

Well, it seems attendance was light last week and I was hoping that Gary Overgard could give his talk again on doing a report/code distribution on Small-Fit. It provides a lite-weight alternative to the current approach for Fit & Fitnesse. Its advantage is that it is much easier to debug, but still gives advantage of documentation. If we have time, I will be showing Ruby for Smalltalkers talk.

As always bring your passion, code snippets, and books to discuss!

Here's all of the details:

When: August 9, 2005, 7pm - 9pm
Where: Offices of Northern Natural Gas
1111 S 103rd Street
Omaha Nebraska 68154

Office is at 103rd & Pacific. Guests can park in the Northern visitors parking area back of building, or across the street at the mall. Enter in front door, we'll greet you at the door at 7:00pm. If you arrive a bit later, just tell the guard at the reception desk you're here for the Smalltalk user meeting in the 1st floor training room.

Songs That Give Strength

I love music. I love all kinds. But, every once in a while, you get find something special. Something that touches your soul and you completely relate to. There's only a few albums that touch me deeply. But, one artist, Assemblage 23, continues to always write lyrics that dig deep inside of me. I've been listening to his music all week. His lyrics are all introspective and he writes the perfect music to back it up. It's a source of inspiration and strength for me. One song that really gets me everytime I hear it is "Lullaby". Here's the lyrics:

May you find solace in the gentle arms of sleep
Despite the wolves outside your door
In time you will see them all as harmless
And their idle threats easy to ignore

And if ever fate should choose to smite you
Stand your ground, never walk away
Please don't ever let the world defeat you
Don't get buried in its decay

As you drift into the gauzy realm of dreams
May you take comfort in the thought that you are safe
For it only takes a fraction of a second
For all of this to change

CH
Return to me
When slumber's fog has lifted
Return to me
Stronger than before

As you sink beneath the soothing streams of time
May you be thankful that you had another day
For there comes a time when each of us will enter
A sleep from which we will never wake

And if ever fate should choose to smite you
Stand your ground, never walk away
Please don't ever let the world defeat you
Don't get buried in its decay

Close your eyes now, if only for a moment
For it's time you get some rest
The wolves are gone and nothing here can harm you
Let go of your fragile consciousness

(CH)
His lyrics are about the dark places all of us find ourselves in from time to time. But, there's always this ray of sunshine rising out of the bleakness to get out and make your life better. I love it. I wish I could find more music like this. One of his main influences is Depeche Mode and I've been slowly getting their back catalogue. All great stuff!

One Size Fits All

There has been discussion on the Squeak mailing list about Smalltalk vs. Ruby. It started out as a Rails vs. Seaside question and then turned broader. Personally, I think there is no comparison between Rails and Seaside. Rails includes a simple way to map objects to an OO relational database with a traditional request/response model. Seaside on the other hand does not have a persistence model (they let you decide) and has a more advant-garde yet easier flow model. They both share the simpler is better principle of design, but they have attacked it at different angles. Rails is easier to swallow for most programmers, since it is closer to what they are used to. But, I find Seaside to be the simplest way to build web applications. There are things to learn from both.

On to the broader question of Ruby vs. Smalltalk, there was a lot of discussion of image-based vs. file-based environments. But, I think the one we need to keep in mind is the following quote from Enrico Schwass:
I guess smalltalk and especially squeak get now the chance to spread
wider. Why? Because of the growing ruby community. Smalltalk is
mentioned everywhere. Most of the newer ruby guys are curious enough to
take a look. Like me. This could start a smalltalk renaissance. If you
welcome them friendly :)

The key point is that we should understand that programmers are coming from other backgrounds. We should show them what Smalltalk has to offer and not why we think their language is inferior. We all have things to learn from one another. We need to embrace them with open arms. Smalltalk is cool because it is image-based, but it's a hard sell to a lot of programmers. It presents an alien world that is both strange and unfamiliar. Ruby allows most programmers to stay comfortable in their file-based world, yet take a peak into a pure OO world. One step at a time, I think Ruby prepares programmers for an image-based world. Also, I think they will come to Smalltalk with a different mindset and this will push boundaries. This is a good thing. I am continually amazed at how inventive and creative members of the Ruby comunity truly are. They will be a welcome addition to our community. Besides, who says one language has to rule them all? Let's embrace Ruby for what it's good for and do the same for Smalltalk. I enjoy programming in both and love being a part of their communities. Of course, I enjoy programming in a lot of different languages. Each one has it's pluses and minuses. So, instead of bickering about which one is better, let's learn what's great about each one.

Saturday, August 06, 2005

10 Things Every Java Programmer Should Know About Ruby

The slides for Jim Weirich's "10 Things Every Java Programmer Should Know About Ruby" are up and ready for your reading. The slides are excellent and provide a great argument for dynamic languages. Everything he talks about is true for Smalltalk as well except that everything really is an object (including blocks) in Smalltalk. I do love Ruby, I think it has a lot of good ideas (like mix-ins). I especially love the Ruby community. It's young, vibrant and they embrace the simple for doing complex things. It's possible.

Wednesday, August 03, 2005

Just Say No....To Kitten Huffing?

My gut is hurting. But, did you know kitten huffing was bad for your health? This is some pretty dark and funny stuff! The included video is simply hilarious. Enjoy.

Tuesday, August 02, 2005

Alice Cooper

The master released his new album, "Dirty Diamonds" and it is brilliant. I'm a huge of Alice and he never has disappointed me. But, I wasn't expecting this. It's a complete throwback to his early 70's material. It's diverse and his twisted sense of humour comes shining through. I can't wait to see the tour! I hope he never stops making albums.

Which Altar Do You Want To Worship At?

"Finally, the days where a novice programmer can know all of a language are gone, at least for the languages in widespread industrial use. Few people know "all of C" or "all of Java" either and none of those are novices. It follows that nobody should have to apologize for the fact that novices do not know all of C++. What you must do - in any language - is to pick a subset, get working writing code, and gradually learn more of the language, its libraries, and its tools."
-Bjarne Stroustrup from What is C++ So Big?"

"If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual."
-Dan Ingalls from Design Principles Behind Smalltalk


Rock on dynamic brothers. Rock on!

Great Comeback

Doug Stewart sent me an exhcange between Andrew Tanenbaum and Linus Torvalds. What I love about it is Andrew sends a hateful email to Linus. The comeback that he returns is just classic. Here's Alan's email to Linus:
" I still maintain the point that designing a monolithic kernel in 1991 is a fundamental error. Be thankful you are not my
student. You would not get a high grade for such a design :-)"

And here's Linus' answer (Please, put down the Coke can unless you want it on the monitor or up your nose):
" Your job is being a professor and researcher: That's one hell of a good excuse for some of the brain-damages of minix."

The only thing I can say is "Touché Pussycat!"

Wheel Of Fortune Programming

Memory used to be expensive, so developers thought of creative ways to get the most out of the least. One of the ingenius ways to save memory was to abbreviate variable names. What amazes me is that this school of thought has carried on even today. We no longer have memory constraints and in fact, source code is miniscule in comparison to everything else on your computer. Your code will be read more times than what it takes you to write it. More time will be spent understanding it. So, why raise the cognitive friction by playing "Wheel Of Fortune"? Vowels are not expensive. They are free! Remember that the next time you want to abbreviate variables that you are going to make someone do mental gymnastics just to grok something as simple as a variable name. Wouldn't you want them to comprehend the logic instead? Think about it. Where do you want the brain power to go to? Or maybe you like your fellow developers cursing your name at 3:00am when they're trying to fix your code. Have pity for the ones that will read your code. Make it read as closely to human language as you possibly can. It's just good style and polite.

Saturday, July 30, 2005

Dolphin Giveaway

Andy Bower had this to say on the comp.lang.smalltalk newgroup:

Folks,
Bitwise, the new online programmer's magazine, is now giving away a free version of Dolphin Smalltalk Value Edition 5.1 with the August issue. For the last couple of months they have been running Smalltalk tutorials and the latest issue backs this up with one targeted specifically at Dolphin smalltalk to coincide with the software giveaway.

www.bitwisemag.com

I believe they may also be looking for further Smalltalk articles...

www.object-arts.com

What are you waiting for? Go get your free Dolphin 5.1! Trust me, it's a lot of love!

Thursday, July 28, 2005

Bruce Dickinson

One of my new personal heros is Bruce Dickinson, lead singer for Iron Maiden. I've been a huge fan of Maiden since I was in high school. I've always admired Dickinson for his accomplishments outside of heavy metal. He's an airline pilot, fencer, book writer, and probably whole bunch of other things. He seems to be constantly doing something. He's a healthy guy with a great attitude toward life. He gave a rant at Ozzfest on dope (now, this is coming from what I remember, warning: quotation might be a little off):
I smell dope. <crowd cheers> I hate dope. This music is about energy, not about being laid back. Dope is for f**king hippies. If you want to be laid back, go to a Dave Matthews concert!

That took a lot of guts to say at a concert like Ozzfest. I feel exactly the same way. I have no time to be laid back. It endeared him to me. There's a not lot of musicians that will stand up and take a stance like that. But, if that wasn't enough, he says this in a recent interview:
"I hate Walmart, and I hate the corporatization of everything in America. I despise it. People need to have their minds made up for them, at this moment, and they need to liberate themselves from that. It drives me nuts…"

Bravo. You go, Mr. Dickinson. I hope to one day meet him and talk about his view on life and politics. He sounds like an interesting cat. Rock on!

omaha.rb

It's time for the next meeting of the Omaha Ruby User's Group. The only planned topic is to be bring your favorite pieces of Ruby code or your curiousity. Hope to see a lot of people there! We've been having a small group and the intimate setting has worked well. Make sure you sign up on the mailing list. Here's the information of the when and where:

    When:August 1, 2005, 7:00pm
    Where:Panera @ Eagle Run Shopping Center
    13410 West Maple Road
    Omaha, NE 68164

Wednesday, July 27, 2005

What The Dormouse Said

I just finished this great book by John Markoff. It has lots of great background information on the rise of the personal computer. But, what makes this book different is that he doesn't spend a lot of time on Steven Jobs or Bill Gates. Most of the book deals with the social structures and political climate around the early days of computing. It talks about how the early computing pioneers mixed with radicals bent on changing the world for the better. I was shocked to learn how many experimented with LSD and there's even an interesting quote from Dan Ingalls, who was known to experiment a bit, when asked about the ideas in Smalltalk: "Well, where do you think these ideas come from?!" It was just fascinating to see how politics, culture, and computing all mixed together. I also found it shocking to know that Doug Engelbart considered himself a failure. Truly sad. Anyway, it's a great read and I can't thank Eliot Miranda enough for turning me on to it. It's a great history lesson. I also got the following great quote by Theodor Nelson:
"COMPUTER POWER TO THE PEOPLE! DOWN WITH CYBERCRUD!"

Amen, brother!

Things That Make You Smart

I started reading "Things That Make You Smart" by Donald Norman and one paragraph struck a chord with me:
When technology is not designed from a human-centered point of view, it doesn't reduce the incidence of human error nor minimize the impact when errors do occur. Yes, people do indeed err. Therefore the technology should be designed to take this well-known fact into account. Instead, the tendency is to blame the person who errs, even though the fault might lie with the technology, even though to err is indeed very human.

Now, read this quote from James Gosling that I took from the introduction, by Richard Gabriel, to "Successful Lisp" by David Lamkins:
Very dynamic languages like Lisp, TCL, and Smalltalk are often used for prototyping. One of the reasons for their success at this is that they are very robust...Another reason...is that they don't require you to pin down decisions early on. Java has exactly the opposite property, it forces you to make choices explicitly

Contrast it with the following quote from Niall Ross during his keynote speech at Smalltalk Solutions:
... back to language comparison: static-typing is the ultimate up-front optimisation
  • C#, Java, etc.: designed by and for those who expect to be right first time

  • Smalltalk: designed by and for those who don’t

We, Smalltalkers, Lispers, and dynamic language lovers everywhere, embrace the human in all of us and make the machine conform to us not the other way around. We understand that we err and we're not going to get it right upfront. But, Java and the static hounds think that we should blame the programmer for being human. Make the language easy for the computer and not the poor programmer. And right there, I think you have the split between the two camps. One is machine-centric (Java, C, C++, C#, etc) and the other is human-centric (Smalltalk, Lisp, Ruby, Self, Python, Io, Slate, etc). I know which one I pick. Sad thing is that we've had these human-centric languages since 1960 (or was it 1958?).

I can't wait to read the rest of the book!

It Can't Be Done

Lothar Scholz said the following when asked why he didn't write his IDE in all Ruby (from the Ruby mailing list):
A script language is just not powerfull enough for this task (speed,
memory consumption and yes, speed) to do this.

For Ruby specific tasks i run simpler ruby scripts. And some parts are
written in Python but the core must be written in a static typed garbage
collected native compiled and imperative high level language. And
there he number of choices was very low in 2001.

Today i would choose a more cleaner D + Python system.

Ruby was never an option as it does not support native threads.

Now, I like Ruby, but I sometimes wonder with statements like the one above if he has looked at Smalltalk. I know Ruby runs slower than Squeak. But is it really too slow to support an IDE? I don't think so. Smalltalk is a perfect example of writing an IDE entirely in itself and it's been that way for a long time. It was even written on hardware that is not nearly as powerful as we have now. I think the problem is not that it can't be done, but how can you make your abstractions and objects work harder and do less. So, I wonder what the FreeRIDE (which is an all Ruby IDE) folks have to say. FreeRIDE is still rough around the edges, but every release it looks better and better. I would like to mention that Lother's IDE is good as well. Ruby is so close to Smalltalk and I think they would certainly enjoy an IDE that they could change at run-time and enjoy the same freedom that Smalltalkers do. It would certainly make Ruby more fun to program in. And that's a good thing!

Monday, July 25, 2005

Terse Languages

I ran across this post while going through links on planet.lisp. Is this some kind of joke? The reason I ask is the following:
A major goal of this language is to have an incredibly terse syntax. It should be well-nigh unreadable: that is the point. After all, the human brain can adapt to anything, and if it can adapt to this, then the human hands might get a rest from all that typing. ;-)

Ouch. I want to be succinct and expressive. If I can't understand what I wrote yesterday, what good is it? Saving typing should not be the goal. I find I read more than type. The point should always be readable above all else. The striking thing is that I find both the Smalltalk and Lisp communities embrace this idea and put in on an altar. Oh well, I wish the best to this new language. I hope I never have to read it.

Sunday, July 24, 2005

JBoss Developer's Notebook

While I'm on the subject of Sam Griffith, he was kind enough to email me recently to tell me about how he had fulfilled his life-long dream of being published. His book is entitled The JBoss Developer's Notebook. Here's hoping that he sales a million copies. So, if you work in JBoss, you need to run out and buy 10 copies. Sam's a great guy and I'm proud of him for making his dreams come true with his first book. Let's hope he writes a lot more!

Making Money

My friend, Sam Griffith, sent me a great presention on "Making Money with Mac Software". It's a hoot to read and he hits the nail right on the head. It's big on putting down Windows and praising Mac, but at the core, there's a fair amount of great advice. I especially loved the slides on what to do if you wanted to work with him. Classic!

Thursday, July 21, 2005

Birthday

Today was my thirty-fourth birthday. All in all, it was a great day. My wife, Michelle, went way out. She did the whole house in streamers and notes. It was awesome. She got me two Lisp books, "Successful Lisp" and "Practical Lisp", that I had been wanting for the longest time. And would you believe, she even got me an ice cream cake complete with candles with colored flames! Now, how cool is that? We went out later, had a grand ole time at Buster and Douglas, and ate some Thai food. A simple relaxing day is all I wanted and that's what I got. But, I stil think being thirty-four sucks. I am no longer young. Youth is behind and creaky bones are ahead. Joy.

SmallHttpUnit Lives

I just fixed SmallHttpUnit for VW7.3. It's been broken for A LONG TIME. I apologize greatly for that. The source of the problem was the cookie handling. VW7.3 now has it built into the HttpClient framework. So, I just switched my code to the new framework instead of handling it myself. There's still some issues, like the cookies don't make it to the browser even though they are in the request. It's something that I'm going to look at later. It's available in the Cincom Public Repository. If anyone has any issues, please let me know. I promise I will fix them ASAP. For now, the fix will do until I finish Needle (a reworking of SmallHttpUnit). Now, it's on to finishing the initial port of Elephant to Squeak which is proving to be a challenge in itself. But, thankfully, Micheal is a patient person.

Wednesday, July 20, 2005

Ozzfest Rocked

Micheal Ammott and Gus G

The picture is of Micheal Ammott (Carnage, Carcass, Arch Enemy, Spirtual Beggars), Gus G (Firewind, Dream Evil, Nightrage, etc), and yours truly. As you can tell, Ozzfest was a blast. I got to see a lot of bands that I enjoy and it was great day hanging with my bud, Rusty. He shows me an incredible time while I was in the blue state of Connecticut. We saw two blues concerts, a car show, and he even took me to my old stomping grounds. Fun was had by all. All the bands put on incredible shows (especially Iron Maiden, Arch Enemy, Mastodon, and Shadow's Fall). I love seeing Ozzfest on the opening nights (the previous two years it was the first night. This year Hartford was second). The bands are fresh and ready to explode. Now, it's time for me to get back to my port of Elephant to Squeak, my new project Needle, and fixing SmallHttpUnit for VW 7.3. So much to do, so little time. Thank you, Rusty as always. I love you man!

Thursday, July 14, 2005

Ozzfest Cometh

I'm traveling this weekend to Hartford, CT to see Ozzfest. I can't wait. I'm going to be meeting up with dear friends. It should be a super fun weekend. My friend, Rusty, has my time all planned out. I'm ready to laugh till tears. I'm preparing to come back sore and worn out. When I get back, it'll be back to business. I've got a number of projects that I want to complete and I'll hit them hard once I get back. I've been working on some of them, but July has been hectic. But, this weekend is for ROCKING OUT! YEAH! I'm still in shock that I'm going to see the original Black Sabbath line-up for the third time. I thought I would never ever get to see them. Yes, dreams do come true.

Tuesday, July 12, 2005

Dolphin 6 Is Coming

From comp.lang.smalltalk.dolphin comes the news that Dolphin 6 is coming at the end of August. I am so excited! The screenshots and videos all look fantastic. I think Dolphin is a great Smalltalk environment. I would rank it as my favorite. The code is clean and is simply a joy to read. I can't wait to play with the new toys in 6. Happy Summer to me!

Monday, July 11, 2005

Omaha Smalltalk User's Group

Gary Overgard is planning on doing a report/code distribution on Small-Fit that he has been using at work. It provides a lite-weight alternative to the current approach for Fit & Fitnesse. Its advantage is that it is much easier to debug, but
still gives advantage of documentation.

As always bring your passion, code snippets, and books to discuss!

Here's all of the details:

When: July 19, 2005, 7pm - 9pm
Where: Offices of Northern Natural Gas
1111 S 103rd Street
Omaha Nebraska 68154

Office is at 103rd & Pacific. Guests can park in the Northern visitors parking area back of building, or across the street at the mall. Enter in front door, we'll greet you at the door at 7:00pm. If you arrive a bit later, just tell the guard at the reception desk you're here for the Smalltalk user meeting in the 1st floor training room.

Sunday, July 10, 2005

HP Sucks

Apparently, I am not the only person who is having problems with their HP products. I wonder if they'll ever figure out that once you make a customer angry, it takes a long time to get them back if ever. Hell, we might even blog about our experiences with crappy customer support. =)

Eclipse And Scheme

I just came across this project, Scheme Script. It basically is Scheme running on top of java. It's main strength is that it integrates well with the Eclipse environment. It allows you to inspect the running system and sits on top of the Eclipse frameworks. What a great idea. I think using something like Allen Davis'
Smalltalk In Java project would be an excellent way to do the same thing for Smalltalk. It would be fun to do. Plus, it would be great for adding tools and additions to Eclipse easily. My list of want-to-do projects just keeps growing and growing. Darn it! Too many cool things to do and not enough time!

iShuffle Operational!

I got my iShuffle, that I won at Smalltalk Solutions, up and running. I was annoyed when I installed the software for it. It installs iTunes and Quicktime (WHY?!). The iShuffle is nothing more than a memory stick, but requires iTunes to transfer music files. Now, my iRiver is setup the same way except I can use ANY software to transfer my music. iTunes was removing the iShuffle as a drive when it started (and it started everytime the iShuffle was plugged in). And why is QuickTime required to run iTunes?! The mind boggles. I played with iTunes for a little while and I just didn't like it. I'm very happy with Media Monkey and MP3 Gain for all of my ripping needs. I hated how iTunes rearranged my music files after I told it not to during setup. The view of songs as a list without hierarchy was also annoying. I have over 40 gigs of music files and to see it one list is like drinking water from a fire hose.

What's a programmer to do? Search the internet of course! A Google search shows that I am not alone. In fact, Martin Fiedler wrote a great tool in Python that allows you to write the necessary database files for the iShuffle to recognize any files you transfer to it. The code was so easy to understand that I rewrote it in Dolphin in an afternoon and added it to my mp3 management software. I was able to uninstall iTunes and QuickTime. I'm a happy boy and a proud owner of an iShuffle now.

The moral of the story is the internet is a powerful place. If you write proprietary messes, someone will figure how to get around it and publish it. iTunes on Windows would have been great if it had not tortured me so bad upon setup. I also hated all of the advertisements for iStore and other Apple products. RealAudio pulled the same stuff with their audio player years ago and I never have a desire to install that virus ever again. If Microsoft pulled the samething, you would have a million blogs on it and everyone up in arms. Why is Apple different? From my eyes, they are more proprietary than MS and they even have a strangle hold on their hardware as well. With that being said, I still want a Mac just to experience what everyone else raves about (Plying with Self wouldn't be all bad either). But, I'm not happy with Apple on my MS PC.

Saturday, July 09, 2005

Source code in files - how quaint

One aspect of Smalltalk that I love is the way source code is presented. I'm not shown a huge file, but a short concise method. It's source code in bite-size chunks. Contrast this with other environments and you have quite the opposite. Now, Eclipse does allow you to see source code at the method level, but it is not the normal mode of operation for java developers (in fact, most hate it or don't know you can do it).

It amazes me that so many developers still embrace editing huge text files. They find what they need with such generic, clunky tools as grep and vi. Smalltalk stores my code in objects, thus allowing me a richer set of search and edit capabilities. I have a meta-model that I can use to walk my code objects. It allows me a freedom of expression that files can not simply even compare. Files are a generic medium to which I can store anything, but do I want to directly manipulate my code with it? If you really think about it, Smalltalk's code objects are nothing more than a DSL for development. And while non-smalltalk developers are finally seeing the benefit of DSLs in business software, why not take their own medicine? Why wouldn't you want to deal with your source code on a higher level? Is it familiarity with their old ways and unwillinglyness to change?

With that being said, I love to research different languages and the thoughts that go into the design of them. It's rare (ok, almost NEVER) for a language to come with an interactive development environment that allows me to search and manipulate the source as objects. The scripting languages give me an interactive environment, but getting hold of the source of a running system is only available via files. YUCK. I learned this the hard way when trying to add unit test comments to Ruby. I thought all I had to do was to walk the classes of my objects and ask the methods for their source. Nope, I had to invoke a parser to get that information. Well, that's fine and dandy, but Ruby is dynamic and methods can change at run-time. The code in the file could be different than what is actually running. Contrast this to Smalltalk where I can even ask an arbitrary block what its source is! Of course, I hear the Lispers snickering in the back because their data is the source. But, emacs is still the status quo in lisp circles. Please.

Why all of this talk about source code in Smalltalk? Well, not having source in files, allows one to play around with how to display the source. If you have an object model around your code, you can choose alternatives of display. Squeak has a plethora of browsers (OmniBrowser, StarBrowser, and Whisker just to name a few) and VisualAge has the excellent TrailBlazer. Each one is different and shows the code in different ways, but none of them had to have a parser to do them because they are simply walking an object model! This makes common operations such as saving, refactoring, creation, and inspection to be handled uniformly. Now, you can do the same types of things from a file-based system, but it's much harder. All of the cutting-edge code browsers, that I have seen, have come from the Smalltalk community (I haven't played with Self yet). I think the reason is because of the ease of playing with a DSL for code than the generic low-level. It also allows us to write extensions more quickly if our tools do not support what we want. And the greatest benefit is to present the code in different ways. Powerful.

So, the next time you hear a Smalltalker fussing about source code in files, now you know why. By the way, the quote in the title above is from Kent Beck and is quite famous in Smalltalk circles. OK, I'll jump off my Smalltalk bandwagon today.

Friday, July 08, 2005

Domain Specific Languages Parade

DSLs are all the rage recently with Martin Fowler and a whole bunch of folks blogging about them. It seems the Lispers are a little annoyed about the noise and rightfully so. They have proclaimed the virtues of DSLs for many years. In fact, Paul Graham's essays are littered with references to how DSLs solved his business problems. Smalltalkers have also long talked about the virtue of DSLs. So, why all of the rage? I think a lot of dynamic language ideas are finally seeing the light of day via the scripting crowd.

It's a good thing since I believe DSLs are a by-product of good design. You have a DSL when you speak in the terms of the domain in your code. This might seem obvious, but I see procedural-like code that stays at the level of the general-purpose language too much. I know I have magic in my designs when a business user can read my code and understand it. It's the goal that Eric Evans talks about in his excellent, "Domain Driven Design" book. He speaks of a ubitiquous language that is shared by business and technical folks on the project.

The good thing about the current parade is the number of good ideas that adds to my arsenal to attack a problem. Rainer Joswig had an excellent blog entry discussing how Lispers go about doing a DSL for RFC specifications. Where I would break down the problem in objects and messages, the Lispers take a different strategy with macros to achieve the same result. I would love to work on a Lisp project just to get into their minds.

Everytime an old idea comes back, there are some new twists. I find the current reprise of metadata usage in DSLs interesting. Again, metadata is nothing new, but the approach seems to be new to developers in the static camp. The model driven approach takes this route as well. But, MDA seems too much like CASE tools part two. Martin Fowler's article does an excellent job of showing the pros and cons of the DSL approach and its different paths.

I've been thinking about language issues since I had my talk with Colin and Eric. Both of them, gave me a plethora of thoughts to chew on. Making DSLs easier for developers seemed to be the meat of the discussion. How do we make it better? Can we make general purpose languages that are more tuned to DSLs? Much like we make the separation between virtual machine and our code. The boundary is distinct. I think a mixture of metadata and DSL facilities built-in to a language would be a win. It would be nice to express the domain in terms of a DSL and then use metadata to wire persistence, GUIs, and rules. In other words, the low-level programmer details would be handled at a metadata level (think Glorp and rule engines), but the domain expressed in terms of the business and only the business. Any dynamic language can provide this functionality easily, but is there anything we can do to make it even more transparent? I want to play more with prototypes ala Self because I think there is a richness to explore. DSLs feel like they would be easier in Self especially with dynamic delegation and traits. I believe that we should treat languages like organisms. We are all comprised of cells which are comprised of other parts and so forth. I think programs can be built the same way. You have a simple core in which higher level blocks are comprised of and then, bigger blocks are built out of those. When you get to the top, you see a complete being. It's a recursive russian doll basically. Each level would be higher DSL. Thus, the top level would be the business domain language. Think of it in terms of the virtual machine code. Do you ever see it or care when you are at the top level? No. You build your system out of the language on top. Same concept, but we need to take it to higher levels. This is a huge subject. I plan on blogging more in the future about this subject. I want to take Smalltalk to the next level. I'm tired of solving the same problems.

Monday, July 04, 2005

Ouch

With all of the commotion, I missed the Ruby User's Group meeting. Darn it! I'll be there next month and I can't wait to see everyone there! Again, sorry!

Back In Civilization

I got back from camping trip today and it was mad fun! It was a turn of events from totally geeking out one minute to being in the middle of nowhere. It was strong contrast, but a relaxing one. I enjoyed being outside and letting my mind wonder. I had a lot to chew on from all of the discussions that I had with everyone. Now, I can't wait to start putting those ideas to work. I have my rallying call and I'm ready to kick some programming booty! Smalltalk on!

Thursday, June 30, 2005

No More Caffeine For Me

I went on a search today after Eliot Miranda told a hilarious story about the goverment giving various drugs to spiders and observing the results. I found several pictures of the webs and it was shocked. The LSD web is the most articulate while the caffeine web is a mess. The study sounded funny, but I must admit that the results are revealing. I know I don't want to ingest anymore caffeine now. And it gives me excuse for the coding competition: I was drinking too much coffee. Yeah, yeah, yeah, that's the ticket.

Back Home

I made it back home today all in one piece of mind from Smalltalk Solutions. This was the first one that I have attended and it will not be my last. It was great meeting all of the people that I admire. It was sad to come back home because I will miss the late night conversations and the dreams of future that could be. I'm more invigorated to get my act together. I want to present something cool next year no matter what. I'm thinking HttpUnit, with some of the extensions that I discussed with Colin Putney and David Schaefer, might be it. But, I have other ideas that I've had and one is from my ill-fated uce case management tool. All I can say is Niall Ross' speech was a call to arms for me. I've even batted around the idea of doing a practical Smalltalk book much like Peter Siebel's Lisp one. I don't know yet, we'll see how everything works out. But, we need to get the word out. I'll also be colloborating with a few new people and that should be exciting. Being at STS also made me want to participate in the community more so that I could get more accomplished at my time there. So, everyone in the IRC, #smalltalk channel watch out! This was just my introduction. I'm ready to blow the roof off the mother! Again, I had a blast with everyone I talked to and I truly appreciate the time that you gave me. I know I took in a sizeable amount of information to parse. You all rock and I love the Smalltalk community. YAKS UNITE!

Wednesday, June 29, 2005

3rd Best

I got 3rd place in the coding competition and it was an embarassing 3rd place. The reason for my embarassment was because my program never ran. It was steeping in bugs! The problem with just 4 hours is that I didn't have enough time to debug everything. Oh well, I just wish the program would have ran and lost fair and square. I figured my algorithm would have lost anyway after watching Kevin's and Micheal's excellent programs run. It was an honor to compete with such great programmers. And being in the top 3 isn't a bad place to be. I entered to get to Smalltalk Solutions and well, it's been everything that I imagined. I've made a ton of new friends and I have a plethora of new ideas running around in my head. Expect a lot of blogs entries once I complete the thoughts. I'm running on spare batteries right now and I can't wait to get home. Yet, a piece of me doesn't want to leave.

Young Ass Kicking Smalltalkers

It's 2am and it fits my attitude. We are the future knights! Who's with me? Let's take it to the next level! ROCK! Seriously, I had a great day at Smalltalk Solutions. Not one bad conversation and I think I wore everyone out talking technical stuff. My mind seriously hurts. Lots of food for thought and mad fun! I would like to thank everyone for putting up with me. I can't express how much joy the talks, discussions, and debates have meant. It's been unbelievable for me to meet so many that I respect and admire. I've made a lot of friendships while here and I'm going to be sad when it ends tomorrow. Well, maybe not if I win the coding contest...But, Micheal might have something to say about that...=)

Monday, June 27, 2005

Compiling Away Does Not Understand

I was talking to Micheal Lucas-Smith, while we were at the Magic Kingdom, and I were talking about our designs in the contest. I mentioned that my study of prototypical languages had warped my design. He asked how that was and I told him that my survey response objects forwarded their calls to their corresponding questions if they didn't understand them. For example, a message send of #name to the response would forward the call to its question object. These messages have the form:
    name
    ^self question name

Now, I'm a lazy developer. I didn't want to write these messages everytime I add some new messages to question that I want my response to asnwer. So, what do I do? I could implement #doesNotUnderstand so that it forwards the message, but I didn't want to do that because:
  1. It's hard to debug

  2. It's S-S-L-L-O-O-W-W

  3. Confusing

So, what do you do? Well, in Smalltalk, I can have the #doesNotUnderstand: message basically compile a new method for me because it's always of the form listed above. This gives me the performance and it's easy to debug. If you put these special methods in their own category then you can easily track them. Tracking them is good to catch subtle forwarding bugs. Here's what the #doesNotUnderstand: message looks like:
    doesNotUnderstand: aMessage
    (self definition respondsTo: aMessage selector)
    ifTrue:
    [self compile: aMessage selector forwarder: #definition.
    ^aMessage sendTo: self].
    ^super doesNotUnderstand: aMessage

And here's what the compile code looks like:
    compile: selector forwarder: forwarderSelector
    | messageStream header |
    messageStream := String new writeStream.
    header := (self perform: forwarderSelector) class methodHeaderFor: selector.
    messageStream
    nextPutAll: header;
    cr; tab;
    nextPutAll: '^self ';
    nextPutAll: forwarderSelector;
    nextPut: Character space;
    nextPutAll: header.
    self class compile: messageStream contents classified: self class autoGeneratedCategory

And that's it! This allows me to have a form of delegation by forwarding messages to certain objects. Other objects now do not have to grab an object just to perform actions on it. This makes your objects more shy which is a good thing. Micheal liked the idea and asked me why I had not blogged about it. I told him I didn't think much about it. It's just so simple. He told me that I should blog about it. Well, here it is...=)

Coding Competition

The finals for the Smalltalk coding competition were held yesterday. First off, it was mad fun. Alan Knight came up with a really hard problem that seemed simple. It was a bar game involving change (pennies, nickles, etc). What we had to do was write code to connect to a game server playing this game and interact with it. You can guess that the next objective was to create a computer player. No problem right? Nope, I ran out of time! I'm not even sure my player is going to work! If it does, he will be an utter and complete idiot. Four hours is not a lot of time and I wasted a good bit of time on the server code. The reason for that is because the inner coder in me likes writing understandable code and four hours is not enough for understandable code. The time constraints force you to know your tool and not to teeter on any one solution. Just pick one and GO! I simply lost track of time which is a major no-no in coding competitions. But, I'm not disappointed in my dismal performance. I got a chance to chat with Micheal Lucas-Smith yesterday at Disney World and it was great meeting Kevin Badinger at the competition. Great Smalltalkers period. If I have to lose, I know it will be because my opponents' code fu was stronger. We will be placing the players in competition with one another on Wednesday to determine the winner. I don't have high hopes. I'll be over joyed if mine works! Finally, I would like to thank everyone involved in the competition. I had a lot of fun. I can not express that enough. I'm so thankful for the opportunity.

Sunday, June 26, 2005

Embarassed

I haven't looked at my contest submission until today. I was playing with the application and ran into an error! I couldn't believe my eyes! I thought I had tested it thoroughly! But, nope, there was the BlockContext>>doesNotUnderstand: #asMIMEDocument staring at me. How could I be so dumb? Well, the fix was trivial. I had my presentation loaded up when I coded the contest and I had this little ditty:
BlockContext>>asMIMEDocument
    ^self value asMIMEDocument

It allows me to use a block as a MIMEDocument so if my document renders itself immediately, I can delay it. I mistakeningly thought it was part of Seaside and not my own code! DOH! Anyway, the fix was easy. The documents are use for it render themselves on the fly and don't need to be wrapped in a block.

But, still this is an important lesson. AUTOMATE YOUR GUI TESTS! So, I'm going to do the two-pronged approach. Port the HttpUnitTest framework to Squeak and use it! Also, I need to download David Schaefer's excellent Seaside testing framework. Both would be a nice one-two punch. Well, I'm off to breakfast and a day of thrill rides.

Saturday, June 25, 2005

Made It

I'm here at Smalltalk Solutions. Tomorrow we're going off to the theme parks. It'll be great to chat with everyone. Travel was alright. The only problems were getting to the hotel and a slight mechanical problem with the plane. So, nothing to sweat over. Laptop is doing great and let's hope it survives through tomorrow night's competition!

Sunday, June 19, 2005

Laptop Woos

The saga continues...It seems HP DID NOT FIX MY DEFECTIVE HARD DRIVE. Sorry, for yelling, but I've been through hell with their tech support. So, what am I to do? I went down to Best Buy tonight and they will install a new hard drive in the same day. I'm not going back to HP tech support ever again. In fact, I'm so mad at that company right now that it will take a few years to get my business back if ever. In all honesty, there is not much that they can do to get this customer back. I'm never buying the stupid tax called extended warranty ever again as well. I'll just leave some money in the bank for that purpose. Hopefully, the saga will be over by tomorrow night since Best Buy said that they could have it done in one day. Let's see if they can actually hold up to their promises. And all of this before Smalltalk Solutions! I should thank my lucky stars that it failed again today while Squeaking and not Orlando.

Excited about Smalltalk Solutions

I haven't been blogging much lately. Lots of stuff has been going on, but I thought I'd mention how excited I am about going to Smalltalk Solutions this year. I can't wait to meet my peers in the competition. I'm hoping to make some new friends! And we all can do with more of those right? I'm also excited at the list of presenters. It would be cool to spend an evening picking the brains of some of these guys. I just finished Eric Evans' book, "Domain-Driven Design" and it was a great read. And of course, Niall Ross will be cool to increase my meta-fu! And the list goes on and on! It will be nice to meet up with old friends and find new ones. Also, I hope there's a lot of action at Camp Smalltalk! So, everyone look out! I'm bringing the energy...=) Email me if you want to get together! SMALLTALK ON!

Tuesday, June 14, 2005

Omaha Smalltalk User's Group

OK, this month's meeting is real special. We're teaming up with the SPIN group to present a really cool presentation! Here's the details:

This month we have a real treat. Mike Cohn, a Denver Scrum expert,

will introduce us to Agile Estimating and Planning.



We'll look at why traditional planning fails,

how to overcome those problems  with a story-driven process,

how to estimate and plan with stories,  

and why agile planning works.



We'll round out the evening with an interactive estimating


exercise over pizza that will give you

specific techniques to apply in your own work.



About Mike Cohn. Mike founded Mountain Goat Software{1} in 1993 to

help organizations apply agile development methods to difficult

software problems.

Mike is certified in Scrum{2} and author of User Stories Applied

and the forthcoming Agile Estimating and Planning (Fall, 2005)



Venue:


7pm next Tuesday June 21 2005,

Northern Natural

Gas, 1111 S 103rd Street, Omaha,

Room 149



Join us! If you plan to attend, visit www.omahaspin.org and register.



{1} www.mountaingoatsoftware.com


{2} www.controlchaos.com

A special thanks to Alan Wostenberg for setting this up!

Saturday, June 11, 2005

Laptop's Back

I got my laptop back yesterday and it's almost back to operational status. I'm glad it's back fixed. But, I must admit the whole experience with HP support has left me cold. They almost refused to service my laptop because of a scratch on the outer shell and the hard drive had gone bad which was the real problem. I spent extra money on their three year three day fast fix warranty and they had the laptop for over two weeks. It took several phone calls before they agreed that they were being silly and they just needed to replace the bad hard drive. Grrrrr...So, the laptop comes back and they note they haven't fixed anything, BUT THEY HAD. It's enough to make you go to the funny farm. I can't believe how poorly I was treated. I'm a pretty tolerant person. And, to me an extended warranty is insurance for anything going wrong through normal wear and tear. I baby my laptop and was shocked how quickly they wanted to snake out of their obligations. I'm simply glad I got my laptop back in one piece and fixed. I spent nearly 8 hours on the phone over the course of the ordeal. So, what did I learn? Think twice before I buy anything from HP again and never buy another extended warranty. Trust me you are throwing your money away. What's the point of insurance if the company doesn't honor their end of the agreement? It just means you're giving them more money and getting nothing in return. Alright, time to SMALLTALK and create some love in this world!

Monday, June 06, 2005

Missing my Laptop

I've been without my laptop for the best part of a week now and I'm starting to miss it. I've set up linux on one of my old machines in the meantime. So, it's not all bad and I've been catching up on a lot of reading in the meantime. I plan on blogging on my ordeal with HP once everything is done. Somne of it was really silly. But, it's getting fixed now (the hard drive went out) and I should have it before the weekend. This is after several phone calls and almost in tears. Besides, I'm anxious to start playing around with prototype languages since I think I now understand it more now than I did before. I thought I might implement one in LISP just for fun. Who knows? Let's hope my laptop comes soon!

Sunday, June 05, 2005

Prototype Eureka

I've been reading a ton of articles on prototype-based programming. I even bought Prototype-Based Programming: Concepts, Languages and Applications which is an excellent introduction to the subject. So, I was thinking prototypes are a great idea, but I had some reservations since I have been so long in the class-based camp and prototypes are radical. I had basic questions of like how do I organize my programs now? Well, I found "Organizing Programs Without Classes". What an amazing read. It answered all of my questions and gave me my first "Eureka!" moment in prototype-based programming. It all feels so liberating! I can't wait to get my laptop back and continuing my studies of Self and Io!

Omaha Ruby User's Group

It's time to hold the second meeting of the Omaha Ruby User's Group. This meeting is just a simple get together like the last one. The only planned topic is to be bring your favorite pieces of Ruby code or your curiousity. Hope to see a lot of people there! Make sure you sign up on the mailing list. Here's the information of the when and where:

    When:June 6, 2005
    Where:Panera @ Eagle Run Shopping Center
    13410 West Maple Road
    Omaha, NE 68164