Saturday, April 30, 2005

4th day

Channel 77 - still win95 blue screen of death.


I can't help feeling that everything works by accident.

Distinctions and ifTrue:/ifFalse:

It is said that the purpose of proper coding should be the elimination of all sends of ifTrue:/ifFalse:. Besides the exaggeration, there's a lot of truth to this.

First of all, a decent lack of ifTrue:/ifFalse: means that most message sends are meaningful in the context of the receiver.

Stop here and consider: why would you want to send a message that is not meaningful in the context of the receiver? Why would it be necessary for senders to first check if the message makes sense or something like that? More profoundly:

Why are you, the developer, adding foreign ifTrue:/ifFalse: to message chains that should make sense to themselves? Maybe because the code isn't that great?

From a more practical point of view, let's say you eliminate ifTrue:/ifFalse: because you add a subclass that redefines some behavior so the message send always makes sense.

You just optimized the code.

Because now, the VM is taking advantage of all its extraordinary power to extract performance out of thin air. There is no ifTrue:/ifFalse:, the message send becomes polymorphic, and polymorphic inline caches are in your VM exactly for the purpose of making these sends to go really fast.

In short, you eliminated the check that comes before ifTrue:/ifFalse:, you also got rid of ifTrue:/ifFalse:, and you replaced that with a polymorphic inline cache in a VM that could be doing JIT stuff.

There's no way to beat that kind of performance boost. Plus it gives you the ability to give the new class an intention revealing name.

Remember, distinctions are the consequence of intention. Different intentions lead to different distinctions. Remember McGyver? Your intentions were different than his, so you distinguished things different.

Sometimes it doesn't work that well though. For instance, Integer>>isPrime is a total pain. Imagine the mess the PrimeInteger class would create.

Before I wrote this, I couldn't put my finger on exactly why this was. I thought it was because it was a distinction that was not cost effective for the developer to make.

Now I think I see it much better. It's because in general terms it's not a distinction you can make before messages are sent.

Think of the implications of accepting that messaging can distinguish... just like we do...

Friday, April 29, 2005

*STILL* Going and Going

Channel 77 is still displaying that win95 crash! I don't know what to say anymore. This is so messed up... it's beyond.

Thursday, April 28, 2005

It Still Keeps Going and Going...

So I come back from work, turn on the TV... and channel 77 is still displaying the win95 crash just like yesterday.

This is so messed up I feel ashamed I am paying the cable bill.

Wednesday, April 27, 2005

Keeps going and going...

Not a long time ago I went to Chicago's planetarium, and it crashed. I saw several Windows XP error dialogs, how the BIOS counted RAM, and how the box rebooted --- all on the dome. Lovely.

So today I was zapping through TV before going to bed and... I found a channel with a win95 blue screen of death!!!

It has been like this for about 30 minutes already. It looks like someone must update some antivirus, or Windows completely. Directly from Optimum Cable's channel 77:


Invalid VxD dynamic link call from VSHIELD(01) + 00007732 to device '3FA1', service 8016.

Your Windows configuration is invalid. Run the Windows Setup program again to correct this problem.

To continue running Windows press Y or ENTER. To quit the current program press N. If you continue running Windows, your system may become unstable. Do you want to continue?

Press Y for Yes or N for No: Y

... did I mention the British Navy wants to use Windows on its warships, including their nuclear reactors and weapons?...

Feature request

Ever since it is possible to take music with you, I've desired a feature equivalent to that of LP turntable strobos.

The tempo adjustment plugin is such a basic feature of Winamp and other decent media players that I find it hard to believe that I still don't have a strobo-capable cd player in my car, or that I still have not heard about a strobo-capable iPod. How I would enjoy making music slower or faster depending on my mood!

For example, Winamp is now set at -12%. Not only it matches my mood right now, but listening to songs like that makes evident the little details that get lost easily. Then, when you play the song at normal speed again, it's much more enjoyable because you know it more.

Some songs go so fast that they still make sense at half the speed, -50%. If the music is good, it can be quite an enjoyable trip of discovery into the world of details.

Try it out! And if at first it feels strange, that's fine. Keep listening. Do it with a song you think is too fast first, and move that slider to -15%. Good stuff.

Sunday, April 24, 2005


I got word that maybe .rar files aren't that common after all. But seriously, rar compresses better, has better features, and supports zip and a ton of other formats!

Now go and get it:

Saturday, April 23, 2005

Reference finder & Laws of Form

So I had written this lovely reference finder by implementing a stream that would traverse the object tree according to whatever criteria, at each step recording its position by means of ReferencePathItems, which could in turn examine an object and tell how many ivars/indexed fields it had, etc.

From that, the reference finder produced a series of "positions" of the stream by means of collecting the current path of reference path items. From that you can collect an array of the objects being streamed over, and that's your reference path.

Since I had implemented Form and Distinction, what I did was to take the path and make a form with distinctions in it representing the path. Thus that beautiful inject:into: piece of code I talked about before.

But when I built a UI on top of it, I realized I did not like something. Forms are basically a set of named things, like a dictionary of names to named objects.

Use the Universal Hint, Luke: never confuse the label with the labeled object.

Exactly, so it's like a dictionary that I chose to implement as a set of associations... I mean distinctions. Each distinction knows its contents (another form with distinctions), and its form (the form where the distinction lives).

Note also that distinctions carry the names, and since we give meaning by using names, then it seems most useful to traverse the distinction graph by holding onto distinctions. Thus, forms seem to have almost no useful purpose to the outside user of forms/distinctions. Then came the question: should I get rid of them?

Then I considered the fantastic messages I had implemented in Form, such as cross: aName. I felt I wasn't grasping something, because crossing a distinction takes you from a form into another one. So why would I want to ditch forms?

I thought maybe it was a problem of traversal. I wanted to hold on to distinctions because the linkage between forms is stored in them. So I thought that I had to implement a stream to traverse the form and my problems would be gone. No more wondering what was the parent of such, etc... so I'd be able to name things and get objects back without worrying what the structure of the form is. Then it hit me.

That's exactly what I did with the reference finder.

Holy cow. This form/distinction stuff is powerful. I mean obviously an object is a distinction and its ivars live in the contents of the distinction etc... but to see how it pervasively takes over is amazing.

So... now that I wasn't happy with the reference finder for other reasons (such as it was remembering having found integers along the way), I find myself in the position of using forms/distinctions to implement a reference finder the results of which I will display on the screen using forms/distinctions in exactly the same way they were used to find references to begin with.


Friday, April 22, 2005



After 45 minutes of Google and diving through improbable ftp search engines (which mostly don't work anymore), tons of dead sites, the bookmarks of a friend of the composer, etc... I found this lovely website with some cherry picked songs...

... among which was Drivin' east with large gray automobile! Darned translation problems in Finnish/Japanese websites! It wasn't driving south, it was driving east!

Well here it is. If you enjoy electronica and watch demos just because they are beautiful, then enjoy this very hard to come by file. Of course, you will also need a mod player - here's the best there is for Windows.

Ah, the sound formats of not so long ago. The player, already rather small, is larger than the song!

Thursday, April 21, 2005


Where am I going to get a copy of the song "Driving South With Large Gray Automobile" from the demo "Rebel? (as perceived)", composed by Juka Kaartinen a.k.a. Jugi/Complex?

All I know, from some unreadable websites, is that at one point in time the song was available as an xm music file. The (broken) links I found called it, and even mention it was 279kb.

This fabulous song of 14 channels in XM format - gone.

It's so irritating to be able to give the name of the object and at the same time to be unable to send it any message!

Wednesday, April 20, 2005

Dolphin's Ideaspaces

One thought: Smalltalk meets tabbed browsing!

I think more clutter can be removed by crossing this with Star Browser.

Monday, April 18, 2005

Distinctions work!

Remember Laws of Form? I just made my reference finder open a UI of reference paths to an object by showing a form full of distinctions in a tree list.

I'm so happy! The code is so beautiful!

Now I need to polish it up before I release it. Stay tuned!

No more lollypop, kiddo

Is it me, or some news people are getting antsy about blogs taking customers away from them?...

And what is wrong with that? You can be a journalist in your own terms because free expression does not require a licence. So if anybody's crowd is diminishing... well... the magic hand of the market has acted again.

There you go, have a nice day :).

Sunday, April 17, 2005

Those Few Good Movies

I recently wrote that in the same way that one should study only the best authors, one should only enjoy the best artists.

It seems to me that really good actors are connected somehow to theater performance. One of them was Peter Sellers. What a fabulous actor. I just finished watching one of his movies, The Party. Most of the people in the movie look like starched shirts in comparison to Peter. His gestures, his movements, the details... everything.

I also caught a documentary on Charles Chaplin the other day. And after some background on Charles, it is evident that he was an extraordinary artist. One clip that I remember very well is when he takes a couple forks, sticks them in two pieces of bread, and makes these "feet with legs" dance.

Some modern actors commented on how hard it was to mimick this dance because its power wasn't just in the movements of the "feet with legs", but in Charlie's body language: his facial expressions, his rolling of his shoulders... in his perfectionism, it must have taken him considerable time to master that seemingly simple act. Signs of a true artist.

Charles also founded his own label. He called it United Artists. This is something modern artists should also consider doing, because we are definitely living in Modern Times.

By the way... reading the end credits, I learned that The Party was released in 1968 through Chaplin's label.

Now go watch Being There.

Thursday, April 14, 2005

Everybody talks, nobody listens

Take a look at this. Somehow, I feel that we're too deep in this pool of "whatever sounds right must therefore be right".

I can't help concluding that while some people do it for fun, there are interests which require the service of professionals. What's amazing to me is how willingly we tend to believe.

Gartner, anyone?

Saturday, April 09, 2005

Artists, schmartists

So here I am having such a great time updating my contact info in all these lovely websites... and since I feel like writing in my blog after such a long time, I would like to comment on the following.

There are so many musicians that "sing" well, or "play" whatever instrument well... but to find a real artist? Now that's tough!

Celia Cruz, for instance, often exhibited singing technique deficiencies. And it did not matter one bit, because she communicated so extraordinarily well with the audience!

Or how about Satchmo? That trumpet was misplayed and sounded off key quite frequently. His gravely voice was often off key as well. But how could you question Louis Armstrong's superb quality as an artist?

I had the opportunity to see actress Norma Aleandro on stage, interpreting Maria Callas in the play Master Class. Let me tell you... only very few movies can claim to have such good acting. Have you watched Norma in this movie yet?

And what about Maria Callas? Why was she famous to begin with? Maria did not have good singing technique by any measure. But she launched a revolution in opera because she actually played the part!

I was taught to study by reading only the best authors. The same thing applies to art. Good artists don't just sing in key or repeat the script aloud. They must communicate well with the audience. Only very few people can do this, and these are the only ones you should enjoy.

So many changes

Change is good. And I have been experiencing a lot of it...

I got a new job. The position is very challenging, but I like it like that. I am doing very well.

I moved to the New York area. I have a new commute in which I do not drive. I have a new apartment and lots of neighborhoods to learn.

It sounds so simple to do, and it's so misleading. As a hint I'll share that I had no choice other than to move from the hotel into my new apartment on a Saturday. I rented the truck, loaded it from the storage room, then unloaded it on the building's hall, then moved everything again to the apartment itself, then returned the truck, then went back to the hotel to pick up the car and drove home.

That's a lot of work already! But that Saturday threw horrendous rain, snow, hail and 60 mph cold gusts at me. Imagine the refrigerator load/unload adventures on the wet slippery truck ramp...

Anyway, now I can laugh at the whole thing :). I'll be back at writing more frequently now.