jeudi 19 février 2009

OpenBSD et les caractéristiques "par défaut"

L'intérêt d'un système d'exploitation comme OpenBSD c'est qu'il ne fait pas de compromis sur plusieurs sujets et ainsi, offre des caractéristiques par défaut sans avoir à réfléchir plus que de dérouler les manuels utilisateurs.

OpenBSD est sécurisé par défaut, et est mis à jour par défaut tous les 6 mois. Quand on a autre chose à faire que de régler des problèmes d'interopérabilité entre les composants hardware, les composants software ... c'est l'idéal, on peut alors se concentrer sur ce que l'on désire réellement faire.

Oui, même s'il est toujours intéressant d'installer de configurer et d'optimiser un système d'exploitation, à moins que vous soyez un développeur du système d'exploitation, l'important se trouve ailleurs, dans l'utilisation du matériel et du système d'exploitation pour atteindre un but qu'on s'est fixé. C'est ce que nous rappelle Miod Vallat et Marc Espie dans leur interview à la radio, dans l'émission Symbiose. On peut toujours aboutir à l'augmentation/amélioration du code de l'OS, mais c'est pas le but en soi.

Cet aspect "par défaut" serait intéressant à généraliser à d'autres éléments d'un ordinateur. Je pense notamment, qu'il serait intéressant de pouvoir acquérir des PC sauvegardé "par défaut" avec un système de backup matériel et logiciel correctement configuré par défaut pour ne plus avoir à se soucier de ce sujet.

Au moins pour les ordinateurs personnels. Notamment avoir des ordinateurs portable dont les données sont cryptées et sauvegardées par défaut. C'est rarement fait par défaut, il y a toujours une procédure longue et fastidieuse (mais c'est parce que ce n'est pas un sujet simple).

jeudi 12 février 2009

Système embarqué et programmation Nintendo DS

M’étant épris de la nintendo DS, je me suis mis à expérimenter un développement pour cette merveille de raffinement technologique. Quand on étudie l’architecture de cette machine, on ne peut s’empêcher de penser que ses concepteurs ont pris du plaisir à la concevoir. En voyant la représentation de l’architecture ci-dessous, cela m’a tout de suite rappelé celle de l’Amiga qui tirait plus sa force de son chipset original que de son processeur proprement dit :

La nintendo DS a deux processeurs différents : un ARM7TDMI et un ARM946E-S partageant des espaces mémoires en commun, ayant à leur disposition, différents types de mémoire plus ou moins rapide (DTCM et ITCM, WRAM, ICACHE et DCACHE de l’ARM9…)

Programmer pour la nintendo DS, c’est bien programmer pour "un système embarqué" (embedded). Un des concepts importants en programmation embarqué est l’utilisation de registre mappé sur la mémoire : « memory-mapped registers ». Ce genre de technique apporte son lot de problèmes et de solution, notamment par l'emploi, en langage C, du mot clé "volatile", qui n'a rien à voir avec les oiseaux, comme nous le montre très bien Nigel Jones dans How to use C's volatile keyword et que je vous traduirais ainsi :
Les système embarqués contiennent du vrai matériel, habituellement avec des périphériques sophistiqués. Ces périphériques contiennent des registres dont les valeurs peuvent changer de façon asynchrone vis à vis du déroulement du programme. Pour prendre un exemple très simple, considérez un registre de status sur 8 bits qui soit mappé sur la mémoire à l'adresse 0x1234. Il est nécessaire de scruter le registre de status jusqu'à ce qu'il ne soit plus égal à 0. Une implémentation naive et incorrecte pourrait être comme cela :

uint8_t * pReg = (uint8_t *) 0x1234;

// Wait for register to become non-zero.
while (*ptr == 0);
// Do something else.

Cela va très certainement ne pas fonctionner dès que vous allez autoriser les optimisations du compilateur, du fait que le compilateur va générer de l'assembleur qui va ressembler à ça :

     mov ptr, #0x1234
mov a, @ptr
loop bz loop

La logique de l'optimisateur est assez simple : ayant déjà lu la valeur de la variable dans l'accumulateur (à la deuxième ligne de l'assembleur), il n'y a pas besoin de la relire puisque la valeur sera toujours la même. Ainsi, en troisième ligne, on abouti à une boucle infinie. Pour forcer le compilateur à faire ce que nous voulons, nous modifions la déclaration en :

uint8_t volatile * pReg = (uint8_t volatile *) 0x1234;

L'assembleur va maintenant ressembler à ça :
      mov ptr, #0x1234
loop mov a, @ptr
bz loop

Le comportement désiré est obtenu.
C’est dans ce genre d’exemple qu’on s’aperçoit qu’il est toujours bon de savoir ce qui se passe en dessous (en assembleur) du langage que l’on utilise (le langage C).

La programmation sur Nintendo DS regroupe un ensemble d'avantages certains pour le jeune programmeur (comme pour les moins jeunes comme moi :) ) :

- programmation directe pour la machine : il n'y a pas de système d'exploitation entre le programme que vous concevez et la machine. Cela oblige à comprendre comment fonctionne réellement un système embarqué, et un système informatique tout court.

- programmation d'une console de jeu : c'est motivant (c'est fun quoi :) ) parce qu'on peut arriver à avoir beaucoup d'effets graphiques 2D, 3D et sonores, et puis il y a aussi une véritable tablette graphique, une connexion réseau Wifi, un microphone intégré (et bientôt un appareil photo sur la nouvelle console Nintendo DSi)

- simplicité du kit de développement grâce à devkitpro qui contient tout ce qui est nécessaire pour développer correctement sur Nintendo DS. Cela permet d'apprendre le langage C pour ce qu'il a de meilleur : un accès très bas niveau et performant.

Aujourd'hui, j'imagine que pour un gosse qui découvre l'informatique et veut y mettre les mains, la Nintendo DS est bien plus motivante, dans un premier temps, que d'attaquer directement des systèmes embarqués ou de la programmation Web. Il est toujours important de s'essayer dans le domaine où on a le plus d'endurance aux échecs, là où vous retrouverez le plus facilement de la motivation même en face de problèmes insondables. Garder du plaisir à programmer c'est ça qui permet d'aller au delà des bugs et problèmes, et d'aboutir à des systèmes géniaux comme ce à quoi ont aboutis les concepteurs de la Nintendo DS.

Dans un deuxième temps, après s'être fait la main sur cette console, on peut toujours se tourner vers des systèmes qui nous plaisent mieux, comme des systèmes embarqués (Arduino ou le .NET Micro Framework par exemple), des systèmes d'exploitation (Linux ou pourquoi pas OpenBSD, voire même s'essayer à décoder les tripes de Windows) ou encore des applications Web / SGBD...

jeudi 5 février 2009

Les télécoms et leurs acronymes

Dans tout métier, il y a un jargon qui permet de parler plus rapidement de choses reconnues et employées par toutes les professionnels du domaine. Pour aller encore plus vite, on peut aussi employer des acronymes ou des abréviations. Ils permettent :
- d’accumuler en un minimum de lettre un ensemble de mots

- d’aider sa mémoire en fournissant de fait, des mnémoniques pour la remémoration de choses complexes, abstraites ou longues.
On peut aller encore plus loin en construisant des acronymes à partir d’autres acronymes, comme par exemple l’acronyme issu du domaine des Télécommunication : LNS qui veut dire L2TP Network Server, où L2TP veut dire Layer 2 Tunneling Protocol. On peut bien sur en citer d’autres : AJAX, GTK

Quand les acronymes d’un domaine professionnel arrive dans le grand public, on arrive souvent à des incompréhensions, des exclusions entre les personnes qui savent et les personnes qui ne comprennent pas.

Par exemple, l’acronyme PCMCIA bien connu des informaticiens, est inconnu pour la plupart des personnes qui achète un PC portable grand public, mais c’est pourtant un élément mis en avant sur les étiquettes destinées aux acheteurs. Aujourd’hui on n’en parle plus puisque personne ne comprend ce terme. Il y en a même qui ont finit par traduire PCMCIA par un rétro-acronyme : People Can't Memorize Computer Industry Acronyms.

Quel est l’informaticien qui a retenu ce que PCMCIA veut dire : Personal Computer Memory Card International Association Maintenant, les cartes PCMCIA sont appelée PC Card, terme hypergénérique qui ne veut rien dire en particulier si ce n’est que c’est une carte qui va dans un PC.

Le domaine des télécom est celui où j’ai vu le plus d’acronymes employés. Les acronymes sont parfois en français ou en anglais. Toute la journée, il n’y a pas une phrase où on n’emploie pas un. Ce sont parfois des acronymes du domaine des télécom, mais ce sont aussi des acronymes spécifiques à l’entreprise. Il faut plusieurs mois, voire plusieurs années pour s’y retrouver. Il y en a tellement que leur décomposition en mot n’est parfois plus connue par les gens qui les emploie.

Quand j’écoute mes collègues travailler, discuter, et quand je m’écoute parler (ça m’arrive souvent :) ), je me rends compte que réellement, toutes les phrases, sans exception, emploie au moins un acronyme. Comme derrière un jargon, il est facile de se cacher derrière eux. On a toujours l’impression de passer pour plus intelligent que l’on est, comme s’ils allaient de soi et que si vous ne le connaissez pas, c’est que vous êtes certainement dépassé.

Un des livres qui m’a permis de mieux comprendre l’ensemble des acronymes du domaine des télécoms est Telecommunications Essentials (2nd Edition) de Lillian Goleniewski. L’intérêt de ce livre est qu’il couvre l’ensemble du domaine, ce qui est assez impressionnant en 928 pages. Il ne rentre pas dans les détails les plus infimes de chaque protocole, technologie ou standard, mais va suffisamment loin pour permettre une compréhension solide de tout ce qui a trait aux télécoms (du champ électromagnétique aux architectures de service sur IP, en passant par le bon vieux téléphone RTC…)


Mais tout cela prend du temps, bien qu’ayant eu une formation en informatique et télécommunications, il faut quand même plusieurs années pour maîtriser l’ensemble des acronymes qu’il est nécessaire d’utiliser pour construire les offres de service de télécommunication d’aujourd’hui. Car, comme dans la plupart des domaines, une entreprise offre une valeur ajouté à un client, quand elle arrive à intégrer l’ensemble des technologies (on parle souvent de convergence, puisque des technologies différentes, voix, réseau, video, services, convergent vers une offre de service particulière au client). Or pouvoir construire des offres convergentes, nécessite de comprendre la multitude de technologies en présence, même s’il n’est pas nécessaire de les maîtriser.

Au-delà des acronymes, le jargon des informaticiens est parfois imagé et enrichi par des néologismes, et étrangement, le français n’est pas délaissé. En voici un florilège :

- Babasse: nom générique pour un ordinateur (voir aussi ordi ou bécane). Son utilisateur s'appelle un babasseur, on dit souvent babasseur fou quand il y a excès.

- Brouteur : Jeu de mot avec le terme routeur, machine qui achemine les paquets réseaux. Fréquemment utilisé lorsque celle-ci sature.

- CLCLMPALC : Comité de lutte contre les messages persos à la con : message utilisé principalement par les amoureux de la langue française, de l'orthographe, de la syntaxe, et des belles phrases, en guise de contestation à l'émergence d'un nouveau style d'écriture, se retrouvant dans les messages personnels dans certains logiciels de messagerie instantanée, ou encore dans les forums.

- Impacter : avoir un effet

- Interface chaise-clavier : surnom péjoratif donné à l'utilisateur. Souvent utilisé comme manière détournée de dire qu'un problème informatique a comme origine l'utilisateur.

- PetitMou : Traduction française (péjorative) du nom de Microsoft (micro = petit et soft = tendre, doux, ou mou dans le cas présent) En vogue dans les années 1990, probablement apparu avec Windows 95.

- Plat de spaghettis : Se dit d'un programme non structuré, dont le déroulement est aussi aisé à suivre que de trouver les extrémités correspondantes de spaghettis dans une assiette.

- Prout : Abréviation française peu élégante du terme iproute, ou routage IP.

- Usine à gaz: lorsque, généralement suite à de nombreuses maintenances successives ou en raison d'une mauvaise identification des cas généraux au profit des cas particuliers, un logiciel est devenu trop compliqué et inefficace, il devient "une usine à gaz". Sa refonte et la suppression du code mort sont alors impératifs.

- Windaube : Surnom irrévérencieux donné au système d'exploitation Windows de Microsoft afin de stigmatiser ses imperfections.

Je ne vous parle pas des acronymes récursifs qu’affectionnent les hackers.