Affichage des articles dont le libellé est linux. Afficher tous les articles
Affichage des articles dont le libellé est linux. Afficher tous les articles

lundi 9 novembre 2009

UTF-8 is magic

Comme expliqué dans le précédent billet je rencontre quelques difficultés pour synchroniser mes données entre Mac OS et Linux en utilisant l'outil Unison.

Le premier problème était lié à l'utilisation de l'UTF-8 sous Mac OS, codage que je fais tout pour éviter sur mon Linux depuis des années car en dehors de problèmes d'affichages ça ne m'apporte rien du tout. Mais étant donné la situation j'ai changé le codage des mes noms de fichiers sous Linux en faveur de l'UTF-8 (oui je suis faible).

Une fois ce premier problème réglé, lancement de la synchro avec Unison, une grosse heure pour synchroniser 40Go. Méfiant, je relance la synchro pour m'assurer que tout est bon, et là petite surprise tous les fichiers accentués sont vu comme nouveau sur le Mac et absent sur le Linux. Bon, pourquoi pas, je le laisse relancer la synchro sur ces fichiers. Après cette nouvelle synchro je vais voir mon arborescence sous Linux pour vérifier ce que vient de faire Unison et petite surprise tout mes fichiers accentués apparaissent en double.
S'en suit alors une journée entière de mise à jour d'Unison, de nouvelles synchros, de parcours de forums sans réels résultats. Je me suis donc posé la question calmement : comment Unison a-t-il réussit à créer des fichiers avec le même nom ? c'est impossible, personne ne l'aurait laissé faire. C'est alors que j'ai commencé à porter mes soupçons sur mon vieil ennemi l'UTF-8, après tout il y a peut-être des versions dérivées avec des codages différent dont une sur Mac OS, ce qui pourrait expliquer la situation.

Je me suis donc mit en quête d'informations sur cette mystérieuse implémentation de l'UTF-8 sur Mac OS pour finalement apprendre que l'UTF-8 permet de coder certains caractères de plusieurs manières, notamment les caractères accentués. Par exemple le "é" peut s'écrire avec un seul caractère unicode (U+00E9, LATIN SMALL LETTER E WITH ACUTE), ou en combinant le e avec l'accent (U+0065, LATIN SMALL LETTER E and U+0301, COMBINING ACUTE ACCENT), magique n'est-ce pas ? En résumé Mac OS utilise bien l'UTF-8 mais dans sa forme "décomposée" (parfois appelée UTF-8-MAC), alors que Windows et Linux préfèrent la forme "précomposée", c'est beau les formats universels non ?

Donc comment réussir à synchroniser ces deux arborescences qui contiennent la même chose (ou presque). Et bien je vous livre les 2 solutions trouvées sur les forums puis ma solution à moi :

Solution basique
Ne pas utiliser de caractères accentués, n'utiliser que des caractères ASCII. Pourquoi pas mais ça serait comme baisser son pantalon devant l'UTF-8.

Solution SSHFS
Monter l'arborescence Linux sur le Mac via sshfs en ajoutant l'option "-o modules=iconv,from_code=UTF-8,to_code=UTF-8-MAC", ainsi j'ai accès sur le Mac à l'arborescence Linux convertie à l'unicode Ensuite il suffit de synchroniser les deux arborescences locales sur le Mac.
Cette solution est fonctionnelle, mais d'une part la synchro est très longue à se faire car tout est vérifié sur la même machine et d'autre part il est nécessaire d'avoir les même uid/gid entre Linux et Mac pour la synchro.

Solution "mais si ça doit marcher"
Modifier le codage des fichiers sur Linux le temps de faire la synchro et restaurer l'ancien codage après la synchro.
Un peu "olé olé" me direz vous, mais voyons comment mettre ça en oeuvre. Seul point dur, le renommage des fichiers, il existe des outils tel que convmv qui renommer une arborescence en changeant le codage, mais le format UTF-8-MAC est complètement inconnue par tout ces outils sous Linux. Je me suis donc lancé dans l'écriture d'un script python pour effectuer ces modifications (voir le code en fin de billet). Ensuite la synchronisation est toute simple, modification du codage, appel à Unison, et restauration du codage et en plus ça marche et c'est rapide ! Pfiou !

Pour conclure je dis vive l'UTF-8, le format universel qui j'en suis sur continuera de poser universellement des problèmes durant de longues années.
Et pour re-conclure, voici le "fameux" script python pour changer le codage d'une arborescence (évidemment c'est copyleft) :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from optparse import OptionParser
from unicodedata import normalize
import os
import os.path
import sys


# ----------------------------------------------------------------------
def composedToDecomposed( string ):
        decomposed = normalize( "NFD", string )
        return decomposed


def decomposedToComposed( string ):
        composed = normalize( "NFC", string )
        return composed


# ----------------------------------------------------------------------
def processTree( path, convert ):
        for file in os.listdir( path ):
                fileWithPath = os.path.join(path,file)
                if os.path.isdir( fileWithPath ):
                        processTree( fileWithPath, convert )
                converted = convert(file)
                if converted != file:
                        os.rename(fileWithPath,os.path.join(path,converted))


parser = OptionParser()
parser.add_option( "-d", "--composed-to-decomposed", dest="c2d"
                 , action="store_true", default=False
                 , help="convert tree from composed to decomposed form")
parser.add_option( "-c", "--decomposed-to-composed", dest="d2c"
                 , action="store_true", default=False
                 , help="convert tree from decomposed to composed form")

(options, args) = parser.parse_args()

if options.c2d == False and options.d2c == False:
        print "- E - You must specifiy a conversion"
        parser.print_help()
        exit(1)

if options.c2d == True and options.d2c == True:
        print "- E - Only one conversion can be processed at a time"
        parser.print_help()
        exit(1)

if options.c2d == True:
        label  ="from composed form to decomposed"
        action = composedToDecomposed
else:
        label  ="from decomposed form to composed"
        action = decomposedToComposed

for tree in args:
        print "- I - Converting %s %s" % (tree,label)
        tree = unicode(tree, sys.stdin.encoding)
        processTree( os.path.abspath(tree), action )


PS: j'ai été faignant, le script ne renomme pas le dossier père de l'arborescence à modifier.

mercredi 4 novembre 2009

Fenêtres, pingouin et pomme

L'informatique est un domaine vaste où chacun peu trouver son compte, il y a en pour tous les goûts, du simplissime à gentoo il n'y a qu'a faire son choix.

Comme beaucoup de gens j'ai débuté avec Windows, et dans mon cas c'était Windows 98.

A l'époque j'étais au top, j'avais plein de supers logiciels pour tout : ADSL autoconnect pour toujours rester en ligne, revelation pour voir les mot de passe cachés, un utilitaire qui change de fond d'écran toutes les 2 minutes, un antivirus et biensûr un indispensable générateur de codes-barres !
Bien évidemment avec tous ces programmes indispensables le PC était mou et je m'émerveillais à chaque réinstallation de Windows de sa rapidité fulgurante qui ne durait hélas jamais plus d'une demi-heure, le temps de réinstaller lesdits outils.
Quoi retenir de cette époque si ce n'est les BSOD intempestifs, les réinstallation mensuelles de Windows et Napster en plein développement.

Trois années après mes débuts en informatique je suis entré en IUT informatique et bien évidemment mon rapport au monde numérique a changé. J'avais déjà entendu parlé de Linux dans le passé, j'avais essayé d'installer une Mandrake 7.0 sans succès sur ma machine. Bref ce système n'était pour moi pas crédible et je me moquais allègrement des gens qui utilisait cet OS à la ligne de commande.
Mais bon, à l'époque j'étais fougueux et rien ne me faisait peur, j'avais donc essayé Mandrake (la 9 si je me rappelle bien) qui avait dû finir par marcher mais bon grosse galère pour faire marcher le modem, la carte graphique et pas mal d'autres choses.

Les mois passant et avec l'aide d'érudits tels que cyberyo qui me prodiguaient conseils et assistance j'ai finit par essayer d'autres distributions telles que la Debian qui m'a longtemps résistée. J'ai dû faire au moins 5 allers-retours entre Debian et Mandrake avant d'être assez aguérit pour installer la Woody sans galérer.
Et ensuite ce fut l'escalade ... testing le passage obligé avant de faire le grand saut vers unstable où chaque apt-get peut péter quelque chose sur votre système. A l'époque j'adorais ça, la bidouille, la recompilation, la recherche de pourquoi ce p*tain de serveur X il veut pas se lancer, pourquoi mon noyau recompilé avec le patch supermount indispensable il boot pas ...


Voila maintenant 8 ans que j'utilise Linux quotidiennement et je commence depuis quelques temps à me lasser de la bidouille.
Il y a 10 ans ça m'amusait de réinstaller un Windows, aujourd'hui je fais tout pour l'éviter.
Il y a 7 ans ça m'amusait de chercher pourquoi tel composant ne voulait pas marcher sous Linux et j'y passais des nuits avec joie et de grands verres de Coca-Cola.
Il y a 2 ans quand mon disque dur a lâché j'ai un peu tout essayé pour récupérer mes données ...


... et ça avait fonctionné.
Aujourd'hui je fais bien sagement des sauvegardes sur un disque dur externe, quand quelque chose ne marche pas je cherche la solution de facilité, exemple : suite à une mise à jour de ma Debian le pilote de l'imprimante ne veut plus marcher, pas grave j'utilise mon VirtualBox et j'imprime avec Windows.

Vous l'avez compris j'aspire à plus de simplicité et après plusieurs semaines d'hésitations je suis sur le point d'effectuer un nouveau virage vers Mac OS qui je l'espère saura m'apporter la tranquilité que j'attends tout en permettant une transition en douceur avec la couche Unix, le serveur X11 et macports (un équivalent à apt-get).

Rendez-vous dans quelques jours pour les premières impressions et sûrement les premières frustration, et oui passer d'un système qu'on maîtrise à un tout nouveau ça se fait pas en deux minutes.

Dernière chose, je trouve assez marrant de voir que je suis passé à Linux à l'époque de Windows XP et que je m'apprette à passer à Mac OS avec l'arrivée de Windows 7.

lundi 26 octobre 2009

Pourquoi faire simple

Cela fait à peu près 2 semaines que j'envisage l'abandon du pingouin pour passer à la pomme car j'en ais marre d'avoir des problèmes pour tout et n'importe quoi.

Par exemple mes problèmes de son décrits dans un précédent billet ou encore le passage au noyau 2.6.31.4 qui de temps en temps une fois arrivé sur gnome me prive de clavier, souris et même de mon acpi donc obligé de couper comme un barbare et de se taper un fsck au reboot.

Et ce soir petite blague sympa : retour de week-end avec changement d'heure, je démarre une fois sous Linux et une fois sous Windows pour que chacun se mette à l'heure d'hiver puis je retourne sous Linux qui refuse de démarrer, et oui le système de fichier a été monter dans le future et apparemment c'est une erreur fatale. Et la on a juste envie de lui dire "hé pov con c'est toi qui a changé la date il y a 5 minutes !".
Bref petit fsck, reboot et même erreur sur une autre partition, refsck et enfin ça démarre. Non mais vraiment comment qualifié cela si ce n'est de "user-unfriendly"

PS : ce billet a été rédigé sur une machine Apple.

mercredi 14 octobre 2009

Pulsechiuraudio

Sur les conseil d'un pote j'ai voulut mettre en place pulseaudio sur ma machine pour palier le manque de mixer hardware de ma carte son.
Sur le papier tout est beau, c'est un outil magique qui sait tout faire et super tunable dans tous les sens. Dans la pratique c'est la merde parce que une fois de plus je n'ai pas une utilisation "comme tout le monde" de l'outil. Une fois de plus parce que ça me rappel l'arrivée de compiz (le gestionnaire de fenêtre en 3D), "Essaye compiz tu verras c'est top", "bah non ça gère le bi-écran n'importe comment".

Dans le cas présent le soucis vient de mpd, le serveur de musique que j'utilise. Alors pourquoi mpd ? parce que les développeurs d'amarok se sont dit que la v1.4 était trop bien alors pourquoi ne pas sortir une v2 plus lourde avec moins de fonctionnalités et avec des bugs dans l'interface. Mais je m'égare, revenons à pulseaudio.

Donc, pulseaudio marche très bien quand il est lancé par l'utilisateur, configurable, simple, etc ... mais mpd est lancé avec un autre utilisateur (mpd) et n'a pas accès à mon serveur pulseaudio (grrrr). Or toutes les options pour activer le partage sont grisées dans l'interface de configuration (GRRRrrRRRRRRRr) et si je configure mpd pour utiliser pulse il lance son propre serveur et là le premier sur la carte son l'emporte (GRRRRRRRRRRRR !!!!!!).
Vous l'avez compris c'est DE - LA - MERDE ! c'est ce genre de situation qui me donne envie d'acheter un mac où on n'est pas emmerdé avec toutes ces conneries (et non windows n'est pas une option).

Reste le plan Z après avoir épuisé tous les autres, lancer pulseaudio comme un vrai démon, mais "bouh c'est mal" nous dit la doc, "c'est pas bien", etc ... rien à f*utre j'ai plus rien perdre. Après quelques essais le tout fini par marcher, mais reste tout de même un problème (faut pas déconner non plus) impossible de configurer le nombre de canaux donc pas moyen de profiter du 5.1 car lorsqu'on lance pulseaudio comme "vrai" serveur l'interface de configuration est amputée de la moitié des paramètres par rapport au lancement "par utilisateur".
Qu'à cela ne tienne je suis d'humeur joueuse et je finis par trouver le paramètre à modifier dans le bon fichier de configuration. Mais manque de chance lorsque je lui indique 6 canaux, au lieu de comprendre "5.1" il me met "IEC958" ... après quelques essais je finis par m'avouer vaincu et je reviens à ma configuration initial, très frustré et déçu de ne rien avoir à jeter par la fenêtre ...