Java Quiz #6

Pouvez-vous déterminer ce que fait le code suivant ?

  1. public class RetourChariot
  2. {
  3. public static void main(String... args)
  4. {
  5. // Note : \u000A représente le retour chariot en Unicode
  6. char c = '\u000A';
  7. System.out.println(c);
  8. }
  9. }
Lire la suite...

IBM investit dans PostgreSQL

Il y a peu, Sun Microsystems s'offrait MySQL ; c'est désormais au tour d'IBM d'investir dans PostgreSQL, une base de données opensource directement concurrente.

Cette fois en revanche, il n'est pas question de rachat : le géant bleu se contentera de participer au financement d'EnterpriseDB, une société spécialisée dans le support et le développement d'outils autour de PostgreSQL.

Le but de l'opération semble double :

  • d'une part, augmenter la visibilité d'IBM sur le segment des bases de données opensource ;
  • d'autre part, disposer d'un produit d'appel pour attirer les clients dans le giron d'IBM, pour ensuite leur proposer une migration vers un produit "plus professionnel", à savoir... DB2, leur base de données propriétaire. En espérant ainsi contrer Oracle, toujours leader sur ce marché.

Supercalculateurs : des interconnexions laser entre les processeurs

Les supercalculateurs sont composés de centaines, voire de milliers de processeurs de plus en plus puissants, devant manipuler et échanger des quantités phénoménales de données - et c'est bien là le problème : les architectures actuelles sont essentiellement bridées par la vitesse de communication entre les processeurs.

Financé par le Pentagone, Sun Microsystems lance un programme de recherche pour remplacer les circuits d'interconnexion actuels par des lasers, capables d'assurer des débits très nettement supérieurs : le directeur du projet évoque une accélération possible de trois ordres de grandeur.

Quoiqu'alléchantes, ces perspectives sont malheureusement bien lointaines et incertaines : il s'agit avant tout d'une expérience high-tech dont le taux de succès espéré ne dépasse pas 50%...

CSS : "grid-based design"

Le site "960 Grid System" propose une approche intéressante à la mise en page pour le web :

All modern monitors support at least 1024 × 768 pixel resolution. 960 is divisible by 2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 20, 24, 30, 32, 40, 48, 60, 64, 80, 96, 120, 160, 192, 240, 320 and 480. This makes it a highly flexible base number to work with.

Il fournit un ensemble de guides pour Flash, Photoshop..., mais surtout une feuille de style CSS facilitant l'implémentation de ce système en HTML, ainsi que le montre la page de démonstration.

De son côté, Google fournit également un framework CSS, basé sur une grille de 950px : Google CSS Blueprint.

Mais bien sûr, vous pouvez toujours créer votre propre système de grille grâce au "Grid Designer".

CSS : cross-browser "min-height" et "min-width"

Voici les propriétés CSS à utiliser pour obtenir les effets "min-height" et "min-width" portables sur tous les principaux navigateurs :

Pour la hauteur :

  1. min-height: 100px;
  2. height: auto !important;
  3. height: 100px;

Pour la largeur :

  1. min-width: 100px;
  2. width: auto !important;
  3. width: 100px;

Il faut bien entendu remplacer "100px" par votre valeur.
Des explications sur leur fonctionnement sont disponibles sur le blog original.

Java Quiz #5

Un petit quiz simple pour Pâques !
Que se passe-t-il lorsque le code suivant est excuté ?

  1. StringBuffer java = new StringBuffer('J').append('a').append('v').append('a');
  2. System.out.println(java);
Lire la suite...

Eyeball refactoring

Reprendre et modifier du code existant fait partie quotidien du développeur. Mais cette activité présente toujours des risques : peut-on garantir que le code "amélioré" fonctionnera au moins aussi bien que l'ancien ?

Bien sûr, des outils comme les tests unitaires, la couverture de code, l'analyse de dépendance permettent de limiter les effets de bord ; mais rien ne remplacera jamais l' instinct du développeur expérimenté, capable de repérer les erreurs au milieu d'un code ayant subi maintes fois les outrages de patches urgents, de stagiaires inexpérimentés et de copier/coller hasardeux.

Certains ont déjà adopté une technique permettant de jauger visuellement la qualité du code : en l'imprimant à 10% de sa taille réelle, les détails d'implémentation disparaissent et sa structure est mise en valeur. Il est également plus facile de comparer le code original au code amélioré et de mesurer la progression. Enfin, il est possible de trier les feuilles en fonction du degré de satisfaction des développeurs sur le code qu'elles représentent, établissant ainsi un planning clair, dynamique et consensuel.

Javascript 2.0 : un premier aperçu

Avec AJAX, Javascript a considérablement renforcé sa position de langage incontournable du web. Pourtant, il est notoirement délicat à programmer et à debugguer -- la faute tant à sa syntaxe parfois exotique qu'à son support inégal par les différents navigateurs...

Avec Javascript 2 (ECMA-Script 4), la relève est en marche et les spécifications semblent prometteuses (pdf). Bien qu'encore en cours de rédaction (une première version est prévue pour l'automne), elles laissent d'ores et déjà apparaître d'intéressantes fonctionnalités :

  • programmation objet (classes, interfaces...),
  • typage statique des variables,
  • compilation/vérification du code,
  • chargement de modules à la demande (lazy-loading)...

Si elles sont évidemment les bienvenues, ces améliorations ne sont-elles pas un peu tardives ? Les développeurs, qui commencent enfin à disposer d'outils et de frameworks performants rendant Javascript réellement exploitable, sont-ils prêts à franchir le pas ?
De plus, leur frustration envers Javascript a déclenché la prolifération de solutions alternatives (Google Web Toolkit, Flex...) qui sont généralement plus performantes et plus simples à développer et maintenir. La version 2.0 saura-t-elle regagner le coeur des développeurs ?

Méthodologies : le meilleur du pire

Votre nouveau projet est une catastrophe ?
Vos développeurs grognent et le chef de projet déprime ?
Le planning et le budget ont explosé, et les clients sont mécontents ?

Félicitations ! Vous êtes sans doute l'heureuse victime des pires méthodologies de conduite de projet informatiques !
(je vous recommande également la lecture des commentaires de l'article).

Java Quiz #4

Soit une classe Personne suivante :

  1. class Personne
  2. {
  3. private String nom;
  4. private Personne ami;
  5.  
  6. /* ... Constructeur paramétré ... */
  7. /* ... Méthode toString() redéfinie pour renvoyer la propriété "nom" ... */
  8. /* ... Accesseurs ... */
  9. }

Quel est le résultat de l'exécution du code suivant (on lance la classe "Main") ?

  1. class Groupe
  2. {
  3. public static final Personne PAUL = new Personne("Paul", Groupe.JACK);
  4. public static final Personne JACK = new Personne("Jack", Groupe.PAUL);
  5. }
  6.  
  7. public class Main
  8. {
  9. public static void main(String... args)
  10. {
  11. System.out.println(Groupe.PAUL.getAmi());
  12. System.out.println(Groupe.JACK.getAmi());
  13. }
  14. }
Lire la suite...

Java : Les "forward references"

On appelle forward reference le fait d'utiliser une variable avant même qu'elle ne soit déclarée. Le langage Java autorise cette pratique, mais lui impose des restrictions strictes, notamment pour éviter tout problème de référence circulaire.

Nous allons expliquer ces règles, puis voir comment elles sont appliquées et peuvent être contournées - et quels effets de bord cela peut entraîner.

Lire la suite...

Programmation multiprocesseurs : les experts s'interrogent

La technologie des processeurs multicoeurs se développe à vive allure, pour pallier aux problèmes de montée en fréquence. Les ordinateurs personnels en sont maintenant équipés, ainsi que les dernières consoles de jeu. Mais cette nouvelle architecture impose de nouvelles contraintes : comment répartir les traitements de manière efficace ?

Les experts s'interrogent, et les débats font rage :

  • certains préconisent la multiplication de coeurs identiques, facilement programmables et remplaçables ;
  • d'autres soutiennent qu'il est préférable de disposer de coeurs différents, spécialisés et optimisés chacun pour une tâche précise, mais plus difficiles à programmer.

Quelle que soit la solution retenue, la répartition et la synchronisation des processus reste une science réellement délicate, et la programmation multi-processeurs ne se démocratisera sans doute qu'avec l'apparition de bibliothèques d'abstraction de haut niveau, masquant tous les détails techniques aux programmeurs.

IT : le vilain canard au sein des entreprises ?

Ce lundi, le Wall Street Journal se fait l'écho du sentiment d'incompréhension qui règne le plus souvent entre le département informatique et le reste de l'entreprise.

Le rôle exact du département IT est généralement méconnu ; tout au plus est-il considéré comme l'obscure entité chargée de donner corps aux décisions des businessmen. Un mal nécessaire en somme, mais qui présente trois inconvénients majeurs :

  • Coûter cher, sans preuve immédiate de son ROI (retour sur investissement) ;
  • Etre chronophage, et donc allongeant le fameux Time To Market ;
  • Jouer les touble-fêtes au sein de l'entreprise, en exposant au grand jour les questions délicates que personne, pour des raisons politiques internes, ne veut évoquer. Car si le management peut se contenter d'estimations, de tendances et de sondages, l'informatique est au contraire une discipline intransigeante faite de règles claires et d'algorithmes précis.

Les deux mondes du business et de l'IT sont-ils réconciliables ?

Java Quiz #3

Déterminez le résultat de :

  1. short s = 127;
  2. s = s+1;
  3. System.out.println(s);
Lire la suite...