If you think about Windows Longhorn, what do you think about? You should be thinking about WinFS, Indigo and Avalon. WinFS being the database-like layer on top of the NTFS filesystem (”make finding files as fast as finding websites on Google”); Indigo being the new all-in communication package; and Avalon being the new vector-based graphics engine (no more bitmaps, windows and widgets can scale as much as you want).

That’s great. But what’s Microsoft doing now Well, they’re doing a couple of things. First off, they’re dropping WinFS for Longhorn. Personally I’d find this the most important feature to keep, but OK. Second, they will make Indigo and Avalon available for Windows XP and 2003 aswell. That’s great isn’t it? Yes, that’s great, but incredibly stupid. For our sake, that’s all what Longhorn is. It’s Longhorn without the Longhorn.

Why would I want to buy Longhorn now? Because it makes me buy a new 3Ghz PC?

Edit: A video about why this change was made, just came out on Channel 9

Some Books

by Zef Hemel

It’s the holiday period so I ordered a lot of books over the last few weeks. I already talked about “Free As In Freedom”:http://www.zefhemel.com/archives/2004/08/12/free-software-the-religion and earlier a tiny bit about “Eats, Shoots & Leaves”:http://www.zefhemel.com/archives/2004/06/07/capostrophe.

A couple of days ago my pre-ordered book by “Joel Spolsky”:http://www.joelonsoftware.com arrived. The one with the 5-line title. I’m not kidding: “Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity”:http://www.amazon.com/exec/obidos/tg/detail/-/1590593898/104-4303829-7227957?v=glance. What it basically is, is a best-of collection of Joel’s “articles”:http://www.joelonsoftware.com/navLinks/fog0000000247.html, editted to fit in a book. The added value primarily is the new preface and the fact that’s now all between covers and hence can read it offline; rumours go that your PC doesn’t even have to be on. Anyway, I’m at page 184 at the moment and I really enjoy it. It’s so great that there’s someone on this planet who just tells you exactly what you need to know. What is unicode? How do I write a functional specification? How do I run a business? Why should I never rewrite my software? How to hire good people? Highly recommended.

What else? Ah yes. “The Cathedral & The Bazaar”:http://www.amazon.com/exec/obidos/tg/detail/-/1565927249?v=glance, a book by Eric Raymond (basically the guy behind this thing called open source) about… open source. I haven’t read nearly all of it, but it tells you how to run an open source project well and why open source is a better development model than the proprietary development model. And the good thing is: this time no talk of unethicalities and evil empires. This book is also available in a free “online version”:http://www.catb.org/~esr/writings/cathedral-bazaar/.

I also bought “Essential English: For Journalists, Editors and Writers”:http://www.amazon.co.uk/exec/obidos/ASIN/0712664475/026-5561792-1437236 and ordered “The Innovator’s Dilemma”:http://www.amazon.com/exec/obidos/tg/detail/-/0066620694?v=glance. But that’s boring non-geek stuff. Talking about non-geek stuff. Ha! just kidding, I have nothing non-geeky to tell you.

Trinity College

by Zef Hemel

I want to study in a foreign country for a while. So far, “Trinity College, Dublin (Ireland)”:http://www.tcd.ie looks most attractive to me. Mainly because our university has an exchange programme with them and because it’s an English-speaking country which is a must for me, because I want to improve my English.

There are three ways to get into Trinity College:
# There’s the Socrates student exchange programme. You take courses there and they’ll accept your credits here. The Socrates people will also take care of housing and insurance. Trouble is that, basically, I can only take courses from the bachelors programme, most of which I already did in Groningen and aren’t that interesting.
# I can try to take master courses anyway through the Socrates programme. This can become very hard, but it can be tried. Trouble is that even if I take all the courses from a master programme, I won’t get a Trinity diploma.
# Abort my studies here in Groningen and apply at the Trinity College on my own. Trouble is that I’ll have to finance everything myself: the study, housing and living. There’s no kind of funding, I’ll just be on my own. Good thing is that I’ll end up with a Trinity College degree and that I might use the credits for the software engineering master that I’ll be doing in Groningen this year. This means that, ideally, I might end up having two master degrees.

The cool thing about Trinity is that they got this really cool master programme: “Networks and Distributed Systems”:http://www.cs.tcd.ie/courses/mscnds/. It’s exactly the master programme that I’d like to do, and they don’t offer it here in Groningen. I talked to a friend that lives in Dublin, and he told me that Trinity College is highly regarded internationally, it’s said that if you have Trinity on your CV, you’re on for a great future. He also said that Trinity is quite hard to get into.

I’m probably going to try to enroll at the Trinity College on my own. This is quite exciting and somewhat scary to me because it has an application procedure, there’s no guarantee whatsoever that they will accept my application. To people living in countries like the USA, UK, Ireland etc. this may be very obvious, in the Netherlands it doesn’t work that way. Here, you can just pick a university and they’ll accept you (except for some studies, such as medicine). This also means that it never was very important to get as high grades as possible. Basically, until now, I just did just enough to pass, and that’s that. But now, as I’ll be competing against other students to get placement, those grades do matter. Thankfully they’re not that low (they average at 7.4 out of 10), but they could’ve been higher if I worked harder. Also, one of the the entry requirements is that you have a “upper second class honors degree”, something that’s quite hard to translate into the Dutch grading sytem, but I’ll just give it a shot.

So, the plan is to apply for next year (2005/2006) which still is far away, so I have time to prepare. In order to apply I need to get TOEFL certification. This is a certifications that proves that your English reading, structuring, writing and listening skills are good enough. I had a look at some sample questions, and it’s really easy, probably easier than the exams I took at high school. Also, I need references from two teachers saying that I belong to the top-something-percent of the students that they taught in the past 5 years. This is probably trickier, mainly because not many teachers know me that well, and it would be best to have a professor or two act as references (it’s more impressive). So I’ll probably have to go to talk to some to see how we can arrange this.

Anyway, all in very early stages, but it are going to be exciting times.

(Sorry for the bad writing, I wrote this really quick)

I just found this very intersting test report: “Legibility and readability on the World Wide Web”. A couple of Argentian researchers did a test with 123 American people. Among others they tested what fonts they could read the fastest and most accurate; what the optimum number of characters per line is; and what’s the best colour setting (different fore- and background colours).

As for type faces, Verdana seems to be the best choice for both speed and comprehension (Georgia — which I use — and Comic Sans score second). Trebuchet MS is considered the most elegant font, Verdana is a close runner up. In the test for leading space and font size, 12/12 seemed to allow the fastest reading. For comprehension 12/18 is more appropriate. As for column width, 80 characters per line is the optimum for quick reading and for text comprehension aswell. The result of the colour setting test (with different fore- and background colours) is kind of weird. Apparantly you can read the fastest with a white on green colour combination (black on white is second). For text comprehension black on white is the best, though.

The font I use here, Georgia, appears not to be a bad choice (luckily, because I find it a good-looking font face). I also have around 70-80 characters per line, so it should be easy to read. The font size (14 pt) is not optimal, yet considered to be more confortable to read (according to the research) than 12 pt. And about the colour setting, there’s no way that I’d change it to white on green. Eww. That would look so awful.

Anyway, I think this is a must-read for every serious web designer and everyone else who actually cares about their readers.

“Read the full report”:http://bigital.com/Web_Legibility_Readability.pdf.

Why Java Sucks

by Zef Hemel

I’ve been using Java seriously for about 2-3 years. When using an IDE like Eclipse I can be very productive, I can probably code faster in Java using Eclipse than in any other language (including PHP and Python), debugging is easy, errors can be found quickly and easily. But as any platform does to some extent: Java sucks, and I’ll tell you why.

Swing
I haven’t used it a lot myself, thankfully, but to me it seems too complicated, slow and on top of all: ugly. When I use an OS, I like consistent behaviour and looks. I don’t want some friggin’ purple, slow, ugly looking window on my screen that eats away half of my memory. Who really uses a Java application that uses Swing? Nobody, and for a reason: Swing sucks. We want native-looking GUIs. That’s why IBM developed SWT which uses native widgets supplied by the OS. Not only is this a lot faster and uses less memory, it looks better too. Proposed Swing slogan: “Sure it looks like shit, but at least it does so consistently on all operating systems. ”

J2EE
J2EE is the Java way to build “Enterprise Applications”. It’s widely used in many enterprises. I have some experience with the Servlet/JSP part of it and it works reasonably well. One thing though: Sun loves XML. Every servlet you create, every JSP taglibrary tag you write has to be registered in an XML file. That sucks. The first thing I did when I developed KeyTopic is work around the servlet registration problem (by using only a single servlet). I also briefly looked at EJB, that’s even much, much worse. Every EJB has like an interface file, home-thing file, remote-thing file, and a couple of XML files attached to it. Most of this can be generated automatically by using applications like XDoclets, but still, it’s a mess. It’s confusing, complex, and most importantly: so much more complex than it has to be. At least, that’s the feeling I get when I look at it. For example, check out this post about What Should a Good Enterprise Java Developer Know. I’ll just quote the list, to make it more clear:

  • You need to be proficient in object-oriented analysis and design (OOA/D), design patterns (GoF, J2EEDP), and integration patterns. You should be intimately familiar with UML, especially class, object, interaction, and state diagrams.
  • You need to learn Java the language and its core class libraries (collections, serialization, streams, networking, multithreading, reflection, event handling, NIO, localization, etc.).
  • You should understand how the JVM, class loaders, and garbage collector work in general. You should be able to decompile a class file and comprehend basic byte code instructions.
  • If you’re going to write clients, you need to learn applets for the web and Swing, AWT, or SWT for the desktop. You should also be familiar with the JavaBeans component model for UI widgets. JavaBeans are also used in JSP to isolate business logic from the presentation tier.
  • You need to learn the JDBC API and how to use at least one persistence/ORM framework like Hibernate, JDO, CocoBase, TopLink, or iBatis. You also need to understand the implications of the object-relation impedance mismatch, how it will affect your business objects’ interactions with a relational database, and its performance consequences.
  • You need to learn about the Java sandbox security model (class loaders, byte code verification, managers, policy and permissions, code signing, digital signatures, cryptography, certification, Kerberos, etc) and the various security/authentication APIs, like JAAS (Java Authentication and Authorization Service), JCE (Java Cryptography Extension), JSSE (Java Secure Socket Extension), and JGSS (Java General Security Service).
  • You need to learn Servlets, JSP, and optionally JSTL (Standard Tag Libraries).
  • You need to be familiar with popular web frameworks, like JSF, Struts, Tapestry, Cocoon, WebWork, and their underlying design models, such as MVC/Model2.
  • You need to learn how to use and administer web containers, like Tomcat, and how to deploy and maintain web applications on them.
  • You need to learn about distributed objects and remoting APIs, like RMI and RMI/IIOP.
  • You need to learn at least one XML API, like JAXP (Java API for XML Processing), JDOM (Java for XML Document Object Model), or DOM4J.
  • You need to learn how to build Web Services using Java APIs and tools, such as JAX-RPC (Java API for XML/RPC), SAAJ (SOAP with Attachments API for Java), JAXB (Java Architecture for XML Binding), JAXM (Java API for XML Messaging), JAXR (Java API for XML Registeries), and JWSDP (Java Web Services Developer Pack).
  • You need to learn a lightweight application framework, like Spring, PicoContainer, Avalon, and their IoC/DI idiom (setter, constructor, interface injection).
  • You need to be familiar with various J2EE technologies, like JNDI (Java Naming and Directory Interface), JMS (Java Message Service), JTA/JTS (Java Transaction API/Java Transaction Service), JMX (Java Management eXtensions), and JavaMail.
  • You need to learn about Enterprise Java Beans (EJB) and their various component models: Stateless/Stateful Session Beans, Entity Beans (with Bean-Managed Persistence [BMP] or Container-Managed Persistence [CMP] and its EJB-QL), and Message-Driven Beans (MDB).
  • You need to learn how to manage and configure a J2EE application server, such as WebLogic, and utilize its add-on services, like clustering, connection pools, and distributed transactions support. You should also learn how to package and deploy applications on it, and be able to monitor its performance and tune it.
  • You need to be familiar with Aspect Oriented Programming and Attribute Oriented Programming – both are confusingly abbreviated as AOP - and their popular Java specifications and implementations, like AspectJ and AspectWerkz.
  • You need to be familiar with various utility APIs and frameworks, like Log4J (logging/tracing), Quartz (scheduling), JGroups (network group communication), JCache (distributed caching), Lucene (full-text search), Jakarta Commons, etc.
  • If you’re going to interface or integrate with legacy systems or native platforms, you need to learn JNI (Java Native Interface) and JCA (Java Connector Architecture).
  • You should be familiar with Jini technology as it relates to distributing systems.
  • You should be familiar with the Java Community Process (JCP) and its various Java Specification Requests (JSRs), like Portlets (168), JOLAP (69), Data Mining API (73), etc.
  • You should master a Java IDE, like JetBrains IntelliJ IDEA or Eclipse. (Some people prefer vi/emacs with make files. Whatever makes you tick!)
  • Java is verbose and requires a lot of code artifacts (e.g. EJB); therefore you should be familiar with code generation tools, like XDoclet.
  • You need to be familiar with a unit testing framework (JUnit) and learn various build and deployment tools (Ant, Maven).
  • You should be familiar with several software engineering processes commonly used in Java development, like RUP (Rational Unified Process) and Agile methodologies.

Aargh! Kill me!

Choice
With Java you have choice. Too much choice. You have a choice in everything: widget sets (AWT, Swing, SWT), XML parsers (W3C DOM, SAX, JDOM, …), web developement frameworks (like a hundred, so it seems). It’s so much choice that I just don’t know what to choose and what the implications will be. This is a major reason why I hesitated to start with Java, it’s just so amazingly overwhelming and complex.

Purity
Basically the only proper way to write your software in Java is system independent; you’re stuck with the common denominator. On the server side this usually isn’t the biggest problem, but when you do client stuff, you might want to use the system tray in Windows. No! Thou shallt write pure code! Oh sorry, I bought this really cool OS that has all those cool features, but now I can’t use them because that’d affect my purity. Get the f*@#$)(*#@$*@#!

The Language
Java is a fine language, still. With Java 1.5 (not out yet) some stupid decissions were made. Generics for example. Generics in Java use a wipe-mechanism to retain backward compatibility with previous Java versions. Some of the drawbacks are these:

  • No parameter type information is retained on a generic collection. You can’t ask what the type parameters were of a certain collection at run-time, for example.
  • You can’t use a primitve type as a type parameter.
  • The new boxing features and generics won’t always work as you might expect.
  • You can’t create an array of generic collections.
  • There is some additional minor stuff that involves inconsistently using the keyword ‘extends’ when actually implementing interfaces (for which Java always used ‘implements’, not with generics).

The problem with this is that you can only understand why this stuff doesn’t work by understanding how they implemented those features, which is a typical example of a leaky abstraction. More information on these problems with Java 1.5 can be found in Bruce Eckel’s presentation (Real Media).

Some smaller things

  • The Classpath: As a beginner you’ll always have problems with the classpath. Java can’t find the class you’re trying to use, says the package declaration is wrong. Trouble, trouble, trouble.
  • In Java not everything is an object (or can be treated that way): there’s also primitives. Primitives (int, float, char, double, byte, …) are radically different than objects. The only reason they’re here is for speed’s sake, and to complicate things more. This sucks.
  • Applets: They suck: they either don’t work; don’t work everywhere; take a lot of time to load; nobody has the Java plugin installed correctly or at all; and are barely used for the right thing. Avoid.
  • James Gosling, the founder of Java, says stupid things: “Java always has been faster or as fast as C++.” (source: Bruce Eckel)

The Alternative
C# and .NET score much better on most of these points. .NET 2.0 will have CLR support built-in for generics and won’t use a hack, like the wiping that will be used in Java 1.5; the GUIs use native widgets; .NET allows purity, but you don’t have to avoid dark alleys for the rest of your life if you step out of the managed .NET world; there’s a lot less choice in application frameworks (they basically all come from Microsoft); there are no classpath problems; there are value types and reference types, which are, arguably, more natural than primitives and object types; C# is a more feature rich (and in my opinion better) language than Java; and XML file usage is more sensible. Sure, .NET isn’t perfect either, but, arguably, it sucks less.

More Java Suckage

Disclaimer
Of course I’m exaggerating. Java is a good platform to develop software for and with. It’s really not that bad as I make it look. On top of that, as I said in the introduction, every language sucks in a way: C# sucks, C++ sucks, Python sucks, Perl sucks and most of all: PHP sucks.

Town Visit

by Zef Hemel

I just went into town to buy myself a new bag, some CDs and possibly other stuff. First I shopped for a school bag. The store I was in (V&D) has a special section for high-school students at this time of year. On one hand I don’t like to be seen there, being a university student, but on the other hand it’s always to fun to laugh at the slogans they use that supposibly have to attract 12-18 year-olds. Although the Netherlands is a Dutch-speaking country, English is more and more used for targeting exactly these high-school kids. “V&D makes school rock!” — Sure it does.

Anyways. I picked a bag, which was quite pricy, but well, how often do you buy a new bag? I got my current one about 7 or 8 years ago. I went to go pay for it, but somebody pointed me to a poster saying that you’d get a €80-worth bag for free when you got a €9.95 Radio 538 diary. Radio 538 is the most popular pop-music station for the R’n'B, Sugar babes lovin’ people in the 12-25 range; not a group I belong to, nor want to be affiliated with. But as the bag I picked was €50, I decided to do it anyway, it was a €40 saving, I’d ritually burn the diary when I’d get home.

Before I went home I popped into the quite-big book store we have. I always have a look at the CS section to see if anything nice is for sale there. And it appeared a lot of books were 50%-off, sadly only quite bad books. Many O’Reilly books were 20%-off, which meant that finally I’d not have to file for bankrupcy after I bought a pocket-guide of some kind. Sadly there were only books that either I already had, didn’t care about or had too much books about already. As I was browsing a girl passed.

Eek!

All went black.

While store-staff was doing CPR on me in order to get my heart back to work, a friend of the girl shouted: “Hey! That’s the computer science section, what are you doing there?” - “Oh. Oh, nothing!” and she ran off.

After I had some water and rested for a while, I decided to go downstairs to the economy section to see if they got “The Innovator’s Dilemma”:http://www.amazon.com/exec/obidos/tg/detail/-/0875845851?v=glance. They didn’t have it in stock, sadly. When I returned back upstairs I saw that the same girl was browsing the CS books again, her friend had gone.

I just finished reading “Free as in Freedom: Richard Stallman’s Crusade for Free Software” (Amazon link). Not because I’m a symapthiser, but because I thought that either I didn’t understand the motivation behind free software well, or that I heartly disagreed with its standpoint. I bought the book to challenge myself and see if I could understand and agree with the free software movement.

To start off, a little background information. Richard Stallman has been the main voice for free software for many years now. He is very well educated, went to Harvard and briefly to MIT, he’s considered to be one of the best programmers and hackers around (he coded a lot of the GNU tools, such as Emacs). While that’s all very impressive, does that mean they guy’s right about everything? Quite often the most smart ones are also the most extreme, this seems also be the case with Richard Stallman. He believes in free software.

So, what is free software exactly? There are multiple definitions. The one most commonly known is freeware, software that’s made available for free, you don’t have to pay for it. The other is what I’ll talking about here. Free software is about freedom. Freedom to do with software whatever you like, modify it, share changes and redistribute it to others. That’s obviously different from freeware. With freeware you usually just get the binaries and are allowed to run it for free, you’re not allowed to modify it.

Is free software the same as open source software then? No. The difference is this: free software has political objectives, software to be free (as in freedom) is not about convenience, it’s about ethics, it’s a bit like a religious thing. Software ought to be free for everybody, no exceptions. In other words: Putting any restrictions on the use and availability of software is wrong and evil. Proprietary software is evil. This is what free software (and the beating heart of free software, the Free Software Foundation) is all about. Open source on the contrary, is not a political movement. All software that fits the Open Source Definition can be called open source software, no matter the political reasoning behind it, or lack thereof.

So far for the facts. The question now is: what do we want? What do we believe in? Should indeed all software be free and should everybody have the freedom to do anything with software that he or she likes? Is it indeed unethical to limit this freedom to the user of the software? Yes, says the free software movement. No, say I. Actually, I thought I had a pretty strong argument why the free software movement is wrong, but as I wrote this piece I realized it wasn’t valid. My argument was as follows:

I believe in freedom of choice for the author of the software. The choice to release it to the public for a fee, with limited rights, free for all or not at all. Why would you want to limit the freedom of the developer?

But I realized this is not how it works. Free software is not about limiting rights for the developer, it’s about the belief that the only ethical license to release your software under is a license giving everybody full freedom. Although I still don’t believe that’s the only ethical thing to do, it’s not as bad as I thought.

Often, when free software advocates attempt to show the unfairness of proprietary software, they compare it to recipes—It’s a valid comparison, as recipes bascially are source code, yet compiled by the cook instead of a software compiler. They say: isn’t it uneithical to not to allow to copy recipes from your neighbour and change them to suit your taste? Without even answering this, recipes are good comparative matterial also because some recipes are public domain—are shared and modified—and some are proprietair. For restaurants and companies like Coca Cola the secrecy of a recipe is of fatal importance. If you ask for the recipe in a restaurant, you probably aren’t going to get it. Is that evil aswell? Are you going to boycot every restaurant that won’t give you their recipes? I don’t think so, I haven’t heard of anyone doing that any way (not even Richard Stallman). Although, if you believe in freedom of software, you should also believe in freedom of recipes; or am I missing something?

I do like open source software, though. Open source software isn’t intended to kill all proprietary software. If you created some piece of software for fun and want others to play with it, modify and use it, releasing it under some open source license is a good solution. But for companies it can also be smart to build an open source community around their products: as long long as it complements it and doesn’t compete. If you’re building server hardware like IBM, it’s good to have lots of software available that works well on your hardware. That’s why IBM invested in Linux, to make it work well with IBM hardware. Same goes for the Eclipse software. Eclipse is a Java IDE platform largely created by IBM and some partners. IBM, and all those partners, do Java software. Not IDEs, mostly, but Java server software, database software and such. If they invest in a good IDE, and make sure it works nicely with their products, it makes their platform more attractive. On top of that, most of those company build their own properietary extentions on top of the Eclipse platform and sell that. They gave code to the community, the community can give back (and does) and the companies can then use that for their profit, it’s only fair. Read more about this in Joel Spolsky’s Strategy Letter V.

Let’s say you don’t agree with the free software philosophy, as I do. What do we do about it? Do we avoid everything free? That’s harder than you think. Licenses like the GPL come from the Free Software Foundation, they are a tool to enforce freedom of software and send out the “I believe in free software” message. Yet, if you ignore all that, it’s a good and fair license. Yes, it’s sort of viral, it says that everything that depends on the software has to be licensed under the GPL too, but when you think of it, it’s only fair. It doesn’t allow people to just go and use your software in their commercial applications. If you don’t care about that (and I can imagine plenty of occassions where you wouldn’t), you could pick another license (such as the BSD or X11 ones), those aren’t even free-software compatible (yay!).

I’m going to be pragmatic about this. I won’t avoid everything free (if only it were because you simply can’t, for example all the GNU tools you use in Linux everyday are GPL tools). I will just state my opinion on it clearly whenever I think I have to. I won’t abide FSF terminology such as GNU/Linux (instead of just Linux). I’ll use their stuff, but as open source software, not as free software.

Amen.

Next Page »