Friday, December 31, 2010

The non-discriminating audience

Check out this patent from Apple: let's reward reviewers of products when their prediction of product success matches actual product success. This approach has a number of problems.

First, it's a well known fact that you can get any junk sold by the millions with a proper marketing campaign, e.g.: Britney Spears (with all due respect). Thus, we conclude people will do effectively as they are told.

Second, as per the item above, if many reviewers give glowing reviews of product X then it's more likely product X will succeed, so the reviewers stand to benefit. It does not matter whether product X is good as long as it sells, e.g.: Lady Gaga (with all due respect).

Third, it's yet another obvious sign that shows today's audience is non-discriminating. Rather, it's like this plant that grows towards light. Marketing is trying to shine the light the plant will grow towards the most. Again, it does not matter what plant it is, or what light it is. All that matters is that money keeps flowing.

Therefore, this patent is about maximizing the flow of money and, thus, Apple's profits because they have a toll booth position controlling access to the things being bought. It does not have anything to do with content quality.

Why can this happen to begin with? Because the audience is non-discriminating. In other words, the audience is a poor judge of quality. Or, in perhaps more direct terms, what Apple and many others do is to target an uneducated audience. Because if the audience was more educated, then we wouldn't have to think music was good because somebody else likes it. We would not even hear about Britney Spears, or Lady Gaga, or...

... well? It's not just about music, is it? How about our crappy politicians, political parties, laws, justice, health care, salaries, jobs, environment, energy efficiency, journalism, etc? How will this uneducated audience deal with today's very complex problems using their US-standard high school education? It's just not possible, and so we get what we deserve: an exploitation marketplace like that set up for teenagers.

But folks at Apple and similar places are not to blame (at least not entirely). Rather, the non-discriminating audience is to blame. Because if that same audience would stop accepting crappy stuff, then the producers of said crappy stuff would go out of business. But, oh, alas... how do you fix the non-discriminating audience when it is so convenient to so many that it remains non-discriminating...

Tuesday, December 28, 2010

Assessments 1.49

I just published a fix so that the Assessments RB extension works when Store is not loaded. Enjoy!

Monday, December 27, 2010

Smalltalk is typed

In the last post, I mentioned that I had found some fascinating material for chapter 6 (in Fundamentals' volume 2). Here's a bit that has profound consequences: Smalltalk is typed. Well, of course, receivers have to be of the same type, right? Yes, of course. And that means one of the most fundamental types of objects in the image will cause endless performance issues because each one of them is an instance of a different class. But which objects are singletons and instances of a singleton class?


So that means that whenever you send messages like #respondsTo:, or #withAllSubclasses, or #superclass, or #isKindOf:, you will effectively cause message sends that cannot possibly be cached (particularly when you do them in a loop). Consequently, performance stinks. I know, because I did the experiment of replacing VisualWorks' sorted collection method dictionaries with actually hashed method dictionaries. The performance of the enumeration part of this expression

Object withAllSubclasses reverse do: [:each | each yourself]

went up by 60-70%! But there are many other such cases hidden all over the place. For example, put all those classes in a Set and then look them up to see if they are there. It happens --- slowly, but it does. Now do the same with an identity set. Bam!!! It's two times faster!!! But why?

The message #= is implemented in Object as #==. However, when the message #= is sent with a multitude of receiver classes, each send requires a lookup (and an expensive lookup at that, because you have to go all the way up to Object). If you use an identity set, then you send #== directly --- which in most Smalltalks is not even a message send. Thus, there are no lookups when comparing objects, and no wonder the code runs way faster.

Huh... Smalltalk is typed, and there are consequences to that...

Among other things, chapter 6 explores actual production problems in which this kind of stuff makes a huge difference. Hopefully I can finish it off soon so I can move on to chapter 7, On Threading.

Sunday, December 26, 2010

Book writing update...

I just finished the next to last section of chapter 6. It turned out to be yet another example of fascinating material. The draft is now 150 pages. I hope to have the last section finished soon, and after that it's chapter 7 which, for some reason, I had previously decided to write on threading. Semaphores, shared queues, critical sections, that's a lot of fun!

Saturday, December 18, 2010

How long is that name field?

Oh, everybody knows first and last names fit in 20 characters, right? Well, ok, maybe 32. Or maybe 50, to account for some edge cases like this. Right? No, wrong. How about 590 characters for a last name, plus 25 middle names and a suffix of Senior? What happens to this guy's identity when he comes into the office to be registered in some computer system?

And everybody knows that, in the US, everyone has a social security number, right? Well, at least those on some payroll database. Sure, unless you're one of those that has many, or one of those whose social security number has changed over time. Does that mean that the HR department cannot keep track of your identity because someone in the IT department assumed that "one person" is identical to "one social security number"?

If the software cannot handle the identifiers used to determine your identity, does that mean you don't exist? For example, what happens if you are Chinese, but the characters used in your name are not supported for input in computer systems?

These are fascinating problems, because they illustrate how absolutely limited (and limiting) our software can be when we allow reality to be defined by computer programs. You might want to read Data and Reality, by William Kent. Some excerpts are available here.

Now, what happens when we allow software to alter our behavior so it fits into certain patterns? Don't we become a mindless gear in someone else's machinery? For what purpose? And who benefits? Maybe we shouldn't celebrate some of today's "technological advances" so much...

Wednesday, December 15, 2010

About a couple of my books

I recently got a question about how the Fundamentals and the Mentoring Course books are different. I thought I'd share the answer here. But before I do, I want to thank you for your interest in my books. I really appreciate the nice feedback I've received, and I hope to continue writing books that earn this kind of praise in the future.

The Fundamentals and the Mentoring Course books focus on different aspects of programming. For example, the Fundamentals books focus more on techique aspects such as how to use inheritance, polymorphism, enumeration, threading, weak references and similar features. It is meant more as a training course on the material I think one should be able to do automatically and without thinking, with the intention of freeing up thinking resources for attacking the design problems that usually drive the choice of which technique to use in the first place. In short, the Fundamentals books say "if you learn all this stuff so it's automatic, you will have more time to think about better designs for your programs".

The Mentoring course takes a different approach. It assumes readers already have a reasonable grasp on Smalltalk, and explores different design methodologies that have an impact in how programs come to be. In particular, the book traces important influences that acted at the time Smalltalk was designed, but which usually remain hidden from view nowadays. For example, the relevance of Laws of Form in Design Principles Behind Smalltalk is evident, and yet few people consider why it was so important that Dan Ingalls paraphrased Laws of Form in his paper. There is a lot of energy behind techniques like test driven development, which emphasizes that one should start by writing tests, but it's much more effective to design and distribute object responsibilities first. It's critical to be more aware of how these factors affect the code we write, because it is only when we consciously use these data points that Smalltalk's powers can be fully realized. In short, the Mentoring Course book says "if you design your programs taking into account these bits of information, the resulting programs will be substantially and measurably better".

So, as you can see, the books focus on different aspects of the problem of how to write effective Smalltalk code. It's hard for me to make recommendations, but I hope these bits can help you choose if you have to.

Now on to other questions I have received. I am currently working on Fundamentals volume 2, and I am having a lot of fun. The draft recently reached 130 pages, and I am getting closer to finishing off chapter 6 (on enumeration). As soon as I am done with that, the next chapter is about recursion. I have so much awesome material to write about, I can't wait! I'd like to be done with volume 2 sometime next year. Volume 3 should be quicker, as (so far) it will have the last chapter of the Fundamentals books, which is about optimization. I hope I won't have to add another chapter, the chapter count is 10 and ten is a good number :).

The code shown in the books was written mostly in VisualWorks. However, I did not mean the code to be tied to any particular dialect. In particular, the books do not talk about any UI specific material, so I think the code should work well on Pharo and others (perhaps with just a small change here and there). I know some readers have already ported some of the code to Squeak / Pharo, so check out the usual code repositories and see if the code is already there.

Regarding coupons, Lulu has a series of coupons for December, and they are running a different coupon a day. I'd check their website and see what's the coupon of the day. For example, today they are offering free second day shipping.

Thank you again for your interest and appreciation. Now, back to the scheduled programming.

Monday, December 06, 2010

Smalltalks 2010 videos online

You can check Smalltalks 2010's videos at FAST's website. Enjoy!

Wednesday, December 01, 2010

Lulu coupon campaign

Lulu started a campaign in which it will offer one coupon per day. Here's the link. Today, they offer free shipping for anything over $35...

Tuesday, November 30, 2010

Coming to Smalltalks 2011?

Who knows, you might end up going to Tigre. The New York Times explains...

20th anniversary

I started playing Football Champ on November 30th, 20 years ago. What a trip :).

Sunday, November 28, 2010

Lulu offers 25% off coupon

Enter coupon code CYBER305 at checkout and receive 25% off any order. The maximum savings for this offer is $185. Enter coupon code MONDAY305 at checkout and receive 30% off your order of $750 or more. The maximum savings for this offer is $750. Sorry, but these offers are only valid in US dollars and cannot be applied to previous orders. You can only use these codes once per account, and unfortunately you can't use these coupons in combination with other coupon codes. These great offers expire on November 29, 2010 at 11:59 PM PST, so don't miss out! While very unlikely, we do reserve the right to change or revoke this offer at anytime, and of course we cannot offer this coupon where it is against the law to do so.

Saturday, November 27, 2010

Smalltalks 2010 photos available!

I just uploaded a bunch of photos taken at Smalltalks 2010 here. Enjoy!

Wednesday, November 24, 2010

Lulu offers free shipping within the US

Enter coupon code GROUNDFREE305 at checkout and receive free ground shipping on orders of $50 or more. The maximum savings for this offer is $100. Shipping destinations must be within the United States. Sorry, but this offer is only valid in US dollars and cannot be applied to previous orders. You can only use this code once per account, and unfortunately you can't use this coupon in combination with other coupon codes. This great offer expires on November 26, 2010 at 11:59 PM PST, so don't miss out! While very unlikely, we do reserve the right to change or revoke this offer at anytime, and of course we cannot offer this coupon where it is against the law to do so.

Friday, November 12, 2010

Smalltalks 2010: were you there when it happened?

So you thought you'd be ok missing this conference, right? Really? Maybe you should reconsider. We just came back from the social event, in which Eliot Miranda played guitar for us.

Moreover, Eliot was joined by Eleazar Madriz. Eleazar is originally from Venezuela, although he came to the conference from Brazil.

If you were not there, then you missed Eliot's tune and the subsequent jam session.

... empezó un plano, un plano en R^2...

What is the meta-problem? Smalltalk, baby!

Smalltalks 2010 makes the newspaper

Here is the article, including some video and an interview. Check it out!

Wednesday, November 10, 2010

Lulu's November coupon

Enter coupon code "TURKEY" during checkout and save 10% off the purchase price. Discount cannot be used to pay for, nor shall be applied to, applicable taxes or shipping and handling charges. Maximum amount that may be applied to discount is $10.00 per account. Promotional codes cannot be applied to any previous orders. No exchanges or substitutions allowed. Only one valid promotional code may be used per order. Offer expires November 30, 2010 at 11:59 PM EDT. reserves the right to change or revoke this offer at any time. Void where prohibited.

Saturday, November 06, 2010

FTP server down for a few weeks

The FTP server will be unavailable for a few weeks. It should be back up after thanksgiving.

Thursday, November 04, 2010

Did you see Smalltalks 2010's schedule?

Seriously, what an amazing lineup for the talks, which also include a GemStone tutorial. And did I mention there is a formal research track too? Check it out at the FAST foundation's website, under the schedule section.

So, you are not coming?...

Tuesday, November 02, 2010

This is a problem (mod the hyperbole)

Here is a neat article complaining that CS students these days "don't study algorithms", can't spell or write properly, etc. I do not know to what extent the assertions hold, but it seems to me they cannot be that far from reality. I remember looking at 4 year college/university graduation works (thesis, or whatever else they are called depending on the college/university) at one point, and finding something equivalent to "how I spell checked XML documents using the standard Microsoft tool set". Just sad...

Friday, October 29, 2010

Definition of negligence, please?

Check this out: you can sue a 4 year old for negligence if the child crashes into a senior citizen while riding a bicycle with training wheels causing injury leading to death. If that's negligent enough to merit a lawsuit, then what escapes this criterion for what constitutes negligence (other than acts committed by a child less than 4 years old)?

During soccer matches, heart attacks are more likely. Are players negligent because their playing leads to death of others? Or are TV stations negligent for knowingly broadcasting the game? Or are TV manufacturers negligent for creating devices that are too realistic, which lead to excessive stress and death? Is the dead viewer negligent because they committed suicide?

What if the person suffering the heart attack was a train driver listening to the game on the radio? Is the deceased guilty of involuntary (negligent) mass manslaughter because the train did not stop at a signal? Or are the train line managers negligent for not installing proper fail safe train stop devices?

Basically everything you eat or drink has some substance that makes you sick. For example, tap water has traces of several prescription drugs. Are you negligent for drinking? Are the drug companies negligent for not making the drugs biodegradable? Are the municipalities negligent for not filtering the water enough? What about the bottled water companies that merely bottle tap water, are they negligent too? Are those that throw out prescription drugs in the garbage (landfills) or toilet / sink (sewer) negligent?

Assume you vote for someone that does something that in the end is a bad idea. Are you negligent for voting "wrong"? In other words, let's say that in the 2100 elections the Politicians United Party's candidate is elected president, and that during the tenure the PUP's president decides to raise taxes to 200%. Are all PUP voters negligent for voting in this president? What about the opposition, those who voted the Allied Politician Party? Are all APP voters negligent for not winning the election against the PUP? Or, on the flip side, are APP voters now proven non-negligent because their candidate was better, even if the candidate did not get a chance to perform and prove to be a better choice? Does that prove PUP voters were negligent? Or are PUP voters proven non-negligent because the APP's candidate had negligently promised to increase the retirement age to 100?

Hindsight is always 20-20, but there is more than that. The issue is one of expectations. IME, the more you learn about different things, the more you see you cannot take things for granted. In particular, you cannot take impeccable performance as a given. We're merely human, and we make mistakes. So where is this expectation of perfect behavior coming from? Is that even reasonable to begin with? And don't forget that the only way to stop making mistakes at your job is to not do your work.

But what about the senior citizen run over by a 4 year old on a bicycle? Should we think the senior citizen was negligent for not having bodyguards? Why wasn't the senior citizen equipped with a siren / rotating light hat to make children riding bicycles aware of the road hazard? Why wasn't there a slow moving vehicle sign attached to the senior citizen's clothing? Why wasn't the estate of the senior citizen (the plaintiffs in the lawsuit) concerned enough with the senior citizen so as to provide a safe environment for the senior citizen to walk in?

The issue is that if you push the argument too much, then you prove everyone is negligent, the term "negligent" loses its meaning... and everyone can sue everyone else for negligence. That does not seem like a desirable conclusion, so maybe we need to look at things differently. So, is the lawsuit's matter ultimately an issue of taking risks (getting run over) in exchange for quality of life (being able to walk on your own) instead? If so, why is negligence in the picture at all?

Thursday, October 28, 2010

20-25% discount at Lulu

Enter coupon code TRICK305 at checkout and receive 20% off your order. The maximum savings for this offer is $100. Enter coupon code TREAT305 at checkout and receive 25% off your order of $500 or more. The maximum savings for this offer is $500. Sorry, but these offers are only valid in US dollars and cannot be applied to previous orders. You can only use these codes once per account, and unfortunately you can't use these coupons in combination with other coupon codes. These great offers expire on November 1, 2010 at 11:59 PM, so don't miss out! While very unlikely, we do reserve the right to change or revoke this offer at anytime, and of course we cannot offer this coupon where it is against the law to do so.

Tuesday, October 26, 2010

ReferenceFinder 1.25

I added the special object array as a scanning root. Enjoy!

Tuesday, October 19, 2010

Thank you, Benoît

Benoît Mandelbrot has passed away. In reading this article, I ran into the following.

He called himself a maverick because he spent his life doing only what he felt was right and never belonging to a particular scientific community.

Well, exactly what would you do in your life, what you feel is wrong? It's so obvious that you should do what you feel is best, right? And yet, how many of us fall short of this standard for a multitude of excu I mean reasons? This statement reminds me of what Knuth said in an interview: that you should do what you think is valuable because then you will care and, in the long run, your efforts will show. And before you wonder if Mandelbrot had issues with "communities", check the actual Knuth quote:

[...] too often [...] people will do something against their own gut instincts because they think the community wants them to do it that way, so people will work on a certain subject even though they aren't terribly interested in it because they think that they'll get more prestige by working on it. I think you get more prestige by doing good science than by doing popular science because if you go with what you really think is important then it's a higher chance that it really is important in the long run and it's the long run which has the most benefit to the world.

Do not simply go along whatever the "majority" thinks, because clearly this "majority" is not producing original knowledge. Nobody will do your thinking and creating for you, that is something you must develop on your own. But, you know, the clock is ticking. Are you done yet?...

Thank you for fractals, Benoît!

Monday, October 18, 2010

Assessments 1.48

I added timestamps to the file logging result policies. Enjoy!

Saturday, October 16, 2010


I had forgotten about this, but I think it's really cool.

So, if they can do that with Excel, then what can we do?

Friday, October 15, 2010

Argentine Smalltalk Community Interview at ESUG 2010

Sometimes people wonder how come Smalltalk is so popular in Argentina. Hernán Wilkinson and Leandro Caniglia explain this at ESUG 2010 here.

Thursday, October 14, 2010

ReferenceFinder 1.24

I have been trying to track down some leak problems lately, so I went back to my ReferenceFinder package to find the source of the problem. In the process, I updated it to use the reflection API as much as possible so it can work around proxy objects without disturbing them. Also, for those interested, I updated the Distinctions package. This package implements Form and Distinction, the objects that Spencer-Brown talks about in his book Laws of Form. The reference finder is implemented on top of Form and Distinction, as per the mentoring course book's chapter 5. Enjoy!

Wednesday, October 13, 2010

That school that spied students with their own laptops...

Remember that Philadelphia school that gave laptops to its students, only to turn on the machines' cameras on the kids at their own homes? And how the people involved, when questioned because they would be witnesses to the school's "soap opera" replied "I know, I love it!"?

Well, here we go. First, the lawsuit was settled in apparently everyone's best interest. However, what is not so clear to me, is that there was no criminal intent in spying the kids. Really? It is a crime to possess a certain lobster, but it is not a crime to spy on students? Huh? I don't get it.

Monday, October 11, 2010

Deutsch's criteria for fixing bugs

Peter Deutsch did a lot of things, such as coming up with a JIT Smalltalk VM. There are other smaller things, like the 8 fallacies of distributed computing, or his criteria to evaluate bug fixes. I couldn't find a reference to the bug criteria, though. Thus, in short, Deutsch states you fix a bug when:

  • you can completely explain how the bug occurs, and
  • you can prove the change you make addresses the verifiable cause of the bug.
Unfortunately, it is common to hear claims of having fixed a bug just because "I made a change and the bug went away, therefore I addressed the source of the bug". In other words, an instance of the post hoc ergo propter hoc logical fallacy.

This type of fallacy comes up quite often. For instance, when working with C, you can make a C pointer aliasing problem evident by changing code that is far away from where the issue manifests. I found a case of this phenomenon not long ago. The inclusion of code that would be optimized away to nothing in one function affected register allocation in some other function that had nothing to do with the first one. In the second function, you would see a bug.

Should you claim that changing the first function fixes the bug in the second one? Or that the change in the first function somehow controls a compiler bug? Or would it be better to determine the source of the bug, in which case you can be sure that the change you make actually addresses the problem?

Alas, since sometimes these investigations take a long time, you often see things like "well I changed the compiler flags and that made the bug go away, therefore it's a compiler bug". Maybe, but you have to prove it, not merely state it. In the above case, the real issue was the source code was in violation of the C99 spec, which defines what the C language is to begin with. Clearly, as far as the compiler is concerned, the "bug" was a case of garbage in => garbage out. But, of course, as soon as you fix the source code so it does not rely on pointer aliasing, the compiler magically produces the intended code regardless of the optimization level. Sigh...

Sunday, October 10, 2010

Ten is a really good number

I've been told that ten is a really good number. Apparently I had missed this completely. But, yes. Today is 10/10/10. Long life ten the number!

Friday, October 08, 2010

Smalltalk 2010 declared of provincial interest

A bit ago, the city of Concepción del Uruguay declared Smalltalks 2010 of municipal interest. Then, the Science, Technology and Innovation Agency of Entre Ríos (ACTIER) agency declared Smalltalks 2010 of interest as detailed here. Now, the Province (State) of Entre Ríos has just declared Smalltalks 2010 of provincial interest on the grounds that:

  • The faculty of the conference's site, the Universidad Tecnológica Nacional site at Concepción del Uruguay, proposes the motion to declare Smalltalks 2010 of provincial interest, as organized by the Fundación Argentina de Smalltalk (FAST), and to be carried out in Concepción del Uruguay, from November 11th through November 13th;
  • Said foundation is dedicated to to support and communicate the work of Argentine Smalltalk developers, faculty and researchers within the international Smalltalk community;
  • Said event has been organized annually since 2007, with local and international attendance including students, developers, faculty and researchers, who offer Smalltalk technology presentations and tutorials of great interest to the audience.
Many thanks go to Entre Ríos' Governor Don Sergio Daniel Urribarri, and to Entre Ríos Secretary of State and Minister of Education and Justice Cr. Adán Humberto Bahl.

New Lulu coupon, expires October 11th

Enter coupon code EXPLORE305 at checkout and receive 14.92% off any order. Maximum savings is $50. Expires on October 11, 2010 at 11:59 PM. Enjoy!

Sunday, October 03, 2010

About Google's new WebP photo format

Google has recently released a new lossy photo format called WebP. The claim is that it compresses photos more effectively than JPG, thus reducing the file size, and yet the resulting file could be mistaken for a JPG file in terms of quality. Sometimes, size gains of about 40% are claimed. How much of this is actually an advantage of WebP?

Generally speaking, there are several problems with this type of assertion. First, over time, it has become clear to me that several sources of JPG files do a terrible compression job. Usually, the problem is that, after the lossy image representation is derived, this lossy representation has to be packed losslessly to produce the JPG file, and the lossless compression method is not very good. For example, let's take Photoshop. If I save an "optimized baseline" medium quality JPG file of the mentoring course book's cover, I get a 194kb file. If I look into it with some sort of hex editor, I see several sections that are obviously not compressed very well. To prove the point, if I compress Photoshop's JPG 194kb file with rar, I get a 108kb archive. Similarly, digital cameras typically produce huge JPG files that, upon inspection, look as if the firmware was prioritizing coding speed over coding efficiency. In short, some JPG files are compressible enough that WebP's file size advantage may be a result of poor internal JPG lossless compression. But then, why not fix JPG's lossless compression?

Moreover, Google used specific JPG encoder libraries in their benchmarks. How do you know these are coding the image effectively? For instance, I remember that an old program called Image Alchemy had a normal JPG mode, and an "optimized Huffman" mode that regularly produced smaller files than the normal mode. The "Huffman optimization" was a secondary pass over the already lossy representation, so this optimization did not result in additional information loss. In addition, JPG provides for arithmetic coding, which should result in smaller files. However, arithmetic coding is not always used for compatibility reasons. And, even if it were, arithmetic coding's representation efficiency is critically dependent on the compression model driving the probability predictions. When Google compares effectively random JPG files from the web with their WebP counterparts, how much of the comparison is between a specific JPG encoder library and WebP, as opposed to between JPG's intrinsic efficiency and WebP's intrinsic efficiency? In the case of JPG with arithmetic coding, how much of the comparison is between a (probably unsophisticated) probability model driving the arithmetic coder and WebP's compression format?

Sometimes, recompressing a JPG file with a more efficient JPG compressor makes a huge difference. I have personally seen 7mb JPG Photoshop files go down to 1mb JPG files that cannot be distinguished from the original. Part of the problem with recompressing JPG files is, well, how do you know that the first JPG compression pass did not make it easier for the second compressor to make a smaller file? Would different compressors produce significantly different files if they started with the same original photo? This is a problem because Google used WebP to recompress existing JPG files. It would have been more interesting to, say, obtain a significant sample of photos stored in raw format first, and then compare the results of packing the raw files with JPG and WebP. As it is presented, Google's presentation of WebP in contrast with JPG is not a true apples to apples comparison.

Finally, different JPG encoders have varying ideas of what "quality" means. For instance, if quality in encoder A is specified with a number between 0 and 100, is using 30 equivalent to encoder B's quality of 3 in a scale from 0 to 10? How do the "quality" settings of various JPG encoders compare to that of WebP? If this is not known, then what does it mean when Google claims WebP produces smaller files? Similarly, I do not think there is a clear notion of what "photo quality" means. How can you tell what JPG's SNR is compared to WebP's SNR if you do not have access to the original photo? And if you do not have SNR information, how do you know that WebP is doing a better encoding job, and how do you assess the smaller file size claim? For instance, the chroma information in the sample photo with the guy against the blue background is obviously very different in WebP. Why? Also, note that SNR is not the only way to measure picture quality. What about the psychovisual enhancements provided by e.g.: DivX and x264? Those can make photos and video (I get to say video because WebP is derived from VP8) look better, even if the PSNR is lower.

For these reasons, it's not clear to me that WebP is necessarily all that it's claimed to be. And if you cannot tell, then why is the introduction of another compression format preferable over providing improved JPG coders that produce results similar to WebP? For example, I took one of Google's comparison JPG photos and repacked it with a more efficient JPG encoder. I got a file size essentially equal to that of WebP. Why bother with WebP if the same results can be achieved with an existing format?

I wish Google would provide a more in depth analysis in its WebP page. I do not mean to imply that WebP is not a better encoding mechanism than JPG. Given that it has the benefit of ~20 years of research compared to JPG's original 1990s specification, it probably is better. However, the main claim of WebP is that it produces smaller files thus alleviating the problem of transmitting JPG files over the internet, and I have not seen enough evidence to support this claim other than "we recompressed a random sample of photos already compressed with random JPG packers and we got smaller files". Sure, but you could have achieved that with a better JPG coder or even gzip. Thus, I can't help wondering whether the format is really an attempt to further popularize their VP8 video codec, from which WebP is derived...

Speaking of video codecs, one of JPG's criticisms is that it introduces blockiness because it uses 8x8 chunks to compress the photo. WebP seems to handle blockiness better. But WebP is derived from a video codec, and many modern video codecs do deblocking when decompressing. If WebP is using a deblocker, then the comparison with JPG is further suspect. In other words, if you added a deblocker to your standard JPG decoder, would you achieve results comparable to that of WebP? Without technical details, how do you know?

For more details, see for example here (and make sure to read the comments!). Also, for an analysis of WebP seen as a VP8 I-frame, see here. Ouch!

Meanwhile, if the goal is to speed up the web, could we please have an HTTP extension such that loading a website requires only one request? Certainly, opening numerous connections for every single page element is going to introduce round trip latencies and other problems such as suboptimal use of frames that do not reach the MTU packet size. If we switched to a single connection, with the individual files streamed over it with some sort of tar transport, then we could run some form of even a very simple compression scheme such as v.42bis or v.44 on the stream so that all the easily compressible information is crunched on the fly for faster throughput... for compression examples, see here (although note this one does not seem to provide the tar capability) and Google's own research here.

Friday, October 01, 2010

Lulu's October 10% off coupon

Lulu's 10% off coupon for October is HARVEST. Enjoy!

Enter coupon code "HARVEST" during checkout and save 10% off the purchase price. Discount cannot be used to pay for, nor shall be applied to, applicable taxes or shipping and handling charges. Maximum amount that may be applied to discount is $10.00 per account. Promotional codes cannot be applied to any previous orders. No exchanges or substitutions allowed. Only one valid promotional code may be used per order. Offer expires October 31, 2010 at 11:59 PM EDT. reserves the right to change or revoke this offer at any time. Void where prohibited.

Monday, September 27, 2010

Smalltalks 2010 declared of provincial interest

The Smalltalks 2010 conference in Argentina has been declared of interest by the Science, Technology and Innovation Agency of Entre Ríos (ACTIER) on the grounds that:

  • The main objectives of this event are to create an environment conducive to promote research and development, to integrate the Argentine and international Smalltalk communities, and to stimulate the publication of educative and research works;
  • That the organization entities (namely: the FAST foundation and the Concepción del Uruguay Regional site of the Universidad Tecnológica Nacional) support the event with their reputation, guaranteeing the participation of programmers, students, faculty members and scientific researchers, and national and international experts who will present, give tutorials and courses which, because of the quality and precedent set by past editions of the conference, will have a large impact thus causing regional interest;
  • That because of its charter to promote research, development and the spreading of technology, to provide technical assistance and to promote all innovative activities that emphasize the social importance of the work done by scientists, technologists and entrepeneurs, the Science, Technology and Innovation Agency of Entre Ríos (ACTIER) is competent to declare the Smalltalks 2010 an event of regional interest.
Many thanks to ACTIER's director Profesora Silvia Kupervaser and subdirector Licenciada Ana María Laffitte, as well as everyone involved in this official declaration and the ongoing success of the Argentine Smalltalk community and the Smalltalks conference.

See you at Smalltalks 2010 in Concepción del Uruguay, and go Smalltalk!

Friday, September 17, 2010

New Hash Analysis Tool manual location

I noticed the Hash Analysis Tool manual link was broken. You can get it at the FTP server, (user smalltalk, password now). Enjoy!

Hash Analysis Tool update

It's been a while, but today I ran into hash functions again. I just published Hash Analysis Tool 3.27 so it does not rely on Integer>>asByteArray (it's currently deprecated in VisualWorks), together with a method lookup dataset and a hash function I tested today. Enjoy!

Friday, September 10, 2010

Monday, September 06, 2010

Nice article on the importance of choosing proper names

Here is the link. Also, the article goes on to detail that a significant chunk of our thought processes are affected by words we hear. Would you please shut down that TV already? :)

Friday, September 03, 2010

15% and 20% off Lulu this weekend

If you use the code EXTRAPOINT, then Lulu will give you 15% off this weekend. Also, if you use TOUCHDOWN305, you will get 20% off on purchases of $250 or more. Note that the usual disclaimers seem to apply. Enjoy!

Thursday, September 02, 2010

September's Lulu discount code

If you use the code AUTUMN, you can get a 10% discount at Lulu during the month of September*. Enjoy!

* Disclaimer: Enter coupon code "AUTUMN" during checkout and save 10% off the purchase price. Discount cannot be used to pay for, nor shall be applied to, applicable taxes or shipping and handling charges. Maximum amount that may be applied to discount is $10.00 per account. Promotional codes cannot be applied to any previous orders. No exchanges or substitutions allowed. Only one valid promotional code may be used per order. Offer expires September 30, 2010 at 11:59 PM EDT. reserves the right to change or revoke this offer at any time. Void where prohibited.

FTP server back up


Monday, August 09, 2010

FTP server down for a while

The FTP server will be back up in a couple weeks...

Sunday, August 08, 2010

Assessments 1.47

I just published a small fix for Assessments. In the RB extensions, the defect list will now appear when the result includes prerequisite failures. Enjoy!

Thursday, July 29, 2010

20% off coupon at Lulu

I just saw that Lulu has a new code for 20% off "site-wide". The coupon code is SANTA. Enjoy!

Sunday, July 25, 2010

Assessments 1.46

I just published an improvement to the RB extensions so the RB is snappier. Enjoy!

Saturday, July 24, 2010

Assessments 1.45

I just published a small visual change to the Assessments' RB extensions. Enjoy!

Monday, July 12, 2010

e^x in action

Not long ago, I read an article that said the hard drive industry executives expected (!!!) capacity to increase by 50% every year or something like that. I thought these were ridiculous claims because the quoted growth rate is an exponential function and those will eat you alive in no time. But, you know, sometimes these claims are made, most likely by people that do not understand their consequences. So here we are, not two years later, and guess what: hard drives are now having a hard time increasing capacity. The techniques necessary to keep growing are very expensive, and are many years and a lot of investment away. Should we be surprised? Nah...

Sunday, July 11, 2010

Assessments 1.41 through 1.44

Version 1.41 of Assessments adds the equivalent of RBSUnitExtensions to the Assessments tools. Also, since the last update, I fixed a couple small bugs. Enjoy!

Update: Assessments 1.42 has visual optimizations that make the UI much snappier. Assessments 1.43 takes the speedup a step further and provides a significant performance boost. Assessments 1.44 has additional speedups and a bug fix for assessment creation with filtered selectors.

A comic by Quino

Quino is the nickname of Joaquín Salvador Lavado, who became famous for making comic strips about a little girl called Mafalda. He also makes comic strips for Sunday newspapers and magazines. Here's one such comic which I like quite a bit... the translated dialog is below.

- Hel...

- In installments, of course. Now we will have to cut back on our expenses a bit but, isn't it wonderful?

- No cables, no plugs, nothing! It feeds by itself with disposable batteries that last almost a month! I subscribed to the service so they will not be so expensive.

- And on top of that, you will see...

- THERE IT IS! It comes with an electronic, bidirectional, servo-stabilized horizontability modifier!

- Ok, but... and this device, what is it good for?

- ...

- I understand. We can't have it, isn't that true? The neighbors from apartment 9A have it, and the sister in law of Dr. Tissera, and Engineer Villalta's wife... but we cannot, right...

- We will have to take it back. In the end, why does it matter? I am already used to us living a life of sacrifices to never be like everybody else!

- ...

- Nobody said anything about taking it back, nobody said anything about taking it back...

- ...

Saturday, July 10, 2010

A graphical programming language

The computer programming language Piet produces nice looking programs. Wow...

Tuesday, July 06, 2010

I wish this was fixed...

Sometimes, I get asked about New York. Isn't it a great place to be? Certainly: there's the Met, the Guggenheim, the Museum of Modern Art, and many other wonderful cultural icons. But one of the things that comes to mind is the smell. It's like a well kept secret, but in summer the city (Manhattan in particular) smells. Or, rather, stinks. Every so often I get a look when I describe the stench. How can I say that about New York? Isn't "stink" a bit harsh? Well, thanks to the New York Times, now I can say that the term "stink" is appropriate. Check it out here. Some snippets:

As mounds of refuse go, this one was neither unusually tall nor unusually messy. At about five bags, it rose about two feet off the ground.[...] But by mid afternoon, the temperature had reached 103 in Central Park, and the heat that cooked people’s nerves and the city’s subway platforms roasted this mound of trash, and hundreds like it around New York City.[...] “We don’t have enough trucks and personnel to do everything at once,” Mr. McKeon said. “It takes some time. We do have a large amount of extra trucks today. We’ll put out extra trucks tomorrow also. We’ll be working around the clock until we catch up.” In the heat, the trash that the department and the commercial haulers had not yet collected proved both an olfactory and linguistic problem for New Yorkers. People tried to explain just how awful it was when a piece of chicken sat in a plastic bag on a sidewalk in 103-degree weather. [...] She was at a loss to explain why the nine empty trash bins she stood next to still emitted a repulsive odor. She figured it had something to do with the mysterious liquid dripping from them. “It smells like cat or dog feces mixed with food that been there for weeks or something,” Ms. Bumbury said. [...] “Last night it was smelling something rotten,” Mr. Morales said. “My kids were crying, ‘What’s that smell, Daddy? It smells like a rat that’s dead.’ I said, ‘No, mami, it’s not a rat, it’s the garbage.’ ”

How about doing trash collection at night, when it's cool and trash doesn't have to stand in the heat all day, making the stench unbearable? Or how about not dumping all the bags on the street grates? They puncture the bags, and all the juices go down into the trains and subways just to come up later as hot, sticky, humid stench. I swear am not making this up. Fix it, yes? Please? You can't say there's nobody rich enough to collect taxes from...

Looks like e^x to me...

Check this out: the post office is raising stamp prices again. And, if you look at the price graph carefully, you will recognize a friend of mine: e^x. Really? You wouldn't think the post office has to raise postage by more or less the rate of inflation, which is itself an exponential function. But it's so hard to think about these things properly when we do not have the tools to understand what's going on. Sometimes, it is just hard to get even simple things right. For example, check out the following graph of a^x: how is it possible for a^x to have a negative derivative for some negative values of x? And how about this 2^x plot that doesn't add up? But no. It's not inflation, and nobody mentions e^x because we're not supposed to think for ourselves or something. Instead, we get this:

"This proposed rate increase amounts to another tax imposed on Americans at a time when the economy can least afford it," said Tony Conway, a spokesman for the alliance and executive director of the Alliance of Nonprofit Mailers.

Tax? How about inflation, isn't that the real tax? How can it be a tax unless wages are not going up in the same way? Isn't that the real problem? And it's not like the private mail carriers are cheap. I dare you to send a sheet of paper to Argentina via FedEx. Sigh...

"Why are you picking on the Post Office? For 44 cents, someone comes to your house, picks up some piece of crap you wrote, and takes it to Wyoming on a plane!" --- Jon Stewart

Monday, July 05, 2010

eBooks appear to handicap reading speed

You'd expect that reading a book is faster on an eBook device, or would at least match the readability of a book, but apparently no. How about that... this is probably a problem far more complex than it appears. Nevertheless, not all that glitters is iGold...

Wednesday, June 30, 2010

A problem with public discourse

Take a look at this article that appeared in CNN, regarding a speech by Barack Obama about the oil spill in the Gulf of Mexico. What bugs me about the article is reading the following:

Obama's nearly 10th-grade-level rating was the highest of any of his major speeches and well above the grade 7.4 of his 2008 "Yes, we can" victory speech, which many consider his best effort, Payack said.

"The scores indicate that this was not Obama at his best, especially when attempting to make an emotional connection to the American people," he added.

Though the president used slightly less than four sentences per paragraph, his 19.8 words per sentence "added some difficulty for his target audience," Payack said.

In other words, if a president does not talk to the general population as if they had not yet finished 7th grade, then we will not understand. And if we cannot understand anything more complex than what a 7th grader would understand, exactly why do we claim we can solve any complex problem such as the following?
  • Problems regarding the interpretation of the Constitution, the law that ultimately rules our lives and gives us wonderful things such as the 5th amendment.
  • Problems regarding the workings of financial institutions as well as the workings of our checking account and the national budget.
  • Problems regarding science, such as whether we should allow creationism, or whether we should send people to Mars, or climate change, or renewable sources of energy and raw materials, or whether the latest genetic manipulation will result in food we can safely consume.
  • Problems regarding more politicized issues, such as health care, affirmative action, gun control, law enforcement, media conglomerates, education, and religion.
  • Problems regarding the use of the military and international diplomacy.
See? If we are really a bunch of 7th graders, then we cannot deal with these problems. Consequently, we have to be talked to as if we were not adults capable of reasonably exercising their right to vote. Instead, we have to be talked to as if we were children that can only deal with the world around them in emotional terms. Besides, what do we actually vote for, exactly?

Ultimately, and most disturbingly, there is the implication that the president (or any other figure we listen to) must make an emotional connection with us, rather than engage in adult conversation. Consequently, that means we are not supposed to hear something like "look, we know X, Y and Z, so we can do A, B and C but not D". Rather, we are supposed to hear "yes we can", or "America is great", or "land of opportunity", or "democrat", or "republican", or "liberal", or who knows what else. All sorts of decisions regarding the above problems are possible with 7th grader tools, except good ones.

Thursday, June 24, 2010

Smalltalks 2010 Research Track: Call for Papers


4th Argentinian Smalltalk Conference
Research Track: Call for Papers
November 11th – 13th, 2010

Important dates:

Submission (Hard Deadline): September 7th, 2010 (Argentinian time: UTC/GMT -3 hours).
Notification of acceptance: October 6th, 2010.
Camera Ready Submission: October 20th, 2010.

Conference Site:

Universidad Tecnológica Nacional (UTN), Concepción del Uruguay (Entre Ríos, Argentina)

In the past three years the Smalltalks series of conferences have been a lively forum on Smalltalk-based software technologies that attracted over more than 200 people from both academia and industry for three days.

During the first three conferences, the industrial partners showed the applicability of Smalltalk in business, while researches (both students and professors) showed their advances and didactic uses of Smalltalk. The presented approaches and methodologies concerned the language, its implementation technology, its programming tools as well as the software development culture it supports.

This year the accepted papers not only will be available in the website but also the best ranked ones will be published in a special edition of Elsevier COMLAN Journal. Thus, we invite to submit papers in the research track on original scientific research conducted in and/or for Smalltalk in general.

Topics of interest include, but are not restricted to:

• Aspects, Aspect Languages and Applications.
• Ambient Intelligence, Ubiquitous / Pervasive Computing and Embedded Systems.
• Compilation Technology, Optimization, Virtual Machines.
• Educational Material.
• Language Engineering, Extensions.
• Model Driven Engineering / Development.
• Meta-Modeling, Reflection and Meta-programming.
• Programming in the Large, Design, Architectures and Components.
• Programming Environments, Browsers, User Interfaces, UI Frameworks.
• Reasoning About Code (Analysis, Refactoring, Type Inference, Metrics).
• Team Management.
• Testing, Extreme Programming / Practices.
• Web Services, Internet Applications, Event-driven Programming.
• Experience Reports.

Important dates:

Submission (Hard Deadline): September 7th, 2010 (Argentinian time: UTC/GMT -3 hours).
Notification of acceptance: October 6th, 2010.
Camera Ready Submission: October 20th, 2010.


Papers should be written in English, in pdf-format and not exceed 15 pages (including references and figures), using Elsevier journal format.

Templates for LaTeX formats can be found here.

Papers must be submitted through the EasyChair submission web site here.

The accepted papers will be digitally available in the conference website. From accepted papers, selected ones will be published in a special edition of Elsevier COMLAN Journal.

Papers submitted must not have been previously published and must not be under review for publication elsewhere. Papers must strictly adhere to submission guidelines. If you have questions, please send an e-mail to Marcus Denker and Gabriela Arévalo to smalltalks2010-chair (at) fast (dot) org (dot) ar using [Smalltalks2010-RT] as tag in the e-mail subject.

Program Committee

• Alexandre Bergel (DCC, Universidad de Chile, Chile)
• Noury Bouraqadi (Ecole des Mines, Douai, France)
• Gilad Bracha (Ministry of Truth, USA)
• Johan Brichau (, Belgium)
• Johan Fabry (DCC, Universidad de Chile, Chile)
• Alejandro Fernandez (LIFIA - Facultad de Informática – UNLP, Argentina)
• Tudor Girba (Sw-eng. Software Engineering GmbH, Switzerland)
• Andy Kellens (SOFT, Vrije Universiteit Brussels, Belgium)
• Michele Lanza (University of Lugano, Switzerland)
• Adrian Lienhard (SCG, University of Bern, Switzerland)
• Damien Pollet (INRIA / Université de Lille 1, France)
• Lukas Renggli (SCG, University of Bern, Switzerland)
• David Röthlisberger (SCG, University of Bern, Switzerland)
• Tom Van Cutsem (SOFT, Vrije Universeit Brussels, Belgium)

Program Chairs

• Marcus Denker (INRIA, Lille, France)
• Gabriela Arévalo (Universidad Austral, Buenos Aires, Argentina)

Friday, May 28, 2010

Free shipping on Lulu books all summer long

Lulu is offering free shipping on books $19.95 and over during this summer. This means that you can get any of my books (A Mentoring Course on Smalltalk, or Hashing in Smalltalk: Theory and Practice, or Fundamentals of Smalltalk Programming Technique Volume 1) with free shipping. The discount is applied automatically, so you do not have to do anything special. Here are the details. Enjoy!

Assessments 1.38

I just fixed a small bug in Assessments validation, and also amended a couple prerequisites. Enjoy!

Thursday, May 27, 2010

eBook devices not good for demanding works

In short: if you plan to plow along a book that doesn't require heavy work, sure, go ahead and use a reader device. If, on the other hand, you plan to study from a book, then things change and devices are not good anymore.

But I didn't say that --- 80% of students said it.

Saturday, May 22, 2010

Wireless network at home? Bad idea

Wireless networking at home seems so convenient: you go everywhere with your laptop, and connectivity follows you. However, it does have a number of drawbacks.

  • So you wanted to plug in to your nice 30" monitor, right? Betcha you won't haul the monitor around.
  • Do you really need to work with your laptop everywhere? Under the trees in your yard, where your laptop will be exposed to birds and pitch from trees? Or do you really need to work in a couple places at most? What kind of convenience is this?
  • If you get wireless, then you will have to secure it against intrusion. And how can you be sure you didn't get hacked into? Do you really want to give yourself a good dose of wireless admin homework?
  • You can easily get an internet connection that has more bandwidth than the best wireless available. Why don't you get less expensive wired networking equipment that moves data faster and has less latency than wireless? Or, for the same money, how about getting business-capable equipment?
To these problems, you need to add this: for years, Google's Street View vans captured wireless network payload data. Why bother with this nonsense? Unless wired is not available, wired is the way to go.

Update: Google captured passwords and other sensitive information...

Tuesday, May 18, 2010

90% of consumers want books to stay as paper books

How about that... it's not that easy for the digital book to just take over. Or, not all that glitters is gold. I guess it doesn't matter for inconsequential content (e.g.: the latest best seller novel which is quickly forgotten after a few years). For more serious stuff that you will have to go back to, though, do you really want device compatibility problems, DRM, somebody deciding you are no longer supposed to read the stuff, etc? Hmmm...

Saturday, May 15, 2010

Exercise from Fundamental's volume 2

Fundamental's second volume draft just reached 100 pages. I thought I'd mention an exercise from the book that I think it's quite nice. Suppose you concatenate a lot of strings with a stream. Of course, this is much more efficient than using straight string concatenation with messages like #,. But what is the efficiency of the stream method? Assume the strings are byte strings. If the resulting string has size k, what is the worst allocation scenario for the stream method expressed in terms of k? What is the best case scenario?

Sunday, May 09, 2010

Too much TV

According to the ratings company Nielsen, people in the USA watch an average of 5 hours of TV a day. What a loss of time...

Jazz question

The Buddy Rich band had a tune called "The Words" (or "The Word") in their book. You can listen to two quite different renditions here and here. Now the question... does anybody know who composed the tune, or where it came from?

Fundamentals volume 2 gains a new chapter

So I had started writing about threading, and now I find myself with a huge list of topics related to Smalltalk processes that could really use a written explanation. I have no choice other than to insert a new chapter about threading between chapter 6 (On enumeration) and chapter 7 (On recursion). It really looks like the optimization chapter (now chapter 10) will come out in volume 3...

Thursday, May 06, 2010

GemStone bought by VMware

Yes, the same GemStone. Wow. I wish the article had more details.

Wednesday, April 28, 2010

New Smalltalk website!

Geert Claes announced a new Smalltalk website. It has a cool name and URL: Check it out!

Tuesday, April 27, 2010

PowerPoint makes us stupid

But I didn't say it. Army brass said it!

Sunday, April 18, 2010

Smalltalks 2008 opening video

Here's the video for Smalltalks 2008's opening: part 1, 2, 3, and 4. Enjoy!

Saturday, April 17, 2010

Smalltalks 2007 opening video

Hernan Wilkinson uploaded Smalltalks 2007 opening video. It starts with all of us working like crazy very early in the morning to prepare all the welcome packages for the attendees. Nice memories :).

Here are part 1, part 2 and part 3.

Friday, April 16, 2010

More stuff we don't need

Great, my school gave me a laptop so I can be spied on. So, when I go back to school the next morning, school officials can berate me for my behavior at home. Isn't that great? Source here.

And please note: do not attack schools for this. Go after the people that engaged in this ridiculous behavior. People, you know, like computer technician Mike Perbix:

"you're controlling someone's machine, you don't want them to know what you're doing" --- Mike Perbix

Or people, you know, like technology coordinator Carol Cafiero:

Mark Haltzman, who filed the lawsuit on behalf of Robbins and his family, said evidence now shows the district used the tracking software for non-authorized reasons — for instance, when students failed to pay the required insurance or return the laptops at year's end. At least once, a name mix-up led the district to activate the wrong student's laptop, he charged.

"Thousands of webcam pictures and screen shots have been taken of numerous other students in their homes, many of which never reported their laptops lost or missing," Haltzman wrote in a motion filed Thursday.

According to Haltzman, technology coordinator Carol Cafiero refused to answer his questions at a recent deposition, citing her Fifth Amendment right against self-incrimination. She and technician Michael Perbix were the only employees authorized to activate the webcams. Perbix did not fight the deposition.

Haltzman called Cafiero a possible "voyeur" and wants access to her personal computer to see if she downloaded any student images. To support the charge, he cited her response to an e-mail from a colleague who said viewing the webcam pictures was like watching "a little LMSD [the name of the school] soap opera."

"I know, I love it!" Cafiero allegedly replied.

  • Possession of a monitored Macbook was required for classes
  • Possession of an unmonitored personal computer was forbidden and would be confiscated
  • Disabling the camera was impossible
  • Jailbreaking a school laptop in order to secure it or monitor it against intrusion was an offense which merited expulsion
More details here, here (includes plenty of rather disturbing quotes by Mr. Perbix), here (includes photo of teenager sleeping at home taken by his laptop on command from the school), and here.

Finally, for a disturbing view of privacy gone out the window, check this article.

Speaking of kewl...

So you like the latest movie, huh? Check it out: when you watch that movie for "entertainment" purposes, you're supporting people who argue the following:

  • Consumers should voluntarily install software that constantly scans our computers and identifies (and perhaps deletes) files found to be "infringing".
  • Copyright protection measures can be trojan horses for consumer surveillance.
  • You must declare pirated electronic content at customs crossings, and customs agents can scan and seize your electronic devices.
  • Trade sanctions should be imposed on countries that have technology friendly policies, e.g.: Chile was named for considering fair use-style exceptions to its copyright law; Canada was listed for requiring that its customs officers have a court order before seizing goods at the border; and Israel was highlighted for refusing to adopt DMCA-style anti-circumvention provisions after legislative debate concluded that anti-circumvention laws would have no effect on copyright infringement.
  • Big Hollywood studios should be allowed to enlist the FBI and Department of Homeland Security to provide taxpayer-supported muscle for summer blockbuster films, so that they can "interdict... and to react swiftly with enforcement actions". Would you like some SWAT team busting your house to determine whether you have any pirated content at gun point?
Source here, which goes into even greater detail. There's an easy solution to this mess: never, ever watch one of those movies again.

Lulu offers free US shipping on books until May 1st

I just got an email from Lulu saying that if customers use the code FREEMAIL305, then they will get a $3.99 discount on their shipping. According to Lulu's email,

Use coupon code FREEMAIL305 at checkout and receive $3.99 towards your final shipping cost. This amount is the US mail cost for a single book order. Please note: there will be a shipping total listed on your order receipt. This coupon code will reduce your final order total by $3.99, which is the US mail cost for a single book. Shipping destination must be a valid US address.


Thursday, April 15, 2010

Kewl is not better

Like it or not, the iPad is selling like hot bread.

Sigh. Just because things look cool, it doesn't make them good. For example, somehow it's a good thing to carry 1000 books in our pockets. What's the point, since we cannot meaningfully deal with even 5 serious books at a time? Moreover, 25% of Americans don't read books at all, and the rest reads about 1 book a month. Are Kindles or iPads worth so much just to read 1 book a month?

Really. Let's say that you read 15 books a year. If you buy them electronically, then you lose the rights to the works you bought (because e.g.: Amazon decides to delete the book you bought from your device). Also, assuming you buy new books only, you might save something like $150 on the books. However, you have to spend $259 on the device. The device which, by the way, will become obsolete in about the time it takes you to save enough on new books to justify buying the device. If you bought used books instead, or got the books free from the library you already pay for, it would be even more cost effective. But, in this way, you give your money away in exchange for an unnecessary and counterproductive luxury. I see. Incidentally, if you are a book author dealing with even mildly sophisticated matter, have you noticed you can't really format your book to look nice on an eBook device?

Also, we won't "facilitate" the distribution of knowledge just because a particularly efficient middleman enters the marketplace. In other words, people won't read more just because it is possible to get books more conveniently. After all, before the Internet was publicly accessible, you could just go to a library and read whatever you wanted to your heart's content. And yet, it hardly ever happened...

“As my wife once remarked to Vice President Al Gore, the “haves and have-nots” of the future will not be caused so much by being connected or not to the Internet, since most important content is already available in public libraries, free and open to all. The real haves and have-nots are those who have or have not acquired the discernment to search for and make use of high content wherever it may be found.” --- Alan Kay

When devices make information readily available to us, they also interrupt us more frequently. Hence, these devices that offer you things you don't really need serve as a pervasive source of distractions that work against you accomplishing anything meaningful. Why check email every minute? Do we really need to engage in SMS traffic like crazy? Twitter? Really? Have you tried achieving something difficult with so many things requesting your attention?

To me, the real problem is the sophistication of the audience. Alas, it takes hard work to become "sophisticated" (as opposed to "trivial"), and we don't really promote that personal and instrospective work as much as we could. If we did, perhaps more of us would create things, or perhaps more than ~5% of the population would be technologically inclined, or perhaps more of us would be "haves" as per the above quote, or perhaps we would have more of an appreciation for non-trivial results (e.g.: the iPhone application that allows you to "make music" by blowing on the microphone while touching the screen as if it was a flute... if you really want to "make music" then get a real music instrument or, failing that, whistle). In short, more of us might decide to stop amusing ourselves to death. And then, maybe then, we would have more of a say (mod e.g.: using a GPL OS). Until then, I think we need an updated version of the below quote...

"It's the movies that have really been running things in America ever since they were invented. They show you what to do, how to do it, when to do it, how to feel about it, and how to look how you feel about it." --- Andy Warhol

Reminds me way too much of the jobs Brave New World's "A people" had... basically, to manufacture a phony reality for everybody else.

Tuesday, April 13, 2010

You call this progress, right?

Oh yeah sure, I need a quad core to check my email, edit a photo, and run a virus check in the background, all at the same time.

Really? You know, back in the day when a text editor program was ~100kb, we did not need all this ridiculous amount of horsepower to... gasp!... check email... even today, the compressed installer for Thunderbird fits many times over in the cache memory of modern CPUs. Exactly why do we need a quad core to run an antivirus check in the background, particularly given that such checks are I/O bound anyway?

Admit it. Confess it already. Some people just don't know what they are selling, some folks don't know what they are buying, and hence we get this kind of confusion going on... this, you know, exploitation market similar to that set up for teenagers...

Monday, April 12, 2010

Smalltalks 2009 videos

You can now check videos from the Smalltalks 2009 conference at FAST's website. Just go to the page and click on the Videos tab on the top. Enjoy!

Friday, April 09, 2010

Smalltalks 2010

We recently noticed an uptick in questions about Smalltalks 2010. Are we going to have a Smalltalk conference in Argentina this year?...

Of course! :D

But first, we need to do our homework so we can have a wonderful event like the ones in 2007, 2008 and 2009, so stay tuned. In the mean time, did you see Dan Ingalls' Smalltalks 2009 presentation video at FAST's website?...

Thursday, April 08, 2010

Assessments 1.37

I just fixed the message checklistForClass: so it only scans active SUnit bridges. Enjoy!

Sunday, April 04, 2010

An additional Lulu 10% discount coupon

If you enter the coupon code SHOWERS, then you will get 10% off at Lulu. This is valid for a limited time only, and expires on April 30th. Enjoy :).

Saturday, April 03, 2010

A serious quote...

On two occasions I have been asked (by members of Parliament!) —"Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?" ... I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question. --- Charles Babbage

Friday, April 02, 2010

Informal quote...

No matter how much you push the envelope, it will still be stationery.

Thursday, April 01, 2010

A Knuth quote...

If somebody said what advice would I give to a young person, they always ask that funny kind of a question. And I think one of the things that I would, that would sort of come first to me is this idea of, don't just believe that because something is trendy, that it's good. I'd probably go the other extreme where if something, if I find too many people adopting a certain idea I'd probably think it's wrong or if, you know, if my work had become too popular I'd probably think I'd have to change. That's of course ridiculous but I see the other side of it too often where people will do something against their own gut instincts because they think the community wants them to do it that way, so people will work on a certain subject even though they aren't terribly interested in it because they think that they'll get more prestige by working on it. I think you get more prestige by doing good science than by doing popular science because if you go with what you really think is important then it's a higher chance that it really is important in the long run and it's the long run which has the most benefit to the world. So usually when I'm writing a book or publishing a book it's different from books that have been done before because I feel there's a need for such a book, not because there was somebody saying please write such a book, you know, or that other people have already done that kind of thing. So follow your own instincts it seems to me is better than follow the herd. [...] I have to see something to the point where I've surrounded it and totally understood it before I can write about it with any confidence and so that's the way I work, I don't want to write about a high level thing unless I've fully understood a low level thing. [...] if I went through my whole life only on, without any in depth knowledge of any part then it all seems to be flimsy and to me doesn't give me some satisfaction. The classic phrase is that liberal education is to learn something about everything and everything about something and I like this idea about learning everything about an area before you feel, if you don't know something real solid then you never have enough confidence. A lot of times I'll have to read through a lot of material just in order to write one sentence somehow because my sentence will then have, I'll choose words that make it more convincing than if I, if I really don't have the knowledge it'll somehow come out implicitly in my writing. These are little sort-of-vague thoughts that I have when reflecting over some of the directions that distinguish what I've done from what I've seen other people doing. --- Donald E. Knuth

10% discount at Lulu today

I really appreciate the interest you have shown in my books. I thought I'd pass on this bit of news. If you use the code APRILFOOLS when you check out at Lulu, you will get a 10% discount. To get the discount, you have to make a purchase today (April 1st). Enjoy!

Sunday, March 28, 2010

Wikipedia green thread article

Wikipedia's green thread article states that most Smalltalk dialects implement green threads. Why is the term most used for the assertion? Don't all Smalltalk dialects implement green threads?

Upper bound problem

Consider a loop that sums the first p - 1 odd integers modulo p (thus enumerating the quadratic residues modulo p). For each odd integer, an internal counter is incremented, and then the modulo p operation is applied. For example, for p = 19, the first five internal counter values will be 1, 4, 9, and 16. The next value will be 25, which will be mapped into 6 when seen modulo 19 (hence 6 is a quadratic residue modulo 19).

What is the maximum value the internal counter can reach before the modulo operation?

Speaking of section 6.2

Sometimes the most humble of problems turns out to be a rich field for exploration. How about this one? Find the fastest way to implement atAllPut:, for large array receivers. Surely this cannot be that hard, right? But no, it really is tricky.

Curious? Don't take my word for it: run the experiments and see what happens!

Sunday, March 21, 2010

Fundamentals section 6.2 done

I just finished section 6.2 of Fundamentals' second volume. The draft page count is 82. Next up, section 6.3 on thread safety.

You know, when I began writing this chapter, I was concerned I wouldn't have enough material to write something interesting. I wasn't really excited about it, and I just wanted to get through it as quickly as possible so I'd get to chapter 7 (which is about recursion). And yet, here I am, having a lot of fun, not even half done with chapter 6, and it's 50 pages long already.

If this pattern continues, I may have to split off chapter 9 (about optimization) into a third volume...

Assessments 1.36

I just fixed a bug where some check repository instances could be dropped if they failed to perform their setup actions before running the tests. The result of this bug was a spurious error in the results. Enjoy!

Friday, March 19, 2010

Fundamentals update

The draft is now 72 pages long. I am about to finish a small section on how to fill a sequenceable collection efficiently. After that, still in chapter 6, comes interprocess collaboration schemes and more enumeration material. Moving along...

Friday, March 05, 2010

Assessments 1.35

SUnit test cases can assume resources will be shut down in the reverse order in which they were started. Fix Assessments to mimick this behavior.

Wednesday, March 03, 2010

Assessments 1.34

This version fixes a subtle problem. Assessments would stop SUnit resources before starting them for bulletproofing purposes. However, I just found a resource written to stop only after tests run, because the #reset method does not worry about whether instances of the resource exist. This causes a problem because the reset action damages other resources that are necessary for tests to run. Consequently, do not stop resources before starting them.

fMRI discoveries much less than sometimes hyped to be

Every so often, I find articles along the lines of "fMRI proves that area of the brain X is involved in activity Y". But, is that the case? How do we know that area X is processing activity Y directly? Couldn't it be the case that area X is processing something else triggered by activity Y, while merely 3 neurons process activity Y? We are not aware of all our brain is doing, how can we claim there is nothing else going on other than activity Y?

The main issue here is that all we see is activity. We do not know what the activity represents because we do not know how the brain encodes what is going on. Essentially, what we can perceive is ciphered conversations between neurons. From the traffic, we would like to infer the meaning of the traffic. But we can't do that with full confidence without breaking the code.

I actually verified this point of view with a neuroscience expert. And yes indeed, all we really have is correlations illustrated by nice fMRI graphics. Maybe not all experts think the same. And yet, although correlation is better than guessing, it's most likely still far away from proving (and supporting the hyped) causality.

Thursday, February 25, 2010

Assessments 1.33

This version fixes how SUnit / SUnitToo resources are started. Moving along...

Assessments 1.32

This version cleans up how resources / prerequisites are stopped.

Assessments 1.31

I added support for SUnitToo's recursive resource dependencies.

Tuesday, February 23, 2010

Assessments 1.30

Additional improvements to resource handling. Enjoy!

Book update

The draft of Fundamentals' second volume is now up to page 62...

Assessments 1.29

I just fixed Assessments so that it treats resource failures as a reason to skip tests. I am not sure the implementation is final, as I'd prefer the prerequisite policy control what happens... we will see.

Saturday, February 06, 2010

Fundamentals, volume 2 update

I was unable to get back into my writing rhythm for quite a while, but I am getting on with the program again. The draft for the second volume of the Fundamentals book just reached 50 pages.

Chatter on Toyota

Lately, the news is full of "another safety problem for Toyota", "Toyota still does not have a fix", etc. Today, the NY Times has a headline stating "Toyota Has Pattern of Slow Response on Safety Issues". Well, I'd like to know what is, say, Chrysler's safety response pattern. Or GM's, Ford's, Honda's...

The problem with this type of headline is that it only says something is slow, but it does not compare it to anything else. For instance, I could say that 1GHz CPUs are slow. Sure, unless I am talking about something like this, in which case 1GHz CPUs are quite enough and also save you a lot of electricity.

Finally, Toyota's alleged safety procrastinations are nothing compared to what Boeing did with the 737 since the 90s. It took close to 10 years to (sort of) fix a design defect in the rudder controls that could (and did) send planes into a tailspin and into the ground. And I do not think the investigations were helped much when Boeing reportedly "lost" critical parts recovered from an accident. In the words of a pilot that survived,

"I have been told by my company [...] that the FAA and Boeing (were) aware of the problems with the spurious rudder inputs but considered them to be more of a nuisance problem than a flight safety issue. I was informed, that so far as everyone was concerned, the rudder hard-overs were a problem but that the 'industry' felt the losses would be in the acceptable range.

I was being mollified into thinking the incident did not happen, and for the 'greater good' it would be best not to pursue the matter. In other words I am expendable as are the passengers I am responsible for, because for liability reasons the FAA, Boeing et al cannot retroactively redesign the rudder mechanisms to improve their reliability."

So, really, I do not necessarily mind Toyota being trashed on the media. However, if the allegation is that Toyota is slow to react, I want to know what Toyota is slow in comparison to. And if Toyota has all these complaints against it, I want to know what are the numbers for other car manufacturers as well. Otherwise, how can anybody be sure this is not a smearing campaign that is out of touch with reality?

After a bit of searching, it turns out that Detroit's Free Press ran an article on December 30th that listed recalls and number of recalled vehicles per manufacturer. Unfortunately, Free Press' website does not seem to offer the story anymore. You can use this link to search for the story, then click on the first result --- it does not work. However, the search page offers a small clip of the story, and pushing that on Google finds other pages that apparently copied the story before it disappeared. For example, McHenry Software (?!) provides the following:

Dec. 30, 2009, Toyota's 1st in safety recalls for 1st time
Automaker struggles as acceleration problem lingers
WASHINGTON -- In a first, Toyota led the U.S. auto industry in recalled vehicles this year, thanks to its largest safety-related problem since it began selling vehicles in the United States. The Japanese automaker has struggled with the fallout from the recall of 4.3 million Toyota and Lexus models for unintended acceleration linked to fatal crashes. Toyota told federal officials earlier this month it would start fixing the vehicles now, but some repairs would not be ready until March. According to a Free Press analysis of federal data, automakers recalled 15.2 million vehicles in 2009, a sharp jump from 8.6 million in 2008.

Recalls tied to variety of safety woes: From misplaced labels and faulty seat-belt reminder buzzers to engine fires and broken wheels, the 117 recalls from automakers in 2009 covered a vast range of safety-related problems. Such problems are as close as the federal government comes to tracking the quality of cars and trucks, and in years past have mirrored the quality scores from outlets such as Consumer Reports.

Acceleration isn't only problem: While Toyota's accelerator problem accounted for most of the nearly 4.9 million vehicles it recalled in 2009, the automaker issued eight other recalls for problems ranging from missing safety labels to corroded pickup frames that pushed it to its top spot.

GM issues most recalls General Motors recalled 2.3 million vehicles, the third-highest total, but had the most recalls issued among automakers with 17.

Then there's a graphic that lists recalled vehicles and recalls per manufacturer. Since the page shows a jpg file, I'd rather copy the numbers here for easier consumption:
  • Toyota, 9 recalls, 4,872,583 cars.
  • Ford, 8 recalls, 4,521,993 cars.
  • GM, 17 recalls, 2,242,230 cars.
  • Hyundai, 7 recalls, 1,059,617 cars.
  • Nissan, 6 recalls, 706,982 cars.
  • Chrysler, 16 recalls, 590,044 cars.
  • Honda, 4 recalls, 454,003 cars.
  • Volvo, 7 recalls, 191,705 cars.
  • Kia, 2 recalls, 176,382 cars.
  • Mazda, 6 recalls, 131,920 cars.
  • Volkswagen, 8 recalls, 100,764 cars.
  • Mitsubishi, 4 recalls, 76,498 cars.
  • Subaru, 1 recall, 21,357 cars.
  • Jaguar, 2 recalls, 16,828 cars.
  • Mercedes-Benz, 4 recalls, 16,356 cars.
  • Maserati, 3 recalls, 8,736 cars.
  • Ferrari, 2 recalls, 4,306 cars.
  • Land Rover, 2 recalls, 4,041 cars.
  • BMW, 2 recalls, 2,858 cars.
  • Tesla, 4 recalls, 345 cars.
  • Lotus, 1 recall, 87 cars.
  • Roush, 1 recall, 81 cars.
  • Bentley, 1 recall, 27 cars.
Total, 117 recalls, 15,119,923 cars. However, note how Ford's number of recalled cars is quite close to Toyota's. How should we interpret this? For example, we could normalize these numbers according to the market share of these manufacturers. If we do that, then we could derive, say, the number of recalls per 1% of market share. We will call this the Badness Unit, or BU for short (some among the audience may chuckle by renaming the BU as the Business-as-usual Unit).
  • Toyota, 16.73% market share, 291,248 BUs.
  • Ford, 15.29% market share, 295,748 BUs.
  • GM, 19.58% market share, 114,516 BUs.
  • Hyundai, 4.10% market share, 258,443 BUs.
  • Nissan, 7.27% market share, 97,246 BUs.
  • Chrysler, 8.79% market share, 67,127 BUs.
  • Honda, 10.86% market share, 41,805 BUs.
  • Volvo, 0.58% market share, 330,526 BUs.
  • Kia, 2.83% market share, 62,326 BUs.
  • Mazda, 1.96% market share, 67,306 BUs.
  • Volkswagen, 2.79% market share, 36,113 BUs.
  • Mitsubishi, 0.51% market share, 149,996 BUs cars.
  • Subaru, 2.04% market share, 10,469 BUs.
  • Jaguar, 0.11% market share, 152,982 BUs.
  • Mercedes-Benz (assuming Daimler), 2.43% market share, 6,731 BUs.
  • Maserati: no data.
  • Ferrari: no data.
  • Land Rover, 0.25% market share, 16,164 BUs.
  • BMW, 2.28% market share, 1,254 BUs.
  • Tesla: no data.
  • Lotus: no data.
  • Roush: no data.
  • Bentley: no data.
So, what can we make of this? That, in terms of how likely it is for your car to be recalled, Toyota is about the same as Ford. If there is so much outcry for Toyota, where is the outcry for Ford? If Toyota decides to stop selling cars until problems are fixed, what should Ford do? Of course, I do not know how serious Ford's recalls are. But do you know?

By the way, IIRC there had been recent good press about how Ford's quality had been improving. Well, so much for that. In any case, here is the manufacturer list sorted by BUs. Draw your own conclusions!
  • BMW, 2.28% market share, 1,254 BUs.
  • Mercedes-Benz (assuming Daimler), 2.43% market share, 6,731 BUs.
  • Subaru, 2.04% market share, 10,469 BUs.
  • Land Rover, 0.25% market share, 16,164 BUs.
  • Volkswagen, 2.79% market share, 36,113 BUs.
  • Honda, 10.86% market share, 41,805 BUs.
  • Kia, 2.83% market share, 62,326 BUs.
  • Chrysler, 8.79% market share, 67,127 BUs.
  • Mazda, 1.96% market share, 67,306 BUs.
  • Nissan, 7.27% market share, 97,246 BUs.
  • GM, 19.58% market share, 114,516 BUs.
  • Mitsubishi, 0.51% market share, 149,996 BUs.
  • Jaguar, 0.11% market share, 152,982 BUs.
  • Hyundai, 4.10% market share, 258,443 BUs.
  • Toyota, 16.73% market share, 291,248 BUs.
  • Ford, 15.29% market share, 295,748 BUs.
  • Volvo, 0.58% market share, 330,526 BUs.
If somebody could run these numbers for, say, 2005 through 2008, then plot the resulting BU curves on a graph, that would be great :). Note that the above still says nothing about how quickly a given car manufacturer addresses safety problems!

Friday, February 05, 2010

Assessments 1.27 and 1.28

I just published Assessments 1.27 and 1.28 to the public Store repository. Here are the changes:

  • Support for test skipping based on resource (prerequisite) availability. This feature should be available in SUnit 4.x.
  • Support for the latest resource (prerequisite) check sorting in SUnit and SUnitToo.
  • Slimmed down the execution stack down to one exception handler, simplified the execution model a bit.

Wednesday, February 03, 2010

SuperPower oneWayBecome: SuperResponsibility

So let's say you like super powers, right? Execute the following code.

    a := ClassA new.
    ClassA oneWayBecome: ClassB

What should be the response to the following expression?

    a class

Really? Why? :)...

Wednesday, January 20, 2010

Reality is in the eye of the beholder

Check this out --- how replacing a somewhat subjective perception with another somewhat subjective perception effectively changes reality. Essentially, you see what you want to see.

And it doesn't stop with the article. How many times have you heard many of the world's calamities be blamed on so-called "human nature"? Really? Are you absolutely sure we are born being fascists and other horrible things? The worst of our behavior is actually "human nature"? Or is it just how those that live above the law shaped our culture so their actions appear beyond reproach? Because, actually, quite a few of us are direct descendants of folks that wiped off the cultures that lived where our houses stand today --- but of course we hardly ever think that. So tell me, my friend, what have you learned to think of "human nature"?

Friday, January 01, 2010

SUnit improvements

Lately, SUnit has been picking up interesting enhancements for consideration:

  • classes are referenced via accessors, so you can refine by subclassing.
  • a new abstract class called TestAsserter has appeared (at least tentatively).
  • exception handling now uses polymorphic handlers that double dispatch on the exception.
These changes are very positive. In fact, they were the basis of my refactored SUnit which I ended up calling SUnit VM. I had implemented SUnit Based Validation and SUnit Benchmarks on top of SUnit VM precisely because I had that kind of flexibility available in SUnit VM. But now that SUnit is improving, SUnit VM becomes less valuable because vanilla SUnit is better. Consequently, I hope to obsolete SUnit VM and reimplement SUnit Based Validation and SUnit Benchmarks on top of SUnit. These are very good news, and I am happy with this progress. Hopefully these improvements will be integrated soon.

If you'd like to know more about SUnit Based Validation and SUnit Benchmarks, as well as some of the rationale behind the original changes in SUnit VM that are now making it into SUnit, check out chapter 4 of the mentoring course book.