Mokapop

décembre 21, 2006

Comment configurer un PDA en 99 étapes faciles

Filed under: Gadgets, Linux, Macintosh, Uncategorized — mokawi @ 8:05

Il m’est arrivé quelque chose d’horrible dernièrement: j’ai appris comment utiliser le bash comme il faut. Pour les innocents d’informatique UNIX: j’ai appris à faire fonctionner l’interface terminal du mac. Comme celle-ci est beaucoup plus puissante que l’interface graphique, surtout en ce qui concerne l’automatisation, mais que sa configuration prend beaucoup de temps, j’ai passé un nombre absolument indécent d’heures à la machine.
Donc, évidemment, j’ai joyeusement rempli mon bureau de sorties du terminal avec GeekTool (cf. article précédent—et encore j’ai ajouté une coupelle de trucs). Mais surtout, comme le malheur veut que j’ai acheté un PDA linux il y a de ça un an (un Zaurus SL-5500, pour la fort môdique somme de 100 huards dorés), il m’est venu à l’esprit qu’il fallait que je mette au point une méthode de synchronisation.
J’ai longtemps été un utilisateur insatisfait du système qu’on appelle communément « Sharp ROM 3.10 » et qui vient du manifacturier. J’avais pris habitude d’utiliser Ko/Pi, un calendrier issu du monde KDE qui tournait très lentement, mais en utilisant des fichier vCal, tout comme iCal sur mac, et Ka/Pi, qui lisait sans problème les fichiers vCard issus du carnet d’adresses de Mac OS X. Or, un jour, bang, ça marche plus, et je n’ai jamais pu trouver pourquoi—la raison que le terminal donnait était bidon. Plus tard, c’est mon lecteur DjVu qui lâche, donc exit les consultations d’Aristote en grec ancien. La moitié des programmes que j’installais ne fonctionnaient pas, la gestion des documents était vraiment douteuse, le traitement de texte lisait mal les fichiers word, et le tout était très mal conçu, de façon pas du tout pratique.
Bref, j’ai donc installé OpenZaurus avec GPE sur la carte mémoire (Là, je saute des étapes: l’installation de ce truc n’est pas nécessairement évidente quand on est habitué à Mac OS. Je saute aussi toute les difficultés pour connecter le Zaurus à l’internet du mac.) Problème: je n’ai plus trop envie d’installer Ko/Pi et Ka/Pi, parce que c’est lent, mais aussi parce que je suspecte qu’ils sont bâtis pour Qtopia, et pas pour X, l’interface graphique de GPE. D’ailleurs, entretemps, je n’utilise plus iCal, mais Remind, pour la rapidité encore une fois.
Évidemment, pas question d’installer Remind sur le Zaurus: ça aurait été super, mais malheureusement, je ne sais pas comment compiler un programme pour fonctionner sur OpenZaurus. Il faut donc prendre la sortie de Remind (remind -s1 -b1 -q) et la traiter avec un script, puis l’afficher sur le terminal rxvt. Comment fait-on pour garder rxvt ouvert? Si on ajoute ces lignes-là à la fin du programme, il tourne sans fin, et la fenêtre rxvt reste:
    while [ 1 ]; do
    continue
    done
Ceci réglé, comment afficher les tâches au calendrier pour les jours à venir? Le plus facile, ça reste de choisir la date, parce que la sortie remind commence par la date. E.g.:
    2006/12/30 * * * 1170 19:30 Canadiens contre TAMPA BAY
Il suffit donc d’expédier le fichier dans grep avec la date du jour:
    cat < fichier | grep 2006/12/30
Le véritable problème, c’est de savoir c’est quoi la date de demain. OpenZaurus vient avec la commande date, mais pas avec cal, donc il faut tout calculer soi-même. J’aurais pu me simplifier la vie avec awk, mais comme je ne le connais pas encore très bien, je suis sorti avec ça:
#!/bin/sh

calc () {
awk « BEGIN { print $* ; } »
}

jds () {
if [ $1 = « Mon » ]; then
echo « Lundi »
elif [ $1 = « Tue » ]; then
echo « Mardi »
elif [ $1 = « Wed » ]; then
echo « Mercredi »
elif [ $1 = « Thu » ]; then
echo « Jeudi »
elif [ $1 = « Fri » ]; then
echo « Vendredi »
elif [ $1 = « Sat » ]; then
echo « Samedi »
elif [ $1 = « Sun » ]; then
echo « Dimanche »
fi
}

ldm () {
if [ $1 = 1 ]; then
echo 31
elif [ $1 = 2 ]; then
if [ $(calc $2″/4-int(« $2″/4) ») != 0 ]; then
if [ $(calc $2″/100-int(« $2″/100) ») > 0 ]; then
echo 29
fi
elif [ $(calc $2″/400-int(« $2″/400) ») != 0 ]; then
echo 29
else
echo 28
fi
elif [ $1 = 3 ]; then
echo 31
elif [ $1 = 4 ]; then
echo 30
elif [ $1 = 5 ]; then
echo 31
elif [ $1 = 6 ]; then
echo 30
elif [ $1 = 7 ]; then
echo 31
elif [ $1 = 8 ]; then
echo 31
elif [ $1 = 9 ]; then
echo 30
elif [ $1 = 10 ]; then
echo 31
elif [ $1 = 11 ]; then
echo 30
elif [ $1 = 12 ]; then
echo 31
fi
}

mydate () {
day=$(calc $(date +%d)+$1)
maxday=$(ldm $(date +%m) $(date +%Y))
if [ $(( $day > $maxday )) = 1 ]; then
month=$(calc $(date +%m)+1)
if [ $(( $month > 12 )) = 1 ]; then
month=1
year=$(calc $(date +%Y)+1)
else
year=$(date +%Y)
fi
day=$(calc $maxday-$day)
else
month=$(date +%m)
year=$(date +%Y)
fi
echo $year/$month/$day
}

cat < /home/mok/.remind | grep $(mydate 6) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
echo « Dans 5 jours: »
cat < /home/mok/.remind | grep $(mydate 5) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
echo « Dans 4 jours: »
cat < /home/mok/.remind | grep $(mydate 4) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
echo « Dans 3 jours: »
cat < /home/mok/.remind | grep $(mydate 3) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
echo « Apres-demain »
cat < /home/mok/.remind | grep $(mydate 2) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
echo « Demain »
cat < /home/mok/.remind | grep $(mydate 1) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
echo « Aujourd’hui (« $(jds $(date +%a)) » le « $(date +%d) »). »
cat < /home/mok/.remind | grep $(date +%Y/%m/%d) | awk ‘{ print $1  »  » substr($0,match($0,$6)) }’
cat < /home/mok/remindz.txt
while [ 1 ]; do
continue
done
Ici, .remind est la sortie de remind, et reminz.txt est un fichier que je joint par la suite au .reminders du mac. Et le tout me donne mon horaire sur 7 jours. En passant, je ne sais pas pourquoi, mais j’obtenais des erreurs en rassemblant les conditions pour les années bissextiles ([ $(calc $2″/4-int(« $2″/4) ») != 0 && $(calc $2″/100-int(« $2″/100) ») > 0 || $(calc $2″/400-int(« $2″/400) ») != 0 ]). Quelqu’un peut m’expliquer?
Pour le todo, j’utilise simplement un fichier .txt que j’affiche avec GeekTool et auquel j’accède par une icône du Dock. Donc, il suffit d’une synchronisation et de quelques subtilités.
Pour les adresses, c’est plus ardu. En ce moment, j’utilise contacts (disponible sur fink) pour obtenir une sortie texte lisible du carnet d’adresse de Mac OS X. Ensuite, sur le Zaurus, un script demande un nom à chercher et affiche les lignes qui contiennent ce qui a été entré grâce à grep. Pour le passage Zaurus –> Mac, en revanche, ce n’est pas au point. Je crois que je vais écrire un applescript pour entrer les nouvelles entrées de GPE-contacts (qui sont en format SQLite) dans le carnet d’adresse, et peut-être un shell script pour l’inverse. À suivre.
Et dire que je dois travailler sur ma maîtrise…

Publicités

décembre 12, 2006

Geekness craving

Filed under: Gadgets, Informatique, Linux, Macintosh — mokawi @ 12:50

Je ne suis plus l’informaticien que j’étais quand j’avais 12 ans. Je suis généralement assez ennuyé par les incompatibilités logicielles et matérielles, et ça ne m’excite pas vraiment de changer d’interface graphique ou de polir les boutons pour qu’ils soient plus beaux. Je ne pitonnerait plus dans la fourche ressource des fichiers du système même si elle existait encore: je suis philosophe, pas technicien. Mais il arrive que l’esprit du geek s’empare de moi et me transforme en maniaque incontrôlable. C’est ce qui s’est passé hier.
Le point de départ, c’est que mon ordinateur est rendu assez lent. Je le fais régulièrement tourné avec une bonne dizaine de logiciels assez gourmants merci: iTunes, Safari, bien sûr, mon lecteur de RSS Vienna, XCast, qui me donne une meilleure interface qu’iTunes pour chercher mes balladodiffusions (podcasts), Adium, qui me met sur MSN, X11 et OpenOffice.org, Aperçu, parce que j’ai toujours deux ou trois pdf d’ouverts, iCal en permanence, parce que c’est très lent à ouvrir et que j’ai besoin de l’info tusuite. Ajoutez à ça un Dashboard avec 7 ou 8 gadgets, et des trucs comme iComic pour les Foxtrot, Sinfest et cie, Journler, Bits on Wheel ou aMule qui s’ouvrent assez régulièrement, Firefox, parce que souvent Safari n’est pas parfait, iTaf et Aurora, des alarmes assez peu efficaces pour que j’en mette deux pour la sûreté, MDict et Dictionary, qui s’ouvrent aussi assez souvent, DjView pour consulter l’édition de Bekker d’Aristote, VLC ou QtAmateur pour les films, FFView pour les bandes dessinées et les manga et vous voyez l’encombrement.
Évidemment, j’ai besoin de tout ça, mais j’aimerais ne pas avoir à attendre quand j’ouvre un programme. Le truc? Je l’ai trouvé en tombant sur une page qui parlait de remind, un utilitaire qui s’occupe du calendrier… sur le terminal. Et comme de fait, la page montrait aussi une belle capture d’écran semblable à celle-ci (qui est à moi):
GeekTool sur mon bureau
Alors… ça me montre mes tâches à faire, mon calendrier, les applications ouvertes… Il y avait aussi d’autres gizmos que je n’ai pas pensé utile d’ajouter. Et alors, illumination: je vais remplacer mon Dashboard par ça! J’installe donc remind, son interface wyrd (une interface graphique sur terminal), GeekTool (ce qui me permet de mettre des sorties terminal sur le bureau). Mais voilà, ô horreur, impossible de convertir les calendriers iCal en format remind. Que faire mon Dieu que faire? Je plonge dans le google, et je trouve des scripts perl ma foi fort complets. Je les télécharge, je démarre le script d’installation… et paf: je n’ai pas iCal::Parser, donc ça ne marche pas. Je jure deux bon coup, et je retourne sur le web, où je découvre que je dois avoir installé Developer Tools—ce que j’ai pourtant fait, mais j’ai dû oublier de quoi. Je me dirige donc vers le site pour programmeurs d’Apple, et paf: il faudrait que je me tape 1 gig de téléchargement. Je regarder mon disque dur: à peine 1.9 gig disponibles. Bon, allez, on s’en va. De fil en aiguille, je découvre que cpan, l’utilitaire qui permet de télécharger des paquets perl, est sur mon ordi. Je le lance, je lui ordonne d’aller me chercher ce dont j’ai besoin, et paf, on me dit que Module::Build ne fonctionne pas, et cpan refuse catégoriquement de continuer.
Je lâche quelques jurons, je quitte cpan, et je me lance à la recherche de scripts applescript équivalents: en effet, il est écrit que ça existe dans le blog de l’auteur du script perl. Je cherche, sans succès. Je décide donc de télécharger iCal::Parser, et de mettre le fichier .pm que réclame le script dans le premier dossier où je trouve des fichiers .pm. Je suis chanceux: ça marche! Ou presque: on me réclame illico un truc comme DateTime::Locale. Ok, j’accours, je le télécharge, et je recommence: là, il me manque DateTime::Format::iCal. Je recommance avec des résultats semblables 5 ou 6 fois, et puis je réalise: si j’écris moi-même un script AppleScript, ça me prendra moins de temps que de faire fonctionner ce fameux script. Je me met à l’ouvrage, et 30 minutes plus tard (alors que je gossais depuis 4 heures), j’ai ce que je veux, et je m’empresse de sauver mon travail (que voici).
Je rentre le tout dans remind, je corrige quelques dates entrée en français, et je contemple le résultat de mon dur labeur dans GeekTool: rien. Je m’arrache quelques cheveux, j’envoie un message au développeur, et je finis par réaliser que c’est parce que rem est dans /sw/bin et que ce n’est pas dans les répertoires de travail du shell qu’utilise GeekTool. Après m’être assuré de la syntaxe sur le web, je tape « export PATH=$PATH:/sw/bin:/sw/sbin;rem ».
Je vous averti tout de suite si vous êtes du genre à vous procurer remind, n’utilisez pas cette commande pour GeekTool. Sinon le système va se remplir lentement mais sûrement de petits exemplaires de remind jusqu’à plonger GeekTool dans le silence et provoquer des choses étranges (de mon côté, le panneau de configuration pour les tablettes de graphistes s’est mis en marche sans que j’aie branché quoique ce soit, et le système a subi un ralentissement général). Il faut ajouter l’option « -q » à rem, sans quoi remind tourne en mode daimôn.
Je contemple néanmoins mon oeuvre, et je me dis « il faudrait quelque chose qui me donne la température ». Je plonge sur le web, et je regarde mes options. J’opte en premier pour rss, mais je ne trouve pas d’utilitaire simple qui se lâche dans la ligne de commande. Je change de stratégie, et je découvre que je peux demander à lynx de lâcher une belle page bien arrangée dans la sortie terminal. J’apprend un peu de bash, un peu de grep, et voilà, je fais mon premier script bash. Ça ressemble à ça:

/sw/bin/lynx -dump http://mobile.wunderground.com/global/stations/71627.html > /users/mok/vdesk/temp/meteo.html;echo « Meteo » && cat < /users/mok/vdesk/temp/meteo.html | grep -A 0 « Updated: » && cat < /users/mok/vdesk/temp/meteo.html | grep -A 2 « Temperature » && cat < /users/mok/vdesk/temp/meteo.html | grep -A 0 « Wind  » && echo «  » && cat < /users/mok/vdesk/temp/meteo.html | grep -A 25 « Forecast as of »

Je trouve ça fort que ça fasse un si beau résultats avec si peu de code (cf. l’image plus haut), même si c’est esthétiquement très discutable (car oui, mesdames et messieurs, les programmeurs, même s’ils ne se rasent pas et font très peu attention à leurs vêtements, soignent bien l’esthétique de leur code, qu’il seront sans doute les seuls à consulter.)
Je contemple encore la beauté de mon nouveau bureau, en me disant que je pourrai désormais faire des scripts pour transférer mes contacts, mes calendriers et mes courriels sur mon Zaurus. Et tant qu’à y être, mes rss favoris aussi. Mais voilà, j’ai passé toute la journée à ces changements, et je n’ai pas mangé du tout.

Créez un site Web ou un blog gratuitement sur WordPress.com.