Friday, 29 May 2009

Sélectionner les premiers N rangées dans MS SQL, Oracle et DB2

Lire cet article aussi sur mon site Expertise Java & J2EE 100% en français (lien direct).

Comment faire les requêtes SQL qui ne retournent que les premiers n rangées?

Déjà il faut comprendre que les rangées ne sont pas stockées physiquement dans un ordre quelconque. Il est donc essentiel de spécifier un ORDER BY dans la requête. Cela dit, regardons comment faire un SELECT qui ne retourne que les premiers n résultats trouvés (dans tous ces exemples, n = 10):

MS SQL Server

SELECT TOP 10 NOM, DESCRIPTION
FROM MATABLE
ORDER BY NOM ASC

Il y a des fortes chances que cela marche sous Sybase aussi, mais je n'ai pas eu l'occasion de tester.

Oracle

SELECT * FROM
(SELECT NOM, DESCRIPTION
FROM MATABLE
ORDER BY NOM ASC)
WHERE ROWNUM <=10

(On doit imbriquer la requête dans Oracle, car si on suivait directement la clause WHERE par la clause ORDER BY, sans parenthèses, la BDD prendra les premiers résultats, aléatoires, et ensuite les triera. Ce qui n'est pas ce qu'on veut faire.)

DB2

SELECT NOM, DESCRIPTION
FROM MATABLE
ORDER BY NOM
FETCH FIRST 10 ROWS ONLY
OPTIMIZE FOR 10 ROWS

Et voilà. C'est dommage qu'il n'y a pas de façon uniforme de faire ces requêtes, mais ce n'est pas trop compliqué une fois qu'on connaît les variantes.

Posted by jon at 7:05 AM in Programming

Thursday, 2 April 2009

Les trois plugins Firefox les plus incontournables

Lire cet article aussi sur mon site Expertise Java & J2EE 100% en français (lien direct).

Grâce à son architecture extensible et son licence open source, le navigateur Firefox est devenu un des outils les plus utiles pour les développeurs web. Nul autre outil permet tellement facilement de tester des sites web, et de diagnostiquer ce qui ne va pas en cas de mauvais affichage, et tout cela gratuitement. En voici les trois plug-ins qu'il vous faut installer pour transformer votre navigateur Firefox dans un outil puissant de développement.

1. Firebug. La transition de HTML classique vers CSS nous a permis de séparer contenu et présentation. Tout cela est génial, mais comment est-ce qu'on s'en sort quand on a plusieurs feuilles de style avec des centaines de classes, et on doit trouver pourquoi tel <div> ne se trouve pas au bon endroit? Firebug permet de voir, simplement en passant le souris sur la page, toutes les classes css qui s'y appliquent, et lesquelles sont priorisées au-dessous des autres. Débugger le css serait un cauchemar si on n'avait pas Firebug.

2. Selenium. Marre de remplir les formulaires pour tester les différents parcours de votre application? Selenium permet, à la manière de jUnit, de sauvegarder vos parcours et de les rejouer automatiquement. Un outil très mûr et facile à adapter à vos besoins (exportation des tests en java, intégration ant, etc.), Selenium est indispensable pour tester vos applications web.

3. LiveHttpHeaders. Des fois, le serveur ne se comporte pas comme on s'y attend et on a du mal à comprendre pourquoi. Le plugin LiveHttpHeaders permet de voir, pour n'importe laquelle page internet, les en-têtes HTTP que votre navigateur a envoyé avec sa requête, et aussi les en-têtes de la réponse serveur. C'est rare qu'on en a besoin, mais c'est extrêmement utile à avoir lorsque, par exemple, on a des comportements différents en recette et en production et qu'on soupçonne qu'une configuration WebSphere ou Apache est derrière le problème...

Posted by jon at 7:09 AM in Programming

Saturday, 30 August 2008

Erlang: The Movie

While I'm on the subject of wacky tech movies, one of the most bizarre, funny, and yet highly educational YouTube movies I've ever viewed has to be Erlang: The Movie.

(Erlang is a hot language these days as multi-core and multi-processor computing becomes the norm, and people worry more and more about how to write good concurrent programs. Erlang is a language that is made for this, which makes it easy and safe to write programs that do more than one thing at once, without having to worry about the things like unreproduceable race conditions or deadlocks that can plague you with C pthreads or Java.)

Posted by jon at 12:01 AM in Programming

Thursday, 28 August 2008

This is pretty crazy

AJAX, applets, and Flash are one thing, but I would never have imagined someone going to the point of writing what amounts to a whole operating system in JavaScript and SVG. (!) Nonetheless, that's a pretty good summary of Sun Labs Lively Kernel. Currently it only works in the Safari browser, but I recommend checking it out if you like quirky technology.

If this kind of thing interests you on more than a "cool, I can play Asteroids" level, this Google Tech Talk has a lot of info:

Posted by jon at 12:03 AM in Programming

Wednesday, 20 August 2008

Level 1 reached

Earlier this month I blogged about Project Euler, a site that presents fun and interesting math problems that require computer programming skills to solve.

At the time I wrote that I had only just discovered the site, and published the article immediately after having solved the first two problems. So this is an update to say that I'm still enjoying the problems, and have solved 29 problems so far, earning me a Level 1 rank of tetrahedron. (The ranks are all based on the Platonic solids, in keeping with the mathematics theme of the site.)

Now, on to level 2!

Posted by jon at 6:58 PM in Programming

Thursday, 7 August 2008

Project Euler

(No, this has nothing to do with my previous article about Euler!)

I was reading some random comments online on an article about frugal ways to have fun, when my curiosity was piqued by one fellow who said that he was learning a new programming language by working on the problems at Project Euler. I had a look at the site, and find it neat enough that I thought I should help spread the word.

Project Euler describes itself as "a series of challenging mathematical/computer programming problems", wherein each problem is designed to require both mathematical insight and a little computer programming. The problems are designed in such a way that "by solving one problem it will expose you to a new concept that allows you to undertake a previously inaccessible problem".

This is interesting in and of itself, but what I like best about Project Euler is that it is not just a list of problems: there is a social aspect as well. One registers for the site and it keeps track of which problems you have solved. There is also a forum thread for each problem, which is only unlocked once you solve that problem. So the site grows with your progress. There is also a high scores page where you can view your level. As in a video game, you level up as you gain experience points by solving the problems.

For all my enjoyment of and respect for mathematics, I'm actually not very good at pure maths. However in combination with a computer things get a lot easier, and the problems here are not too difficult: I was able to solve the first two in about 10 minutes. (Of course I have some advantage, being a computer programmer for a living!)

For anyone interested in a structured but fun way to get into maths or computers, I recommend giving Project Euler a look!

Posted by jon at 8:11 PM in Programming

Monday, 10 March 2008

Gestion des trunk, branch, et tags dans Subversion

Subversion est actuellement parmi les solutions de gestion de versions les plus employés de nos jours. Une organisation typique de projet avec Subversion utilise ce qu'on appelle un "trunk", des "branches", et des "tags". Dans cet article j'explique brièvement ces termes.

Le trunk (tronc en français) est, comme son nom l'indique, le projet principal. Si on veut faire du développement en parallèe (ce qui arrive souvent, par exemple, quand on a livré une version, qu'on continue à maintenir pour corriger des éventuels bogues, mais on prépare en parallèle une version 2.0 avec plein de nouvelle fonctionnalités), on met ces "branches" dans, comme on pourrait le deviner, un branch.

Un tag, quant à lui, est une balise, qu'on peut appliquer à une révision pour l'identifier plus facilement—pour dire, «ça, c'est la version 1.2», par exemple. Un tag n'est en réalité qu'un branch qu'on ne modifie jamais, mais on les met à part parce que conceptuellement les deux sont très différents.

Un dossier subversion aura donc typiquement trois dossiers à la racine, branch, tags, et trunk, avec une copie du projet dans trunk, et d'autres copies dans des sous dossiers de branch et/ou tag selon les besoins et l'évolution du projet.

Posted by jon at 6:59 PM in Programming

Friday, 8 February 2008

Comment déclencher du JavaScript après n secondes

Dans certains cas, on peut avoir une bonne raison de vouloir déclencher du JavaScript après un délai de 10 secondes, par exemple. On sait, j'espère, qu'il ne faut jamais utiliser un boucle qui ne fait rien pour compter le passage du temps ! Mais alors, comment faire ça correctement? Heureusement il existe en JavaScript un moyen très facile et propre de le faire:

var delai = 10; /* Dix secondes */

var apres = function () {
  alert(delai + 'secondes se sont pass\351es!');
}

setTimeout(apres, delai * 1000);

Et voila, c'est tout ce qu'il faut pour que notre fonction apres se déclenche après 10 secondes. Pour résumer, la fonction JavaScript setTimeout prend donc une fonction en premier argument, et un délai en second argument, exprimé en millisecondes. Facile! Cliquez ici pour le voir en action.

Voir aussi :

Besoin de vous rappeler des accents comme le \351 dans l'exemple? Trouver un tableau complet ici.

À la recherche d'un bon plugin JavaScript pour Eclipse? Essayez JSEclipse.

Posted by jon at 6:41 PM in Programming

Wednesday, 4 July 2007

Tableau des accents pour JavaScript et HTML

Les alert et confirm JavaScript embêtent souvent les programmeurs francophones, car la limitation ASCII de JavaScript fait que les accents sur les messages qu'on essaie de passer à l'utilisateur sont foirés. Alors voici un tableau pratique de référence pour savoir quels séquences utiliser pour afficher du texte en JavaScript, avec les accents qui s'affichent correctement. Par exemple, pour la phrase «Votre compte a été modifié» on code alert('Votre compte a \351t\351 modifi\351');

Le tableau affiche aussi des entités html, qu'on peut utiliser à la place des accents tapés directement dans le code. Celles-ci sont peut-être moins utiles, parce qu'en html on a le droit d'utiliser des caractères de la code de page qu'on veut. Néanmoins, des fois c'est pratique de les avoir, surtout pour les lettres comme « Ç » qui ne se trouvent pas sur le clavier.

JavaScript HTML Affiché JavaScript HTML Affiché
\242 &cent; ¢ \243 &pound; £
\245 &yen; ¥ \247 &sect; §
\251 &copy; © \256 &reg; ®
\260 &deg; ° \254 &not; ¬
\265 &micro; µ \266 &para;
\274 &frac14; ¼ \276 &frac34; ¾
\275 &frac12; ½
\241 &iexcl; ¡ \277 &iquest; ¿
\253 &laquo; « \273 &raquo; »
\300 &Agrave; À \340 &agrave; à
\301 &Aacute; Á \341 &aacute; á
\302 &Acirc; Â \342 &acirc; â
\303 &Atilde; Ã \343 &atilde; ã
\304 &Auml; Ä \344 &auml; ä
\305 &Aring; Å \345 &aring; å
\306 &AElig; Æ \346 &aelig; æ
\307 &Ccedil; Ç \347 &ccedil; ç
\310 &Egrave; È \350 &egrave; è
\311 &Eacute; É \351 &eacute; é
\312 &Ecirc; Ê \352 &ecirc; ê
\313 &Euml; Ë \353 &euml; ë
\314 &Igrave; Ì \354 &igrave; ì
\315 &Iacute; Í \355 &iacute; í
\316 &Icirc; Î \356 &icirc; î
\317 &Iuml; Ï \357 &iuml; ï
\320 &ETH; Ð \360 &eth; ð
\321 &Ntilde; Ñ \361 &ntilde; ñ
\322 &Ograve; Ò \362 &ograve; ò
\323 &Oacute; Ó \363 &oacute; ó
\324 &Ocirc; Ô \364 &ocirc; ô
\325 &Otilde; Õ \365 &otilde; õ
\326 &Ouml; Ö \366 &ouml; ö
\330 &Oslash; Ø \370 &oslash; ø
\331 &Ugrave; Ù \371 &ugrave; ù
\332 &Uacute; Ú \372 &uacute; ú
\333 &Ucirc; Û \373 &ucirc; û
\334 &Uuml; Ü \374 &uuml; ü
\335 &Yacute; Ý \375 &yacute; ý
\336 &THORN; Þ \376 &thorn; þ
\337 &szlig; ß \377 &yuml; ÿ
Posted by jon at 9:56 PM in Programming

Tuesday, 29 May 2007

Edition de JavaScript sous Eclipse


Au cas où vous n'étiez pas déjà au courant, je me suis dit que ça valait le peine de signaler JSEclipse, un plugin pour le très populaire EDI Eclipse qui rend beaucoup plus agréable l'édition des fichiers JavaScript. Publié par Adobe Labs, ce plugin gratuit permet d'utiliser les raccourcis f3 pour sauter aux déclarations, d'avoir la complétion automatique, le coloriage du code, et améliore globalement l'édition des fichiers .js par rapport à WTP. Si vous éditez souvent des fichiers .js (ce qui arrive de plus en plus souvent avec la vague AJAX), vous aprécierez beaucoup ce plugin.

Pendant que je suis sur le sujet, voici quelques autres liens qui sont utiles à garder à portée de main quand on fait du JavaScript :

Posted by jon at 10:37 PM in Programming

Thursday, 28 September 2006

Computer language timestamp

My attitude on various computer languages has gone through a lot of evolutions over the decades (I remember as a grade schooler I thought the FOR...NEXT loop was way too complicated), and I wish I'd written out what I thought at the time since it would be interesting (and probably pretty embarrassing) to re-read later ("Perl is AWESOME! Anybody who writes anything using anything else is stupid and wasting their time"—imaginary me, circa 1998). So I've decided to start now and sort of document what the computer languages I actually use (or play with) are these days, and what I think of them. This may only be useful to me since I'm the only guy with a clear idea of how I used to think, but it's my blog and I write what I want.

  • Java—What I use for 100% of my time at work (I'm not counting stuff like SQL, Javascript, XML, or "AJAX" as programming languages in the context of this discussion) and probably 80% at home. Which means that unlike a lot of people this is a language I actually enjoy using. Like everybody else, this is not a language I liked at first. But as I have learned more and more about programming as "software engineering" I have got a lot more respect for Java.

    Another huge evolution has been my new conviction that programming languages are not in and of themselves relevant—except that sometimes knowing a better language can be a shortcut that lets you get somewhere faster than everybody else. Platforms are what matter. Not libraries, platforms, as in the 'official' language of a given computing platform used and supported by whoever puts out that platform. The languages that become important and widespread are the native languages for a platform, period. C is important because of UNIX, C++ because of Microsoft, Objective C for Apple. And Java for the Java platform, the only one that's portable. C# is rapidly becoming important because .NET is becoming Microsoft's platform; it will increase at C++'s expense, as, I think, we are already seeing. If Java's libraries were not so vast and complete as to qualify for 'platform' status Java would be a second-rate Ada for me. (In that Ada is the ultimate "software engineering" language, but it has poor libraries availible to the casual coder—and besides, it is not the "native language" of any platform.)

  • Lisp—My old favourite has been relegated to second place following my realisation regarding platforms trumping languages. Still for the most difficult problems I will turn to Lisp, and I still back the maxim that those who do not know Common Lisp are doomed to reinvent it, poorly. But IDE's like Eclipse make development in Java almost as pleasant. Anyway, Lisp is my language of choice for modelling complexity, but for simple tasks it doesn't have the libraries (and for some reason I find it a lot harder to get used to a third-party library in Lisp than in other languages).

  • Perl—Perl hasn't been one of my favourite languages since high school, and I stopped favouring scripting languages over languages that enforce good software engineering practices the first time I had to rewrite a 10,000 line program of mine that didn't scale (in fairness, that program was written in Scheme, not Perl). But I have recently started using Perl a lot more, since a "right tool for the right job" approach practically dictates that it be used for text processing and glue code. Nowadays though I don't write any larger programs with it, but I am very glad I got back into it.

  • C—I've been brushing up my C a lot this year, partly out of guilt at not contributing to Open Source (another topic in itself) and partly because it's the most important programming language in history. I got K&R for Christmas (I had read it a couple times but never bought it because of the price) and have gone through that, and done a few of the excercises, and also did some stuff with Glib and ncurses, and did a Linux kernel device driver tutorial.

    I have only used it for toys though, since I have yet to come up with a project for which it meets the "best tool for the job" criterion in 2006. But I am hugely glad that I decided to brush up on it, because a thorough understanding of pointers is actually a great help in writing Java code (which, although it doesn't have pointers, does pass objects around by reference; and understanding this clearly is paramount for judging the cost of some things, and eliminating redundant lines of code in others). So I think that getting my C knowledge straight has contributed enormously to making me a better and more knowledgeable programmer, even if I don't actually use C.

  • C++—This was the first PC language I learned, which led to me not touching it again for 8 years. I don't like C++, I still see it as error-prone and unportable, with its defining feature being that every language feature known to man has been crammed into it at some point. Nonetheless, I thought that as a professional programmer it is something I should be competant in, so I have set about relearning it from scratch. The language has changed so much from my Visual C++ 1.0 days that it's almost unrecognisable... I really would like to learn this well enough to have it on my resume and maybe use one day at work (it feels precarious having only Java as a sellable "work language" on my resume), but I do not see myself coding in C++ at home by choice any time soon.

  • Stuff I don't use anymoreScheme, which was once my weapon of choice, now isn't even installed on most of my computers. I'd probably use it (and Dr. Scheme) if I were teaching programming to beginners though since its regularity is very nice. Tcl/Tk used to be very good for portable GUIs, but there are other ways to do this now, and Java is more portable. Prolog was a real eye-opener to learn, but I haven't used it in a long time and my textbook is locked up in storage in Canada, so it's pretty irretreaveably forgotten for the time being. C64 BASIC was once synonomous with programming for me, but I have not used BASIC since high school. Logo however has the sole claim to glory of being the only language that I haven't used since elementary school.

  • Stuff I'd like to use moreAda, Fortran 95, Assembly. Mostly for learning purposes, although the first two, Ada especially, might be useful for something non-trivial if the problem played to the language's strengths. I haven't done much with Python or Ruby either, although despite this they would probably be my recommendations if a non-programmer asked me what programming language to learn since they are so user-friendly and have great libraries.

So there's a good snapshot of my views on various programming languages circa 2006; it will be interesting to put it in the time capsule and see how it stands up to future scrutiny.

Posted by jon at 11:28 PM in Programming

Wednesday, 24 January 2007

Découvrir le Rexx

Qui dit langage de script de nos jours pense typiquement à Perl, Python, ou Ruby. Eventuellement, il en connaîtra d'autres, comme l'Applescript sur les ordinateurs Mac, shell, si c'est un ancien d'Unix, etc. Un alternatif qui est moins connu qu'il ne devrait l'être, c'est le Rexx. Ici je donne quelques raisons de considérer le Rexx si vous êtes à la recherche d'un langage de script, en mettant l'accent sur ses avantages par rapport aux langages plus connus.

  • Le Rexx est multi-plateforme. Ceci lui donne déjà un avantage par rapport aux langages plus traditionnels tel que l'Applescript ou shell. Comme Perl et Python, des interprètes Rexx existent sur toutes les plateformes majeures, y compris même la machine virtuelle Java. Rexx est même plus multi-plateforme encore, étant le langage de script de référence sur les systèmes IBM moins connus, comme MVS et OS/2. Si vous vous mettez au Rexx, donc, vous serez habile à programmer sur n'importe quel ordinateur, même si un jour vous changez de système.
  • Le Rexx est simple. Perl, Python, et Ruby sont des langages très à la mode. Cela comporte ses propres avantages, notamment au niveau des libraries. Mais ce sont aussi des langages complexes. Pas de problème si vous les utilisez régulièrement. Mais si vous êtes comme moi, et vous n'avez pas besoin d'un langage de script plus souvent qu'une ou deux fois par mois, ça peut être frustrant de devoir aller à la documentation chaque fois pour se rappeler comment faire une opération simple comme lire ou écrire un fichier. Avec Rexx, je trouve ce travail de mémoire plus simple, ce qui me rend plus productif.
  • Le Rexx est puissant. Ce n'est pas parce que j'insiste sur sa simplicité qu'il faut croire qu'il s'agit d'un deuxième Basic! Rexx a tout le dynamisme qu'un programmeur Perl peut vouloir, y compris les comportements utiles par défaut, les variables dynamiques, etc. Les commandes parse et interpret sont particulièrement puissantes avec cette dernière on peut exécuter du code créé dynamiquement, comme en Lisp!
  • Le Rexx est utilisé en industrie. Bonne chance pour trouver une boîte suffisement bien branchée pour employer le Ruby en industrie! Perl et Python sont de plus en plus présents, c'est vrai, mais seul Rexx se trouve dêjà en place avec ce qu'on nomme "les vieilles technologies". Et en plus, il est moins connu par les programmeurs actuels. Une bonne connaissance de Rexx peut donc aider le programmeur professionnel à faire de la programmation dynamique dans un environnement technique où cela est rarement possible, et à faire valoir une connaissance qui n'est pas facile à trouver sur le marché de l'emploi. Les librairies Rexx sont aussi très complètes.
  • Le Rexx fait de l'arithmatique décimale. Beaucoup de gens ne sont pas au courant des inexactitudes mathématiques provoquées par leur code à cause de l'arithmatique binaire de la plupart des langages de programmation. (Par exemple, en C (sur x86) et Java, la condition 1.1 - 1 == 0.1 sera false!) Rexx évite tous ces problèmes en faisant de l'arithmatique décimale à précision arbitraire. Croyez-moi, c'est une bonne chose.

Voilà pour les avantages tels que je les vois. Maintenant je vous présente un peu de code pour vous montrer la facilité de Rexx. Le programme suivant affiche un message à l'êcran:

say "Bonjour tout le monde"

A la différence de Perl et ses amis, qui ont grandi dans le monde Unix, où le C domine, Rexx a grandi au sein d'IBM, et sa syntaxe s'inspire plutôt de PL/I. C'est un point historique, mais sa seule vraie conséquence c'est qu'on remplace { et } par les mots-clefs DO et END. Les structures de contrôle sont donc assez facile à assimiler:

if x = 2 then do
  say 2
end
else do
  say "pas 2"
end
/* Compter de 1 à 10 */
do x = 1 to 10 
  say x
end
do 3
  say "Cette ligne s'écrira trois fois."
end
do forever
  say "Ce boucle ne termine jamais."
end

Et ainsi de suite, ce n'est pas mon but ici de donner toute la syntaxe du langage. Regardons plutôt un exemple pratique, pour voir si on peut envisager comment on utiliserait Rexx dans la vraie vie. En voici un script qui prend deux arguments: un fichier d'entrée et un fichier de sortie. Il lit ensuite le fichier d'entrée et remplace tous les tablatures par quatre espaces.

parse arg filein fileout .
do while chars(filein) > 0
  char = charin(filein)
  if c2x(char) == 09 then
    call charout fileout, "    "
  else
    call charout fileout, char
end

La première ligne met les valeurs du premier et deuxième arguments fournis à la ligne de commandes dans les variables filein et fileout. Après, le programme boucle sur le fichier d'entrée en remplaçant toutes les tablatures par quatre espaces, mais laissant les autres caractères comme ils sont.

Ce n'est qu'un exemple toute bête, mais ça ne prend qu'un coup d'œil pour voir que le langage est beaucoup plus lisible que le Perl sans être verbeux, et sans sacrifier sa puissance dynamique. Le résultat: un langage facile à apprendre, difficile à oublier, et très utile pour toutes sortes de programmation, des PDA jusqu'aux Mainframes!

Liens utiles sur le Rexx (anglais):

Posted by jon at 11:10 PM in Programming

Monday, 5 February 2007

Introducing DietTracker

For any who care to check it out, I am releasing as Freeware a little utility I wrote for tracking my diet, which I have creatively named "DietTracker". It runs on Linux, Mac, and Windows and requires only that Java 5 or later be installed on your machine. The link to install is found at the end of this article, but first I'll explain what it is.

There are a million-and-one ways to track your daily calorie intake, from making a spreadsheet to the innumerable web sites that are out there for doing it. What I find to be the difficult/annoying part of tracking what you eat isn't so much taking the time every day to write it down, as it is looking up how many calories are in every given dish. Emilie cooks a delicious dinner every night, which is wonderful, but it means I can't just look on a label to know the calorie count of the meal—I have to add up a whole list of ingredients, which is quite a hassle.

There's no magic way to get around having to count up the calories once, but DietTracker's job is to ensure that you only ever have to do it once for each ingredient. After that, meals are memorised, so I can just say, "yesterday I had cereal and coffee for breakfast, a chicken sandwich for lunch, and chicken fricassé for dinner", and the program will automatically handle the ingredients and calorie counts for those meals, as long as I've entered them beforehand. So the hard work is all moved to the beginning of diet tracking (which is when motivation is highest), and afterwards the program makes things quick and easy to keep up to date.

This version 1.0 has four functions, laid out plainly enough on the main menu:

The first step is entering foods, the individual building blocks of a meal:

I didn't include any functionality to look up calorie content from within the program, (there are already plenty of resources out there to do that, so it didn't seem useful for the work it would involve). The next step is to combine foods into a meal, so that you can easily enter in what you've eaten later:

In our case, over a cycle of two or three weeks there's a pretty standard list of meals we might eat. So although it's a bit of work up front to enter in what you eat, once you've done it, it's done. Then with foods and meals defined, the day-to-day use of the program is simply a matter of putting in what you've eaten, which is pretty painless:

And last but not least, entering in what you've eaten is only useful if you can look back on it afterwards and see how you're doing:

(Those numbers are made up, but you get the idea.)

Anyway, I find this useful, and it was a worthwhile programming exercise since I haven't done a desktop app in ages. (This one still could use a bit more polish, to be honest, but I wanted to get it out there.) I have plenty of ideas for future versions, as well: the most obvious area improvement is doubtless the food and report screens, which could be expanded to include more information than just calories, (although since I only care about calories for the time being, I'm not too motivated). But I do plan to add a moving average line to the bar graph, and perhaps an "export to Excel" button to let you work with the raw data yourself. Another biggie is that there is also currently no way to remove incorrect entries (other than directly modifying the internal database, which is fine for me, but hardly doable by non-programmers). I also plan to add an internet-connected option so that your data is kept in a central repository, even if you use DietTracker on different computers (this is actually already nearly finished). And the French-language version could use some polish.

Installation

To install the application on your computer, all you need to do is click on the link here. This will directly launch the installer:

Once downloaded, you will need to authorize DietTracker to run on your computer; it will create and use a directory named "DietTracker" in your home directory.

(More information about how this type of secure web-based installation works can be found here). On any platform, you can also lauch the program directly by saving the "DietTracker.jnlp" file to your computer and double-clicking on it. If and when I get around to releasing updated versions, the program upgrades itself automatically.

Feedback on how useful the basic premise and useability of the "Enter Meal" screen would be appreciated by anyone who gives it a try; as well as suggestions for extra features. And finally (for any who missed the link hidden in the "Installation" section above),

Click here to install DietTracker

Posted by jon at 9:49 PM in Programming

Thursday, 2 November 2006

Keeping the lights on

Most people I think, when they go away on vacation somewhere, use one of those timers to automatically turn the lights on while they are away, so as not to broadcast one's absence too openly to potential burglers. It won't be long, I imagine, before someone's 'loose lips' on their blog, tracked down by tech-savvy wrongdoers, leads to them getting burgled after unthinkingly broadcasting their upcoming absence to the entire Internet.

We are just getting back from our trip to Italy today, and if all went as planned we had a great time and will be posting about it soon. Also if all went well, my blog continued posting stuff I'd written weeks earlier, making it appear as if we weren't away—and hopefully, we were not burgled, 'proving' that the system works :-) My own little version of a timer to turn the lights on and off.

So, I thought I'd come clean about this right away, just in case I have generated any resentment by 'refusing' to answer questions in the comments or by not cleaning up comment spam with my usual celerity. Non-robot posted posts will be returning soon!

Posted by jon at 8:34 AM in Programming

Monday, 6 November 2006

NetBeans 5.5 sorti officiellement

Comme je me suis déjà plaint des bogues de la version β sur ce blog, il n'est que juste que j'annonce aussi que NetBeans 5.5 est maintenant sortie dans sa version officielle. Mais ce n'est pas là le meilleur : nous avons aussi enfin un truc que j'attends depuis super longtemps : le Visual Web Pack est maintenant disponible !!! Si le nom ne vous dit rien, il s'agit de ni plus ni moins que la fonctionnalité du super EDI Java Studio Creator, qui tourne maintenaint dans NetBeans comme plugin. Ce qui est déjà agréable car on n'a pas besoin d'aller d'un EDI à l'autre si on est un utilisateur et de NetBeans et de Java Studio Creator.

Mais ce qui est vraiment, vraiment cool c'est que le Visual Web Pack répresente une version plus avancé de Creator, ce qui veut dire que je vais enfin pouvoir combiner mes applications JSF avec Java 5, et donc EJB3 ! Ce qui explique pourquoi je suis tellement enthousiaste pour ce logiciel que j'écris cet article pendant même qu'il télécharge. Bon codage :-)

Posted by jon at 6:55 PM in Programming

Thursday, 14 September 2006

Netbeans : La fin de la lune de miel

Netbeans

Comme j'ai récemment raconté dans ces pages, j'ai adopté Netbeans 5.5β comme mon nouvel EDI de choix. À l'époque—et je crois que ça se voyait encore—j'étais fort enthousiaste pour ce nouvel outil. Mais, comme c'est toujours le cas, après un peu plus de temps passé avec l'EDI, l'enthousiasme diminue et les petites frustrations commencent à apparaître.

Je me suis donc dit que ce serait informateur de rendre publique un petit retour d'expérience deux semaines après mon adoption de NetBeans, pour compléter en quelque sorte le tableau que j'ai peint dans le premier article.

Ça ne prend pas plus de cinq minutes pour se rendre compte du premier désavantage de NetBeans par rapport à Eclipse : son éditeur. Alors que dans Eclipse une erreur de syntaxe est reparée dès qu'on le tape, sur NetBeans il faut typiquement sauvegarder le fichier avant que l'erreur ne soit soulignée. L'aide contextuelle est aussi beaucoup plus longue à s'afficher. Mais on parle des petites différences de vitesse là, et ça ne m'a jamais empêché d'aprécier les autres avantages de l'environnement NetBeans. Les "magiciens" sont plus nombreux et mieux faits, et il est plus facile de gérer les projets Java EE par rapport à Eclipse WTP. Tout ça est apparent dès la première vraie utilisation de NetBeans, et tout ça reste vrai après deux semaines.

Ce que je n'avais pas capté tout de suite, et ce qui m'embête de plus en plus, c'est le β dans "Netbeans 5.5β". Or le programme n'est pas tellement stable, l'IHM plus particulièrement bloque assez souvent, ce qui est très énervant. Il peut aussi être lent à réagir à la souris, ce qui est bien plus pénible que une aide contextuelle lente.

Je sais qu'un éditeur refait et amélioré est en tête de liste pour NetBeans 6, et je persiste à penser que même sans lui, en tant qu'EDI NetBeans 5.5 dépasse déjà Eclipse WTP. Je dis bien en tant qu'EDI et non pas en tant qu'éditeur de texte. Néanmoins j'espère très fort que les problèmes de l'interface, plus fondamentaux, seront mieux réglés avant le passage au 5.5 officiel.

Posted by jon at 10:24 PM in Programming

Tuesday, 19 September 2006

Product shipped

The last two weeks have been packed as we've been putting the finishing touches on my current project; for those who don't know, getting the final version good to go on a software project can be a stressful time even when you are ahead of schedule. There are so many little things that have to be retouched, tested to make sure a last-minute change here doesn't break something there, &c. As it happened though I was ahead of schedule so though the tension was high it was relatively painless—some of the people on another section of our team were at it until 3 a.m. making a last-ditch effort to get their modules functionning.

I've made a decision not to disclose what clients I'm working for or what projects, since this is a public page and I am a discreet guy. So I can't go into details about what this program will do, but this project will be involved in things that will make a very visible mark on the country I'm living in, so I am proud of it. I also consider it a triumph on various technical grounds, which is why in my French posts I've been posting so many pæans to the DWR AJAX framework lately :-)

Posted by jon at 11:12 PM in Programming

Tuesday, 29 August 2006

Adoption d'un nouvel EDI


Le changement d'une préférence d'EDI c'est un grand bouleversement dans la vie d'un programmeur. On y passe tant de temps, et sa performance est tellement liée à notre propre productivité. Je marque donc l'occasion en annonçant ici qu'après plusieurs années d'utilisation d'Eclipse (depuis la version 2.0), mon EDI de préférence s'est changée le week-end dernier en faveur de NetBeans 5.5.

Un peu d'histoire : Mon premier EDI fut Microsoft Visual Studio 1.0, que j'ai eu gratuit avec un livre en 1997. (Jusqu'à là je ne connaissais que BASIC et les éditeurs de texte.)

Vite poussé à l'environnement Linux par la pénurie des compilateurs gratuits en Windows, je reprenais l'habitude des editeurs de texte pendant quelques années. Quand une version est sortie pour Linux, j'ai essayé IBM Visual Age Java—je me souviens que le logiciel m'impressionnait, mais bouffait trop de ressources et n'était pas si pratique que ça, et je n'en ai pas fait un grand usage. Je devins un grand maître de GNU Emacs (ce qui est véritablement un EDI plus qu'un editeur de texte quand on sait s'en servir). Comme mon langage de prédeliction à l'époque était le Lisp, cette combinaison fonctionnait très bien.

Quand Eclipse 2.0 est sorti on en faisait pas mal d'éloges sur Slashdot, mentionnant entr'autres que son mode de compatabilité Emacs était l'un des meilleurs jamais vu. Alors j'ai jeté un coup d'œil, mais ce n'était pas plus impressionant que Visual Age pour moi, et j'ai continué avec le package JDEE sur Emacs pour ma programmation Java.

Mais peu à peu, j'avais des problèmes avec JDEE ou d'autres packages Emacs à chaque mise à jour, et je commençais à ressentir qu'Eclipse dépassait JDEE de plus en plus en fonctionnalité. En plus le temps de démarrage de mon Emacs était presqu'aussi long. Quand je me suis mis à vraiment utiliser Eclipse et bénéficicier de la documentation intégrée (que j'avais en Lisp auparavant) et les autres outils, je l'ai adopté totalement.

L'essor d'Eclipse a sans doute motivé Sun à améliorer leurs propres EDI (le nom même d'Eclipse est une insulte de la part d'IBM après tout), et avec la version 5.5 (toujours en beta), je crois que l'avantage est enfin de leur côté.

Pour les applications Java EE, l'outil de base dans le monde Eclipse s'appelle WTP. WTP fonctionne bien, mais on ne peut pas dire que c'est à la hauteur des attentes créées par l'éditeur eclipse lui-même. Côté NetBeans, l'Enterprise Pack est pour moi plus intuitif, et surtout plus intelligent—il crée les Entity beans et tout ça proprement et correctement, et reduit énormement la quantité de code qu'on doit écrire. C'est peut-être subjectif mais pour que je change d'une plate-forme que je connaissais déjà si bien, je pense qu'il doit y avoir quelque chose derrière.

Le Mobility Pack est génial aussi, c'est même la raison d'origine pourquoi j'avais installé NetBeans. Avant j'utilisais une combinaison d'Eclipse et la ligne de commandes pour programmer mon téléphone, et c'était nettement mieux dans NetBeans, évidemment.

Dernier point pour les francophones, la localisation de NetBeans est nettement meilleure que sur Eclipse. Alors plus besoin de décrypter des messages en anglais à 2 heures du matin !

Posted by jon at 8:23 PM in Programming
 
Non enim id agimus ut exerceatur vox, sed ut exerceat.