Codingly

Etes-vous ALT.NET ?

Posted in Posts by Romain Verdier on juin 18, 2008

Si vous avez l’habitude de lire les blogs nord-américains de la communauté .NET, vous avez très certainement déjà rencontré un post traitant du sujet, ou au moins y faisant allusion. Il est même probable que vous sachiez parfaitement en quoi consiste le mouvement ALT.NET. Si vous n’avez pas l’habitude de trainer sur ces blogs et que vous avez tout de même entendu parler de la communauté ALT.NET, c’est bon signe.

Malheureusement, cela fait de vous une exception. En France, ALT.NET reste globalement très méconnu.
(more…)

Tagged with: , ,

Une astuce volée à Jon Skeet

Posted in Posts by Romain Verdier on juin 18, 2008

Si certains d’entre vous trouvent pénible le fait de devoir s’assurer qu’un évènement est non null avant de le lancer, voici une idée :

Profitez de la contravariance sur les delegates et initialisez votre event de la sorte :

(more…)

Tagged with: , ,

Ordinateur, je t’aime à nouveau

Posted in Posts by Romain Verdier on juin 16, 2008

UPS est passé vendredi matin pour livrer deux gros cartons chez moi. L’un contenant mon nouveau PC monté, l’autre avec toutes les boites des composants ainsi que les pièces et accessoires non utilisés. Pour info, j’avais passé commande online samedi matin. Cela signifie qu’en moins de 5 jours, ma commande a été préparée, montée, et livrée. Je pense que la performance est saluable : merci materiel.net.

Je vais essayer de vous livrer mes premières impressions, à tiède.

(more…)

Tagged with: ,

Dell XPS vs Ultimate Developer Rig

Posted in Posts by Romain Verdier on juin 8, 2008

Dernièrement, je vous expliquais que je devais absolument changer mon PC, et que j’avais sérieusement envisagé de commander un Dell XPS. Ca me semblait être une idée honnête puisqu’à l’époque je voulais éviter de perdre du temps à choisir mes pièces et à monter un DIY PC.

Mais j’ai été piégé. Heureusement.

Je pensais ne plus être l’étudiant geek qui bricole son PC. J’avais raison. Je pensais que je pouvais faire confiance à un constructeur et sélectionner une configuration toute faite sans me prendre la tête. J’avais tort.
(more…)

Tagged with: ,

Ouais, les variables globales, tout ça…

Posted in Posts by Romain Verdier on juin 6, 2008

Je ne suis pas un nazi.

Je veux dire : je ne suis pas du genre à ergoter si au cours d’une conversation, j’entends quelqu’un faire un abus de langage ou carrément utiliser un mot pour un autre. Vous pouvez m’expliquer que je dois « surcharger cette méthode de la classe mère« , et je comprendrai qu’il s’agit de redéfinir une méthode virtuelle de la classe de base. J’ai d’ailleurs l’habitude de pondre des approximations du genre ; il m’en faudrait un peu plus pour que je me formalise.

Par exemple, vous pourriez me parler de variable globale en faisant référence à un champ d’instance (ou attribut).
(more…)

Tagged with: ,

Quand les closures nous facilitent la vie

Posted in Posts by Romain Verdier on juin 3, 2008

Aujourd’hui j’ai une devinette pour vous. Elle est très simple, mais je suis obligé de l’introduire par une mise en situation un peu pénible. Soyez courageux, il n’y a rien à gagner.

Imaginez une application capable de recevoir des messages du réseau. Lorsqu’un message de type A est reçu, l’application doit afficher à l’utilisateur une fenêtre assez complexe construite à partir des données du message. L’utilisateur peut ensuite interagir avec la fenêtre en question, avant de la fermer.

Les contraintes :

  • Les fenêtres doivent être affichées très rapidement, l’utilisateur devant être averti le plus tôt possible de l’arrivée d’un message de type A.
  • Les fenêtres ne sont pas modales, il peut donc y en avoir plusieurs affichées simultanément.
  • La construction des fenêtres (création des différents contrôles graphiques) est relativement longue.
  • Les opérations de binding entre les données du message et les contrôles existants d’une fenêtre sont rapides.

(more…)

Tagged with: , ,

Je ne t’aime plus, ordinateur

Posted in Posts by Romain Verdier on mai 28, 2008

Il faut absolument que je remplace mon PC actuel. Il est dépassé, bruyant, et moche. Et bruyant. Je n’ai pas attendu de déballer l’iMac de Grozeille pour décider ça. A vrai dire, ça fait plus de 6 mois que je dois absolument remplacer mon PC actuel.

Je voudrais trouver, aux alentours de 55 000 roubles, une machine assez silencieuse et suffisamment puissante :

  • Pour que je puisse dormir dans mon appart sans avoir à fermer toutes les portes ou éteindre la bête.
  • Pour que VisualStudio se lance aussi rapidement que notepad et que je puisse enfin faire tourner Firefox UnrealEditor 3.

(more…)

Tagged with: ,

Au delà de l’Intégration Continue : le Monitoring Continu

Posted in Posts by Romain Verdier on mai 24, 2008

Je viens de terminer l’écoute d’un des derniers podcasts de Scott Hanselman, dans lequel il échange avec Owen Rogers. La discussion tourne autour de l’intégration continue. Owen est assez au courant : il est l’un des créateurs de CruiseControl.NET, le serveur d’intégration continue sans doute le plus utilisé dans le monde .NET.

Ce que j’ai trouvé intéressant, voire original dans cette discussion, c’est le développement qui a eu lieu autour de l’idée du monitoring.

En introduction, Scott joue l’ingénu et demande à Owen pourquoi on aurait besoin d’un serveur d’intégration continue alors qu’un pauvre script planifié pourrait très bien faire l’affaire. Owen lui fait la liste des principales caractéristiques et avantages d’une solution comme CruiseControl, et insiste tout particulièrement sur la capacité d’un tel système à produire et agréger différents rapports concernant les builds et les projets. Il explique également qu’au delà des fonctionnalités de journalisation et de statistiques, un outil d’intégration continue offre des mécanismes de notification pouvant informer les équipes en temps réel, et leur fournir des détails sur l’état des différentes builds.
Statistiques TeamCity
En effet, la notion de feedback est indissociable de l’intégration continue.

(more…)

L’effet Tetris en informatique

Posted in Posts by Romain Verdier on mai 20, 2008

Quand on est au niveau 3, ça va, on peut encore placer les pièces comme on le veut. Je veux dire par là qu’il est possible de les placer de façon presque optimale, pour faire un gros bloc bien compact sur la gauche de l’écran en attendant une grande barre pour dégager 4 lignes d’un coup. Les 4 lignes d’un coup, ça s’appelle un Tetris, d’ailleurs.

TetrisLorsqu’on arrive au niveau 10, par exemple, il devient plus dur d’enchainer les Tetris. Je suis certain qu’on peut trouver un japonais sur YouTube qui y parvient en chantant le générique de Naruto à l’envers, mais nous ne nous laisserons pas distraire pas les exceptions de ce genre aujourd’hui. Au niveau 10, on ne peut pas enchainer les Tetris, c’est tout. Pourtant, il y a pas mal de gens qui arrivent à tenir un moment au niveau 10, jusqu’au niveau 11 même, et beaucoup plus loin encore.

Parce qu’ils ne cherchent pas à enchainer les Tetris, justement. S’ils essayaient, le temps de réflexion nécessaire au placement de chaque pièce serait largement supérieur à celui qui leur serait accordé. Les pièces tomberaient alors les unes après les autres sans avoir été pilotées, en formant un petit tas famélique qui atteindrait rapidement le haut de l’écran.

La conclusion est la suivante : Le choix d’une solution « assez bonne » peut s’avérer plus rentable que d’investir beaucoup de temps et d’efforts dans la recherche d’une solution « très bonne », ou « parfaite ».

Et ça a même un nom : l’effet (ou stratégie) Tetris. On en trouve quelques bons exemples d’application dans le monde de l’informatique.
(more…)

Constructeurs statiques en C#

Posted in Posts by Romain Verdier on mai 12, 2008

On m’a posé une question il y a quelques temps :

« Et en C#, il y a l’équivalent des blocs static de Java ? »

La réponse est oui. En C# on peut définir des constructeurs statiques qui seront exécutés lors du premier des deux événements suivants :

  • Une instance du type est crée.
  • Un membre statique du type est accédé.

(more…)

Tagged with: ,