Thursday, December 31, 2009

Assessments 1.26

I just published Assessments 1.26. This version amends the lazy prerequisite policy to stop prerequisites after the assessment evaluation is complete. Enjoy!

Thursday, December 10, 2009

Smalltalks 2009 videos

Here are some videos from Smalltalks 2009. First, here's the opening video with photos and wonderful moments from Smalltalks 2007 and 2008. One of the things I really like about the video is the clip that shows Dan Ingalls saying he'd like to, one day, go south and taste Argentine beer :). Well, there you go, that happened in 2009! There's also Hernan Wilkinson's slide entitled "how everything started" ("como empezo todo"), which has a chat Hernan and I had back in September 2007. Such good memories...

Also, we're beginning to post footage of the conference at FAST's website. Moreover, most of the slides are available as well in the talks section. Enjoy!

Friday, November 27, 2009

Smalltalks 2009 photos

I am currently uploading a set of 450 Smalltalks 2009 photos to Picasa. It's going to take a while to perform the upload, they should all be there in a few hours (it's 1pm PST right now).

Update: ~3 hours later, all photos are there. Enjoy!

Wednesday, November 25, 2009

Smalltalks 2009 photos by Emilio Oca

Here are Emilio Oca's photos from Smalltalks 2009 :).

Smalltalks 2009 photos by Alexandre Bergel

Here's a set of Smalltalks 2009 photos by Alexandre Bergel. Fun times!

Tuesday, November 24, 2009

Smalltalks 2009 photos by German Arduino

Here are some photos taken by German Arduino. Also, I'd like to mention that German's company, Arduino Software, sponsored Smalltalks 2009. Thank you so much!

Smalltalks 2009 --- Sunday Tigre trip video

James Foster took a cool video during our Sunday trip to Tigre. Enjoy!

Sunday, November 22, 2009

Smalltalks 2009 photos by Alejandro Weil

Here are two (one + one) more sets of Smalltalks 2009 photos by Alejandro Weil. Enjoy!

Saturday, November 21, 2009

Smalltalks 2009 --- Saturday summary

Smalltalks 2009 ended earlier today. We started Saturday with Andrés Fortier's talk on his OpenGL work, which besides having a concise summary of key OpenGL concepts (the fact that it's a state machine, error handling, and the abstractions provided by the library) also had interesting notes about performance optimizations both from the image and OpenGL's points of view. Then it was Travis Griggs' turn to speak about the Cairo and Pango libraries, and the steps he's been taking towards offering richer graphics for Cincom Smalltalk.

After the break, we saw Juan Vuletich's work on Cuis (he showed applications designed to run on 100mhz set top boxes) and Morphic 3 (resolution independent graphics, proper subpixel rendering and antialiasing). Then, Dan Ingalls shared some of his interests and offered a Q&A session. It's noteworthy to see that Smalltalk was so influenced by Dan's insistence on responsiveness (or, as he puts it, it being "lively") and on having fun. I think it's really valuable to hear that from the original sources, and I am happy Dan shared that with the Argentine Smalltalk community at Smalltalks 2009. Finally, Hernán Wilkinson did the closing ceremony, with an invitation to Smalltalks 2010. I did the now traditional honors of producing yet another program for the prize drawings*. Congratulations to all of you that won (including, by chance, Dan Ingalls)!

It's been a wonderful conference this year, and I really like that our FAST foundation goals are becoming a reality. In particular, it is clear that the integration of the Argentine and international Smalltalk communities is well under way. More of the same in 2010, please!

* Perhaps the operation of the drawing program wasn't clear at the time. It's not always easy to convey what we mean when we do it impromptu, sleep deprived and thinking of lunch. I thought I'd explain how it worked here, in a more relaxed environment. When the lottery program came up, it read the list of registered people from disk and shuffled it. So, by the time the names showed up on the screen, they had already been randomized and thus it was just a matter of seeing who was in the room. If you didn't see your name, it's not that you were not in the list --- you were just unlucky to have come at the end of the randomized registrant sequence. But rest assured, I did make sure the drawings were fair and accurate. First, I used a 7.6 VisualWorks image with the lagged Fibonacci random number generator I implemented. This type of generator is described by Knuth as basically the best source of random number sequences known. Moreover, the particular implementation in VisualWorks passes Knuth's own chi square tests. I know because I wrote the tests myself. Finally, just in case, I ran several thousand test drawings earlier this week to make sure the winners had equal chances of winning. Unsurprisingly, the winners were well distributed.

Friday, November 20, 2009

Smalltalks 2009 --- Friday summary

Soooo... I just got back from the social event. At 3am :). I'll try a quick summary. First, I should point out that I have been taking pictures, but I have not had a chance to put them online yet. Those should be done no later than early next week. Let's see...

On Thursday there was a cool quote I didn't write about. It was by Alex Warth, and he said that anything called a "design pattern" wasn't very good to begin with on the grounds that "pattern" implies that not a lot of thought is spent before choosing a solution. This resonates well with Tim Mackinnon's (and others) comments about how some people claim to have implemented every pattern in the Design Patterns book --- the problem being that those are not necessarily checkboxes that can grade the quality of your application.

Today I saw cool presentations by Stéphane Ducasse (Traits), and by Simon Denier (Glamour). Then, there was Dan Ingalls' keynote. Well, what to say about it, really. His talk was entitled "40 years of fun with computers". He commented on things he had a lot of fun with and, thus, were dear to him. And really, what it underscores is that what we tend to value the most is our fun. I think it's fitting that, the second he walked on the stage, he was greeted by an ovation. His final remark was (IIRC) "this [referring to having fun, including the conference being fun] is what we made Smalltalk for". Wonderful, really wonderful.

In the afternoon I saw a presentation about an application that automatized roulettes at casinos, all written in Smalltalk (including the simulated roulette machines/games), by Andrés Otaduy and another guy whose name I don't quite remember (I'm sorry!). I also saw Gonzalo Zabala and two others (again, I am so sorry I am forgetting names right now!) demonstrate physical etoys, where you can e.g.: control a bluetooth toy car with a wii's remote, all controlled from Squeak.

After the break, I saw Carlos Ferro's presentation about the Smalltalks 2009 Coding Contest. It was quite interesting as I am quite familiar with the process. In fact, I was credited twice in the presentation (once for writing the Smalltalks 2008 Coding Contest, providing the source code for it and helping out a bit when necessary, and again for SUnit Based Validation). I was also reminded of how much work running a coding contest really is. I got the itch to organize next year's, but... maybe reason will prevail :). Also, I should point out that Valeria Murgia won the contest this year, followed by Félix Madrid in second place and Diego Geffner in third. Congratulations!

After Carlos' presentation came Félix Madrid's presentation on Expecco, which is a graphical tool that allows people other than developers to write tests in terms meaningful to them. In fact, he used Expecco to work on the coding contest. His tests interacted with the web server, and since the interactions were recorded graphically, he could dig through a whole game and see how each command had resulted in different actions over several turns of the game. Then, I saw Adrián Somá's talk on graphical environments for programming. That was really impressive. Essentially, he took some ideas of Morphic Wrappers (like writing on the air), coupled them with a Morphic-like environment, and even reimplemented some of the programming tools to match this environment. Suffice to say that windows are gone. In fact, you have retargetable tools. You can point to the object you want to inspect and have the inspector start inspecting the object you selected (which is great because you no longer have the problem of telling whether two inspectors are open on the same identical object). Expression arguments and receivers are also retargetable by pointing at objects. So is the class browser. Really, really neat.

After the last break, I saw Maximiliano Tabacman's talk on genetic algorithms. He used them for the application he works with, XTrade (yes, genetic algorithms used in a financial application). Finally, I saw Leandro Caniglia's presentation on homological algebra, where Smalltalk was used to deal with incredibly complex mathematical objects derived from tensor products. To give you an idea, the typical sets are tensor products of >5 sets, and several of these are added together in expressions of >5 terms as well, and then you have to see if some operations (which produce even more tensor products) commute or not. In a nutshell, you have to use a computer because, if not, the resulting amount of paperwork is so insane you can make no progress in your original research.

Then, we went to the social dinner which consisted of... asado! :) It was a very nice place, and the photos I took show people had a lot of fun.

Now, I better go to sleep because the conference will continue tomorrow. But first, here are some Thursday photos taken by Alejandro Weil. Enjoy!

Thursday, November 19, 2009

Smalltalks 2009 --- Thursday summary

I got back from Smalltalks 2009 a while ago. What a conference... is it possible to summarize Stéphane Ducasse's keynote? I found it inspiring, and as others have said before, pointing to the fact that we should be tackling hard challenges as opposed to easy problems. I liked James Foster's introduction to GemStone, particularly because Jose Britti and Esteban Lorenzano showed iBizLog, a GLASS application in which you can make your own web site to sell your products in about 5 minutes --- live demo and everything, quite nice.

In the afternoon, Esteban Lorenzano also showed his iPhone work, and Maximiliano Tabacman talked about XTrade's financial risk management capabilities. Ahhh, those wonderful terms that I got acquainted with some years ago... things like the non-existent greek letter vega are like old friends to me. Tim Mackinnon described several successful methodologies to apply agile planning. I gave a talk on how the fact that there's a VM hides C's complexity from the average Smalltalker, with potentially detrimental effects on efforts to connect to DLLs and OS APIs. Then, Gerardo Richarte showcased several ways to reverse engineer VM JITs, both from a security point of view, as well as to illustrate how to store JITted methods in a DLL for later. This, he did including a precursor of PICs implemented in his own Smalltalk based JIT, in a Smalltalk that didn't have PICs. Finally, Alex Warth gave the second keynote of the day. He spoke about how the fact that there's no seriously powerful undo capabilities in today's applications can prevent users from exploring the system because the consequences of their actions are unknown and potentially dangerous. This is an impediment because, technically, we should have a complete computing system in no more than ~20k lines of code (as opposed to millions of lines of code) so that we can understand it completely.

Sleep well tonight, my friend... the conference continues tomorrow!

Wednesday, November 18, 2009

Smalltalks 2009 reaches 500 registrations!

And, just a few minutes after midnight, we reached 501 registrations. Time to sleep. See you all in a bit!

Stephane Ducasse at UBA tonight

I just got back from Stephane's talk tonight. It was a lot of fun, talking about composition, inheritance, metaclasses, and how to bootstrap an image for the first time. I also took some photos, I will be posting them in a bit. We got to use the large room we had in 2007, in a preview of what will happen tomorrow. 498 registrations... and just a few hours away. Unbelievable.

But let's say you are in Buenos Aires and have not yet decided whether you will go. It's very simple. No te lo podes perder de ninguna manera, no faltes!!!

Smalltalks 2009 registrations for Wednesday

Ok, Smalltalks 2009 is just a few hours away. We're up to 495 registrations right now. Finally, we seem to have leveled off. I am sure that, as in other years, we will get a few registrations at the registration desk. So, basically, I am confident we will reach 500. And even if we don't, well.. 495 is close enough to 500 anyway :).

See you tomorrow!

Tuesday, November 17, 2009

Smalltalks 2009 at Cincom's News Room

Here's an article about Smalltalks 2009 published by Cincom's News Room. Enjoy!

Smalltalks 2009 registrations for Tuesday

489... just 11 more to reach 500. These are incredible numbers, really. The registration count was amazing at 350, or even 400. But 500? Wow...

Monday, November 16, 2009

Stéphane Ducasse at UBA today

Stef gave a lecture at UBA today, and spoke about various topics such as the true meaning of super (can you give a definition?), design patterns, and much more. Here are some photos, courtesy of Alejandro Weil. The pictures are being uploaded as I write this note. Enjoy!

Smalltalks 2009 registrations for Monday

Today, the number stands at 477. Just a bit more and we will reach 500 :).

Did you take a look at the schedule yet (pdf)? The conference has keynotes by Dan Ingalls, Stéphane Ducasse and Alex Warth, and presentations about basically any conceivable topic: GemStone (both a presentation and a tutorial), financial risk management, agile methodologies, iPhone applications, VM development and security, Glamour, traits, an application to manage roulettes, physical etoys, how to teach Smalltalk, web frameworks, testing frameworks and methodologies, a talk on Smalltalks 2009's coding contest, better and enhanced IDE tools, genetic algorithms, homological algebra, graphics (OpenGL, Cairo, Morphic 3), Cuis, and a Pharo Sprint. As you can see, there's something for everyone.

Smalltalks 2009: opens on Thursday at a University near you!

Saturday, November 14, 2009

Smalltalks 2009 news

Hi there! We're just a few days away from the conference. The registration stands at 459 right now. We published the conference's schedule at FAST's website. Check it out, I can't wait for the conference to start!

Also, I wanted to mention a problem we have noticed. Some of the attendees registered using an MSN live email account. MSN live can reject emails we send them because MSN live thinks our emails are spam. Apparently, there's little to nothing we can do, and the recipients are not even notified about the problem. Thus, please be aware that we are organizing a social dinner event for Friday, November 20th. The cost will be between $60 and $80 pesos per person, roughly speaking. The menu will consist of red meats, with some alternate dishes for those that prefer to eat something else. If you want to attend and have a reserved spot, send us an email at info (@) fast (.) org (.) ar, with a subject line of "[Smalltalks 2009] Social Event / Evento Social".


Friday, November 13, 2009

Smalltalks 2009 registrations for Friday

Today we went past 450 registrations. Are you ready for this? :)...

Thursday, November 12, 2009

Smalltalks 2009 registrations for Thursday

Finally, I could check on the registrations today. We're up to 432 now...

Wednesday, November 11, 2009

Smalltalks 2009 registrations for Wednesday...

I just checked the registration count. It has grown to 414 so far today. Thank you everyone, this is going to be an incredible conference!

... also, well... it seems we're not done receiving registrations yet :).

Tuesday, November 10, 2009

Smalltalks 2009 growing quickly

We are having another surge of registrations. The website now reports a count of 360. It is still growing...

Update: a while later, the registration count was 376.

Friday, November 06, 2009

Smalltalks 2009 accepted proposals available!

We're about to finish the conference schedule. In the mean time, however, you can see the list of accepted proposals in the Talks section of FAST's website. Also, the web site says we are just a bit shy of 300 registrations. I can't wait :).

Update: as of right now, Smalltalks 2009 has received 305 registrations.

Thursday, November 05, 2009

Smalltalks 2009 just two weeks away

The Smalltalks 2009 conference is just 14 days away. Right now, the site reports there are 285 registrations, with a good mix of industry and academia. We're almost there with the conference schedule. I can tell you though... this event is something you do not want to miss.

Wednesday, November 04, 2009

Assessments 1.25

If there are no tests, do not query the checklists for prerequisites either. Some empty SUnit test cases may implement #resources in terms of #subclassResponsibility.

Assessments 1.23 and 1.24

I reorganized the bundle prerequisites, and separated the tools tests from the tools bundle.

Assessments 1.22

Added a missing conversion method I forgot. Oops! :)

Tuesday, November 03, 2009

Assessments 1.21

For some use cases, it's more convenient to run an assessment to failure in a single thread. Provide a custom checklist and a new check type to support this mode of operation.

Assessments 1.20

This version enforces a stable check evaluation order, particularly when re-evaluating an assessment to failure. Enjoy!

Assessments 1.19

Composite result policies were not redistributing the evaluation context to its result policy components. I just fixed this problem. Enjoy!

Monday, November 02, 2009

Assessments 1.18

I just added the message checklistForClass: to look up a checklist (or checklist metaclass) by class (or bridged class). Enjoy!

Saturday, October 31, 2009

Assessments 1.16

I just published a fix that addresses a failure to debug checks because of Assessments' own internal checks. Basically, the additional machinery needed to run tests tripped a check against runaway process manipulation while opening a debugger on a test. Problem fixed :).

Assessments 1.15

I added preliminary support for SUnitToo's instance based resources. Note that these may be quite expensive for cases in which there are numerous small tests.

Tuesday, October 20, 2009

Wonderful proposition I'd like to test

Check out this article --- life might have originated first as a difference in value, followed by a distinction that separates this different value from its environment. You know, Laws of Form, objects/messages and all that. Fascinating!!!

Smalltalks 2009 is just one month away!

The Smalltalks 2009 conference is just one month away. I thought I'd offer a reminder of a few dates and other useful information.

The Fundacion Argentina de Smalltalk (FAST) is organizing the conference. The event will be held from November 19th through November 21st at the Ciudad Universitaria site of the University of Buenos Aires. This year's event will feature the presence of Dan Ingalls, Stéphane Ducasse, and Alex Warth. We are very pleased to see that 220 people have registered for the conference already. To register and get more information about the conference, please visit FAST's website here.

Our sponsors will provide a conference shirt to those that register before October 26th. If you would like to participate by giving a talk or tutorial, keep in mind that the deadline for submitting proposals via the website is October 28th. Finally, Smalltalks 2009 will host a coding contest. For more information on the contest, please visit this Google group.

Thank you, and we look forward to seeing you at the conference!

Sunday, October 11, 2009

Writing again

So, now that I am more or less done with Minesweeper, Fundamentals II's chapter 6 is growing again... the target date for the second volume Fundamentals of Smalltalk Programming Technique is ESUG 2010. I better get going, there's a lot to write about.

Minesweeper sample app

So, finally, I finished hooking up the Minesweeper solvers I wrote many years ago to a graphical visualization that lets you play the game as well. These are now available at the FTP server (, user smalltalk, password now). The game comes in two formats: a Windows .exe, and the VisualWorks image for those that want to use other operating systems. If you want to get a VisualWorks virtual machine for your platform, feel free to download the NC VisualWorks distribution here. As usual, UPX does a wonderful job of packing the .exe... it's 10-15% smaller than a .rar archive of the image alone. Enjoy!

And now, the release notes...

Known Limitations.

  • The solvers do not make guesses. It is not the point of my Minesweeper research to produce such guesses.
  • The C and K solvers may require a very large amount of time to complete in some cases. These cases, although not too frequent, appear with large boards that have more than 20% of mines (e.g.: 40x40x370). Eventually, I would like to add a [STOP!] button.
Future Work.
  • I would like to add significantly more efficient solvers. This is not necessarily easy because the problem is NP-complete. However, the C and K solvers point to some interesting data I need to track down. We shall see.
  • Write about this program in chapter 7 of the Fundamentals book.

Friday, October 02, 2009

Assessments 1.13 and 1.14

I just published Assessments 1.13 to the public Store repository. Changes in this version:

  • Added a class side helper method in Validator to assist typical UI interaction.
  • If you hold shift while evaluating an assessment, then Assessments uses the TimeProfiler to profile the execution (if the TimeProfiler is loaded).
  • Added ComplexConditions to the list of prerequisites.

Update: version 1.14 adds a missing package comment.

Sunday, September 27, 2009

On whining

You know how it goes, right?... "oh I can't because", "it's too hard because"... the all too common rationalizations for accepting failure.

I have news for you. Pierre-Auguste Renoir, one of the best French impressionist painters, developed rheumatoid arthritis. This is a painful, joint degenerating disease for which there is no cure. Nevertheless, he continued painting for close to 30 years until his death. If that meant needing help getting a brush to his hand, so be it. How absolutely wonderful. But also, how easy it is to forget how much pain and sheer effort went into creating his unique paintings, isn't it? So, next time you are stuck with a tough problem, or a difficult situation, just remember those who, like Renoir, exercised their will to see their desires come true.

Life is too short. Enough with the whining, already.

Thursday, September 24, 2009

Seaside 3.0 port for Dolphin

Some of my good friends at InfOil have announced they will maintain a Seaside port for Dolphin. You can take a look at Sebastián Calvo's latest Seaside 3.0 release here. Enjoy!

Monday, September 21, 2009

Saturday, September 19, 2009

Colorful question

What is the color of 8 in Windows' Minesweeper?

Friday, September 18, 2009

Smalltalks 2009 official website

Greetings! The Fundación Argentina de Smalltalk, or FAST :), is pleased to announce the official Smalltalks 2009 website. Enjoy!

Tuesday, September 15, 2009

FTP server back up

And now, the FTP server at is back up (remember: no anonymous logins). Enjoy!

Sunday, September 13, 2009

Closures for C --- wonderful!

Check it out, C has blocks! It certainly looks more and more like Smalltalk as time goes by.

Saturday, September 05, 2009

Photos (and a video) from ESUG 2009!

Hernan Wilkinson just posted a picasa album of ESUG 2009 photos. I also have 4.2gb of photos I took while at ESUG, but it will take me some time to go through them before I can put them in a picasa album. Soon enough, though :). In the mean time, enjoy Hernan's pictures!

Finally, here is a video of Gabriel Honoré receiving the first prize in the ESUG awards.

Thursday, September 03, 2009

Assessments 1.12

I just published an improvement to Assessments so that prerequisites can be started / stopped lazily as with SUnit 3.2. The previous prerequisite handling, in which all prerequisites must start before assessment evaluation begins, is also available via a different prerequisite policy. Enjoy!

Monday, August 31, 2009

Smalltalks 2009 guests

One would assume you are planning to attend Smalltalks 2009 (Buenos Aires, 19-21 November, website coming up shortly). In fact, we would like to urge your participation particularly because Stéphane Ducasse and Dan Ingalls will be at the conference. These are really exciting developments for the Organization Committee, and a huge step forward for the international Smalltalk community as a whole.

Stay tuned, and see you at the conference!

Sunday, August 30, 2009

Fundamentals books

Hello from ESUG's Camp Smalltalk! I am happy to report that the Fundamentals Volume I is about to become sold out, and the conference hasn't even started. Thank you everyone :).

Also, I started writing volume II already. The draft is sitting at 22 pages right now. I just have a skeleton of an introduction and a page of chapter 6 done at the moment. The rest is just chapter heading pages and empty sections that need to be filled out. I think I should be done in time for next year's ESUG. More to come!

PS: all the books I brought to ESUG are sold --- thank you!

Thursday, August 27, 2009

FTP server down...

The FTP server will be down until September 15th.

Saturday, August 22, 2009

Smalltalks 2009 --- Third Smalltalk Conference of Argentina

Argentina's third Smalltalk conference, Smalltalks 2009, will be held from November 19th through November 21rd at the Facultad de Ciencias Exactas y Naturales (FCEyN), Universidad de Buenos Aires (UBA).

All those connected with Smalltalk, be it faculty, students, researchers, developers or entrepreneurs, are invited to participate, free of cost, as presenters and members of the audience. The organization committee will announce the registration website shortly.

The conference's goal is to gather both the Argentine and International Smalltalk community to get connected sharing our work and experience with regards to Smalltalk or related topics. Smalltalks 2009 presentations will be divided between the "Industry and Development" and "Research and Education" categories. In addition, the event will host a Smalltalk programming contest. As in other editions, well known personalities from the international community will attend the conference.

The "Research and Education" category is the best match for research and education work done with Smalltalk in universities and public or private entities. The "Industry and Development" category is suitable for presentations related to Smalltalk software developed by companies or individuals, both public and private.

A list of suggested presentation topics, not exclusive, is below:

* Development tools.
* Development with prototypes.
* Model driven development.
* Agile practices (XP, TDD, etc).
* Web application development.
* Metamodeling / metaprogramming.
* New frameworks or models.
* Materials for education.
* Embedded systems and robotics.
* SOA and web services.
* Experience reports, both development and research.
* Commercial systems.
* Automation and best testing practices.
* Interoperability with other technologies.
* Best design and architecture practices.

Interested presenters should keep in mind the following deadline schedule.

1. You must present a summary of the proposed presentation no later than Monday, October 19th, 2009. The summary must fit on a single page, and must include a description, objective, and category of the work to be shown. The submission procedure will be announced shortly.

2. The conference's program committee will select the event's presentations from the proposals submitted according to the above procedure by Monday, October 26th. The proposals including dynamic examples as opposed to just static presentations will be given priority.

3. The conference schedule will be published in the conference's website on Wednesday, October 28th.

4. The conference's works and presentations will be published in the conference's website after the conference.

Those interested in the coding contest can become familiarized with it at the smalltalks-2009-coding-contest Google group:

The contest's goal is to have a good time solving a problem in Smalltalk, and win a prize while at it. We are working hard to ensure everyone can participate, and we will show examples and prototypes that can be improved by the participants.

For directions to FCEyN, you can go to the computer science department's web site:

Feel free to share this invitation with those who might be interested. If you have any questions, send us an email at

fundacion (dot) smalltalk (at) gmail (dot) com

See you at the conference!
Smalltalks 2009 Organization Committee.

Wednesday, August 19, 2009

Death panels, said the executor

Really, huh? A public health care option equates to death panels, right? Well, I have news for you.

A reasonable set of routine blood tests, which can easily save your life, costs about $800.

That's just the routine diagnostics. If you don't have insurance, then probably you can't afford $800 in utterly basic tests every year. And actually, the tests could cost you more because you may have to pay another $200 or so for a doctor to prescribe them for you.

Compare the $800 to the minimum wage, or to the median salary, or to the median rent, or to the median mortgage payment. Can you afford that? Do you have a family? How would you like to multiply that by 4? If you get all frisky when your taxes are raised by 1%, how should you react when you have to pay e.g.: 5% of your salary in health care? Bonus points if the AMT prevents you from deducting the medical expenses of a large family.

So, $800 a year, per person, and hopefully everybody is still healthy. What if you actually get sick? And what if, like ~50 million people in this country*, you do not have health insurance? Thus, $800 for basic tests is, effectively, a death sentence --- and never mind the insured who are denied the care they urgently need to avoid death. Of course, this situation is compoundedly sick because it is often presented as if it were the patient's fault to begin with.

A couple years ago, I had a bad case of barotrauma after a flight to Buenos Aires. I went to one of my favorite private hospital's ER in pain, semi deaf, and with fever. I had no insurance in Argentina. Before I was done paying for the ER visit, I had a specialist standing next to me, waiting to wisk me away into the examination room. Not even 3 minutes had gone by. How much did the whole hospital experience cost me? $20.

Death panels? Really? Come on, what planet do you come from? Public option or not, I do not think the average garbage we hear every day about health care has anything to do with reality.

* BTW, ~50 million is far more than the number of illegal aliens to whom we gladly and quite purposefully pay salaries we cannot legally offer, so knock it off with the xenophobia and muster the courage to look in the mirror already.

PS: see what I mean?

PS2: we can definitely do better...

Monday, August 17, 2009

Lulu shipping improvements

It seems that Lulu will improve shipping options and rates in the next couple weeks. Some people are reporting improvements already. Good news, fingers crossed while knocking on wood :).

Fundamentals volume 2, chapter 6

With some book chapters, I know I will have a good time writing them before I start. Writing about polymorphism was fantastic, and I already have a lot of really good material for the chapter on recursion. I have a feeling it will rival the chapter on optimization in size and scope.

Sometimes I don't click as quickly with chapters, though. I was sorting the material for chapter 6, which is about enumeration. And, at first, I thought it was going to be this skinny, unexciting 10 page thing. However, these guesses always end up being wrong. I started with an uninspiring list of things I wanted to talk about. But, as I began organizing them into clusters of similar items, and sorting the sequence of exposition, I realized how interesting the topic really is. The list is now double in length, and the exposition sequence that move from one cluster of subjects to the next has an enticing feeling to it. It's also fun to see which themes will persist through both volumes, and structure the text to give them room to shine.

This is going to be a fun, more like 50 page :) chapter.

Sunday, August 16, 2009

So far, it looks like e^x is king...

According to Epic Games' CEO,

  • An efficient single-thread algorithm for a CPU costs x to write.
  • Same as above but multi-threaded, costs 2x to write.
  • Same as above for the PS3 or Cell processor, costs 3x to write.
  • Same as above for a current generation GPGPU, costs 10x to write.
So, if this is a sample of things to come, what's the point of a 1000-core CPU? And note that these increases in complexity appear in a single machine. Undoubtedly, the costs have to grow even faster when multiple machines must collaborate to solve a problem. Other than that, maybe he's looking for a 3d graphics VM when he wishes it possible to just write 3d code irrespective of the target hardware and its proprietary APIs...

Programming videos

Because of the new book, I got a request to make videos. I have made videos of myself while implementing the Smalltalks 2008 Coding Contest. I just watched them again, and I think they exemplify the principles explained in the Fundamentals book. If you are interested, they are at the FTP server, (user smalltalk, password now).

Saturday, August 15, 2009

Did I mention this before?

There is no time. Really, it's not even nearly enough. Every so often, there are drastic reminders of this fact. Here is one I thought I'd share. The newspaper La Nación had an article the other day which stated that, among other things, the average person watches 1500 hours of TV a year.

One thousand five hundred hours in front of the TV.

Think about it. The average work month has about 173 work hours. Therefore, 1500 hours of TV represent 8.63 work months watching television. That's nuts. I don't care how great those TV programs are. There is no way I am spending 8.63 work months watching stuff designed (for the most part) to mess with my emotions, to prevent me from thinking, and to desensitize me so that I only care about myself. Why would I want to subject myself to that kind of abuse?

Finally, suppose that you can write a book page every 4 hours. With practice, it's possible to go much faster than that. But, nevertheless, assume just one page every 4 hours. Where are the books? Or, where are the new ideas we should be able to figure out if, all of a sudden, we had 8.63 work months' worth of time at our disposal every year?

So, I challenge you: watch zero TV for 6 months. And I mean absolutely nothing, without cheating on the web. After that time, I further challenge you to watch the typical TV programs again without feeling disgusted and nauseated. You won't be able to tell what planet they are broadcasting from.

And then... do you have goals you haven't accomplished because you "don't have time"? Well, what are you going to do about those goals once you do have the time? I don't know about you, but I will not get to my death bed, think back and realize I had more than a part time job watching TV for decades when I could have, I should have, I ought to have...

Needless to say, I am beginning the second volume of the Fundamentals book right now. Also, where's that sax?...

Update: in fact, the first ever draft of the second Fundamentals volume is 20 pages. It's all empty sections and things right now. Soon, that will change...

Friday, August 14, 2009

Fundamentals volume 1 published!

I just published the 400 page book Fundamentals of Smalltalk Programming Technique, volume 1. To some extent it's fitting that I am publishing another book this time of the year. I started writing the Mentoring Course book (of which the Hash book was chapter 7) almost 4 years ago. The three books total about 1200 pages.

Something I realized with the Mentoring Course book is that I could take advantage of mentoring myself because I had already sharpened several Smalltalk skills. The Fundamentals book talks about these abilities. As with the Mentoring Course book, there is too much material for a single book. Thus, the first volume just published talks about the controlled manipulation of boolean expressions, inheritance, and polymorphism. In fact, there is a continuum of points of view on the subjects, ranging from the goal of producing very little yet highly maintainable code, to the architecture of highly optimized implementations, as well as valuable compromises in between. In fact, at times, it is possible to avoid sacrificing flexibility for speed, or viceversa.

The second volume will talk about enumeration, recursion, weakness, and optimization. I am sure it will be a fun book to write. In the mean time, enjoy volume 1!

Wednesday, August 12, 2009

Smoking, eh?

How do you like this quote by Campbell-Johnson consulting?

[...] we need something so that people die [...t]obacco has the social function of limiting the number of [elderly / dependent] people the economy has to provide for.

And now, how do you feel about other similar things? Source (and English translation). Corporations, pfft!

Monday, August 10, 2009

Assessments 1.11

I just released Assessments 1.11, which includes a very large number of improvements. Enjoy!

Sunday, August 09, 2009

Super size that software!

Could anybody explain to me why shortcut icons for things like c:\program files\whatever\executable.exe are set by referencing c:\windows\installer\{e7e8eb0e90e-fidvihbd-jdsgvdsjhs}blah.exe, as opposed to something more reasonable such as c:\program files\whatever\executable.exe? Why would you want to keep the installer for today's huge programs around? If you delete them, then your shortcuts are damaged and need fixing, even though the icons are perfectly available at the shortcut's target. Skype does it one better and provides read only short cuts so it's not clear how you can fix them. This seems nonsensical to me. What's the point of all this "protection"?

Uninstalling Acrobat 6 left about 60mb worth of .bak files in Program Files (copies of executables, dlls, etc). Uninstalling Acrobat 7 left numerous empty folders around. And the latest incarnation of Acrobat 9 is 244mb. At the same time, there are standalone PDF viewers that require on the order of 10mb and conveniently ignore Acrobat's irritating limitation that the PDF reader will only annotate PDF files created by Acrobat.

With this kind of software, of course we need a 1TB laptop hard drive and 8 execution cores just to keep up with the mess. But note that memory speeds have not been upgraded accordingly. So, when you look at performance charts, adding a 4th core does not give you 33% more performance but rather 25% at best, and that's only when more complicated software has been written to make use of all the computation capacity.

And even then, the improvements in software do not necessarily matter much. After about 8 cores, memory intensive applications actually suffer performance degradation because the memory subsystem cannot cope with the demand for bandwidth coming from the CPUs. With today's data sets and application sizes, essentially every app is memory intensive. For example, why do Apple's dashboard applets need to reserve on the order of 370mb worth of memory?

At times it seems weird to me that we refuse to make good use of our free, massively parallel computation device called a brain to avoid inventing technologies that just need a problem to solve. In the same vein, I got anecdotal evidence that a major corporation funds software projects only when they can be completed in 3 months and pay for themselves in 6 months, after which it is perfectly fine to throw the shiny new app away because it's no longer an investment loss. Consequently, a non-trivial amount of code is periodically rewritten from scratch. So much for the actual value of software these days...

On a more positive note, this situation should not last forever. Eventually, we'll hit the on CPU cache limit past which CPUs need too much electricity. Eventually, we'll hit the miniaturization limit (we're about 10 years away at Moore Law speeds). Eventually, we'll hit the aereal density limit for hard drives (did you know the hard drive industry wanted a duplication every year or so?). Eventually, we will find out that Facebook consumes too much electricity for the valuable(?) service it provides. Eventually, it all comes down to the costs of managing unnecessary complexity. Sooner or later it will be cheaper to think, which is what we should have been doing all along.

Saturday, August 08, 2009

Another proof copy is needed

Just to make sure the latest modifications are printed correctly, I will have to get another proof copy. Thus, the book is delayed by about 10 days. I think it's worth the wait... I wouldn't want a repeat of last year's margin snafus.

Friday, August 07, 2009

Fundamentals proof copy...

I got the proof copy, and printing seems ok. I found that I made the cover at 72.27 dpi, doh. That's simple enough to take care of. Now, I just have to read the book from cover to cover. I should be done in a couple days. It looks like Sunday is the day...

Tuesday, August 04, 2009

FTP server back up...


Saturday, August 01, 2009

Some quotes by Dijkstra

The required techniques of effective reasoning are pretty formal, but as long as programming is done by people that don't master them, the software crisis will remain with us and will be considered an incurable disease. And you know what incurable diseases do: they invite the quacks and charlatans in, who in this case take the form of Software Engineering gurus.

Some of you doubt that aforementioned "techniques of effective reasoning", nice as they are for small programs, will scale up, I quote "given the daunting size and sheer complexity of most programs". Well, they will be powerless if you try to use them to disentangle the horrendous mess produced by a group of incompetent, unorganized programmers. Their power manifests itself in the construction phase where (i) they tend to lead to much shorter texts than would be produced otherwise and (ii) lengths of program derivations tend to grow not much more than linearly with the lengths of the programs derived. Finally the programs thus produced are infinitely better than the usual junk.

Gadgets are not necessarily an improvement, vide the succession Blackboard -> Overhead Projector -> Power Point.

It is not the business of computing science to promote "computerization", say by developing demanding applications so as to create a market for the next generation of hardware.

A programmer has to be able to demonstrate that his program has the required properties. If this comes as an afterthought, it is all but certain that he won't be able to meet this obligation: only if he allows this obligation to influence his design, there is hope he can meet it. Pure a posteriori verification denies you that whole-some influence and is therefore putting the cart before the horse, but that is exactly what happens in the software houses where "programming" and "quality assurance" are done by different groups.

Machine capacities now give us room galore for making a mess of it. Opportunities unlimited for fouling things up! Developing the austere intellectual discipline of keeping things sufficiently simple is in this environment a formidable challenge, both technically and educationally.

No, I'm afraid that computer science has suffered from the popularity of the Internet. It has attracted an increasing —not to say: overwhelming!— number of students with very little scientific inclination and in research it has only strengthened the prevailing (and somewhat vulgar) obsession with speed and capacity.

When computers became a commercial product it was essential for industry that its sales force presented these machines as non-mathematical machines that could be used by any one. As a result of these commercial campaigns, research in computing science has been paralyzed by the "rule" that nothing you ever tried should be too difficult for "the average programmer". Slowly —at least at the better universities— computing science research is digging itself out of that hole. But we should all be aware that publication practice has a greater inertia. We should make a conscious effort to stop writing for morons. As a science, computing cannot be expected to mature as long as its practitioners don't take each other seriously.

Thursday, July 30, 2009

Proof copy on the way...

I should receive the Fundamentals' proof copy in about 2 weeks. If all goes well, the release date is August 15th or so.

Wednesday, July 29, 2009

Laptop's back in business

Good, now I have two new hard disks. I can't believe I put up with 4200rpm drives for so long. These are 7200rpm performance drives, and peak at about 100mb/sec. The machine sure comes back from hibernation faster now...

Saturday, July 25, 2009

Busted laptop hard drive

Yep, one of the laptop's disks is busted. What's almost comical is that e.g.: chkdsk says "sorry, unknown error, so I am not finishing". But SMART insists everything is fine: no seek errors, no relocated sectors, no ECC issues, nothing.

Fujitsu... for some reason, I never quite developed much trust for those drives. Now, I can't help distrusting them outright. I could understand broken mechanics and bad SMART values. But read rattles, unrecoverable errors, and SMART insists everything is fine? I wish Google had released the data for their assertion that SMART does not predict disk failures sorted by manufacturer. I do have direct evidence of Western Digital drives reporting lower than perfect scores, so I have a feeling some drives are smarter than others...

Done writing!

I don't quite realize that, basically, I just finished writing the first volume of Fundamentals of Smalltalk Programming Technique. The draft is 400 pages. The to do list has just small tasks... make a few more exercises for chapter 5, try to solve the last exercise (I do not know if it can be solved yet), get the text edited, design the book cover, and send it to Lulu for a proof copy. If all goes well, the book may go on sale in 2-3 weeks.

1 section to go...

The draft is at 396 pages. Just one section left. Any time now.

2 sections to go...

Ok, I just finished the first (and longest) of the 3 sections I had to write. The Fundamentals draft is 390 pages. Now I just have a not so short section (5.3.8) and a short section (5.3.9) to go. A mere 15 or so more pages left to take care of...

I should also point out that I found a few bugs and other cleanup opportunities in Assessments as a result of writing about it. I will publish the improvements after I finish the book. Overall, I think I managed to reduce the methods/class average. The code stats for Assessments (including all the self tests and the tools) are 1227 methods and 187 classes and class extensions, for an average of 6.56 methods / class.

Oddball fact of the day

There's a song by "The Pointer Sisters" called "Jump"...

Friday, July 24, 2009

A new VisualWorks website in Spanish!

Pablo Gancharov started a new website where he shares his Smalltalk experience (in VisualWorks, but VW is also a Smalltalk!). Go there and check it out!

Thursday, July 23, 2009

Just what I needed, grrr!

Sigh... imminent laptop hard drive failure. Gotta love it :(. At least I am not losing anything, and I have about 5 backup copies of everything.

3 sections to go...

I just finished the "half" section. Assessments just got a nice 25 page design document written. The Fundamentals draft is 374 pages. Just 3 sections to go...

Wednesday, July 22, 2009

What is Assessments?

Assessments is a Smalltalk test framework like SUnit. Unlike SUnit, however, it is designed to be flexible and extensible. So, for example, whereas there are many mutually incompatible SUnit logging facilities, in Assessments you can have multiple logging facilities working at the same time. The key criterion is that using Assessments should not force anybody to modify the framework.

Moreover, Assessments also runs tests from other test frameworks, such as SUnit, SUnit VM (including SUnit Benchmarks and SUnit Based Validation), and SUnitToo. The Assessments execution machinery is quite powerful, and literally takes over the other frameworks seamlessly and transparently. Basically, you load Assessments, it detects what frameworks are in the image, and acts accordingly.

Instead of the approach taken by the SUnitToo bridge, Assessments does not modify or create code to run SUnit tests. Moreover, users do not need to make any changes to their existing SUnit tests either. Therefore, using Assessments does not invalidate any existing SUnit tests. In fact, you can continue writing your favorite variety of SUnit tests because Assessments is backwards compatible with them. Even though SUnit tests may not be Assessments' native tests, you still get all the advantages of a better test execution engine.

The Fundamentals' chapter on polymorphism documents many of the techniques and constructs that enable Assessments' flexibility (polymorphism is king). I spoke briefly about Assessments at ESUG 2008. The slides are here, the video is here (and here). The SUnit Benchmarks and SUnit Based Validation extensions are described at length in the mentoring course book (you can also get the book at Amazon and Powell's). SUnit Based Validation and its multitude of applications are also discussed in this paper and this Smalltalk Solutions 2008 presentation (mirror here) by Leandro Caniglia.

You can get the latest version of Assessments from the public Store repository. The bundle name is Assessments. As soon as I am done with the Fundamentals book, I will add a few things I've wanted in Assessments for a while. See here for the to do list.

An update on the fundamentals book...

The draft is 362 pages long now, and it's growing quickly. I just have 3 and a half sections on Assessments to go, but I also think the end result will be over 400 pages in size. Then, making some more exercises, fixing a few other small details, and creating the book cover.

Friday, July 17, 2009

FTP server down

FYI, the FTP server will be down for about 2 weeks.

Sunday, July 12, 2009

More stuff for Fundamentals volume 2...

Sigh. It never ends. I think I will add a chapter on weak collections and ephemerons to the second volume of the Fundamentals book. As if having a chapter on optimization wasn't enough risk of having to write a third volume already...

Book progress

Now I have two editors working in parallel. They are doing a great job of keeping me busy, which is good. Just today, I rewrote about 25 pages so far. I managed to make some progress at the leading edge, too. The draft is 344 pages now. Moving along...

Saturday, July 11, 2009

Boolean expression simplification question

Would anybody be so kind to provide a direct proof of the following identity?

x · y + x · z + ~y · z = x · y + ~y · z

Thanks in advance.

PS: finally, I think I found a derivation using "integration factors" so to speak... but I am still interested in alternatives!

Wednesday, July 08, 2009

Real hacks worth mentioning

Check it out... using a VHS recorder as tape backup with no additional hardware. Up to 130mb/hour of tape! The last hack here is amazing...

Sunday, July 05, 2009

Swine flu...

You know, in some countries there's major paranoia about swine flu. Don't go out, buy tamiflu, buy masks, cancel schools and large events, impose mandatory vacations, etcetera. Is that reaction reasonable? Let's see...

  • This article states there have been 263 deaths due to swine flu in the world so far.
  • This other article states there are ~1 million infected people. Half of world infections are in the US, and therefore, there must be ~2 million infected people in the world.
What's the morbidity rate so far? 0.01315%. In other words, the odds of death by swine flu are 1 in ~7605. Well. How does that compare to other risks we take everyday?
  • Risk of death in a motor vehicle accident in the US during 1 year, 1 in ~6500 (source, 2005).
  • Risk of death due to intentional self-harm during 1 year, 1 in ~9100 (source, 2005).
  • Lifetime risk of death due to intentional self-harm, 1 in 121 (source).
  • Lifetime risk of death due to natural forces (heat, cold, storms, quakes, etc), 1 in ~3350 (source).
  • Lifetime risk of death due to electrocution, 1 in 5000 (source).
So, really, if you don't care about just one of the above, you cannot possibly worry about swine flu right now. Here are some far more serious illnesses with their yearly mortality rates.
Do you hear about those in the news? Should we shut down the piercing and tattoo industry to stop the spread of hepatitis C? And how about this?
  • Lifetime risk of maternal death in developed nations, 1 in 2800 (source).
You better cancel those plans to have children, because it's ~1.3 times more likely that you will die due to giving birth than due to swine flu.

Seriously. Do you worry about any of these things as much as you have panicked about swine flu? Most likely, no. Then, knock it off with the fear already! At least, do the responsible diligence of monitoring swine flu's mutations without seeing death around every corner.

Assessments 1.10

I didn't put out a notice for the new versions of Assessments. So... I fixed a small problem with resource failure notifications, an issue with one test that improperly scanned for the presence of optional code, and deleted a subclass of the evaluation context. I made the design decision that, in an evaluation context, the evaluation itself should be subject to a policy. I will create a couple evaluation policies later.

What about the to do list? I want to add a new checklist evaluator that sorts checklists / testcases by bundle and package. I also plan to add some (simple!!!) extensions to the RB. Finally, I want to redo how failures and errors leave the evaluation result window frozen while waiting on a semaphore. Hopefully I will feel inspired later this month. Nevertheless, the book still has priority over Assessments enhancements right now.

Hash Analysis Tool 3.26

I just published an update for the Hash Analysis Tool. I deleted some dead code. Also, I temporarily disabled the block count tests because they can fail for ad-hoc data sets.

Notes on including Windows screenshots in LaTeX documents

So, the Fundamentals book now has figures. I had to take a few screenshots, and I noticed a few things.

  • If you don't disable font smoothing, then the resulting PDF looks like garbage. The color screenshot is particularly nasty when magnified. Why do we put up with this on monitors? We already have CCD cameras that use stacked color pixels. Can't we make monitors with stacked color pixels too? Please?
  • VisualWorks' topic boxes are drawn in an almost invisible gray under the XP look. I fixed this at a customer site years ago, grr!!! Oh well, back to the Windows 2000 look. In any case, the Windows 2000 screenshots look nicer on the PDF because the layout is simpler and there are less bells and whistles to get distracted with.
  • Using LaTeX and MiKTeX, the behavior of \usepackage{graphicx} depends on the driver you use to compile the document. So, for example, if you want dvi output for fast editing because you are using yap, then you have to write \usepackage[dvips]{graphicx} and include encapsulated postscript files. But, if you want to create a PDF you can send to others, then you need to use the pdflatex driver instead of the dvips driver. Hence, you need to change to \usepackage[pdftex]{graphicx}, and include PNG instead. I wrote some macros that choose to append .eps or .png to filenames depending on the compilation environment so I only have to change things in one place. But why isn't this automatic yet? Is there a way to compile with either dvips or pdflatex and have everything work the same?
  • Of course, you don't include JPG with the graphicx package because of the visual artifacts. Moreover, you don't include PDF because using GhostScript to convert the .eps to .pdf results in a .pdf that thinks it's a whole page and that throws layout off (also, if you use PDF, you also have to be careful to tell GhostScript not to crunch the .eps you made from the .png because otherwise you get visual artifacts just like with JPG). Using .ps instead of .pdf results in more or less the same layout issues. Did I miss something here?
  • Including .png files works great, but including .eps failed at first. The error was cryptic... "TeX capacity exceeded, sorry [.1=200000]". Eventually I figured out that ".1" is shorthand for the "[m]aximum number of characters simultaneously present in current lines of open files and in control sequences between \csname and \endcsname". MiKTeX's configuration file parameter for that amount is conveniently called buf_size. Well, yeah... that makes sense now. The .eps files are about 1.7mb, which is more than 200k. Bumping buf_size by a factor of 100 took care of that problem.
  • Finally, why do dvips and pdflatex appear to work, but the result is a white box with the name of the file instead of the actual screenshot? Because the compilation environment for the LaTeX document is draft, and therefore graphicx decides no graphics should be included. However, I'd rather see what's going on to make sure things look good. Fortunately, you can use draft for the document and final for graphicx, like this: \usepackage[final]{graphicx}. It sounds so simple after you find what's going on...
Ok. Now, back to writing. 332 pages so far.

Saturday, July 04, 2009

Getting there

Finally, I can feel it. I am getting close to finishing the first volume of the Fundamentals book. The draft reached 330 pages today, and it's growing very quickly. I should point out that the book will include the first printed material about the Hash Analysis Tool and Assessments. In particular, the Fundamentals book will cover (some of) their sophisticated use of polymorphism. I think the book should be done at 400 pages or so.

Gotta go... I need to write some more now.

Update: 332 pages now, and with figures.

Tuesday, June 30, 2009

A quote...

"Retirement is a sick thing. When you give up your life to sit around and grow old... I don't see that." --- Buddy Rich

Saturday, June 27, 2009


So, I am writing about proxies and I just found how to implement them without instance variables. This allows thread safety and a single Proxy class. This is a discovery I didn't expect at all. Wonderful, wonderful.

Update: I just finished the section on proxies. The draft is 314 pages, even though it lost 8 pages' worth of chapter headings that belong to volume 2. Now, the rather large section on class based polymorphism.

Finally, lots of RAM for a good reason

I realized I need to study the structure of Z^*_{2^32} in detail. In particular, Carmichael's function shows there are at least 2 multiplicative subgroups within Z^*_{2^32}. I have to partition Z^*_{2^32} into all such subgroups and study them further.

At last, a reasonable way to put more than 4 gb of RAM to good use...

Friday, June 26, 2009

Open mouth, insert foot, chew

I was recently on a tour of Latin America, and the only regret I have was that I didn't study Latin harder in school so I could converse with those people. --- Dan Quayle


But, apparently, that's just a joke that was taken out of context. Here you can see allegedly actual Quayle quotes, such as:

I love California, I practically grew up in Phoenix.

For NASA, space is still a priority.

The future will be better tomorrow.

Thursday, June 25, 2009

Another reason to do your own thinking

Check this out: people are "famous" because others talk about them... the status of celebrity exists only in the eye of the beholders.

Tuesday, June 23, 2009

See? Ten is a good number!

Here's a new Smalltalk consulting firm called 10 Pines. How about that!

Look Ma, no WinVICE!

Aha! Somebody took a photo of the C64 emulator running in VisualWorks (here's the context). Erm, you're going to ESUG, right? I am telling you right now:


Sunday, June 21, 2009

Moving along, slower...

For the Fundamentals book, I managed to finish the section on object identity tests for the polymorphism chapter. I think it's pretty clear that things like isKindOf:, respondsTo: and includesBehavior: are a terrible idea for the vast majority of applications. Now I just have to write about proxies, and then there's a large section on class side polymorphism.

Also, the draft is growing again... after slimming down to 302 pages, it's up to 312 pages now. Maybe I should cut down the page estimate to about 400 pages...

Thursday, June 18, 2009

New VisualWorks forum!

There is a new VisualWorks forum here. I think this is a great addition to the VisualWorks community resources. Join in (then you get to see all the sub forums)!

Tuesday, June 16, 2009

FTP server back in business

I just restored service at The user changed to 'smalltalk'. The password is still 'now'. Enjoy!

Sunday, June 14, 2009

Another day, another burst

In the past couple hours, I rewrote over 20 pages. I just have 11 pages to rewrite. Also, I dropped another 2 pages' worth of unnecessary stuff. Things are moving along... I should be done in a while.

Update: I am done rewriting. 54 pages in 2 days, with time to spare. I really need to switch contexts though...

Saturday, June 13, 2009

Burst mode

I rewrote 17 pages in 2 hours. Just 36 pages to go. I need a little break.

Wednesday, June 10, 2009

Rewriting with a two finger algorithm

I rewrote the tail of the draft, and therefore I just have to get to page 279. The left finger progressed to page 226. Just 54 pages to rewrite.

Sunday, June 07, 2009

More rewrite progress

Alright, I just finished rewriting chapter 4 of the first Fundamentals book volume. I am at page 221 of 306. A bit of additional patience, and I should be working on the yet unwritten rest of chapter 5. I need to start thinking about the cover for the two volumes, too...

Tuesday, June 02, 2009


The Fundamentals rewriting effort has progressed substantially. I am currently at page 195 out of 306. The leading edge is within reach. Just 111 more pages of rewriting, and it's time for new material.

Let's see, last time I wrote it was May 10th, and at that point I was at page 97. Thus, I rewrote 98 pages in 23 days, at an average rate of ~4.23 pages a day. Thus, I should be done with the rewrite by the end of June. That's unacceptable. I need to go much faster than that. We'll see...

Update: 3.5 hours later, I am at page 204.

Saturday, May 30, 2009

Ward's comment

At RubyConf, Uncle Bob stated that something that "killed Smalltalk" (?) could kill Ruby too. He quoted Ward Cunningham as saying that the issue is that in Smalltalk it is too easy to make a mess. But what does that assertion mean?

I would suggest that making a mess is difficult when the existing source code base imposes restrictions on us. Not just any mess works, it has to be a sophisticated hack. Those take time and effort when we are working with unnecessarily convoluted software. In effect, existing complication makes it much harder for us to get immediate gratification, and the consequence is that we do not end up doing the first thing that crosses our minds. In other words, when there is significant software debt, we become more concerned about piling on additional debt, and so we stop and think before we act. Smalltalk has comparatively little software debt. In fact, it exercises a great deal of austerity to get out of our way. Thus, if this line of reasoning regarding our attitudes toward debt is correct, it has to be tempting to just write any kind of code that does the "trick" so we get immediate gratification. What's a bit more of debt when we are not paying a lot of interest, right? If we can reap the short term benefits of debt, while passing on the long term burden to the next one in line, so much the better.

We should recognize this pattern of short term benefits, of "just one more purchase on the credit card", of "more house than we could reasonably afford", of "exponential growth forever", of "après moi, le déluge". We should already know the consequences. And, even when we are consciously aware of them, we just do not have the power to restrain ourselves*.

Therefore, under Ward's paradigm, it seems that languages have to be somewhat convoluted to work best. In other words, Smalltalk blocks have to be bad because they are easy. Instead, Java's generics have to be good, even if they expand a single statement to a 15 line paragraph. It seems as if the intrinsic difficulty will keep us concentrated (and distracted) enough so that we will not readily produce horrendous hacks.

Thus, I can't help concluding computer languages are designed with some perceived society behavior average in mind. What should we make of strict type checking? What should we make of generics? What should we make of the typical hacks we see in Smalltalk, the apparent ease with which a mess is made that Ward alleges to? What should we make of beautiful Smalltalk code? And what should we make of the minds of those that design languages?

I have a feeling Smalltalk was designed for those that, although uninhibited, are capable of letting go of immediate gratification because they have high expectations of themselves. It's not about inverse vandalism, it's about doing transcendental work and making extraordinary a reality. It is about us and how we realize our potential, rather than a language and being a "code monkey". Alan Kay phrased this issue eloquently:

A twentieth century problem is that technology has become too "easy". When it was hard to do anything whether good or bad, enough time was taken so that the result was usually good. Now we can make things almost trivially, especially in software, but most of the designs are trivial as well. This is inverse vandalism: the making of things because you can. Couple this to even less sophisticated buyers and you have generated an exploitation marketplace similar to that set up for teenagers. A counter to this is to generate enormous disatisfaction with one's designs using the entire history of human art as a standard and goal. Then the trick is to decouple the disatisfaction from self worth --- otherwise it is either too depressing or one stops too soon with trivial results.

So, what is it going to be? Another short term dopamine high with little effort involved, or something a bit more elaborate? The extreme of pop culture programming in which every teenager is a "computer genius", or something more along the lines of the artful computer science Donald Knuth talks about?

As far as I am concerned, I will live only once. I have no interest in settling for some "socially acceptable" degree of mediocrity. In particular, I have better things to do than blindly accepting somebody else's idea of how much software debt I ought to carry. Thanks, but no thanks.

* Sometimes, we rationalize our actions by calling them "human nature". But this "nature" changes when you look at different societies, so it's not natural. It is arbitrary, it is taught, and it is learned. One way or the other, we are always responsible for our actions. Behavior is the consequence of volition.

Tuesday, May 26, 2009

You have to be kidding

A new type of bank has emerged. Uhh... what to say, right?

Ok, here's the deal. If reincarnation or ESP existed, they would offer a tremendous competitive advantage. Evolution would immediately weed out anybody that

  • had not reincarnated yet, because those who have would remember stuff from their previous life and would not need to study anything etc,
  • did not have ESP, because those that do would win the lottery, the races, would never get killed etc.
Effectively, the only people left would have reincarnated several times, be incredibly wise, and would have awesome ESP powers. Since none of that has happened, no such thing exists. See also Fermi's paradox.

Friday, May 22, 2009

New presentation at PDX.ST next week

Next Tuesday, I will give a new presentation at the Portland Smalltalk User Group. The talk is entitled The Laws of Form and Computer Programming, and it shows how two extremely simple principles govern what we do when we write software.

The meeting begins on Tuesday May 26th at 6:30pm. The presentation will probably start at about 7:00pm ish. The location is the Fourth Avenue PSU building, at SW Fourth and Harrison, room FAB86-01. See you there!

PS: you can find more about The Laws of Form and how they relate to Smalltalk in particular here.

Tuesday, May 19, 2009

Another first today

Last year in Amsterdam, a taxi driver asked me if I was a professional whistler. You know, there are some folks who have actually recorded jazz with whistling solos, amazing stuff really. I was just whistling U2's Where The Streets Have No Name, it was nothing out of the ordinary. But anyway, a while ago I was just whistling some random jazz tune, and I got whistling requests.


Maybe I should get myself a sax or something.

Sunday, May 10, 2009

And speaking of doing...

I've been quite busy with the Fundamentals book. I am working with a (non technical) editor, and as a result I basically have to rewrite what I have written so far. I am currently at page 97. In 200 or so pages, I will catch up with the leading edge and continue writing about polymorphism.

Saturday, May 09, 2009

What killed what?...

These days, there's a lot of talk about what allegedly "killed Smalltalk" and so on. I think it's the wrong observation. It's not about Smalltalk, or Java, or Ruby, or whatever. It should be about what we do with the language of our choice. So my question to those that spend large amounts of time wondering what is or is not the most popular language on Earth is: when you finally reach your death bed, are you going to be satisfied with the time spent talking about stuff instead of doing stuff?

How much progress could we have achieved if we had skipped the discussion about what's dead or alive? How many man hours have we wasted producing hot air? How about doing something productive instead? Can we move past yet another incarnation of CRUD applications already? I know building CRUD applications is rewarding, but it's because we've done CRUD for decades and so we hardly ever fail. This type of program is not a real challenge anymore. How about creating something new for a change? Please?

Monday, April 13, 2009

Smalltalks 2009...

So, my friend... in 2007, we started having a yearly Smalltalk conference in Buenos Aires, Argentina. In its first edition, we had about 300 registrations and a huge variety of high quality presentations. Last year's edition had material I didn't even dare suspect Smalltalk was being used for. Some of the presentations I remember fondly are:

  • How Smalltalk was used to improve the quality of service given by emergency dispatchers for a very large city, leading to e.g.: less deaths.
  • Percolation of viscous liquids through porous materials. This research effort produced original results.
  • How to write your own hard drive controller driver from Smalltalk in 5 minutes, after booting directly into Smalltalk without running an operating system.
  • A Commodore 64 emulator that works faithfully (I owned a Commodore 128, I know the Commodore 64 very well) and in real time.
This is seriously exciting stuff! And yes, we will have Smalltalks 2009 this year. Stay tuned...

Saturday, April 11, 2009

Book sighting in a bookstore near you?...

Ohhh... I've seen new copies of my books at the technical branch of Powell's in Portland...

Monday, March 23, 2009

Book update for this week

I am getting some additional writing help, which is very much appreciated. The introduction has been basically rewritten, and the result is vastly superior. This makes me happy. In addition, I also finished section 5.2.2 in chapter 5. Writing about Conway's Game of Life was quite enjoyable. The draft is now 298 pages long. The book estimate is still at about 450 pages... although I am beginning to suspect that figure will come under pressure soon.

Thursday, March 19, 2009

Absolutely wonderful song

I have been listening to lately, and I ran across an incredibly beautiful song by Radix called "I realize". I already liked Tournesol a lot... this is great stuff!

The lyrics are from a poem by Kim Ault, they are read by Melissa Tan, and they go like this.

    If I could gather all the stars and hold them in my hand,
    the colors I would then possess would not be half as grand
    as those which I have seen when I look deep into your eyes,
    or come across when I have kissed your lips, I realize.

    If I could ponder all the truths men sought since time began,
    they would not teach me more than if I were to touch your hand
    For truth to no one you have touched appears as simple lies
    And nothing could be truer than your touch, I realize.

    If I were given lasting life as only God could do,
    I'd shun it all and turn away, if I could live with you.
    For even God has never known the immesurable size
    Of the love that is within your heart, I realize.

Sunday, March 15, 2009

Seen somewhere...

pi: get real!

i: be rational!


My keyboard has two keys that represent things I will never be able to accomplish.

[ctrl] and [esc]

Thursday, March 12, 2009

Update on chapter 5

Everything is going well with the first volume of the Fundamentals book. I am quite happy, writing about the Game of Life and the various applications of polymorphism. I think it's great (and original) material. The draft is now 278 pages, and it is growing quickly. More to come...

Update: 288 pages by Saturday.

Wednesday, March 11, 2009

Smalltalk coming to a game near you...

Check this out: 317fps from Smalltalk...

Here's the home page of the framework, which can be downloaded. Includes functioning OpenGL, DirectX, etc etc etc...

Monday, March 09, 2009

Smalltalk coming to a computer near you...

I just found this article about Scratch, which is written in Squeak. Some impressions...

Granted, these were exceedingly simple applications. Little more than a year into its launch, Scratch is focused on games and playful apps that revolve around images, animation, and music. But its building blocks - which can rightly be called building blocks - are remarkably intuitive. Five minutes after launching the environment for the first time, you can snap together an app that, say, pixelates a digital photo when you clap your hands.

More mass publicity, please :). We should also keep in mind that if the goal of Scratch is for everybody to write computer programs, well... Smalltalk was designed for that to begin with.

Saturday, March 07, 2009

Talking about design...

So I decided to tackle exercise 3.30 from the Mentoring Course book, which calls for determining whether it is possible to implement Conway's Game of Life without using small integers to run the calculations, and to do so efficiently when compared to an implementation that does use small integers.

Well, I just did. Neither implementations are optimized at all. And yet, the one that uses small integers is (by a few percent) the one that runs slower.

Polymorphism... all polymorphism...

Design issues

James makes the point that design decisions usually have an effect time span that is usually longer than the tenures of the people that make the decisions in the first place. There are two sides, basically: ship it now, or get the design right.

Of course, neither is perfect. To me, what seems to work better stems from accepting you will never get the design right. That is basically a utopia that will just not happen.

That does not mean no thought should be spent on design either. The critical observation is what do you do when you know your design is not perfect. The goal becomes reaching v5.0 and keeping your sanity, not just v1.0 and 50% hair loss.

It is then that you design for flexibility. In practical terms that means design principles such as no isKindOf:, no respondsTo:, no switch statements, no hot methods that every addition to the image wants to modify in incompatible manners, no implementing functionality in a way that paints you in a corner from where you cannot back out, no unloadable code, no writing code in the first person, and using classes to explicitly express what is implicitly meant by a web of ifTrue:ifFalse:.

If the implementation of a piece of functionality needs to be mostly reimplemented due to a small change in requirements, then it was not designed with flexibility in mind and it just represents latent homework for the future --- either a maintenance nightmare or a rewrite from scratch.

With practice, however, the techniques you need to avoid this homework end up costing you less time than a more traditional approach would take you in the first place. This is not magic, it is just a matter of identifying and eliminating deleterious side effects.

Finally, this is also a reason why I think the Fundamentals books are important.

Saturday, February 28, 2009

Updated thoughts about SSD drives

I wrote about SSD drives before, and there has been recent discussion about them in the context of GemStone. I thought I'd summarize a number of considerations here.

1. SSD drive size and reliability.

Drives can be either MLC or SLC. With regards to reliability, MLC cells can be written 10k times, and SLC cells can be written 100k times. Assuming wear leveling works correctly (Intel quotes that 4% of cells will be written to more times than average), the write count times the drive capacity gives you a data write barrier past which you cannot go without endangering data.

The Intel X-25M drive can be 160GB, and uses MLC. This means the drive can write 160GB * 10k = 1.6TB * 1k = 1.6PB.

The Intel X-25E drive is 32GB, and uses SLC. This means the drive can write 32GB * 100k = 3.2TB * 1k = 3.2PB.

But how safe is that 4%? Intel claims that the drives are designed to write 100GB per day for 5 years. This results in ~183TB of data written over the expected life of the drive. That is a factor of 10 less than the absolute maximum write barrier for an X25-M. For the X25-E, this would be a factor of 20, assuming the design criteria is the same.

For comparison, a 74GB hard drive rated for enterprise use usually has a 5 year warranty. Assume such a drive can write 50mb/sec. Over 5 years, the amount of data written will be no larger than 7.5PB. A more modern drive can write about 3x faster, and so the data write barrier will be around 20PB.

It does not appear meaningful to go by MTBF in hours because drives usually have a 1.2 * 10^6 hour MTBF, which translates to over 100 years.

In terms of cost, it should be noted that SSD drives are currently an order of magnitude more expensive than hard drives, and that the write barrier for SSD drives is two orders of magnitude less than that of hard drives.

What you get in return is throughput. Which brings us to...

2. Comparison of SSD to RAM and other devices.

So let's say you put an SSD drive to house GemStone extents. Its random access speed makes the GemStone database fly, and for good reason. However, there are other things to look at. First, let's assume for the time being that we're talking about 32 bit GemStone.

First, what is the largest write burst the I/O subsystem has to deal with? Is there hardware that provides true write caching that can deal with this? If so, use it and keep the cheaper hard drives.

Second, what is the largest read burst the I/O subsystem has to deal with? From the GemStone experience, it looks like this value is definitely large, and so SSD drives become attractive. Let's assume a RAID 1 setup with two regular hard drives that are replaced by two X-25E drives. That will cost $800 or so.

Well, the problem with this is that for about $1000 you can get 32GB of RAM (4x8GB). I do not think there is a way in which $800 worth of SSDs will beat $1000 worth of RAM. The whole SATA interface is bypassed, and the latency is way lower. Just looking at it in terms of throughput, the RAID 1 setup cannot give more than 600MB / sec. I have a feeling RAM can do better than that --- and even if it couldn't, then the SATA drives would not be able to write to RAM faster than the RAM allows them to, so really you can't go faster than that. As soon as the whole database is cached in RAM, which will happen 99% of the time, performance will be even better than with SSDs.

Which leads us to the main problem. What is the write burst rate that has to be sustained? If regular hard drives manage to deal with it, then it would appear that spending $1000 in RAM is better than spending $800 in SSD drives.

What is the size of the average GemStone database? Does it fit in 8GB? If so, the case for SSDs as opposed to RAM becomes weaker. Basically, what would need to be done is to use a 64 bit OS to let RAM be used as disk cache, and then simply execute the 32 bit GemStone in it.

In regards to MTBF of RAM itself, loading a box with lots of memory makes it more vulnerable to shutdowns due to bad memory. Does that justify going to SSDs because you can swap a defective SSD with another one without shutting down the machine?

Now, if we consider 64 bit GemStone, then RAM can be directly allocated to the page cache and so the OS does not need to get involved in supporting huge amounts of disk cache. If a setup can be achieved such that a regular hard drive installation can cope with the largest write bursts, then RAM over SSD drives appears preferable --- the whole database will be in memory, and there is no need to do disk I/O for reads at all.

3. SSD drives compared to hard drives.

For random access, SSDs are way better --- but this depends on the write rate, as lots of updates will cause SSDs to fail more frequently and they are still ~10x more expensive than hard drives per gigabyte. For sequential streaming access, hard drives are the way to go.

Finally, note that there are SSD drives mounted on PCI cards that offer throughput of close to 700MB / sec for both reads and writes, which is twice as much as SATA interfaces can deliver on a per drive basis.

4. Change and other thoughts.

To me, SSDs have the potential to replace hard drives in general when they can better match the cost per gigabyte and capacities. Reliability is still somewhat of a concern because even Intel acknowledges that without wear leveling, the areas that store the file system itself would get written to millions of times with ease. Again, how safe is that 4%? And what is the issue with the reported write performance deterioration that is alleged to happen for Intel SSD drives?

Something that would be nice in SSD drives would be the ability to replace individual faulty chips and the data controller. This would make data recovery much easier for everybody.

Speaking of capacity...

Wednesday, February 25, 2009

Assessments 1.7

I just fixed a small problem where in rare cases you could get MNU #tearDown when running SUnit Benchmark tests.

Also, I am working on some enhancements to the tools but I am not done yet. Soon enough...


Thursday, February 19, 2009

New plan for the Fundamentals book

With the draft currently at 250 pages after 4 chapters, I get to chapter 5. It's about polymorphism, one of my favorite techniques. I've been working on the contents. So far it's going to have 4 main sections plus exercises. The list of topics, however, is large. If inheritance alone took about 120 pages, then polymorphism should take roughly that amount. Once I am done with it, I should add more exercises to chapters 3 through 5, and at that point I estimate the draft will be around 450 pages or so.

So, instead of pushing on with the remaining 4 chapters which would have to fit in less than 300 pages to satisfy Lulu's 740 pages per volume limit, the Fundamentals book will come out in two volumes. Volume 1 will be chapters 1 through 5, and Volume 2 will be chapters 6 through 9. The current chapter list is below.

  • 1: On training.
  • 2: On style and technique.
  • 3: On boolean expressions.
  • 4: On inheritance.
  • 5: On polymorphism.
  • 6: On enumeration.
  • 7: On recursion.
  • 8: On exceptions.
  • 9: On optimization.
I already know Volume 2 will be quite significant in size. There is plenty of really interesting original material on enumeration and recursion that I want to write about. Also, I suspect that the optimization chapter could easily balloon into a 200 page embedded book without trying too hard. Splitting this work into 2 volumes seems like a good decision.

This means that I have a rough ETA for Volume 1 --- apparently, I will meet my goal of having a new book out for ESUG this year. I better start thinking about the cover art :).

Wednesday, February 18, 2009

Wikipedia on polymorphism

I just glanced at the entry for polymorphism in the Wikipedia, and I think that for OO languages the text is too restrictive as it says that OO languages provide polymorphism by inheritance only. Well, that's not really so, particularly with Smalltalk. Thus, I just fixed it.

Now, I am sure there are other places that could use a bit of generalization due to Smalltalk and other languages like it. I am really surprised, however, that the entry for polymorphism did not make reference to Smalltalk. It doesn't take that much time to fix so, really, what's holding us up?

And hey, if my edits are flat out wrong... you know what to do :).

Saturday, February 14, 2009

Chapter 4 is finished!

I just finished the Fundamentals book's chapter 4, On Inheritance. The draft is now 250 pages in size. Next up is chapter 5, On Polymorphism.

Thursday, February 12, 2009

Book writing methodology

James Savidge noted this page that describes the writing methodology of another book author. I thought I'd comment on what I do. I think what will become clear is that there is no one way to write books :).

As Danny Choo says, I dislike Word quite a bit. So I use LaTeX instead (the MiKTeX distribution in particular). This produces the DVIs that I look at on the screen as I am writing, and also makes the PDF files I send to Lulu.

Danny uses software to organize the content of his books. In particular, he uses Devonthink, which could be roughly described as scrapbook software. I do that work just as he does, but in a different manner.

When I was writing the mentoring course book, I had already decided what was going to be put down in paper and a rough sketch of the chapter structure. I do remember I spent some time changing the order of the chapters and so on. But basically it was set, and so then my job was to perform a brain dump.

This activity, the brain dump, is what I find most expensive. The hardest aspect of it is the serialization of concepts in a way that eliminates or at least strongly restricts the occurrence of forward references. In that way, new ideas can be presented in a constructive way that resembles to some extent how they came to be.

Let's go through an example of this. When I was taking algebra, we had mathematical induction exercises such as

  • prove that 1 + 2 + ... + k = k(k+1)/2
  • prove that 1 + 4 + 9 + ... + k^2 = k(k+1)(2k+1)/6
These proofs were done by induction, and so they required quite a bit of work. Only of course if we had been taught finite calculus instead, then these things would have been trivial. In addition, we would have known how to sum cubes, fourth powers, and any nth powers as well. All at once, with one swipe of the pen.

So, what I try to do is to present what would be the equivalent of these sums from a broad point of view, and then develop a chain of thought that solves all the occurrences in general. This saves time, and is more powerful because now if you were told to prove something like
  • 5 divides 7^n - 2^n, for all positive integer n
then you wouldn't use mathematical induction. What a royal mess! Instead, you could write 7^n as (5+2)^n, rewrite it using Netwon's binomial expansion, and then you would find that the last term is 2^n. If you take it out, then the remaining terms are all multiples of 5, you can extract 5 out as a common factor and clearly 5 divides 7^n - 2^n.

The difference is that if you use induction, you spend energy to prove that 5 divides 7^n - 2^n for all positive integer n. With finite calculus, you know that j divides (j+k)^n - k^n, for (basically) all j and k. Big difference.

My task is to write about the equivalent of finite calculus. And although I write about computer programming instead of actual mathematics (same difference anyway), the material has to flow in a mathematical manner. No forward references. Only previous results shown to be correct can be used at any one time. The way in which an idea is developed must be serialized such that it can be recreated in a reproducible manner by the reader, and so that the method of derivation can be made explicit for others to reuse.

What works best for me is to divide the contents of the book in chunks such as chapters, and make a rough sketch of each. But then, instead of using something like Devonthink, I hold it in my head. Something that I wrote about in the Fundamentals book is that the place where one can think faster is in one's brain. Then why bother with the very slow sensory / tactile interface unless absolutely necessary? Everybody knows that thrashing the page file is bad. Then why do it ourselves by choosing an arbitrary way to organize our thoughts for physical replication? That just adds CRUD homework on top of our thoughts. Had a new idea? Great, now spend time putting it in the computer with a scrapbook entry. And it gets even worse, because if we happen to radically change the way we think, then the endless hours we spend making pretty looking representations of what we used to believe need to be redone. I'd rather spend most of my time thinking new things instead.

Eventually at least the beginning of the chunk becomes stable enough that subsequent iterations don't change it. Then, that gets written down. And writing goes very fast too, because the vast majority of the details and how the material plays with everything else has already been thought out. The thing that I do which is closest to using Devonthink is to add notations such as
  • % this or that subtle detail
  • % such and such material comes first, then the other stuff
to the LaTeX file so I do not forget. However, these are rather minimal.