samedi 28 novembre 2015

PC Desktop Fanless 1/3 - La conception

Un matin en me levant, j'ai décidé de changer mon équipement informatique. Hé houais suis comme ça moi, une vraie bête, une pure tête brûlée ;-)

Au cours de mes recherche, je me suis intéressé à un système Fanless. Ceci est mon histoire ;-) Plus sérieusement, voici un témoignage en matière de Fanless. Ca va aussi causer un peu de NAS à la marge.

Equipement initial

Le boiter est un Antec P180, en format grande tour, qui pèse un âne mort et prend plein de place. Mais qui a le dos large.

Le processeur est un Intel core i7-3770 (core 3éme génération) avec 8 Go de RAM (4 x 2 Go).

La carte mère Asus P8Z77-V LX2 (donc en chipset Z77) est très honnête.

Les disques sont plus qu'honorables avec un SSD Samsung 830 pour le système, deux disque durs 10 000 rpm en RAID 0 pour le travail (WD Velociraptor), et un gros disque 3 To 7200 rpm pour le stockage, plus un disque 1 To que j'ai du ajouter récemment pour le stockage toujours (ben oui, les vidéos ça prend de la place). 

Et avec tout ça, aujourd'hui je fais essentiellement un peu de bureautique sous MsOffice, et du surf sur Internet... plus quelques bidouilles sous Linux (dual boot), autant dire que c'est plus que luxueux et qu'il n'y avait pas vraiment urgence à changer.

A ma décharge je l'ai dimensionnée à une époque où pour mon activité professionnelle je faisais tourner plusieurs VM en parallèle, sous VMWare, pour héberger des bases de données ou des serveurs divers et variés sous Linux. Puis, j'utilisais des environnements de développement Java plutôt lourds (Eclipse avec moult plugins) sur des projets de taille non négligeable.

Bon quel intérêt à raconter tout ça, à part pour pour mon classement sur jemelapete.com ? Juste pour éclairer la suite.

Réflexion initiale, cahier des charges

Alors, les données du problème sont :

  • J'ai déménagé, et mon bureau actuel est bien plus petit que celui dont je disposais avant. Je voudrais récupérer de la place sous le bureau pour avoir des blocs tiroir mais mon P180 prend la place.
  • Je n'ai pas de place sur le dessus du bureau pour poser une mini tour, ni même un PC de tout petit format (genre NUC, ou mini ITX)
  • Alors que ma configuration était assez silencieuse, j'ai maintenant des nuisances sonores : les ventilateurs ont vieilli (le P180 en est quand même à sa 3éme carte mère) ; la cage disque est bien pleine, ça chauffe et il faut ventiler plus fort.
  • J'ai plein de fichiers auxquels je tiens, et plus de possibilité de sauvegarde au vu de mes volumes
  • J'ai plein de temps à perdre et pas beaucoup d'argent à jeter par les fenêtres


La réflexion qui en découle est la suivante :

  • Il me faut un PC de bureau en format dekstop classique (le format d'origine des PC, un bloc rectangulaire) comme ça je peux le poser sur mon bureau sous l'écran ou sous le scanner/imprimante
  • Comme ce format limite les possibilités d'usage et que je veux un truc silencieux, j'ajoute un NAS que je mettrais dans une autre pièce et qui pourra faire autant de bruit qu'il faudra par rapport à ce que je veux lui faire faire. Et qui supportera des fonctionnalités RAID avancées pour la redondance et donc la sécurité de mes données (et bien sur une sauvegarde externe)
  • Vu que j'ai du temps et quelques compétences, pas beaucoup d'argent à jeter par les fenêtres, et du matériel qui est tout sauf périmé, je vais recycler un maximum de choses de ma configuration existante
  • Vu que je peux m’asseoir sur ma licence Windows qui est OEM (liée à ma configuration actuelle, non transposable sur une nouvelle machine), que Windows 10 me casse les bonbons (c'est officiel, W10 est un malware), et qu'il n'est pas question que je paye une nouvelle licence, et que je suis trop vieux pour m'emmerder à la pirater, je passe ces deux machines sous Linux. 
  • Comme j'ai une dépendance sur Windows pour certains logiciels, et que je ne peux pas la lever, je vais me débrouiller pour me procurer une licence légale gratuitement ou à bas prix ; je l'utiliserais pour une VM W7 qui tournera sur le NAS, je m'y connecterais en bureau distant depuis le desktop. Il me faut donc un solution de virtualisation pour le NAS.


A partir de là, j'ai commencé par me mettre à jour sur le hardware actuel car j'avais lâché l'affaire depuis environ 2 ans 1/2 et que les choses évoluent très vite. Puis, je me suis mis à la page sur les distributions Linux et les environnements de bureau, sur les solutions de virtualisation, et tant qu'à faire d'infrastructure Cloud (bon j'ai un copain spécialiste du bignou qui m'a poussé au cul). 

Facile 2 mois plus tard, je sais à peu près où je vais. 

Et le Fanless là dedans ?

Pfouu relou le gars, 40 pages et il parle pas encore de Fanless !

Alors le Fanless c'est quoi ? C'est un PC sans aucun ventilateur donc très silencieux. La seule source de bruit possible résiduelle ce sont les disques durs mécaniques, et si on veut un PC totalement silencieux, noiseless, il suffit de renoncer aux disques durs mécaniques et n'user que de SSD.

Et là ça rentre bien dans mon cahier des charges : je veux un truc silencieux, et comme d'une part je vais déporter sur un NAS le stockage qui ne peut se faire qu'avec des disques mécaniques (le prix au To des SSD étant toujours rédhibitoire pour de gros volumes), et que d'autre part vu l'usage de ma machine de bureau je peux me contenter d'un "petit" disque, le SSD est dans mes prix.

Les contraintes spécifiques liées au Fanless

La dessus viennent  d'autres contraintes : 

  • les processeurs puissants chauffent beaucoup. 
  • les cartes vidéo encore plus

Bon, je ne joue pas avec ma machine, donc pas besoin de carte vidéo dédiée, la GPU intégrée d'un processeur Intel Core récent me suffira amplement. 

Pour le processeur, c'est un poil plus compliqué : il y a des solutions à base de gros boîtiers très aérés qui peuvent accueillir de gros blocs de refroidissement, mais ça ne rentre pas dans mon cahier des charges. Ces solutions sont aussi assez onéreuses (les blocs de refroidissement coûtent un bras, les alimentations électriques fanless aussi, et les boîtiers adaptés itou).

Rappelons ici que j'ai exclu les mini PC, genre NUC ou format mini ITX, car même ça ne rentre pas sur mon bureau. En outre ça limite trop les choix en terme de processeurs (trop peu puissants à mon gout). Ces solutions ne sont par ailleurs pas données non plus, et n'ont aucune évolutivité.

Donc je veux un boitier au format desktop. Et là, manque de bol je suis déphasé avec les tendances du marché, on ne trouve plus beaucoup de ces boîtiers sur le marché, et ils ne sont pas adaptés au fanless (trop petits pour un gros dissipateur, pas adaptés pour l'autre technique utilisée et dont je vais parler).

A ce stade, il ne me reste que la solution HTPC. Les HTPC (Home Theater PC) sont destinés initialement à une utilisation dans un salon, comme brique d'un système multimédia, et destinés à être connectés à divers équipements de salon (chaîne Hifi, ampli 5.1 télévision grand écran etc.). Comme un ventilateur qui fait un gros "vroum" pendant que vous regardez un films, ça ne le fait carrément pas, les technologies fanless sont assez développées sur cette niche.

La technologie utilisée pour réussir à refroidir des processeurs puissants, voire des GPU, consiste à conduire la chaleur sur les parois du boitier qui participe ainsi au refroidissement. C'est un peu comme un chauffage central : la CPU chauffe (comme le brûleur d'une chaudière), les watts dégagés sont aspirés par une pièce métallique posée dessus (comme le ballon d'eau d'une chaudière) et depuis laquelle partent des tuyaux (comme des conduites de chauffage) qui vont transmettre la chaleur aux parois du boitier qui vont la dissiper à l'extérieur (comme un radiateur qui chauffe une pièce). Tout comme un chauffage central donc, sauf qu'il n'y a pas d'eau et que seules les propriétés thermiques des métaux utilisés permettent la conductivité.

Cette tuyauterie amène des contraintes mécaniques : il faut de la place au sein du boitier pour faire circuler les tuyaux qui conduisent la chaleur de la CPU vers les parois, et toutes les cartes mères ou assemblages ne sont pas possibles. D'autre part, il faut un boitier spécifiquement conçu, avec une carcasse en métal qu soit bon conducteur thermique, ajourée, et avec des ailettes pour faciliter la dispersion (comme un radiateur on vous dis).

Enfin, il y a des limites à ce que ce systèmes peuvent évacuer comme chaleur. Cependant ici, j'ai trouvé des solutions capables de supporter des températures assez élevées pour offrir une palette de choix suffisante pour mes besoins en terme de processeurs.

Puis n'oublions pas non plus que les dernières générations de processeurs Intel (skylake) ont fait de gros progrès en terme de TDP (de température dégagée). Et qu'il existe des versions spécialement optimisée pour dégager moins de chaleur ; malheureusement ce sont soit des versions de processeurs pour bureau dégradées en cycle d'horloge (donc moins rapides), soit des versions spécialement conçues pour les ordinateurs portables qui coûtent cher et sont très difficile à se procurer en France pour des particuliers (mais ça se trouve à l'étranger).

Ces contraintes, plus le fait qu'on est sur un marché de niche, plus le fait que la clientèle HTPC a généralement le portefeuille bien garni (ben oui, c'est pas tout le monde qui a un système multimédia de pointe dans son salon), plus le fait que les HTPC trônent dans le salon et doivent avoir un très beau design qui ne fait pas tâche avec le reste des éléments Hifi hors de prix, font que ces boîtiers sont onéreux.

Donc conclusion temporaire, quel que soit mon choix, il va falloir passer à la caisse et redimensionner mon budget initial, ou renoncer au fanless.


Sources utiles, remerciements

Bon, le fanless m'est tombé dessus un peu par hasard, au fur et à mesure de mes promenades sur le web. En fait, j'avais défini une configuration classique puis au dernier moment j'ai voulu l'améliorer et la rendre fanless à moindre coût après avoir lu quelques informations sur le sujet.

Novice sur le sujet, j'ai imaginé une configuration comme j'ai pu, puis j'ai trouvé une "communauté du fanless Français" sur un forum de Hardware.fr animé par une bande de fous furieux. J'ai exposé mon idée, je me suis fait (gentiment) démonter en deux secondes car j'étais complètement à côté de la plaque. Déjà, ça m'a évité de faire fondre mon processeur ...

Puis grâce à l'aide de cette communauté je suis monté en compétences sur le sujet, et j'ai étudié diverses pistes qui m'ont été suggérées, pour finalement retenir celle du tout nouveau boitier HTPC de la société HDPLEX, le H5 2nde génération (tout nouveau).

Donc, pour les curieux, quelques bonnes adresses :



Ma config de bureau Fanless

A titre d'information, j'estime le surcoût lié au fanless à 250 Euros environ dans mon cas. Inutile de dire qu'en valeur relative c'est énorme par rapport au coût initial de ma configuration mais le silence est d'or.

Au final, j'estime que ça vaut le coût car le boitier HTPC répond parfaitement à mon cahier des charges, c'est un très bel objet qui me servira dans la durée, que je pourrais probablement recycler, et qui aura une valeur à la revente.

Le boitier / alimentation électrique

J'ai choisi le boitier HTPC H5 2nde génération, de la société HDPLEX.

Il répond parfaitement à mon cahier des charges. Il permet en théorie de refroidir des processeurs dégageant jusque 95 Watts. 

La lecture des spécifications techniques permet de voir qu'on a affaire à du matériel haut de gamme pensé par des spécialistes. Forcément le prix s'en ressent mais on n'a rien sans rien.

J'ai apprécié la qualité de la documentation, et la possibilité d'échanger avant achat sur le forum dédié à cet appareil : http://www.hd-plex.com/forum/showthread.php?t=2464

Je ne suis pas là pour faire l'article, je vous laisserais le soin de prendre connaissance des spécifications techniques sur le site du constructeur, et je me contenterais de quelques remarques :
  • prenez bien soin de lire les spécifications techniques, et le guide d'installation
  • n'hésitez pas à aller poser des questions sur le forum
  • ne perdez pas de vue que, selon ce que vous voulez faire rentrer dedans, il peut y avoir des surcoûts (dissipateur supplémentaire pour carte graphique, nappe spécifique requise dans certains cas selon l'utilisation que vous faîtes des cartes d'extension PCI-E de la carte mère, cf manuel d'installation)
  • bien sur, n'oubliez pas de choisir une alimentation électrique adaptée


J'ai été un peu perdu au début dans le choix de l'alimentation électrique. 

Jusqu'à présent, j'utilisais des alimentations ATX "classiques", une simple boite qu'on installe dans le boitier PC et d'où partent les câbles pour alimenter la carte mère et autres composants. 

Ici, cette boite est décomposée en deux éléments qu'on doit combiner de façon cohérente :
  • AC/DC : un premier élément convertit le courant alternatif (AC) en courant continu (DC). Il faut le dimensionner en fonction de vos besoins, c'est à dire de la consommation cumulée maximum de l'ensemble de vos composants.
  • DC/ATX : un second élément qui reçoit le courant continu du premier et d'où sortent les câbles habituels pour alimenter la carte mère etc.


La conception du boitier est très modulaire et vous laisse de nombreuses possibilités en terme d'alimentation électrique. Par exemple, le boitier AC/DC peut être interne ou externe. L'intérêt ici est que si vous disposez d'un chargeur d'ordinateur portable en rab, vous pouvez l'utiliser comme boitier externe et faire l'économie d'un élément. Le packaging comprend le nécessaire pour vous permettre de le raccorder. Je n'ai pas creusé cette possibilité mais il est possible de directement relier le boitier à un onduleur pour ceux qui veulent le summum du summum.

Pour ma part, j'ai pris l'option "combo 160W AC/DC + DC/ATX nanoATX". J'ai donc une alimentation interne de 160 W ce qui est parfait dans mon cas car je devrais l'utiliser à environ 50 % de ses capacités ce qui est l'idéal (c'est là qu'il y a le meilleur rendement, c'est à dire que l'énergie perdue en chaleur dégagée est la plus faible par rapport à l'énergie fournie).

Processeur

J'ai pris un core i5-6500 skylake. Son TDP est de 65 Watts.

Le boitier supporte des TDP de 95 Watts et j'aurais pu prendre plus puissant mais d'une part je préfère garder une marge de sécurité, et d'autre part ce processeur sera suffisant pour ma machine de bureau, sachant que dans mon projet pris dans sa globalité, les traitements lourds que je peux faire aujourd'hui et qui justifient un core i7 plus rapide et avec le HT (Hyper Threading), seront déportés sur le NAS (qui aura la CPU qui va bien).

Carte mère

J'ai pris la carte H110M-S2PV DDR3 de GigaByte.

Je n'aurais qu'un SSD à brancher, et quelques ports USB. Du coup, même pas besoin d'un support RAID par le chipset, pas question d'overclocking dans une configuration fanless, pas de carte vidéo bien sur. 

Bref, tout ceci me permet de prendre le chipset H110 le moins puissant et le moins évolué, ainsi qu'une carte d'entrée de gamme destinée au marché des petites configurations de bureau au prix tiré vers le bas. Pour autant, j'ai tapé dans la gamme UltraDurable GigaByte pour ne pas sacrifier la qualité.

J'ai pris la version DDR3 pour pouvoir réutiliser deux barrettes de RAM de mon PC actuel. J'upgraderais éventuellement ultérieurement en 2 x 4 Go avec des barrettes plus performantes mais pour le moment ça devrait bien suffire vu la vocation de la machine.

SSD

Bon là, j'ai un peu craqué, je dois bien l'avouer. Mais vu que je suis descendu en gamme en terme de processeur, je me suis dit autant soigner les I/O. Puis j'ai économisé sur la carte mère, alors ...

J'ai pris un SSD SandDisk Extreme PRO 240 Go. Il est clairement cher, pour le même prix je pourrais avoir un 480 Go ces jours ci (black friday), mais d'une part 240 Go me suffisent largement (le stockage sera sur le NAS), et d'autre part ce SSD se démarque largement dans tous les benchmark que j'ai pu lire en terme de rapidité,le machin est une vraie fusée.

RAM

2 x 2 Go en DDR3, de la PC3-12800 de qualité, de chez Corsair. Spécification ici.


Ma config de NAS

Juste deux mots. Ce ne sera pas une configuration fanless, car avec de nombreux disques ça ne me semble pas raisonnable.

Pour autant, j'ai étudié une configuration la plus silencieuse possible avant de renoncer face au surcoût. Le serveur sera dans une autre pièce que le salon, le bruit ne sera pas un problème.

Ce qui est déjà certain, c'est que je vais recycler de mon PC de bureau actuel :
  • le processeur core i7-3770
  • la carte mère ; elle supporte le RAID sur 4 ports SATA II + 2 ports SATA III
  • l'alimentation électrique (une Seasonic S12 de qualité, bien dimensionnée, 550W de mémoire)
  • un SSD Samsung 830 de 64 Go pour l'OS et le swap Linux
  • un WD Velocirapor 10 000 rpm (j'en ai deux mais je ne pourrais pas brancher les deux)

J'aurais à acheter 32Go de RAM (ouch !), 4 disques NAS pour la grappe RAID (le gros poste de dépense), et un nouveau boitier. En effet, je ne suis pas satisfait par le P180 pour les configurations avec plein de disques. A priori, je prendrais ce boitier Phantek Enthoo Pro qui a un très bon rapport qualité/prix.

Pourquoi 32 Go de RAM ? Parceque je vais utiliser ce serveur en tant que serveur de VM et que c'est une application qui requiert beaucoup de RAM.

En terme de système, je vais me tourner vers une distribution CentOS avec KVM en solution de virtualisation (connecteurs disponibles pour CloudStack, Cloudstack pilotable par Vagrant) ; je dois encore checker le support du RAID semi logiciel par l'OS mais il me semble que c'est OK. Ce choix a été difficile, j'ai envisagé de nombreuses solutions, en particulier FreeNas (FreeBSD) et XPEnology.

Les disques SATAIII seront connectés en SATAII, c'est sans doute dommage mais je n'évalue pas la perte en performance. En outre, ce seront les disques destinés au stockage qui seront branchés dessus. 

En terme de disque, je dois encore réfléchir, c'est un gros poste de dépense. Pour le moment, je pense à des WD Red de 3To (4 x 3 To en RAID 10). Mais mon choix n'est pas arrêté, je pourrais peut être revoir ça pour diminuer le budget (4 WD30EFRX ça fait quand même 500 euros) : moins de disques et un simple RAID 1 + une sauvegarde externe partielle seraient moins cher. Je peux aussi distinguer plus finement mes fichiers entre ceux que je veux absolument préserver en cas de crash et ceux dont je pourrais me passer.

A suivre...

J'ai commandé les pièces. J'attends livraison pour poursuivre cette série d'article, avec la phase d'assemblage, puis la phase de test. 




vendredi 27 novembre 2015

Très Haut Débit : le FTTDP apporte une nouvelle possibilité

Si vous ne comprenez rien au différentes possibilités qui existent aujourd'hui pour bénéficier du Très Haut Débit (THD) en Fibre Optique (ou pas) à votre domicile, c'est bien normal : la situation est relativement complexe, plutôt opaque, et évolue rapidement. En outre, des enjeux industriels et politiques, le poids des lobbys et l'existence d'un organisme de régulation étatique (l'ARCEP) compliquent bien les choses.

Préambule

J'ai réalisé un premier article qui explique tout ça, et qui propose quelques liens intéressants sur des sites tiers. Lisez le en préambule cet article si vous découvrez le sujet.

Cet court article a pour objet de présenter une nouvelle alternative au FTTH, FTTLA, FTTB : c'est le FTTDP ...

FT quoi ?

FTTDP = Fiber To The Distribution Point, Fibre jusqu'au point de distribution

Cette fois ci, il ne s'agit pas d'une variation de la technologie utilisée pour la boucle locale, c'est à dire pour amener le haut débit au pied de votre immeuble (déploiement horizontal, fibre optique en point à point Free vs fibre optique multi-point Orange, vs câble TV coaxial Numéricable).

Non cette fois ci, il s'agit d'une variation sur le thème : comment distribuer le haut débit depuis le bas de votre immeuble (point de distribution) vers les paliers des appartements, donc sur la distribution verticale qui est réalisée par l'opérateur d'immeuble (rappelons que le raccordement final du palier jusqu'à l'appartement est du ressort de l'opérateur privé que vous aurez retenu individuellement et qui sera en pratique soit l'opérateur d'immeuble, soit un opérateur quelconque qui a relié votre immeuble avec sa boucle locale  - déploiement horizontal - et qui paie une redevance à l'opérateur d'immeuble pour utiliser son réseau dans l'immeuble).

Aujourd'hui, on trouve de la distribution verticale en fibre optique (Free, Orange) et en câble TV coaxial (Numéricable). 

La mise en place de cette distribution a un coût non négligeable et constitue un frein au déploiement du THD. En effet, l'opérateur d'immeuble supporte l'investissement et ne l'amortit que dans la mesure où les différents appartements souscrivent à la THD (auprès de lui directement, ou d'un autre opérateur auquel cas ils touchent une redevance pour l'utilisation de leur installation). Or le taux d'adoption n'est pas si rapide que ça, et encore moins dans les grandes villes où les NRA (concentrateurs téléphoniques) ne sont jamais très loin et permettent des débits honnêtes en xDSL.

En parallèle, les technologies évoluent (G.Fast, nouvelle norme xDSL) et permettent d'obtenir du THD sur la bonne vieille paire cuivrée (le réseau téléphonique commuté de papa et grand papa). Alors, attention bien sur, ces très hauts débits sur paire cuivrée ne peuvent être obtenus que sur de très courtes distances (disons de l'ordre de la centaine de mètres au max) et ne sont donc pas éligible pour amener le THD jusqu'au pied de l'immeuble (les distances à parcourir depuis les NRA - concentrateurs téléphoniques - étant trop longues et dépassant les capacités de la technologie). Néanmoins, ces technologies prennent tout leur sens pour le déploiement vertical qui se fait sur courte distance, avec un avantage énorme : tous les immeubles ont déjà un réseau téléphonique en paire cuivré installé, il n'est plus nécessaire de faire autant de travaux ; l'installation d'un équipement qui fait le "lien" entre l'arrivée de la boucle locale et le réseau en paire de cuivre de l'immeuble suffit.

Alors, cette technologie est émergente et les lourdeurs administratives font qu'on ne va pas la voir tout de suite en France, mais néanmoins c'est une piste prometteuse pour accélérer le déploiement de la THD en France.

Et en prime, cette technologie devrait offrir des débits montants supérieurs à ceux offerts par l'offre Numéricable sur cable coaxial (sachant que Numéricable a un monopole de fait dans de nombreuses villes, son réseau de câble TV étant propriétaire et non dégroupé).

jeudi 26 novembre 2015

Qu'est ce qu'un programme 1/2

Tout ce que vous avez toujours voulu savoir sur les programmes (sans jamais oser le demander).

Qu'est ce qu'un programme informatique ?

La réponse peut sembler évidente mais si on prend un peu de recul, cette question à priori simple amène des réponses potentiellement compliquées.

Et elle mérité d'être posée car comprendre ce qu'est "in fine" un programme permet de comprendre pas mal de choses sur le fonctionnement d'un ordinateur quel qu'il soit.

Préambule

Je vous invite éventuellement à (re)-lire cet article qui expose quelques notions de base (architecture processeur, système d'exploitation).

Rappelons rapidement qu'un processeur est, par construction, capable d'exécuter un nombre fini et limité d'opérations élémentaires. L'ensemble des ces opérations élémentaires constitue son "jeu d'instruction" et est un des éléments de base qui définit une architecture processeur. 

Notre première définition d'un programme est la suivante : "une suite d'instructions, chaque instruction étant une opération élémentaire disponible dans le jeu d'instruction du processeur".

Le processeur exécute séquentiellement les instructions qui ont préalablement été chargées en mémoire vive (RAM) par le système d'exploitation (OS). La suite d'instructions (le programme donc) a généralement été lue depuis un support de stockage (disque dur, DVD, etc.) où elle était stockée dans un fichier, appelé fichier exécutable par opposition aux fichiers de données qui stockent des informations et pas des instructions. 

Le processeur est donc capable d'exécuter tout programme, dès lors qu'il est exprimé dans son jeu d'instruction, ce qui en fait un outil très versatile (adaptable à de nombreux travaux). 


La vraie nature d'un programme

Un programme est donc une suite d'instructions, et chaque instruction est exprimée en langage machine, c'est à dire directement en binaire. Détaillons ceci.

A chaque instruction supportée par le processeur va correspondre un numéro unique qui l'identifie, par exemple 00000001 pour une addition ou 00100100 pour une soustraction. 

Les opérandes éventuelles d'un instruction sont également exprimée en binaire. Qu'entends on par opérande ? Hé bien par exemple les opérandes d'une instruction d'addition sont les deux valeurs à ajouter. 

En reprenant notre exemple précédent, si je veux ajouter 4 (00000100 en binaire) et 8 (00001000 en binaire), l'instruction sera un truc du genre 00000001 00000100 0000100, soit "ajouter" "4" "8" (cet exemple est bien sur fictif).

On peut déjà constater que ce code binaire, si il est directement compréhensible par le processeur, est totalement illisible d'un point de vue humain, du moins sans un effort considérable, et encore plus quand on sait qu'il existe des centaines d'instructions différentes, et que les êtres humains normalement constitués comptent en décimal et pas en binaire (et encore, nous avons simplifié la réalité).

Si on a programmé en binaire il y a des décennies sur des ordinateurs très simples munis de processeurs avec des jeux d'instructions très limités, il est bien évident que les possibilités sont très limitées d'un point de vue pratique (et uniquement d'un point de vue pratique) ; les processeurs modernes ont en outre des jeux d'instructions complexes rendant la tâche encore plus difficile.

Pour cette raison, on a inventé progressivement diverses techniques pour permettre aux programmeurs d'écrire des programmes sans devoir taper des suites de 0 et de 1.


Première étape : l'assembleur

On a commencé par attribuer un nom parlant à chaque instruction existante. Par exemple si 00000001 est l'instruction "addition", on lui a associé par exemple le libellé "ADD". 

Ensuite, comme exprimer des valeurs en binaire est vraiment trop chiant, on a donné la possibilité de les exprimer dans d'autres bases (en décimal - base 10 -, en octal - base 8 -, en hexadécimal - base 16 -, la plus utilisée étant l'hexadécimal pour des raisons d'ordre pratique sur lesquels je ne m'étendrais pas ici). 

Du coup, au lieu d'écrire 00000001 00000100 0000100 comme tout à l'heure, je peux écrire par exemple ADD 4 8. C'est déjà plus facile de comprendre que ça veut dire "additionne 4 et 8".

Mais le processeur lui ne comprend pas ADD 4 8, il ne comprend que 00000001 00000100 0000100. Ben oui, il est un peu obtus le machin.

Donc, il nous faut un programme qui va traduire ADD 4 8, qui est ce que le programmeur va écrire, en 00000001 00000100 0000100 qui est ce que le processeur va pouvoir comprendre et exécuter. Ce programme est facile à écrire car la traduction est immédiate, il suffit de remplacer chaque instruction "humaine" (ADD par exemple) en son équivalent binaire (00000001 par exemple) via une simple table de correspondance, et de traduire des valeurs exprimées en décimal/hexadécimal etc en binaire ce qui est une opération arithmétique très simple.

Ce programme c'est ce qu'on appelle un "assembleur". C'est aussi le nom qu'on donne au langage constitué par l'ensemble des mots comme "ADD" qu'on utilise en lieu et place des instructions binaires.

Cette première étape a permis d'écrire des programmes déjà beaucoup plus sophistiqués et intéressants que ce qu'il était humainement possible de faire en binaire.

Cependant, programmer en assembleur reste très compliqué car il faut avoir une connaissance intime du fonctionnement du processeur, et que le niveau d'abstraction des instruction reste très faible (notre exemple du ADD est volontairement simplifié). 

De fait, aujourd'hui la programmation assembleur est très peu utilisée, sauf pour des cas très précis où on a besoin absolument d'un programme très rapide et/ou le plus court possible : car l'assembleur a les qualités de ses défauts : étant proche du matériel, il permet d'écrire du code parfaitement optimisé à la fois pour la vitesse d'exécution et pour le nombre d'instructions nécessaire pour obtenir le résultat  souhaité. On recoure à l'assembleur pour les pilotes de matériel (drivers), le programme chargé de charger le système d'exploitation (bootloader) sur une carte mère équipé d'un firmware BIOS (voir cet article pour ceux qui veulent développer), et dans des contextes où il y a des contraintes  particulières de taille et de vitesse.


Seconde étape : les langages compilés

Après avoir créé l'assembleur, on a voulu aller plus loin. On a voulu pouvoir exprimer des programmes, donc des suites d'instructions, dans un langage le plus proche possible du langage "naturel" (c'est à dire du langage humain).

Alors, disons le tout de suite, programmer en langage naturel, ça reste encore de la science-fiction, et ça le restera sans doute toujours, car quel que soit le langage (Français, Anglais etc.) il reste beaucoup trop vague, trop riche, et beaucoup trop ambigu pour qu'on puisse le traduire en une suite d'instructions.

Du coup, on a créé de toutes pièces différents nouveaux langages ressemblant le plus possible à du langage humain, ainsi qu'un certain nombre de constructions intellectuelles, plus ou moins élaborées, permettant de faciliter l'écriture de programmes sophistiqués comportant un très grand nombre d'instructions.

Les paradigmes de programmation

Ces constructions intellectuelles, ou paradigmes, permettent d'organiser le grand volume d'instructions requis pour un programme de façon à ce que les choses restent gérables (que le code soit compréhensible, qu'il soit bien organisé, qu'on puisse mutualiser des sections de codes utilisables à plusieurs reprises, qu'on puisse faire évoluer un programme le plus facilement possible et sans casser ce qui marche déjà  etc.).

Il existe différents paradigmes de programmation, et il est probable qu'il en sorte d'autres des laboratoires de recherche en informatique dans les décennies à venir. Il n'y a pas de lien entre le fait qu'un langage s'appuie sur un paradigme donné et le fait qu'il soit compilé (nous verrons plus loin qu'il existe d'autres façon de produire des programmes que d'utiliser des compilateurs) mais nous introduisons cette notion dès à présent.

Je n'irais pas très loin dans le détail ici car il faudrait des encyclopédies entières pour décrire les différents paradigmes de programmation existants, je me contenterais de citer les plus importants et de les commenter succinctement :
  • paradigme de programmation impérative : c'est le plus ancien, le plus simple, le plus connu des non professionnels, et celui pour lequel il existe le plus de langages. Parmi les langages impératifs les plus connus citons le langage C, ainsi que la langage Pascal qui a longtemps été utilisé en France pour l'enseignement de la programmation. Le BASIC, langage initialement conçu pour les débutant (Basic est un acronyme où le B figure Beginner, débutant en Français) était un langage impératif à ses origines.
  • paradigme de programmation objet ; l'OOP (Object Oriented Programming, Programmation Orientée Objet en bon Français) est probablement le paradigme le plus utilisé aujourd'hui. On peut citer les langages Java, C#, C++ parmi les plus utilisés.
  • paradigme de programmation fonctionnelle : ce paradigme bénéficie depuis quelques temps d'un engouement certain, notamment du fait qu'il est adopté par le langage Javascript (avec le paradigme objet, javascript supportant plusieurs styles de programmation. Précision tout de même, javascript n'est pas un langage compilé). Java (le langage le plus utilisé dans le monde actuellement) depuis sa version 8 permet de faire de la programmation fonctionnelle.
  • paradigme de programmation déclarative : ici le développeur ne décrit pas une suite d'instruction qui permet d'atteindre un résultat, mais directement le résultat qu'il souhaite obtenir. Un très bon exemple est le langage HTML (qui bien sur n'est pas un langage compilé, mais qui est un bon exemple).

Si vous ne voyez pas ce que sont HTML et javascript, je vous conseille de consulter la série d'articles, de votre serviteur, sur le fonctionnement d'Internet et du Web :



Processus de fabrication d'un programme > compilation

Donc à nouveau, comme avec l'assembleur, les programmeurs ont la possibilité d'exprimer des instructions dans un langage qui n'est pas un langage machine. Et à nouveau, il est nécessaire de traduire ces programmes en langage machine pour que le processeur puisse les comprendre. Cette opération est réalisée par un programme appelé compilateur : c'est la compilation.

On peut le deviner, la compilation est bien plus complexe que la simple traduction directe d'un code assembleur. Les instructions étant plus abstraites, et l'expressivité (les capacité d'expression) du langage infiniment plus évoluées, le compilateur a fort à faire. Pour cette raison, le code binaire résultant est moins optimisé que celui qu'on aurait écrit en assembleur (ou en binaire) ; par contre, il est humainement possible de le produire, et en tout état de cause ça prend infiniment moins de temps et ça coûte bien sur infiniment moins cher (les développeurs ça coûte cher en pizza et en café).

Donc en résumé, on a un code source écrit dans un langage quelconque (il en existe des centaines), un compilateur qui le lit et qui produit un code binaire directement compréhensible par le processeur.

Processus de fabrication d'un programme > édition de lien

Il nous reste une dernière étape pour obtenir un programme exécutable qu'on peut lancer depuis un système d'exploitation, par exemple tout simplement en double cliquant sur le fichier exécutable sous Windows.

En effet, un programme exécutable, pour diverses raisons que je laisse ce côté car nécessitant de longues et complexes explications, n'est pas constitué uniquement d'une suite d'instructions destinées au processeur ; il comporte également un entête qui stocke diverses informations indispensables pour permettre au système d'exploitation de le charger en mémoire et de le rendre ainsi disponible pour exécution par le processeur. Notez bien que ceci est également vrai pour les programmes écrits en assembleur. 

Cette dernière opération qui permet de fabriquer cet entête, et de réaliser un certain nombre d'autres opérations indispensables, s'appelle l'édition de liens (ou linkage, ou linking). Elle est souvent confondue avec la compilation car les outils modernes utilisés par les développeurs réalisent souvent les deux phases de façon transparente.

Pour être complet, il y a un cas où on n'a pas besoin de cette phase : c'est le cas où le programme ne va pas être chargé par le système d'exploitation ce qui est bien sur un cas de figure très réduit puisque le système d'exploitation est lancé dès le démarrage de l'ordinateur. Mais, l'OS étant lui même un programme, il faut bien un programme pour le démarrer, c'est ce qu'on appelle un bootloader ; et ce bootloader n'a pas besoin d'entête et est composé uniquement d'instructions. Pour plus de détail sur ce qu'est un bootloader, vous pouvez lire l'article suivant :
Comment démarre un ordinateur

Quels sont les programmes écrits avec des compilateurs ?

L'écrasante majorité des programmes que vous utilisez tous les jours ont été fabriqués ainsi : les développeurs ont écrit le code source dans le langage de leur choix, puis ils ont lancé la compilation et l'édition de lien pour obtenir au final un fichier exécutable directement utilisable par le système d'exploitation cible (celui pour lequel ils ont choisi de compiler), voire différents fichiers pour différents systèmes d'exploitation si tel était leur choix (si ils voulaient fabriquer un exécutable pour différents OS).


Troisième étape : les librairies partagées

Dès qu'on a eu des compilateurs, on a commencé à les utiliser pour produire pleins de programmes : ben oui, on avait inventé un super outil, c'était bien pour s'en servir.

Et très vite on s'est rendu compte d'un truc tout con : certains aspects étaient à gérer de façon récurrente dans la quasi totalité des programmes.

Que faire alors ?
  • le développeur totalement abruti : il va ré-écrire, à chaque fois, dans chaque programme, la même chose ou à peu près. Pas très intelligent (même pas du tout)
  • le développeur fainéant : il va copier/coller le code qu'il a déjà écris une fois pour un premier programme, dans tous les suivants. C'est déjà mieux mais si il y a une erreur dans son premier code, il va la reproduire partout, et si il la corrige une fois dans un programme, il devra faire la même correction dans tous les autres où il a déjà copié/collé le truc
  • le développeur consciencieux : il va écrire une librairie et la réutiliser... D'où la question à 100 balles, mais c'est quoi une librairie ?

Alors une libraire c'est du code source, écrit dans un langage quelconque, et compilé en binaire avec un compilateur. Comme un programme, sauf que ce n'est pas un programme et qu'il ne peut pas être exécuté par un OS ; c'est juste une suite d'instructions.

Et cette librairie, il suffit de l'utiliser dans les différents programmes en la référençant. Dès lors, son utilisation sera prise en compte lors de la phase d'édition de lien qui suit la compilation dans la génération d'un fichier exécutable.

Et là, dernière subtilité importante, cette prise en compte peut se faire des deux façons suivantes.

Lien statique ou à la compilation

Le code de la librairie est ajouté dans l'exécutable généré. C'est comme le copier/coller du développeur fainéant, sauf qu'au lieu d'un copier/coller du code source par le développeur, c'est un copier/coller de code compilé par le compilateur (enfin l'éditeur de lien pour être précis).

Premier avantage : comme la taille du code source n'est pas augmentée, les temps de compilation ne sont pas impactés. Hé oui, compiler un gros programme, il fut un temps où ça pouvait prendre des heures ou des jours (moins vrai de nos jours avec la puissance des ordinateurs actuels et les progrès des compilateurs).

Second avantage : c'est une opération automatique et non manuelle, donc ça prend moins de temps, et le risque d'erreur est moindre.

Pour le reste, on a toujours les inconvénients de la solution "développeur fainéant". Si on corrige une erreur dans le code source de la librairie, il faut non seulement la recompiler mais également recompiler tous les programmes qui l'utilisent.

En outre, avec l'arrivée des OS multi-tâches, un autre problème s'est posé. Dans un OS multi-tâches, on peut exécuter simultanément plusieurs programmes. Il faut donc les monter tous en mémoire. Hors, si ils sont par exemple 3 à utiliser la même librairie qui fait 50 Ko, l'empreinte mémoire va être de 3 x 50 = 150 Ko. Hé oui, chaque programme embarque le code de la librairie, donc on le charge autant de fois que de programmes qui l'utilisent. Quand on avait des OS mono-tâches, on s'en foutait bien car on ne faisait tourner qu'un programme à la fois, mais ce temps est fini.

Donc au final, l'édition de lien statique à la compilation est peu utilisée. On lui préfère généralement l'édition de lien dynamique à l'exécution pour les raisons évoquées.

Lien dynamique ou à l'exécution

L'éditeur de lien ne vas plus copier/coller le code binaire de la librairie dans le programme exécutable. A la place il va modifier l'exécutable de telle façon que, lorsque le programme appelle une fonction de la librairie : 
  • le système d'exploitation charge la librairie en mémoire. Il fait en sorte de ne la charger qu'une seule fois même si plusieurs programmes y font appel (gros avantage par rapport au lien statique donc)
  • le programme principal exécute la code de la librairie
  • quand le code de la librairie a fini de s'exécuter, le programme principal reprend la main

Et voilà, le tour est joué. Si on a 3 programmes qui utilisent la librairie de 50 Ko, elle n'est chargée qu'une seule fois, et la taille des 3 fichiers exécutables n'est pas augmentée (en tout cas, pas dans la même mesure).

Le gros problème, car il faut bien qu'il y en ait un, c'est que désormais nos 3 programmes ne peuvent fonctionner que si et uniquement si la librairie dont ils sont chacun dépendants est bien installée sur le système... En outre, pour peu que la librairie existe en diverses versions car elle a évoluée dans le temps, et qu'ils utilisent chacun une version différente, ça peut vite devenir le bordel.

Les librairies dynamiques sous Windows, ce sont les fameux fichiers DLL (Dynamic Link Library), et une des raisons de l'instabilité des versions anciennes de Windows c'est justement la mauvaise gestion de ce problème (ce qu'on appelle le DLL Hell, l'enfer des DLL).

Maintenant vous comprenez pourquoi quelques fois, un programme A qui marchait très bien, ne fonctionne plus après que vous ayez installé un programme B : le programme B a une DLL en commun avec A, et lors de son installation il a écrasé la version présente dans le système (et utilisée par A) par une version plus ancienne (utilisée par B).

Versions portables

Certains programmes sont compilés en deux versions. Une version qui fait le lien avec la librairie à l'exécution, et une version qui fait le lien à la compilation. La seconde version est dite "portable", elle est plus grosse mais il suffira de copier l'exécutable sur un OS compatible pour que ça fonctionne (pas de nécessité d'installer les DLL des librairies qu'il utilise).

Compatibilité binaire

Le mécanisme d'édition de lien introduit un couplage entre un programme et le système d'exploitation pour lequel il est compilé : le format de l'entête est spécifique à l'OS cible, de même que le mécanisme de gestion des librairies partagées. 

C'est pour cette raison qu'il n'existe pas de compatibilité binaire : bien que le programme soit une suite d'instructions en langage machine, il ne sera pas possible d'utiliser un même programme sur deux machines disposant d'un même processeur (enfin de deux processeurs supportant la même architecture, et donc le même jeu d'instructions) mais tournant sous des OS différents.

La compatibilité binaire est envisageable entre diverses moutures d'une même famille d'OS, ou dans des conditions bien précises, mais ceci reste délicat et compliqué, il est généralement plus simple de ne pas chercher à finasser et d'installer la version spécifiquement compilée pour l'OS de votre machine. Ou au pire, de se procurer le code source et de la compiler pour votre OS (une opération qui n'est pas rarissime sous Linux).

Il existe dans le cas où on veut utiliser un même programme sur différents systèmes d'exploitation, et même sur différentes architectures processeurs, une solution largement utilisée et qui ne repose pas sur les langages compilés. Cette solution passe par la virtualisation du processeur, nous aborderons ceci dans un second article.


Conclusion temporaire 

Comme en informatique rien n'est jamais simple, il existe également des programmes qui ne sont pas compilés dans le langage machine compris par le processeur :
  • soit il ne sont pas compilés du tout, et on parle alors de langage interprété
  • soit ils sont compilés dans un code machine virtuel c'est à dire dans un langage binaire ne correspondant pas au jeu d'instruction d'un processeur, mais à celui d'un ordinateur virtuel (un programme qui fait de façon logicielle ce que fait un ordinateur avec des pièces électroniques).

Il y a bien sur des raisons à cela, des avantages, et des inconvénients également.

Nous expliquerons cela dans un second article.

lundi 16 novembre 2015

DLNA décrypté

Le DLNA c'est la promesse d'un monde merveilleux de convergence entre informatique et multimédia, où vous auriez accès à tous vos contenus de partout et sans prise de tête. En fait le terme est tellement galvaudé par le marketing et utilisé à tort et à travers qu'il finit pas devenir totalement abscons.

Puis comme nous allons le voir, la réalité est bien moins reluisante que le rêve qu'on nous vend.

Le DLNA c'est avant tout une technologie réseau. Si vous n'avez aucune base en la matière, je sous suggère de lire cette petite introduction sur le sujet.


DLNA, c'est quoi 

A la base c'est un consortium d'industriels qui a édicté une norme qui vise à permettre l'interopérabilité de nombreux matériels : TV "smart", disque dur multimédia, enceinte sans fil, smartphone et ainsi de suite.

L'interopérabilité c'est un mot compliqué pour dire qu'on va les faire fonctionner ensemble, leur apprendre à se parler et à coopérer. On doit pouvoir regarder sur sa télé les films stockés sur son ordinateur de bureau ou de préférence son NAS (c'est plus classe, ça coûte plus cher), diffuser de la musique stockée sur son NAS vers des enceintes sans fil et en contrôlant tout ça depuis son smartphone, envoyer les photos de son smartphone sur sa télé etc.

Bref, tellement d'usages différents et possibles, présentés sous des tas de noms différents, qu'on finit par ne plus rien comprendre. Surtout que les promesses de simplicité sont très loin, mais alors très loin, d'être tenues.


DLNA, explication de texte

Dans un réseau d'appareils collaborant selon la norme DLNA, on peut trouver des DMP(layer), DMC(ontroler), DMR(enderer), DMU(ploader), DMD(ownloader) et j'en oublie sans doute.  Difficile de comprendre le rôle de chacun et encore j'utilise ici les termes de la norme, mais il y a aussi les termes marketing, les noms qu'on trouve dans les menus qui sont encore différents, et l'existence en parallèle d'autres normes plus récentes qui recoupent DLNA sur certains usages. Une chatte n'y retrouverait pas ses petits.

Alors revenons aux fondamentaux pour y voir plus clair.

Dans un programme informatique, on peut distinguer au moins deux composantes : 
  • l'interface utilisateur qui est l'ensemble des éléments (menus, écrans de saisies, icônes, gestures d'écran tactile ...) qui vous permettent de donner des instructions à la machine et de recevoir des informations en retour. La télécommande est l'interface utilisateur de votre télévision.
  • les fonctionnalités qui correspondent à ce qu'on attend de la machine : jouer un son, afficher une image etc. Les fonctionnalités sont activées par les commandes transmises grâce à l'interface utilisateur.

Dans un programme classique, tel que vous l'utilisez sur un ordinateur, ces deux composantes forment un tout unique et indivisible qui s'exécute sur un matériel unique. Cependant, on peut imaginer de séparer ces deux composantes et de les faire s'exécuter chacune sur une machine différente. 

Dès lors il faut alors une composante réseau pour qu'elles puissent se parler. Et c'est ici qu'intervient DLNA en organisant ce dialogue.

Ce dialogue s'appuie sur une couche réseau qui permet aux équipement de se parler. Ce réseau ce peut être du Wifi, du Bluetooth, du réseau filaire Ethernet, du CPL, peu importe. Le réseau ce n'est pas le souci de DLNA, il utilise ce qu'il trouve mais il ne le gère pas. Comme quand vous utilisez une voiture, vous ne vous souciez pas du moteur (j'ai pas trouvé d'exemple plus parlant, disons que c'est une voiture en boite automatique) .

Prenons l'exemple d'enceintes sans fil pilotées depuis une application smartphone. L'application smartphone c'est l'interface utilisateur (aka DMC), les fonctionnalités c'est les enceintes (aka DMR), et DLNA est juste là pour les aider à se parler ; c'est juste le protocole de communication.

Maintenant, ce n'est pas fini. Une enceinte sans fil pour jouer un morceau de musique, elle doit en disposer. Or, ce n'est pas le cas car le morceau est stocké sur votre NAS. Hé bien, ici aussi il y une communication réseau entre l'enceinte et le NAS : l'enceinte demande au NAS de lui envoyer le morceau et le NAS lui envoie. Au passage, vous noterez que si le smartphone vous a proposé le morceau c'est qu'il avait déjà demandé au NAS "hé donne moi la liste des morceaux de musique dont tu disposes".  Toutes ces discussions sont gérées grâce au protocole DLNA.

J'espère que c'est déjà plus clair.

Alors j'ai pris un exemple avec 3 parties, mais il y a des cas plus simples. Par exemple, la TV "smart" qui lit les films diffusés par votre NAS. On est sur un cas de figure client-serveur tout à fait classique avec un client (la TV) qui envoie des requêtes à un serveur (le NAS) qui répond en fournissant, la liste de ses films avec leurs métadonnées (affiche, liste des acteurs, résumé ...), puis plus tard le film proprement dit (en streaming donc) quand la TV lui demande après que l'utilisateur ait choisi un film (via l'interface utilisateur pilotée par la télécommande).

DLNA, les la promesses tenues

Alors on vient de le voir, on a plein d'appareils qui se parlent. Habituellement, ceci implique pas mal de travail en amont pour configurer tout le bordel.

Mais avec DLNA vient encore une norme ou protocole qui porte divers noms mais dont l'objet est simplement de permettre à tous les programmes ou matériels qui "parlent" DLNA de se reconnaître mutuellement de façon automatique. 

ça s'appelle un truc comme "Universal Plug & Play" (Upnp) : "tu branches, ça marche" en bon Français.

Et ça fonctionne bien. Normalement, aucune configuration à faire, hors cas particuliers ou vieille box internet toute pourrie.

DLNA, les promesses non tenues

Format de données non reconnus

Les appareils DLNA doivent respecter une certification pour avoir le droit de s'appeler DLNA. 

Malheureusement, la norme DLNA impose uniquement de savoir reconnaître un format d'image, un format de son, et un format de vidéo. 

Certes ce sont des formats très utilisés, mais aujourd'hui il existe une multitude de formats d'image, de son et plus encore de vidéo.

Et dès qu'un appareil chargé de restituer un son/image/vidéo reçoit un fichier qu'il ne sait pas traiter, ben ça marche pas. Et manque de chance, les formats parmi les plus utilisés aujourd'hui ne sont pas dans la norme.

Alors on a des appareils plus sophistiqués qui savent gérer plein de formats, bien au delà de que réclame la norme, mais d'autres non. Et la seule façon de savoir, c'est de se taper les documentations techniques, et là ça peut devenir vite compliqué vu la multitude de formats.

D'où les problèmes fréquents.

Réencodage dynamique ...

Dans le cas de format non supportés, il existe certains serveurs de contenu DLNA (en particulier les logiciels qu'on installe classiquement sur un NAS utilisé en serveur multimédia) qui savent réencoder dynamiquement à la volée les vidéos pour les envoyer au client (disons la smart TV) dans un format qu'il va reconnaître.

Le souci c'est que le réencodage vidéo est une opération extrêmement lourde et qu'à moins d'avoir du matériel pointu avec plein de mémoire, un processeur multi-coeur rapide, des disques SSD rapides, un support matériel (donc une carte mère avec les bonnes puces et le logiciel qu'il faut, configuré comme il faut), vous allez mettre votre serveur à genoux, et côté client l'image va se figer, le son se décaler, l'avance et la marche arrière ne fonctionneront pas etc... Sauf à dégrader le qualité du signal pour gagner en performance... Mais bon si je me ruine en disque durs pour stocker des films en full HD, c'est pas pour les voir dans une qualité de merde !

Ergonomie

Les clients DLNA qui affichent la liste des contenus mis à disposition par un serveur DLNA sont de qualité très variables (pour être gentil). Bien souvent, ils gèrent très mal les méta données, et il n'y en a pas deux qui fonctionnent de la même façon.

Je ne sais pas pourquoi, mais pour avoir vu pas mal de client DLNA, je crois rarement avoir vu autant de softs développés avec les pieds par des développeurs autistes.  Il doit y avoir des raisons à ça.

Incompatibilités

De nombreux appareils implémentent mal la norme (en fait le logiciel qu'ils embarquent) et sont tout simplement bugués. Du coup, le dialogue ne fonctionne pas ou mal.

Alors, si on reste au sein d'une gamme d'un constructeur ça a de fortes chances de fonctionner, mais quand on mixe des appareils de différents constructeurs, c'est variable.

Vidéos HD > Problème de débit réseau

Le marketing met en avant la liberté et la facilité lié à l'utilisation de réseaux sans fil. Or, il faut savoir qu'un réseau WIFI, même à la dernière norme, a un débit beaucoup trop limité pour faire passer des vidéos en HD. Et ne parlons pas du bluetooth qui a déjà du mal à faire passer la musique sans trop nous abîmer les oreilles.

Donc, le DLNA ne fonctionne tout simplement pas en WIFI pour de la vidéo HD. Il y en a qui ont essayé, ils ont eu des problèmes.


Il faut être en réseau cablé Ethernet 1 Gbit pour que ça puisse fonctionner (et encore pas toujours, cf les problèmes de format).

Conclusion

Le DLNA c'est bien pour le son.
Le DLNA c'est bien pour la vidéo en SD (pas en HD).
Le DLNA, c'est bien pour quelques usages gadgets, genre envoyer ses photos sur sa TV (et encore)

Pour la vidéo HD, passez votre chemin. Prenez vous un boitier multimédia, ça coûte mille fois moins cher, c'est performant, et ça marche du feu de dieu.

Et je doute que les choses s'améliorent beaucoup dans le futur. Qui vivra verra.

vendredi 13 novembre 2015

Table de partitions et bootloading - Compléments

Le deux articles suivants ont donné une introduction et une vision haut niveau de l'organisation des disques et du processus de démarrage d'un PC :

Si ça a éveillé votre curiosité, je met ici quelques liens vers des ressources pour aller plus loin. Vous verrez que les quelques connaissances de base ainsi acquises ouvrent la porte à bien des applications.

Analysing the Master Boot Record (MBR) with a hex editor (Hex Workshop). Cet article explique en détail et de façon très claire comment décrypter (et pourquoi pas modifier) le contenu d'un MBR

TestDisk, Parition Recovery and File Undelete Data Recovery. Vous trouverez ici un utilitaire précieux pour manipuler vos MBR (par exemple le sauvegarder avant de faire des manipulations hasardeuses ou installer un nouvel os en dual boot), entre autres possibilités (comme récupérer des fichiers supprimés ou même des partitions détruites, comme dans "Les experts")

How to check in Windows if you are using UEFI. Il est ici expliqué comment savoir si votre Windows tourne en mode UEFI. Petit ajout personnel, si msinfo32 ne donne pas le paramètre "BIOS Mode" c'est à priori qu'il ne sait gérer qu'un seul mode (donc le mode Legacy, c'est à dire Non Uefi, c'est à dire encore BIOS)  et que vous tournez avec une vieille version ou une version 32 bits (car il me semble bien que le support UEFI n'est disponible que sur des versions 64 bits de Windows)

The easy way to manage EFI/UEFI boot options!. Vous trouverez ici un utilitaire, très précieux, pour investiguer/modifier le fonctionnement d'un firmware UEFI. 

Je continue mes investigations, j'ajouterais d'autres liens si j'identifie des ressources utiles.

Ha oui, pour faire des tests, plutôt que de "casser" des ordinateurs et de perdre des heures à les remettre en état (et encore, faut avoir du matériel pour ça), pensez donc à utiliser une solution de virtualisation. Elles permettent pour certaines de paramétrer pour une machine virtuelle si elle s'exécute sur un firmware Bios ou Uefi. A titre d'illustration,voici une ressource sur le sujet : Enabling UEFI on Virtual Machines. ça date un peu mais ça donne déjà un point de départ.

Si vous ne connaissez pas la virtualisation....En résumé grossier, un système de virtualisation est un programme informatique qui permet de faire fonctionner des ordinateurs virtuels, où tout le matériel est simulé par des programmes qui font la même chose que ce que les machines font avec des composants électroniques. L'air de rien. ça a des tonnes d'applications très utiles et l'informatique moderne s'appuie énormément sur des plateformes virtualisées, c'est cette technologie qui permet l'essor du "cloud computing".


L'offre Internet THD (Très Haut Débit)

Un petit point rapide sur le THD (Très Haut Débit) via la fibre optique :  en effet, derrière cette appellation commerciale se cache différentes vérités, et il est bon de comprendre quelques notions pour choisir son opérateur, en tant que syndic d'une copropriété, ou en tant que particulier.

Un minimum de notions en réseau est requis : comprendre ce que sont download et upload. Il faut aussi savoir que 100 Mega c'est 10 X plus que 1 Giga... Je sais je suis taquin.

Préambule 

L'alternative à la fibre, ce sont les technologies xDSL (ADSL, ADSL2, SDSL, VDSL etc...) qui s'appuient non pas sur la fibre optique mais sur la paire cuivrée des réseaux téléphoniques traditionnels (des câbles en cuivre donc). L'accès par satellite se développe également pour les zones isolées. Il existe aussi les accès rapides par ondes radio (4G).

L'ARCEP considère comme THD tout accès qui permet un débit descendant (download) >= 30 Mbit/s ce qui inclut certains accès xDSL (le VDSL 2 qui permet dans certaines conditions - rares - d'atteindre ces débits). Mais je ne m'intéresse ici qu'à l'offre fibre optique. 

La fibre optique, en deux mots, c'est un type de câble qui véhicule de la lumière et qui par rapport au câble en cuivre traditionnel présente de gros avantages techniques (supporte des distances élevées)  et un gros inconvénient financier (il est beaucoup plus cher).

Une bonne description des différents types de câble est disponible ici (attention cependant, les explications datent un peu : il y a belle lurette qu'on n'utilise plus de prise vampire sur du 10base5, ni de câbles 10base2, ni de prises BNC, ni de réseaux en bus. Toutes ces technologiques datent de l'époque de l'Ethernet à 10 Mbit et ont été abandonnées depuis l'Ethernet 100 Mbit et remplacées par les câbles 10baseT, les prises RJ45, et la topologie en étoile ; voir ici pour plus d'explications si tout ceci ne vous parle pas).

Autant de réseaux que d'opérateurs

Contrairement au réseau téléphonique où il existait à l'époque de son déploiement un seul opérateur étatique (PTT, devenu plus tard France Telecom), il existe de nombreuses sociétés commerciales qui ont obtenu le droit de l'état Français de déployer des réseaux. L'idée est de faire financer les travaux par des sociétés privées qui se rattraperont sur la vente de services (comme ça s'est passé pour la téléphonie mobile).

Chaque opérateur déploie son propre réseau de fibre optique sur le territoire ce qui implique des travaux lourds et coûteux : installation et raccordement des nœuds principaux, puis déploiement en horizontal le long des rues, puis en vertical dans les immeubles, et normalement au final dans chaque logement (obligatoire dans la construction collective en neuf).

Les principaux opérateurs nationaux sont Numéricable, Orange, Free, Bouygues Telecom. Numéricable vient à cette date de racheter SFR (et récupère donc son réseau).

Du coup on n'a pas un réseau, comme pour le téléphone (en non dégroupé), mais n réseaux concurrents. Et donc, on doit choisir un opérateur. Et c'est là que ça se corse.

Ha oui le dégroupage : les technologies xDSL passent par le réseau téléphonique ; pour permettre la concurrence, et éviter aux opérateurs privés de devoir bâtir leur propre réseau, la loi a donné obligation à France Telecom de leur donner accès à la dernière partie du réseau téléphonique (la boucle locale). C'est tout simplement ça le dégroupage. Pour le déploiement de la fibre, comme il n'y avait pas de réseau pré-existant, pas de dégroupage, chaque opérateur construit son réseau.

L'opérateur ne fait pas le réseau

Etant donné que faire des trous dans tout le pays, et y passer des câbles qui coûtent très cher, demande des investissements lourds et implique des problèmes logistiques non négligeables, tous les réseaux ne se développent pas à la même vitesse et dans la même direction.

A ce sujet quand même je vous rassure, les backbones (les liens principaux qui parcourent le pays et forment l'ossature du réseau) existaient déjà car aussi bien la SNCF que les sociétés d'autoroute, et d'autres grands opérateurs, les développaient systématiquement depuis longtemps déjà. Plus d'info ici.

Du coup, les différents opérateurs ont passé des accords entre eux pour se louer conjointement leurs réseaux.  

Ensuite, il existe des opérateurs "virtuels" dans le sens où il n'ont pas de réseau en propre. Ils louent simplement le réseau des opérateurs sus-nommés. Un bon exemple est Darty avec sa DartyBox qui utilise le réseau Numéricable (Darty amène sa capacité logistique bien rodée pour la commercialisation, la distribution et l'installation des box, le support après vente etc.).

Enfin, un même opérateur peut disposer de différents réseaux dans des technologies différentes ; il a fait évoluer ses choix techniques dans le temps et/ou il a racheté d'autres opérateurs. Un exemple typique est Numéricable qui dispose d'au moins 3 technologies différentes avec des services rendus bien différents.

Donc, vous pouvez contractualiser avec un opérateur, et utiliser le réseau d'un autre opérateur  (systématiquement si c'est un opérateur virtuel, au cas par cas sinon), ou encore avoir bien du mal à savoir quelle technologie va s'appliquer à votre domicile (et ce n'est pas neutre). Et à réseau identique entre deux opérateurs, vous pouvez avoir une Box de génération différente.

On vous ment 

Etant donné que les détails techniques ne sont pas très sexy et n'intéressent pas franchement la plupart des consommateurs (qui a dis des moutons ?), les services marketing ont pris certaines mauvaises habitudes quand à la description de leurs offres : entre raccourcis et approximations, détails importants non communiqués, voire mensonges flagrants, il y a de quoi fournir matière à des procès en cascade, et d'ailleurs il y en a quelques un en cours. Free en particulier s'est illustré en la matière mais n'est pas le seul, loin s'en faut.

Donc, ne vous contentez pas des explications plus qu'approximatives, voire fantaisistes, et totalement insuffisantes des plaquettes publicitaires, et allez lire le détail des conditions générales, pour connaître les vrais débits en upload et download, les garanties de délai de rétablissement de service en cas de panne, et les détails insignifiants comme les frais de rupture... Et, faîtes quelques recherches sur Internet, il y a des sites très bien faits. 

Pour vous donner une petite idée sur la qualité des réseaux, et encourager une excellente initiative, n'hésitez pas à consulter la météo du net sur la grenouille.com. Ce site collaboratif mesure de façon indépendante les vrais débits constatés par les vrais utilisateurs ; et vous pouvez les aider en installant leur outil de mesure chez vous.


Les points d'attention 

FFTH vs FFTLA vs FFTB

FFTH, ça veut dire "fibre jusqu'à la maison" : en gros, un morceau de fibre arrive directement à votre domicile, sur un boitier qui se raccorde à votre Box.

FFTLA, ca veut dire "fibre jusqu'au dernier amplificateur", en gros quelque part plus ou moins loin de chez vous. Les derniers mètres ou centaines de mètre ne sont pas en fibre mais en câble coaxial (câble en cuivre).

FFTB, ça veut dire "fibre au pied de ton immeuble". Le raccordement vertical (dans l'immeuble) est en coaxial. Si le dernier amplificateur est au pied de l'immeuble, c'est comme le FFTLA.


Une petite image vaut mieux qu'on long discours (image empruntée à clubic.com).

On voit ici un boitier installé au pied d'un immeuble quelconque. On a sur la gauche l'arrivée d'un câble optique (la boucle locale est donc en fibre optique), et on a sur la droite deux câbles coaxiaux qui vont suivre la colonne montante de l'immeuble et distribuer le signal à tous les étages. On n'est donc pas en FFTH car la fin du chemin est en coaxial ; on est ici en FFTB


FFTH est "à priori" préférable car cette technologie permet "à priori" de meilleurs débits. C'est pour ça qu'Orange et Free vous proposent du 800 Mbit/s et plus. Et que Numericable ne peut le faire qu'en de rares occasions (sauf dans la pub bien sur).

Free vient d'attenter un procès à Numéricable pour "publicité mensongère" du fait qu'il ne communique pas sur le fait qu'il ne fait pas de la "vraie fibre". Nul doute vu les amitiés politiques de M. Niel que les lignes bougent sur ce sujet.

Technologie de boucle locale (bis repetita)

La "boucle locale" c'est le dernier morceau du réseau qui achemine Internet jusque chez vous (depuis le dernier équipement réseau - le NRO Noeud de Raccordement Optique - jusqu'à votre point de connexion à votre domicile).  Ce raccordement peut être direct (réseau point à point chez Free), ou indirect (via divers relais chez Orange qui est sur une autre technologie).

Normalement ce devrait être de la fibre optique me direz vous ? Ben non, quelquefois c'est encore du câble coaxial. Et la raison est généralement historique. Les opérateurs de TV par câble ont déployé d'importants réseaux et il était bien tentant de les réutiliser ... Et ces réseaux s'appuient sur une boucle locale en coaxial moins performant que la fibre.

Petite observation innocente : pour diffuser de la télé (faire du broadcast), on n'a qu'un sens de diffusion : ben oui, vous recevez la télé et vous n'émettez pas de programme (donc de votre point de vue que du download). Les chaînes de TV diffusent vers vous, vous vous contentez de recevoir (en buvant un coca dans votre canapé pour vous faire sucer le cerveau).

Du coup, deuxième effet kiss cool : les équipements "historiques" qui gèrent ces boucles locales ne sont pas du tout adaptés pour l'upload ; ils ont un mode de fonctionnement asymétrique (un sens est privilégié par rapport à l'autre) alors que la fibre est totalement symétrique (la différence entre débit en download et en upload n'est pas technique mais un choix commercial des opérateurs).

Et du coup, votre débit en upload est à chier chez Numericable. Mais attention cependant, une mise à jour de ses équipement réseaux par Numericable est en cours, pour supporte la norme DOCSIS 3.1 (v3 actuellement sur une grande partie du territoire) ce qui changera la donne en théorie. En théorie car rien ne dis que Numericable ouvrira les tuyaux.


Attention à l'offre Numéricable

Alors, c'est qui l'opérateur Internet dont le métier d'origine était la TV par câble ? 
Et, c'est qui l'opérateur Internet qui se garde bien de dire qu'il fait du FFTLA et pas du FFTH ?
...
...
En plein dans le mille, c'est Numéricable.

Voilà pourquoi Numéricable propose des débits en upload merdiques à la plupart de ses clients ; et si on les compare à ceux de Free et Orange, ça devient carrément la honte pour eux 

Voilà aussi pourquoi l'offre Numéricable est plafonnée à 400 Mbit/s maximum pour une grande partie de ses clients, et encore à 100 Mbits/s par endroits.

Voilà pourquoi le débit réel obtenu sur le réseau Numéricable est parfois encore très très très inférieur au 100 Mbit/s pour lesquels vous payez, et tourne plutôt dans les 30 Mbits/s. En fait, cela dépend plus des équipements utilisés sur la partie du réseau que vous empruntez, que de l'utilisation de coaxial au lieu de fibre optique (bien se renseigner ...).

Et il faut tout de même reconnaître que les choses s'améliorent. Les responsable de Numéricable ne sont pas débiles et savent bien que leurs concurrents les enfoncent ; si ils ont un gros avantage historique lié à leur antériorité dans le domaine de la TV par câble, les choses changent vite et ils font des investissements.

Le débit réel en download s'améliore et leur permet de proposer du 400 Mbit/s où encore il y a peu ils étaient plafonnés à 100 Mbits grâce à une mise à jour progressive de leurs équipements réseaux (DOCSIS v3). Et sincèrement, 100 Mbit/s réel, c'est déjà pas mal aujourd'hui. En outre, le déploiement de DOCSIS 3.1 est planifié.

Pour les mêmes raisons, le débit en upload s'améliore, et même si ça reste assez minable, ce n'est pas une grosse gêne pour la majorité des utilisateurs. Après, à chacun de faire la balance entre le prix de l'offre et ses besoins. Et ici aussi, les choses risquent de changer avec le déploiement de la norme DOCSIS 3.1 qui va permettre des gros débits en upload .

Enfin, histoire qu'on ne dise pas que j'en veux à Numericable (je suis client chez eux en 100 Mbits, et ça marche très bien), ils semblent investir massivement et le débat entre "vrai" et "faux" câble prend de plus en plus l'apparence d'un jeu de dupes. Après tout ce sont les performances qui comptent.
.

Attention au débit en upload

Au delà du cas particulier de Numéricable, il faut bien regarder le débit qui vous est offert en upload. En effet, c'est un choix purement stratégique et marketing de la part de l'opérateur qui n'est pas dicté par l'utilisation de la fibre et de ses équipements associés. Ceci dis, les opérateurs ont tendance à rendre leur offre homogène (sauf quand ils coincés par la technique).

Alors quel besoin d'un gros upload ? En fait, c'est surtout intéressant si vous voulez héberger des serveurs chez vous. En effet, dans ce cas, quand quelqu'un (un client) vient contacter votre serveur, les sens sont logiquement inversés. Le tuyau de download (le plus gros) reçoit les requêtes (faible volume en général) et renvoie les réponses (plus gros volume) par le tuyau d'upload (le plus petit).

Et ça fait peur aux opérateurs qui ont peur qu'on explose leur réseau. A tel point qu'à une époque (je ne sais pas si c'est encore d'actualité) Numéricable interdisait par contrat qu'on expose un serveur à son domicile : un comble quand même. M'enfin vu leur upload de merde, ils ne risquent pas grand chose (désolé mais ce genre de truc ça m'énerve, je paye un truc et j'ai pas le droit de m'en servir ? Non mais vous m'avez bien regardé, c'est écrit couillon sur mon front ?).

Et accessoirement, les opérateurs ont généralement une activité d'hébergement ; ils ont assez investis dans leurs Datacenters pour ne pas avoir envie qu'on puisse faire chez nous pour 45 Euros/mois ce qu'il nous vendent beaucoup plus cher. Mais ici aussi ils se plantent : déjà ce n'est pas tout le monde qui va s'amuser à faire de l'hébergement chez soi (il faut du matériel et des compétences solides), et les services d'hébergement ont d'autres atouts que leur bande passante (et si c'est pas le cas, qu'ils améliorent leur offre, non mais).

L'utilité d'un upload important risque cependant de s’accroître avec de nouveaux usages comme le stockage des données dans le cloud (sur Internet donc : dropbox, google drive etc...).

Pour finir sur une note (presque) positive : Numéricable offre la possibilité en ce moment de doubler son débit en upload. Dommage qu'ils n'en aient pas vraiment fait la pub, on les a connus moins discrets. M'enfin, je m'en suis pas privé.




Attention à Free

Ceci est un avis personnel ; pas un jugement (pas envie d'aller en prison moi ! )

Bon, je vais le dire clairement, je n'aime pas cette société. Je trouve que Free a une attitude malhonnête dans de nombreux domaines, et se fout clairement de la gueule de ses clients, et plus généralement du monde.

Tiens quand Free te fais une pub qui te dis "XX Euros sans engagement", il faut bien comprendre le sens de "sans engagement" > Free ne s'engage à rien, à part te pomper ton compte tous les mois bien sur.

Dans la série, "pas de fumée sans feu", il n'y a qu'à voir le nombre de fois où cette société a été attaquée, condamnée, vilipendée par les organisations de consommateurs en particulier. Et pour ma part je ne peux que confirmer au regard de mon expérience personnelle avec eux.

Alors, je connais des tas de gens, y compris des pro exigeants et des geeks poilus, qui sont très satisfaits de Free. Tant que ça marche, ça marche, par contre le jour où il y a un problème ... 

Et je dois au moins leur reconnaître une qualité, celle d'avoir fait bouger les lignes et baisser les prix. (qui a dis comme Uber ?).

Et la TV alors ? (update)

En faisant une petite revue de presse, je me rends compte que j'ai oublié un point. La télévision !

En effet, si j'ai pas mal insisté sur les défauts de l'offre Numericable en matière d'Internet, j'ai oublié de mentionner qu'à l'inverse cette offre est supérieure en ce qui concerne la télévision. Ce qui est assez logique vu le métier d'origine d'opérateur de TV Cable et l'utilisation de technologies initialement prévues pour cet usage unique.

Pour avoir été client d'à peu près tous les opérateurs, dans diverses technologies, et à différentes époques, je ne peux qu'avoir remarqué que la Box Numéricable est tout de même bien plus stable, et me semble aussi plus performante sur tout ce qui à trait à la TV. Chez moi, avec un abonnement de seulement 100 Mbit, je peux enregistrer deux chaines en même temps, tout en en regardant une troisième, voire une quatrième en incrustation, et tout ça en HD. C'est pas demain qu'Orange arrivera à faire ça, même avec des débits supérieurs.

Conclusion 

Vous voilà mieux armés pour vous y retrouver dans le maquis des offres THD. 

Ha oui, une dernière chose, ce n'est pas parce qu'un immeuble est fibré par un opérateur que vous êtes obligés de prendre un abonnement chez ce même opérateur. La loi prévoit qu'il mette à disposition son infrastructure à d'autres opérateurs, dès lors qu'ils ont raccordé l'immeuble à leur réseau. Voyez avec votre syndic pour savoir qui est votre opérateur d'immeuble, et quels opérateurs se sont branchés sur votre PMI (Point de Mutualisation Immeuble) qui fait la jonction entre la boucle locale (déploiement horizontal) et le réseau dans votre immeuble (déploiement vertical)


(update, revue de presse) : 

les lignes bougent vite sur le secteur de la THD, les vérités d'aujourd'hui ne sont pas celles de demain. Numéricable déploie une mise à jour 3.1 de la norme DOCSIS en ce moment même, et ça devrait lui permettre d'améliorer très sensiblement son upload. Et, selon certaines sources, la société dispose des moyens financiers requis pour financer une modernisation rapide de son réseau (introduction en bourse, rachat de SFR finalisé ...), et son dirigeant semble avoir une vraie vision industrielle à long terme.

Quand au débat sur l'utilisation du terme "fibre" pour le FFTLA/FFTB  mis en oeuvre par Numéricable, il n'est pas fini. Il semble probable que désormais, ils doivent écrire "fibre*" (avec une astérisque) pour préciser plus loin "* Raccordement final en coaxial". C'est pas ça qui va aider Madame Michu (la ménagère de moins de 50 ans) à s'y retrouver.