Amusons-nous avec HTML5 et la balise Canvas

Je me suis un peu amusé avec la nouvelle balise HTML5 Canvas et l'API Javascript associée...
Si vous avez un navigateur récent, vous devriez pouvoir voir et contrôler les flammes :

Sleep (ms) :
Atténuation :
Fire seed :
Black seed :

Je vous invite à regarder le code source de la page pour plus de détails !

Des interfaces fluides extensibles avec les Self-Bounded Generics

Certains objets complexes nécessitent d'être construits ou paramétrés en plusieurs étapes, comme les composants d'une interface graphique (définition de leur taille, position, couleur...) ou les requêtes SQL (génération des clauses select, from, order by...),
Ces étapes sont matérialisées par un ensemble de méthodes, que le développeur doit appeler dans un ordre précis pour réaliser le processus de construction, au terme duquel l'objet finalisé lui est retourné. Ces méthodes peuvent appartenir à l'objet lui-même, ou à un objet externe implémentant le design pattern Builder.

Afin de simplifier la vie du développeur et de rendre le code plus lisible, il est intéressant de coder ces méthodes de manière à pouvoir chaîner leurs appels : l'objet possède alors une interface dite "fluide" (fluent en anglais).
Il suffit pour cela que chaque méthode renvoie l'instance courante de l'objet auquel elle appartient :

  1. public class Foo {
  2. public Foo method() {
  3. (...)
  4. return this;
  5. }
  6. }

Cet article expose la principale limitation de cette approche et propose une méthode simple pour la contourner, grâce à la technique des Self-Bounded Generics.

Lire la suite...

Le point sur les nouvelles API HTML 5

Voici le compte-rendu de la conférence "Dans la tête de Peter Lubbers" organisée par Zenika mercredi dernier.

Peter Lubbers est directeur de la formation chez Kaazing, une société spécialisée dans le streaming de données en temps réel pour le web ; leur produit phare, le WebSocket Gateway, exploite au maximum les dernières API de communication proposées par HTML5. Peter était donc l'homme de la situation pour nous donner les dernières nouvelles du front, en attendant la sortie de son livre "Pro HTML5 Programming", prévue pour avril.

La conférence s'organisait autour de 5 points : le bilan des technologies actuelles, les WebSockets, les Server-sent Events, l'objet XmlHttpRequest version 2, et le Cross-document messaging.

Lire la suite...

Terracotta, un an après

Il y a un an, je vous présentais Terracotta, la solution de clustering pour Java (voir sur le blog Zenika une retranscription de mon article dans Programmez! : présentation, use-cases). Depuis, la société et son produit éponyme ont bien évolué, et je pense qu'il est temps de faire à nouveau le point.

Lire la suite...

Java Quiz #30

Ah, cela faisait longtemps que je ne vous avais pas proposé de quiz !
En voici un simple qui devrait vous distraire en ce jour pluvieux.

Quel est le problème avec cette méthode très classique ?

  1. /**
  2.  * Affiche le fichier texte passé en paramètre.
  3.  * Les commentaires indiquent les exceptions potentiellement levées
  4.  */
  5. public void displayFile(String fileName) throws IOException {
  6. BufferedReader br = null;
  7. try {
  8. br = new BufferedReader(new FileReader(fileName)); // FileNotFoundException
  9. String line = null;
  10. while ((line=br.readLine()) != null) { // IOException
  11. System.out.println(line);
  12. }
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. throw e;
  16. } finally {
  17. if (br != null) {
  18. br.close(); // IOException
  19. }
  20. }
  21. }

Note : j'ai corrigé le problème du "close() pas dans un bloc finally" qui distrayait les lecteurs du véritable problème de ce bout de code.

Lire la suite...