more bad ui from Adobe

January 27th, 2009

Found this Adobe ui bashing blog today. I really think we need more of this, our standards for ui aren't good enough. We do a lot of criticism for bad code, because we're technically minded. But bad code is less harmful sometimes than bad ui.

There's a reason ui critique is so hard to do without getting into a fit of fury. It's like a guy standing over you saying "no, don't tie your shoe laces like that, do it like this". And then he forces you to do it his way every single day for the rest of your life.

Of course, this isn't the first time we've seen Adobe, the tool builders for the designers of the world, complimented on their ui.

what is smalltalk today?

January 26th, 2009

So Smalltalk is one of those languages that gets thrown around a lot in discussions about languages. After all, it is where the object oriented paradigm pretty much originated (although I suppose Simula sort of had a version of that without that explicit name), and so many languages have drawn on it for inspiration, even if most have gone a completely different way in realizing the OO idea.

As historical reference, Smalltalk is big, no doubt about that. And as a language it is pretty clever. Dynamic and self reflective, it just runs the whole time, objects are live and can be altered on-the-fly with a change to the code.

But what is Smalltalk today? Is it worth learning? From what I can see, and I should say I haven't really spent that much time looking, it seems pretty dead. There is Squeak, where you get the whole image and you do everything inside the virtual machine. From what I understand this is the way you're supposed to use Smalltalk. But frankly I'm not interested in an application that only runs inside a VM. For the same reason that noone really wants to run apps in VirtualBox or VMware.

Most of the Squeak tutorials seem to be 404. And I have yet to see anything that's really interesting. In the end, programming is about programs, and without shiny programs to show off, what is left for us? The Smalltalk website, sporting a 1997 kind of look, has a list of apps on show. Based on that it's hard to get excited about the language.

Okay, so there is something called Seaside, a web framework. And I can kind of see how it's cool to have a web application that has to run 24/7, and meanwhile you can do live updates to the objects. But I'm not shopping for a web framework anyway, and there's a ton of them already.

So is Smalltalk merely a historical curiosity at this point?

java plugin galore

January 25th, 2009

Ever lay awake at night wondering what happens when you hit a web page with a java applet on a vanilla Ubuntu? Me neither. It turns out that it's this:


Embarrassment of riches! There are a few problems with this feature:

  1. While it's great that you help me install the plugin, I have no idea what all these things are. All I wanted was "java".
  2. There is no "default" or "recommended" choice. I can see that one of them is selected, but for all I know that's because the choices showed up in this order at random.
  3. Even if I were inclined to think that the selected choice is selected for a reason, there's another choice that's exactly the same.
  4. "No description found in plugin database." is not exactly helpful. In fact, it could be just the thing to help me here.
  5. If I wing it and install one of these, and then it turns out it doesn't work (perish the thought!), the little notification at the top of the web page isn't going to show up again (because a java plugin, working or not, would be installed). So there's no way I can come back to this screen.
  6. If I am the kind of user who understands that the choices in this dialog represent packages in the system, then I don't know what they are called, because the package names are not mentioned. So if I want to uninstall a plugin that doesn't work, I don't know what to uninstall.

There is another dialog in the Firefox settings for plugins:

Strangely, there is no option to uninstall plugins here, just disable. But I guess that if I disable the java plugin, I can revisit that java web page and get that plugin selection dialog again (and try a different one). Still, it takes a bit of detective work to figure that out, it could be made more obvious.

This example demonstrates the difference between starting on a problem, and actually solving it. I'm very pleased that we have these helper dialogs now, but it needs a bit more thought put into it.

Bug: #320989
I actually picked this example because there used to be two or three options in that dialog, but now there are five.

Why do politicians lie?

January 23rd, 2009

The issue comes up at every election.

Politicians are liars. They never keep their promises. You can't trust them.

Yes, true. But why? You can complain all day that knives are sharp, but if you don't understand why they are then you're not going to make any progress.

Now let me see if I remember how it is that politicians come to power in a democracy. Oh yes, people choose them. How revealing. Don't you find it ironic to criticize a politician for doing precisely what causes you to vote for him?

Imagine that every Monday you go to the store to buy a loaf of bread. They have ten different products. Nine of the ten have pink spots on them. You buy a bread with pink spots and head home. Once you get home you complain about the pink spots. Who would you say is to blame for the pink spots?

But wait, why do almost all the products have pink spots? Because the people making the bread know that you always choose one with pink spots on it. They don't make it with pink spots because they want to, they do it so that you will buy it.

Why do they lie?

Politicians exhibit a certain behavior. The behavior is making promises they have no intention of keeping. What can we do about this? Well, behavior responds to stimuli. If you want to change someone's behavior you have to give them an incentive.

It's no different here. Suppose a politician ran for office. One who was different from all the others. Suppose he didn't make any promises. Suppose all he said was "I intend to try my best" and "I'm very hopeful that we'll be able to achieve this". Would you vote for someone like that? Probably not.

So your incentive towards honest politicians is.. negative. You're rewarding deceit.

Why do we make them lie?

So why are we so eager to force people into making promises? We think this is an effective social instrument, don't we? If someone has said they're willing to do something, but they haven't committed themselves to it, then all too often we want to "help" them decide, don't we? How often do parents say "do you promise to do it"?

You find yourself right in the middle of a power struggle. You want someone to do something for you, but the person isn't really that eager. What's more, you're losing. Because you can't force him to do it. So one last hope is to make him promise you, make him commit to it. Then you think they'll be too ashamed to reneg.

We use promises in every day life to increase our power over other people. This is the way our culture functions, and we don't seem to have any qualms about it, do we? Face it, whenever you are forcing a promise out of someone, you either successfully stamp your power on them, or you make them lie. That's right, make them. You make them promise something they would not have volunteered. And it might even be something they can't deliver. But since you've forced this promise out of them, well what can they do about it?

So what about these pesky politicians? Well, we think that if a politician makes a promise, then there's just a chance he will actually do something about it. If he doesn't make a promise, he certainly won't. This is what we believe. Consequently, we want them to promise us everything. Have you ever heard a voter say he's disappointed with a politician for promising him something he wanted?

Why do we want them to lie?

But the truth is we want them to lie. We want them to promise not only what they know they can deliver, but so much more than that. Who's going to get more votes, a politician who only makes promises he can reasonably keep or one who makes lots of them? Not the conservative one. No, because he doesn't seem to care about our problems. He will only commit to the problems he knows he can solve, but what about my problems? I need more than he can deliver, more than he can promise. So I choose the guy who tells me he can deliver everything.

See the thing is elections are more about emotions than they are about facts. The people who get really caught up in politics don't do this over the cold facts, they feel there is something special to the whole process. As voters we love someone who can speak to us in a way that makes us feel like he understands our situation. Does that mean he can solve all our problems? No, but we sure like to dream it, don't we?

What was Obama's campaign all about? Hope. And what is hope exactly? It's the [possibly delusional] belief that something will happen that hasn't happened yet and hasn't shown any signs of happening either. And we buy this, because every once in a while we want to hope, we want to be delusional, we want to think that a better day is coming. Our experience tells us otherwise, but dammit we need hope sometimes.

Because what is the alternative? Realism. Things will never get better, and if they do it will probably be a change that won't make a big difference. And it might not even last. We are stuck with the way things are and that's that, hopefully it won't get worse. That's the realistic perspective on life. But what's more seductive, optimism or realism?

There are people out there who are trying to keep track of promises that were made to see what the politician actually did after being elected. Fine, I see nothing harmful in keeping track. But understand why the guy said those things. Because you, the voter, wanted him to.

svn builds for the commoner

January 12th, 2009

I had a small revelation this week. I got svn builds working, both with Mono, and at along last, KDE4. It turns out it doesn't have to be maddeningly error prone.

Mono SVN

To build Mono you should look at the release tarballs of a recent release, like 2.0.1. That tells you which modules you need. It doesn't really tell you much about the order in which you should build them, however. Then you grab the sources from svn. The names of the modules in trunk/ largely match the names of the tarballs in the release.

I found this order to work okay:

  1. libgdiplus
  2. mcs (download only, mono module builds both)
  3. mono
  4. debugger
  5. mono-addins
  6. mono-tools
  7. gtk-sharp
  8. gnome-sharp
  9. monodoc-widgets
  10. monodevelop
  11. paint-mono (from http://paint-mono.googlecode.com, yes it runs!)

When you're checking out from svn, don't check out the entire history (this would take forever to download), use

svn checkout -r HEAD <url>

so that you only get the current HEAD.

Before you set out, it's also a really good idea to set up a special build/runtime environment for this process. That way your existing Mono (if you have it installed) won't interfere with the svn build.

Now for the building. Generally, this is all you need:

  1. ./autogen.sh --prefix=/opt/mono-svn
  2. make
  3. make install

There are slight variations in that some packages use bootstrap.sh instead of autogen.sh, but this you'll find in the respective READMEs. And those instructions actually worked for me. :cap: The mono module is a bit more complicated, because there is the whole concern about building mono using mono. So I recommend using

make get-monolite-latest

first to bootstrap the build. And then it works.

Sometimes you'll have failures because of missing dependencies. There will be a message like "You need package Hello". In that case look in your package manager for something resembling libhello-dev and that's more than likely it.

Last but not least, you obviously need a working toolchain.

KDE4

To build KDE4 there is a great tool called kdesvn-build. It comes with a sample config file you just tweak and then run the script.

Again, you'll probably have some failures, but kdesvn-build saves *all* output. So just look in log/latest/<module>/<operation>.log and you should be able to figure out what happened. Cmake has a very nice summary at the end of its output, where you can see exactly what was set up to be built.

The same note applies with respect to missing libraries as with Mono.

NOTE: KDE and Qt are massive and the amount of disk space this will cost you runs in gigabytes, so make sure you have plenty. My kde-sources directory with a full KDE build in progress is now 7gb, I kid you not. Mono is much smaller: 2gb.