Happy birthday and thanks
Today is Diego Maradona's birthday. Thank you so much for your art, and for being a source of inspiration.
... then let's see how he does, up there, without all the assistance!
Today is Diego Maradona's birthday. Thank you so much for your art, and for being a source of inspiration.
Posted by
Andrés
at
19:15
0
comments
I lost myself at Powell's main branch, looking for the new postcards they have, each with a different design based on the room they are in. And in the Pearl Room, I found a book about Andy Warhol. Well, I had heard a lot about Mr. Warhol, but had never done research on my own. Therefore, I looked at this book which was extraordinarily large, both in page count and page size.
The thick paper reproduced his art, which I have to say did not impress me much. More interestingly, however, the paper also reproduced quotes. Soon enough, I was flipping pages looking for the quotes and skimming over the glossy prints. Out of all the ones I read, besides the famous 15 minute one, here are three that called my attention.
Posted by
Andrés
at
17:32
0
comments
So... listening to FR-034 again, I filled a couple blanks since last time.
Posted by
Andrés
at
18:20
0
comments
So... after thinking about the whole issue of types for quite a bit... I have to say that I am happy I work with Smalltalk. But the reason why is interesting, because I think it's more than just some sort of "it struck my fancy".
From the label experiment and the conversations with Dan Ingalls, I gathered the fact that when designing a language, it is important that it does not have too much stuff in it. This is because whatever you put in the language, you will have to mess with via a computer interface. And this makes interacting with it slower, in the same way that hard drive access causes considerable lag for a modern CPU.
In short: the more stuff a language has, the slower the interaction with it will become.
Now, since productivity is one of the values I care about, I cannot help reaching the conclusion that I want a language with the least possible stuff so I can be most productive with it.
So what is this least possible stuff? Well, if a language had nothing, then everything would be in our mind, and this is an issue because then we don't take advantage of the computer, and we also overflow the rather scarce 7 plus minus 2 slots of scratch ram we come with.
Therefore, a balance must be chosen such that what stresses our scratch ram the most stays there, and what stresses our scratch ram the least goes into the computer. Language design is a register allocation issue.
Consider then lambda calculus. If we're reasonably trained to do natural deductions in logic, then adding lambda calculus does not seem like that much of an additional imposition. Putting lambda calculus annotations in the computer however causes human interface traffic because in order to think in one's mind, one has to make reference to stuff in the computer. We can cache all we want by remembering, but eventually we will hit the hard drive and then our overall productivity will go down just because of the particular register allocation model we chose.
Therefore: do lambda calculus in one's mind together with the logic. Then, simply store the results of all this calculation in the computer. And do it in a way that makes it easy to reconstruct the deductions and lambda calculus annotations on demand, but without resorting to verbose artifacts that cause human interface chatter. In other words, be intention revealing.
Enter Smalltalk. No type explicit annotations of things we do in our minds, just one of the places where expressing results of deductions with type annotations is easy. Because, as we know, when we write Smalltalk we think about types in the sense that we have to keep track of what messages will be sent to what objects.
I insist that by designing a network of objects such that each local evaluation context fits in our scratch ram, and such that the chaotic interaction of the parts is designed in such a way that the overall system has the emergent property of solving the problem at hand, is (one of) the most efficient ways to get things done. This is just because working this way implies taking advantage of a human friendly scratch ram register allocation strategy.
Watch how you think, run a time profiler in your daily work, and see where the time is going. If most of it goes to clicks, typing and reading, then you have a register allocation issue. Then, solve it by allocating your registers more appropriately, and then training yourself to take advantage of the new register allocation. Most brain cycles should be going into design anyway.
Eventually this will drive the language you choose to work. And the good thing is that Smalltalk is just one option... and even if it were and you happened not to like it, you can change it to your heart's content.
I find myself very productive in Smalltalk. How about you? :)
Posted by
Andrés
at
17:20
3
comments
So... where's the STS 2007 website? Does anybody know the submission deadlines?
Posted by
Andrés
at
23:31
3
comments
As all things do, OOPSLA 2006 has also come to an end. What a good experience it has been! But now, it is the time to work so we will have cool things to talk about at the next OOPSLA.
Posted by
Andrés
at
20:09
0
comments
So, finally... the fourth demo is done. It was cool, some C/C++ guys came by and had a great time (I think!) seeing an alternate approach make code run really really fast. I am happy because, overall, I had a varied audience --- which is one of the things I was hoping for.
It was also good to go through the motions of giving talks again. It is so much fun, but I was so rusty! I need to do this kind of thing more often.
Posted by
Andrés
at
15:44
0
comments
So there is this guy with a Lambda superman suit talking about stuff... what is this stuff? It certainly tickles my curiousity! Well, I have been exposed to the type system in Haskell. And, in addition, I have been exposed to generics in Java. Both of them are based on lambda calculus, which is types for natural deduction.
Hmmm, to summarize, generics in Java is incredibly verbose and, according to the presenter, even cumbersome. Enough said about that.
Haskell's type classes are, as I understood them, a way to pass a sort of "method dictionary" so that type inference works. However, the type inference breaks when not all sends are "monomorphic". Well right, if all sends are monomorphic, then types are essentially method lookups --- hence my previous claim that good type inference engines are hard to come by*.
What struck me again, just like with the experiment I did yesterday, is that you can think about typed lambda calculus all you want and that's fine... but you should never explicitly write any of it down. Just the sheer amount of typing and manipulation required to prevent, say, comparing apples to oranges, is disappointing. Because if the problem is that the comparison does not make sense, one should not do it --- period.
Even from a pragmatic point of view, what are you going to fix? The type declarations to prevent the comparison if and only if you run into the particular problematic scenario, or think of issues when you imagine what could possibly go wrong before anything actually happens? I do not think this is particularly productive because we all have known many a great problem, most of which did not occur.
Incidentally, doing refactoring work on type classes is, according to the Lambda guy, nearly impossible. Hence, cost of change is high even with type classes.
So, to me, it comes down to two paths so far. You can try the guessing and adivination game, or you can just fix the bug if and only if it occurs, or as shown by functional testing. Currently, I feel I am more productive with functional testing, so that's what I choose for myself.
However, I wish there was some proper research done to clarify this issue so this decision can be made more rationally. Alas, according to the Lambda guy there's no scientific research available to answer this question properly once and for all.
So, given the material available to me at this point, I have to fall back to my previous position. I can use all that in my head, should I choose to do so, but there should be no explicit manifestation of such artifacts.
As I close the lid of the laptop, I cannot help feeling that types, described this way, remind me too much of the "warning a baby could drown in this recipient if it is filled with water" labels printed on 5 gallon buckets.
Then again, as far as Haskell goes, it is certainly a huge improvement over Java.
* I have a feeling I might have gotten this wrong somehow the first time, please excuse my trying to take down notes as the presentation is still going on. I wish I could have updated this sooner, but Wifi had gone down after a power system failure that tripped the fire alarm and caused everybody to end up on the street.
Update: I changed the title because I didn't choose the first one very well, and reworded a couple things that did come out to reflect what I intended. Please excuse the mess :(.
Posted by
Andrés
at
10:05
0
comments
I can't help noticing... the more time goes by, the more old quirks of Netscape appear in Firefox. Here are a few that keep coming up:
Posted by
Andrés
at
00:00
0
comments
So lunch was more or less over, and I had had a lovely discussion with Rik Smoody and Rebecca Rikner, the lady who designed the logos for the next OOPSLA... art, Sweden, style when programming, the state of the school system, even Perelman books... fantastic conversation.
And then I went with Rik to the lightning talks scheduled at 1:30pm. But there was no chairman. And only one person from the schedule was there to give talks. What in the heck?...
... so we simply self-organized into giving spur of the moment talks. I shamelessly decided to go first, and spoke for about 5 minutes about JP Morgan's Kapital project and how Smalltalk and GemStone enable us to deliver exceptional value to our customers. I hope I can do this one more often and with more material because working on Kapital is really exciting :).
Then this physicist gave a talk about how the same geological feature can be seen differently by different people, and how one can abstract a quite informal but working model of movement and spatial constraints...
... and then he said something that I found suspicious. He said that in order to get outside the room, one had to exit. Seemingly innocent. But in my mind, that got reformulated as "to change position with regards to the room, one has to cross its boundary". And there was that funny wording in his slide, "form follows from function"...
So I had to ask. Had he read Laws of Form? And the answer was yes! So he goes "hey, I've never been around people that have read Laws of Form, how many of you read Laws of Form?". Many hands go up. Astonishing.
Then this guy Evan Phoenix came up to the stand and gave another improvised talk, based on a talk he had given at RubyConf a few days ago. In brief words, he described the following.
Posted by
Andrés
at
23:15
4
comments
Dan was gracious enough to entertain a discussion about his new project --- besides the work he's doing at Sun.
He would like to mount a new and refactored framework for authoring visual content over a standardized language (e.g.: Javascript), so the following goals can be achieved:
Posted by
Andrés
at
23:00
0
comments
What to say. It was about this tool to automatically add more or less repeated code to methods, like some sort of "unrefactor" tool. No parse tree, just text based. All in Eclipse, based on files, etc.
Man... we are so spoiled with stuff like our debuggers and things like the Refactoring Browser... that I think sometimes we take it too much for granted... I wish others were more open to taking a look at them, so they would stop all that suffering for no good reason!
Posted by
Andrés
at
17:47
2
comments
I got a comment that started by quoting a question I made in the original post, "And why do type systems cause so much grief?". What I meant by that question was why talking about types causes so much friction.
The comment went on saying that lack of precision when talking about type systems can be misleading (my own paraphrasing). However, the rest of the original post talks about specific characteristics of type systems. For example, if they explicitly appear in your development work, they cause grief because it's more stuff that you need to take care of.
I wondered last night about the fraction of the developer time that is spent dealing with explicit type systems as opposed to doing the work. What could it be in languages like Java?
Let's say it's 10%, for illustration purposes. Now, go to a manager and tell her/him that 10% of the development resources are going into a system that addresses a particular kind of simple mistakes. Not even the hard ones, not even most of the simple ones, but just a particular variety of the simple ones. So, out of 10 months of work, 1 goes into (essentially) fluff.
I do not think the realization would be well received. Does anybody know the actual time percentage?
Posted by
Andrés
at
12:19
12
comments
So finally I decided to implement what I dreamt some time ago... an environment in which there is a soup of labels out of which you distinguish blobs, on which you mount behavior by means of name maps... but then of course behavior is also a name map, and so are blobs, so it's very clear that all of these are just functions from the label manifold into itself.
I knew that this was equivalent to Smalltalk. What I didn't expect was to see how Smalltalk could be derived from that interpretation, and how much more compact and concise Smalltalk is. The only thing "missing" from Smalltalk is more refactoring to take advantage of similarity of behavior patterns more effectively.
Even then, it's interesting to look at Smalltalk from that point of view... a "user optimized" implementation of an information manifold manipulation framework.
Update: I commented what happened to Dan Ingalls, who promptly responded that right, that is what Smalltalk was designed to do.
Posted by
Andrés
at
11:55
1 comments
I am sure you have heard how Vista builds take 24 hours to be created. But that's nothing.
Posted by
Andrés
at
22:55
2
comments
Today, as yesterday, the issue of whether explicit/early type declarations are a Good Thing or a Bad Thing came up. Sometimes, I even saw how the discussions got a bit too personal. Besides the fact that talking about people is not going to address technical issues, the observation remains: clearly, it is a tough issue to discuss. But why? And what is it about types that causes so much grief?
I had great exchanges about this topic... and I came to the following summary that I would like to write down before going to sleep.
Overall, the issue of whether to use types or not is a matter of which values you want to emphasize. Do you care about preventing errors from occurring at run time? Do you care about cost of change?
When I work with Smalltalk, I think mostly about the problem at hand because Smalltalk has this tendency to become a mirror for my thoughts. As I put more stuff into it, I get feedback that I can apply to converge to the solution I am looking after more quickly.
As with numerical integration of differential equations, the key here is the size of each integration step. Shorter feedback cycles will lead to better overall results because they allow more fine adjustments to occur more frequently. And since finding a valuable solution to pretty much any problem more difficult than a CS homework assignment requires a Serious Amount of Thought, I think it is a good idea to make the feedback cycle lag as short as possible.
Immediately, this implies that an explicit type system is detrimental. I only have 7 plus minus 2 slots in my mind's scratch ram, and the more I need them for thinking about things other than my problem is going to cause me grief. If I need to swap out parts of my problem to think about explicit type declarations, then I am going to spend time and energy
Posted by
Andrés
at
22:12
8
comments
I saw Dan again today, and I asked him about the previous post. After all these years of Smalltalk, hadn't it happened to him to become a bit, "bored", by it?
The answer was no, because to him Smalltalk is a vehicle for exploration, for understanding new things, for learning new stuff. For him, what is fun is how to put down what characterizes a problem into a computer so it can be solved, and Smalltalk is a good canvas for doing so.
In a way, he is interested about the meta aspect of it. How to put down what characterizes the problem of helping to put down what characterizes a problem so one can be productive.
How refreshing. And how true. Let's not forget that.
Posted by
Andrés
at
22:08
0
comments
There has been some conversation today about how, over time, one seems to lose interest in the language one uses. I think to a point it might be boredom, or perhaps it's a feeling of "yeah I see how that can be done" because you have a lot of experience... and then perhaps what follows is some sort of disappointment because it's not exciting as the first time used to be.
As if we needed a dose of dopamine as strong as the first one.
I think that if we stagnate because we do not get as excited anymore, it's not because the language isn't as exciting, and it's not because the venue at which we meet isn't as exciting. To a point it might be because the low hanging fruit has already been picked, and the hard problems make more time go by between the dopamine doses that come with success.
But perhaps, to a certain extent, it's because we keep looking at the same tree. So what do we do?
Posted by
Andrés
at
21:54
0
comments
The second demo went better with the feedback from Vassili, and it's still running in its alloted time. But of course it can still use some improvement. So this time I got feedback from some GemStone folks that, quite obviously, have been doing Smalltalk for a long time. Tomorrow's demo should be even better.
Here is something that I really appreciate about OOPSLA. If you are open to learning new stuff, if you are open to searching something that can make you better, and if you are open to finding how astonishingly wrong you can be about something... then this is a place to be. Personally, I'd rather get criticism from people with a lot of experience. Because otherwise, how am I going to get where these people got in less time than what it took them? Why should I go down a doomed path when I can avoid it?
More of the same, please.
Posted by
Andrés
at
21:49
0
comments
So... after lunch and enough time for my brain to perform a good scavenge of the new space... the time for the next demo is coming up. Just 75 minutes to go. Hopefully the laptop won't keep thinking it got disconnected from the projector every so often. Also, I am hoping to put some of Vassili's feedback to good use. We'll see how it goes, v2.0 should be better than v1.0.
Posted by
Andrés
at
14:53
0
comments
Man... the jitters... it's so much fun, but after you're done you have the semi-sweaty hands and all that. Particularly nice was how the laptop's video card would keep thinking there was no projector attached --- but only during the slides! For fun, I showed a 64kb demo while we waited for the time to come, and it worked perfectly. I think it has to do with the background of the slides being black. Silly NVIDIA driver...
Three more stress tests to go :).
Posted by
Andrés
at
11:18
0
comments
So... I was sitting on the E tables updating the slides for the first showing of my demo... in about 45 minutes... and the topic of the book came up, and then whether I had a publisher or not. Then, Göran mentioned the book counterpart of cdbaby. I will definitely have to check it out.
Update: compared to the printing costs I had checked out not long ago, Lulu's are more than 4x cheaper! Thanks Göran!!!
Posted by
Andrés
at
09:48
0
comments
Conferences like OOPSLA always do this to me. It's not even beginning to be late, and I already feel like I seriously need to do a compacting GC on my brain because of the information overload.
For example, I had many conversations about the nature of behavior today. They're rather abstract so I cannot quite put them in a blog without writing a booklet, but man... it's great to be able to have many such conversations in a single day!!!
OOPSLA is great. It just makes me want to sleep...
Posted by
Andrés
at
20:58
0
comments
At the Dynamic Languages Symposium, the current talk is about exposing the CPU to Python programs in a way consistent with Python. Interestingly, they exposed all instructions of the CPU to Python.
While on one hand this gives great power, it also opens the door to bugs that are rather difficult to track down. I wonder if the risks outweigh the benefits... ???...
Posted by
Andrés
at
10:54
1 comments
I saw a very interesting talk a while ago, given by Ian Piumarta. Essentially, what is the least possible set of machinery that you need to build dynamic (e.g., modify objects at runtime, modify behavior at run time, etc) languages.
Just as an example, it was surprising to see things like a full Javascript implementation in 400 lines of code.
The necessary material you need is Meta-II, written in the early sixties. Or, on the other hand, ask Ian for their implementation which they will release in 1-2 months.
Very very iiiiiiiinteresting, my friend.
Posted by
Andrés
at
10:51
1 comments
Good idea: bring power cords and power strips. With wifi, hubs and switches are no longer needed. Also, good thing, wifi is free at OOPSLA.
Posted by
Andrés
at
14:37
0
comments
So how come when I come to these places I see Those Smalltalk Shirts, the ones that have particular vintage such as "this is from OOPSLA 1992" or something like that, but such things cannot be obtained anymore? We should set something up at Cafe Press.
Posted by
Andrés
at
14:35
0
comments
Well... since this morning, many things have been going on.
I met with Vassili Bykov this morning, eventually Roger Whitney came by, then Travis, Martin McClure, Eric Winger, John Brant, and others. We went to have lunch and we had a great time. Some of the conversations included: optimization of 32-bit GemStone performance of GbxLargeDictionaryBucket, Smalltalk being used for generating code for sensors running on tiny hardware (900mhz Crossbow CPU, 4kb ram, 512kb flash), Smalltalk being used at JP Morgan, performance of VisualAge GC when the old space is almost full (the new space won't get tenured leading to spending most time copying between the semispaces), performance of Smalltalk code, John Brant's torture tests for RB (e.g., go to String and inline basic methods over and over again and make sure the image doesn't crash), a P2P approach to using shared page caches in GemStone to avoid overloading the Stone with traffic, and many other things.
I insist --- if you are not here, then you're missing all the fun.
We're currently by the E rooms as the wiki conveniently informs. Come on by and join the fun :).
Posted by
Andrés
at
14:20
0
comments
I just got back to the hotel. I was at a Starbucks this afternoon, updating the OOPSLA wiki and writing the book (248 pages now). But as there was no movement on the wiki page, I thought that people would get in late today so I wouldn't get a chance to see anybody.
Eventually I decided to go to Powells bookstore. I made two blocks on 9th instead of 10th because I decided 10th looks a bit less happy before getting to Powells. I got to a corner, and I saw this guy walking towards me from the other end of the street. Like any other guy. I could have just let him stroll by.
Not this time. I asked him if I hadn't seen him before, perhaps at a Smalltalk Solutions or an OOPSLA. He turned out to be Roger Whitney, who was coming back from buying an AC adaptor for his laptop as the one he had was at home. Needless to say, we had never met each other before. Now I think I got confused with Hans-Martin Mosner, who I had met in STS 2006...
We went back to the Starbucks, we updated the wiki page, and we had an interesting conversation about artful Smalltalk. In particular, Roger teaches Smalltalk at SDSU (as you can see from his link). Here are some interesting things I did not know.
Posted by
Andrés
at
22:48
2
comments
Portland is such a nice city... if you're in and you'd like to meet, come on over to the Starbucks at SW 9th and Taylor (don't forget to check out the wiki as well).
Posted by
Andrés
at
15:10
1 comments
But yes, what a good idea... manufacture babies. And what happens when one neglects a nourishing environment and wants to exercise the warranty? A complete mess and an exercise in misinformation, coming from this article in New Scientist. Shameful.
Now go read Brave New World by Aldous Huxley.
Posted by
Andrés
at
11:05
0
comments
If you will be staying at the Red Lion hotel across from the conference center, ask for a room facing North. According to Marisa (helpful lady at the front desk), rooms facing North experience much less noise due to traffic.
Posted by
Andrés
at
20:59
0
comments
If you are coming to OOPSLA, check out this Wiki page. See you here :).
Posted by
Andrés
at
20:57
0
comments
OOPSLA is essentially next week. Did I miss something or is there no wiki page somewhere so that Smalltalkers can synch up with each other? Personally, I think missing the chance to see each other outside the context of OOPSLA would be a shame.
I think we should get something going --- here are my 2 cents. If there are better alternatives, then by all means let's use them!
Update: people are signing up! This is great stuff!
Posted by
Andrés
at
18:29
0
comments
I had a chance to wonder about the circumstances in which I learned Smalltalk. To a point, they were a bit miraculous.
I did not like a university, I went to another. I realized how much I disliked how Computer Science was being taught, so I shifted to Mathematics. The Algebra instructor I had was not fun at all, so I decided to change to another Algebra class. The guy there also knew how to program computers, very nice. I started talking to him about computer programming things, and eventually he insisted so much about this thing called Smalltalk. I was curious, and in time he spent 3 hours and taught me the basics. I paid attention to what he had to say. Although my Pascal/Assembler past was not the best background for it, I took a more or less unbiased look at it. And I liked Smalltalk because you could have things that behaved in a much more real sense than a bunch of bits thrown somewhere.
I saw my old programs, in which I had invested so much time and energy, become obsolete overnight. It didn't bother me. I had something new and better to learn.
Had I insisted with any of the things I did not like, I do not think I would have heard about it. Had I determined that Smalltalk was bad because I couldn't do xor ax, ax or any other far fetched thing, or had I been too attached to what I had done already, I would not have paid attention to it.
So what is the mechanism that draws people to Smalltalk? These small miracles? Or something else? What is your story with Smalltalk?
Posted by
Andrés
at
22:31
0
comments
Going through blog comments, I found Tim's blog called Pintside Thoughts. Welcome!
Posted by
Andrés
at
16:01
4
comments
I went over the page Blaine linked, the one with the quotes about Smalltalk people being arrogant and such.
Let's assume all that is true. After all, even today I meet Smalltalkers that are nearly intractable because they won't listen, or they will be unnecessarily aggressive, and in general will care more about themselves than about getting the job done.
But wake up and smell the coffee, my friend:
Posted by
Andrés
at
10:56
0
comments
Haha! So now I have the benchmark running version of SUnit ready for OOPSLA. Right now, it has a notorious lack of more or less obvious features. But I like to do my homework in advance, so now I may have a chance to improve it before show time.
All that manual work automated down to a click... so nice...
Posted by
Andrés
at
21:06
0
comments
Reading random stuff I ran into this article about a society organized around the idea that whatever is "good" only comes in limited amounts, and that therefore each member is entitled to a fair share. In particular,
Posted by
Andrés
at
22:14
0
comments
And again, I wrote another testing framework by extending SUnit. This time, it's a benchmark tool that can measure iterations per second of many different implementations of the same functionality against many different test cases.
To think that for the book I tested 28 test cases against 6 implementations with two varieties, for a total of 336 printIts and 70kb of workspace code... all done by hand just because I thought it was a one time effort...
In the new framework, all that has been reduced to 6 test methods and 56 set up methods. Now all I need is the results UI and it will be ready for OOPSLA.
Incidentally, SUnit 3.0 as shipped with VW 7.2.1, could use some refactoring.
Posted by
Andrés
at
16:16
0
comments