Blog d'un EPSIen Epsylon

Informatique & co

Blog


01/08/2006 - 15:00 - Divers - Aucun commentaire

MSDN Library 2006

MSD
La bible des développeurs Windows est enfin disponible gratuitement ! Vous allez me dire qu'elle l'est déja via la consultation en ligne, mais Microsoft dorénavant l'équivalent sous la forme physique ! Plus besoins d'être connecté et c'est quand même bien plus pratique... Il faut savoir que MSDN ça valait quand même plus de 200€. Donc merci Microsoft ;)
Vous trouverez l'ISO à download & burn ici :

http://www.microsoft.com/downloads/details.aspx?FamilyId=373930CB-A3D7-4EA5-B421-DD6818DC7C41&displaylang=en

18/07/2006 - 09:58 - Programmation - Aucun commentaire

Internationalisation d'un site & ASP .NET 2.0


Je dois développer une solution Intranet multi-langue, de ce fait des équipes françaises et anglophones seront ammener à utiliser ce site. Certe on pourrait créer ce site uniquement en anglais vu que c'est la langue la plus parlé mais il a été définis dans le cahier des charges que l'utilisateur doit avoir le choix entre deux langues que sont l'anglais et le français. Il fallait donc trouver un moyen efficace de pouvoir changer le contenu des labels selon la langue sélectionné.

La première solution qui pourrait venir à l'esprit c'est d'effectuer le chargement du contenu des labels de la page à la main, sur le :

protected void Page_Load(object sender, EventArgs e)


Il suffirait de tester le langage que l'utilisateur a sélectionné (on le sauvegarder dans une variable de Session) et remplir en conséquence.
C'est quand même assez moche comme solution non ?

En surfant sur le net j'ai trouvé une solution simple et éfficace que j'ai adapté et légèrement modifié. En fait la méthode la plus raisonnable est bien évidemment l'utilisation de fichier de ressources contenant le texte. Il y aurait donc un fichier de ressource pour chaque langue multiplié par le nombre de pages du site. Pour créer ces fichiers de ressources, Visual Studio 2005 propose une fonction bien sympathique il faut le dire. Il suffit d'aller dans Tools > Generate Local Ressource (uniquement lorsqu'on est en mode Design), et un nouveau fichier de ressource est généré par rapport au contenu de votre page (Label, Button, DetailView? etc...). Le fichier généré est celui qui sera utilisé par défaut si on ne définit pas la Culture de la page. Ces fichiers sont sous la forme : NomPage?.aspx.resx.
Il faut toujours avoir un fichier de ressource par defaut sous cette forme, ensuite c'est à nous de créer un fichier ressource pour chaque langue. J'ai donc créée deux autres fichiers pour chaque page : NomPage?.aspx.fr-FR.resx et NomPage?.aspx.en-US.resx. Cette notation est trés importante, si les fichiers ne sont pas nommés de cette façon, les fichiers ressources ne pourront pas être chargés dynamiquement par l'application. Il existe bien évidemment de nombreux autres codes : de-CH pour la Suisse par exemple, etc...

Une fois ces fichiers créés il ne reste plus qu'à indiquer à l'application si on souhaite utiliser le français (fr-FR) ou l'anglais (en-US).
Pour cela il suffit de surcharger une méthode de la classe System.Web.UI.Page :
protected override void InitializeCulture()

C'est ici que la mise en place de la culture choisie sera éffectuée. J'ai choisis de sauvegarder le code de la langue sélectionnée dans une variable de session (Session["Language"]). Le code de cette surcharge sera donc :

protected override void InitializeCulture()
{
        if (HttpContext.Current.Session["Language"] != null)
        {
                String selectedLanguage = HttpContext.Current.Session["Language"].ToString();

                UICulture = selectedLanguage;
                Culture = selectedLanguage;

                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
         }

          base.InitializeCulture();
}


Grace à ce code, le fichier ressource correspondant à la valeur de Session["Language"] (fr-FR ou en-US) sera automatiquement chargé dans la page. Nous n'aurons pas à attribuer la valeur des labels et autres composants à la main !
Cependant c'est quand même assez pénible de devoir coller ce code pour chaque page de notre site, c'est pour cela que j'ai créé une nouvelle classe héritant elle même de System.Web.UI.Page qui surcharge la méthode InitializeCulture?(). De ce fait, toutes mes pages héritent maintenant de cette nouvelle classe et non plus de System.Web.UI.Page, grace à cela nous n'avons pas à copier-coller de partout notre méthode surchargée. C'est quand même plus propre non ? =)

04/04/2006 - 00:26 - Divers - Aucun commentaire

Humour


Nouvelles Archéologiques !

Dans le cadre de fouilles dans le sous-sol russe jusqu'à 100 m de profondeur, des scientifiques russes ont trouvé des vestiges de fil de cuivre qui dataient d'environ 1000 ans.
> Les Russes en ont conclu que leurs ancêtres disposaient déjà il y a 1000 ans d'un réseau de fil de cuivre.

Les Américains, pour faire bonne mesure, ont également procédé à des fouilles dans leur sous-sol jusqu'à une profondeur de 200 m. Ils y ont trouvé des restes de fibre de verre. Il s'est avéré qu'elles avaient environ 2000 ans.
> Les Américains en ont conclu que leurs ancêtres disposaient déjà il y a 2000 ans d'un réseau de fibre de verre numérique. Et cela, 1000 ans avant les Russes !

Une semaine plus tard, en Belgique on a publié le communiqué suivant :
"Suite à des fouilles dans le sous-sol belge jusqu'à une profondeur de 5000 m, les scientifiques belges n'ont rien trouvé du tout. Ils en concluent que les Anciens Belges disposaient déjà il y a 5000 ans d'un réseau Wifi."

Sympathique non ? =)

13/02/2006 - 02:09 - Divers - Aucun commentaire

EPSILAB

EPSILAB
Etant élève à l'EPSI, nous avons eu à Montpellier le passage des fondateurs de l'EPSILAB (Vincent Makowski et Arnaud Lheureux, élèves de l'EPSI Arras). Ils sont venus pour 2 conférences, l'une traitant la sécurité sur les réseaux TCP/IP et l'autre sur la technologie Exchange.
Mais qu'est ce que EPSILAB ? Voici une petite description extraite du site officiel :

EPSI'LAB est un laboratoire de technologie. Dirigé par les élèves, il permet de développer au sein de l'école des compétences de veille technologique. Partager les connaissances, vous permettre de développer des compétences dans des domaines qui vous intéressent, et le faire ensemble !

Et bien il faut avouer que ce fut vraiment trés enrichissant, ces deux personnes maitrisent leur sujet, et ont crée un bien beau projet. EPSILAB est une excellent opportunité pour découvrir de nouvelles technologies et approfondir les connaissances du cursus scolaire. Partenaire d'acteurs importants (Microsoft, GFI...), il semble certains que ce ne soit que le début d'un projet trés prometteur.

Site officiel : http://www.epsilab.com

30/11/2005 - 14:05 - Programmation - Aucun commentaire

Developpez.com


Fight Club
J'ai commencé à rédiger une série d'articles pour www.developpez.com. Ces tutoriaux porteront sur l'API Allegro. La plus part des possibilités d'Allegro seront couvertes : Affichage graphique, animation de sprite, gestion de l'animation à travers les timers, gestion des fichiers de données compréssés, interfaces graphiques, gestion du clavier et du son, fonctions de "configuration" à travers les fichier .ini etc...

Allegro est une librairie de développement de jeux vidéo pour développeurs C/C++ distribuée gratuitement, supportant les plates-formes DOS, Unix (Linux, FreeBSD?, Irix, Solaris, Darwin), Windows, QNX, BeOS? et MacOS? X. Elle fournit de nombreuses fonctions graphiques et sonores, gère le clavier, la souris, le joystick et des timers haute résolution. Elle dispose également de fonctions mathématiques 3d et en point fixe, de fonctions de gestion de fichiers de données compressés et d'une interface graphique.

Site web officiel : http://alleg.sourceforge.net/

Site developpez.com : http://kaiser-edouard.developpez.com/tutoriels/allegro/

24/10/2005 - 15:34 - Programmation - Aucun commentaire

Flat Model, Multi-segment model...


J'essaye depuis le début de créer un OS basé sur un modèle qu'on appelle "Multi-Segment" par rapport au spécificité de l'architecture Intel et de sa fameuse segmentation. J'avais trouvé le concept attirant et surtout je dois avouer que je n'avais vraiment pas envis de plonger mes mains dans la pagination.
Au début je voyais dans la GDT 4 descripteurs de base (NULL, CodeNoyau?, Data Noyau, Stack Noyau).
Ensuite le reste de la GDT sera dédié aux segments utilisateurs.

Par quoi serait caractérisé un processus utilisateur ?

Que ferait le noyau de son cote ?
Le noyau possèderait un tableau statique qui contiendrait dans chacune de ses cases une structure caractérisant un processus pour l'OS (PID, état, priorité, TSS, LDT etc...).
A travers l'IRQ0 dont l'entrée dans l'IDT pointera vers une fonction de scheduling, le noyau s'occupera d'elire un processus (mise en place de son TSS, on fait pointer les registres vers ses descripteurs) et de mettre à jour son tableau.

Nous avons donc une limite en terme de nombre de processus qui est égale a peu pret au nombre d'entrée dans la GDT / 2. Car un processus occupe 2 entrées dans la GDT : Une pour son TSS et l'autre pour sa LDT.

Tout semblait bien et cohérent, mais arriva le chapitre sur l'allocation dynamique...
Aie Aie, tout se complique, nous travaillons donc avec des segments !

Un segment possède une taille fixe et décrit donc une zone précise de la mémoire.
Lorsque je crée un processus je lui donne un emplacement en mémoire contigue, de la taille dont ont besoins ses données et son code.
Si ce processus souhaite allouer de la mémoire, plusieurs choses :
Problème : nous avons donc un nouveau segment de données.
Comment faire pour que le processus puisse utiliser ce segment ? Cela implique un changement du registre DS, enfin cette solution me semblait irréalisable, je ne saurai meme pas comment la gérer, mais me semblait la plus propre.

Comme me le faisait remarqué David Decotigny (SOS) la solution la plus propre est bien sur la deuxième mais avec gcc ce n'était pas evident : il repose tres tres peu sur un modele multi-segments et ne gere pas tout seul le passage d'un segment a l'autre : il faut l'aider.

En fait nous nous sommes trés vite rendus compte que le problème venait des outils et non du modèle : La plus part des compilateurs actuels sont basés sur un Flat modèle et non une multi segmentation.

J'ai donc décidé d'utiliser la pagination moi qui ne voulait surtout pas l'utiliser... Bien sur je pourrais m'en passer, mais je vois mal un OS incapable d'allouer dynamiquement de la mémoire.

La pagination permet donc a un processus de lui faire croire qu'il possède un espace contigue et linéaire alors qu'en fait toutes la mémoire dont il dispose n'est que trés rarement physiquement contigue. C'est toute la puissance de la pagination : Associé à une adresse physique : une adresse virtuelle !

12/08/2005 - 22:57 - Divers - Aucun commentaire

Poker, bluff pas bluff ?

Poker
Je me suis trés récemment découvert une nouvelle passion : Le Poker ! Comme tout le monde j'y avais joué à l'occasion, parié quelques chewing gum, mais rien de bien folichon. Et puis récemment j'ai eu l'occasion d'y rejoué avec un ami croupier. Bien sur, dans un cadre trés réduit et entres amateurs. Pas d'argent mis en jeux, juste d'anciens jetons de Casino qu'il avait pu récupéré aprés le passage à l'euro à son travail. Et bien il faut avouer que ça peut bien faire monter l'adrénaline pour de simples jetons qui ne vous appartiennent pas. Alors je n'ose imaginer avec de l'argent. Finalement la partie a duré jusqu'a 4h du matin, et si ça n'avait tenu qu'a moi, j'aurais bien continué. J'ai particulièrement apprécié le coté bluff et psychologique. On n'a joué qu'au poker fermé, cependant le poker ouvert ou Texas Hold'em comme ils appellent, semble bien plus intérressant et laisse moins de place au hasard. Je compte bien réitérer la chose en essayant de trouver des partenaires réguliers. Moi qui d'habitude me lasse assez vite d'un jeu de carte ou plus généralement de table j'ai été étonné. A conseiller pour ceux qui recherchent des sensations dans les jeux de table !

29/07/2005 - 16:37 - Technologie - Aucun commentaire

Grub a gagné !

Fight Club
J'en avais marre qu'à chaque fois que le noyau de BesOS grandissait en taille, j'étais obligé d'incrémenter dans le bootloader le nombre de secteurs disquettes à charger en mémoire. Alors je me suis enfin décidé à le faire charger sous Grub aprés avoir vu les mérites de cette méthode vanté dans le projet SOS. En effet, Grub reconnait plusieurs types de fichier (ELF, Compréssé, noyau Linux etc..) et en plus est capable de lire plusieurs type de file system (ext2, FAT classique etc..). Il n'y avait rien à retoucher au noyau en lui même, par contre il fallait mettre en place les conditions que Grub requiert. Il fallait que dans les 8192 premiers octets du fichier se trouve une structure particulière : vous trouverez cette structure dans les sources de BesOS: boot/x86_boot.h
A part ça rien de sorcier ! Et ça fonctionne niquel. Je n'ai plus à me soucier du passage en PMode, de l'activation ou non de l'A20. Grub me fournie en plus la taille de la ram (chose que je n'avais pas avant mais qui était inscrit en dur dans un header file), alors que demander de plus ?

25/07/2005 - 11:44 - Technologie - Aucun commentaire

C'est la faute à gcc :p

Fight Club
En effet, j'avais écris y a pas si longtemps que j'avais quelques problème sous BesOS pour évaluer le contenu de la mémoire et essayer de lever volontaire une exception du CPU en faisant une division par zero.
Pour la mémoire, problème résolue trés rapidemment aprés la recompilation de Bochs en ayant activer l'internal debugger et le hack par le port e9. Grace aux outils mis à disposition on peut suivre l'éxécution pas à pas et demander le contenu de la mémoire en donnant une adresse linéaire.
Un dump du CPU est également mis à disposition, et cerise sur le gateau, on peut même placer des breakpoints il semblerait ! Mais je n'en suis pas encore la =)
Grace à tous cela, j'ai pu voir ce que contenait la mémoire, et tout semble aller bien. Alors je me suis penché vers l'exception qui ne se lever pas (divison par zero), et bien c'est la faute à gcc !
En effet je compile les fichiers .c en mettant comme option -O2 comme niveau d'optimisation. Et bien gcc faisait trop bien son travail =( En compilant il me faisait surement sauter ma division par zero. J'ai donc compile sans cette option, et ça fonctionne niquel.
Je peux donc reprendre la gestion de la mémoire physique ou elle en était =)
Next very soon !

20/07/2005 - 01:20 - Cinema - Aucun commentaire

Fight Club


Fight Club
Ca fait un sacré moment que j'avais envis d'écrire quelque chose sur ce film, qui n'est plus d'actualité (sortie en salle : Novembre 1999).
Pour ceux qui ne l'ont pas vu, voici un petit résumé tiré d'Allo Ciné :

Le narrateur, sans identité précise, vit seul, travaille seul, dort seul, mange seul ses plateaux-repas pour une personne comme beaucoup d'autres personnes seules qui connaissent la misère humaine, morale et sexuelle. C'est pourquoi il va devenir membre du Fight club, un lieu clandestin ou il va pouvoir retrouver sa virilité, l'échange et la communication. Ce club est dirigé par Tyler Durden, une sorte d'anarchiste entre gourou et philosophe qui prêche l'amour de son prochain.

En effet, comme ça, ça paye pas de mine, et pourtant.... En fait je pense que c'est le genre de film "tout ou rien". Soit on accroche de suite et on devient accro, soit on zape et reste bloqué devant la première approche assez violente il faut l'avouer. Mais je pense sincèrement qu'il faut passer au dela de cette première vision et voir toute la profondeur des personnages, et surtout le scénario ! Sans hésiter c'est le meilleur film que j'ai vu. Bien sur c'est un avis personnel, je n'ai pas le gout universel, fort heuresement d'ailleur, ni la science infuse.
En attendant, véritable choc cinématographique c'est certains ! Bouleversant et dérangeant, à tel point qu'il pourrait être dangereux pour des esprits faibles devant le charisme de Durden Tyler (Brad Pitt).
Le narrateur de cette histoire est interprétée par Edward Norton : jeune cadre travaillant chez un constructeur automobile. On ne connaitra jamais son nom. Sa vie quotidienne consiste à répertorier des erreurs de fabrication pouvant provoquer un accident dans le secteur automobile.
Il éprouve une passion dérisoire pour son appartement meublé trés modernement.
Un besoin d'acheter le ronge intérieurement, besoin qui tourne à l'angoisse mais cette société de consommation ne suffit pas à le satisfaire et le rendre heureux, il lui manque quelque chose. Et c'est la que Durden Tyler entre en jeux...
Charisme à l'état brut, sa façon de penser navigue dans l'anarchisme, fascisme et nihilisme. Fondateur du Fight Club, il donnera un sens à la vie du Narrateur. Je préfère ne pas vous en raconter trop, car la fin est vraiment bien ficelée. D'ailleurs, ce film doit être vu au minimum 2 fois pour saisir toutes les subtilitées :)

Extrait du site graindesable.com :


Edward Norton et Tyler Durden ont une indifférence à la vie qui est la marque universel du nihilisme.
Fight Club est une expérience inoubliable qui probablement (et malheureusement) devient de plus en plus prophétique avec le temps. En montrant l'impasse de cette société dans ce film fin de siècle Fincher nous propose d'aller au delà du nihilisme, d'aller vers un nihilisme actif déjà visible chez Nietzche, d'inventer un nouvel homme.