Hello Again, World!

Here I am, back at blogging again!

The story so far

Back in 2001, I had a small blog that was using FogCreek CityDesk. I was using the blog to share random thoughts (as one was wont to do), including programming ideas. I was in my mid twenties back then and eagerly looked for opportunities to make a dent in the world :-).

I wrote my last blog there on 2002/04/22, leaving behind plenty of unfinished work like this Back to Basics series of articles about XML. I was reeeaaally into XML back then!

Mapping my personal web

NOTE: This is a restored version from this archive.

Everything starts with a slice of the Web, in the guise of a bunch of RSS feeds. Currently my blog roll hover a little above 280 feeds. There are the broad blockbusters like Techcrunch, ReadWriteWeb, Techmeme, Presse-Citron (a French blog), the mainstream media (e.g. French newspapers), but there are also a lot of small, specialized, “vertical” blogs from developers, entrepreneurs, competitors and/or friends.

Of course I cannot cope with the quantity of content that those ~280 feeds fetch. Some people are very anxious about reading everything in their blog roll, which for instance led to the introduction of a new anti-feature in Google Reader : “hide unread count”. I was a bit like that back in pre-history (circa 2004) but nowadays I just tell myself that I won’t be able to read everything, c’est la vie.

A tribute to Groovy

NOTE: This is a restored version from this archive.

My life as a developer :

Update : it’s my life as a professional developer, since my life as a programmer began in 1983 on a Sinclair ZX81

1995 : Java 1.0 beta is released. I begin playing with it. Hotjava browser, applets are all the rage. Soon after, the infamous « Loading Java » status bar message in Netscape is the signal that you’ll loose control of your browser for at least 15 seconds while the JVM loads an applet.

Hello again, Java!

NOTE: This is a restored version from this archive.

For my currently biggest project at work, I’ve decided to get back in the flow and write the code in Java. These are a few reasons why I chose to use Java instead of Python for this particular occasion :

  • Performance. I literaly have to parse gigabytes of fixed-width formatted data, perform business logic and computation on it, then spit ou millions of rows in output files and in RDBMSes. Even when restricting the scope of my benchmark to the first part (data parsing), I get at least 5 times and up to 20 times better performances using Java versus Python + Psyco.
  • Productivity. If performance what all that mattered, I would have done it in C++, but hey, I really need to focus on the task at hand and not to fight with the compiler. Plus, it’s difficult to find, test and integrate third party libraries. In Java I could find and test two RETE engines (Jess and Drools) in less time than I would have spent just figuring how to build or integrate an obscure open source or a very expensive library.
  • Of course, Python is highly productive, but in this corner case it’s not performing well enough. Plus, I have to confess with a shudder that it’s not enterprisey enough for the context of this project, meaning that if I tell my client that the project is implemented in Python, I’ll get a lot of worried faces. Some people will be worried about how they will be able to maintain a project developed in a language they don’t know (yet), and some other people will just be worried because Enterprise©™ means Java and nothing else.

Of course, after having spent two years coding exclusively in Python and C++, I was quite happy to come back to my former favorite programming language. I wrote my first applet for the beta version of Hotjava, running on an SGI workstation at my school back in 1995, and was thrilled to see the same bytecode run on a Sun workstation, then later on my own PC. Write once run anywhere, yay ! I then proceeded to learn and use this language for 8 years, until I decided to have a taste of Python in 2003 and subsequently stopped writing Java code :).

A Brief Look at C++0x

NOTE: This is a restored version from this archive.

C++ inventor Bjarne Stroustrup describes the next version of the C++ standard.

For all the coolness that this next version is supposed to introduce (no, it’s not the name), nothing is said about what seems to me the biggest issue of the C/C++ world, namely the diversity of build standards.

C++ is a pretty tough language with a zillion built-in ways to shoot yourself in the foot. Writing C++ is a tad less scary and a little more user friendly than juggling with chainsaws, in that the error messages do not involve bandaid or ER procedures. But that’s all. This being said, a C++ compiler is an extremely powerful tool which, given the right set of safety measures (courtesy of Mr Scott Meyers, need I say this) can help you produce some of the most blazingly fast code ever seen on earth. Template metaprogramming is not a feature of C++, it’s THE feature. Have a look at Boost or STXXL to see what I mean.

What happened to WAP?

NOTE: This is a restored version from this archive.

From 2000 to 2002, I was working at Ubicco, a Fi System spin-off dedicated to mobile phone services. We developed an application server and framework that was supposed to make your life easy when you wanted to build WAP / iMode / cHTML / SMS applications.

Back in those days, I was pretty active on the xml-dev mailing list, so when on 11/03/2002 someone asked “What happened to WAP ?”, I could not do otherwise than write a rather lengthy reply. I’m posting it here because all what I wrote then still stands time, even if things changed a lot in the industry (I would never have thought of the phone-with-camera thing back then). So, let me publicly pat myself on the back !

PHP and dynamically typed languages

NOTE: This is a restored version from this archive.

This is a copy of an email I sent to Elliotte Rusty Harold

Hi Elliotte,

First of all, since it’s the first time I mail you, I want to thank you for your two sites, Cafe au Lait and Cafe con Leche, since I read them since forever (well, since 2000, maybe before). I even was Quote of the Day once, which I was very proud of (it was when I thought that participating to xml-dev could actually change something to the way XML evolved).

Why PHP sucks

NOTE: This is a restored version from this archive.

Edmin Martin wrote Why PHP sucks.

At work I’ve built an Apache 2.0 setup with both PHP and mod_python support. We are progressively stopping our developments in PHP and switching them to Python. Of course in the past I’ve been developing in Java ; but for quick developments nothing beats scripting languages. Anyway, I’ve been quickly convinced that PHP is a pretty awful language, except for two things :

What I would like to see in an XML editor

NOTE: This is a restored version from this archive.

  1. When I type </, the last opened tag is closed, and the cursor is positioned after the closing tag.
  2. The editor can be switched from whitespaces sensitive to whitespaces insensitive. In the first mode, whitespaces are kept and displayed. In the second mode they are discarded, but the document is presented and saved in a nice indented way (a few intelligent pretty-printing rules can really make an XML document more readable).
  3. When I type Alt+(left) or Alt+(right), the cursor is positioned at the beginning of the next or previous XML node in serial mode (i.e. following a depth-first tree traversal mode). If the cursor is inside a node, Alt+(left) jumps to the beginning of the node.
  4. When I type Alt+(up) the cursor is positionned at the beginning of the parent node. There may be a better action to perform but for now I don’t see any.
  5. When I type Alt+(down) the cursor is positioned after the last child of the parent of the current node. This allows to quickly get to an insertion point after having typed a series of embedded elements.
  6. When I double click an element name, the whole element and its content is selected. I can copy/past, drag and drop etc. a whole tree branch easily this way.
  7. There should be XML-specific simple search & replace dialogs for element and attributes names.
  8. For more complex transformations, it should be possible to type a standalone set of XSLT template to be directly applied to the document. A preview buffer would be available to check if the transformation is correct, but once accepted, the whole document would be changed. No need to use an external tool and to juggle with three files (input, stylesheet, output). The templates would be saved in a recent templates list to be reused (for long-term persistence the user would save them in a file).
  9. It should be possible to bind a transformation to a toolbar button and/or a keyboard shortcut. The transformation scope would be restricted to the currently selected nodes (or node part if the current node is a text node). Example : I select some text, press Ctrl+B, and the text is embedded into a <b> element. Either we try to have a toggle system (pressing Ctrl+B once more would remove the <b>s) or not, it depends on the ease of implementation and/or the limitation we’re ready to put on the system.
  10. WF checks would be made in the background and the WF status would be signalled by an icon. A double click on the ’not WF’ icon would position the cursor on the error with a status message indicating the error. Another way to do this could be to display a small icon in the margin of the line where the error is.
  11. Validation - it should be possible to validate the current document against a DTD, XML Schema, RELAX NG, etc schema. The binding could be internal to the document (through DOCTYPES or xsi:schemaLocation) or external (useful for RELAX NG schemas). Like for point 10, if possible, the validation should be performed in the background, and errors signaled by an icon. Since a document can’t be always valid during its creation, validation should not be intrusive or blocking.
  12. Tag name completion taking into account the current DTD/schema. When opening a tag, if the current document has an associated schema, only the valid tag names are presented.

That’s all for the moment :).

There is no meaning in data alone, but in data processed by some code

NOTE: This is a restored version from this archive.

(This text was originally posted on the xml-dev mailing list, in this message)

I think that data has no meaning if there is nothing to process the data. A book has no meaning if there is no one to read it.

When reading a book, the meaning is recreated from the text in the reader’s mind, but the meaning is nowhere in the book, just in the writer’s and the reader’s brains (there is often a difference between the writer’s ideas and their reproduction in the reader’s mind).