mar.
2008
Java Quiz #6
Pouvez-vous déterminer ce que fait le code suivant ?
public class RetourChariot { public static void main(String... args) { // Note : \u000A représente le retour chariot en Unicode char c = '\u000A'; System.out.println(c); } }
Pouvez-vous déterminer ce que fait le code suivant ?
public class RetourChariot { public static void main(String... args) { // Note : \u000A représente le retour chariot en Unicode char c = '\u000A'; System.out.println(c); } }
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 :
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%...
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".
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 :
min-height: 100px; height: auto !important; height: 100px;
Pour la largeur :
min-width: 100px; width: auto !important; width: 100px;
Il faut bien entendu remplacer "100px" par votre valeur.
Des explications sur leur fonctionnement sont disponibles sur le blog original.
Un petit quiz simple pour Pâques !
Que se passe-t-il lorsque le code suivant est excuté ?
StringBuffer java = new StringBuffer('J').append('a').append('v').append('a'); System.out.println(java);
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.
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 :
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 ?
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).
Soit une classe Personne suivante :
class Personne { private String nom; private Personne ami; /* ... Constructeur paramétré ... */ /* ... Méthode toString() redéfinie pour renvoyer la propriété "nom" ... */ /* ... Accesseurs ... */ }
Quel est le résultat de l'exécution du code suivant (on lance la classe "Main") ?
class Groupe { public static final Personne PAUL = new Personne("Paul", Groupe.JACK); public static final Personne JACK = new Personne("Jack", Groupe.PAUL); } public class Main { public static void main(String... args) { System.out.println(Groupe.PAUL.getAmi()); System.out.println(Groupe.JACK.getAmi()); } }
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.
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 :
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.
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 :
Les deux mondes du business et de l'IT sont-ils réconciliables ?
Déterminez le résultat de :
short s = 127; s = s+1; System.out.println(s);