oin? oin! http://j.oin.name Throughout true thoughts and thorough truth posterous.com Thu, 15 Sep 2011 12:01:03 -0700 Changement de maison http://j.oin.name/changement-de-maison http://j.oin.name/changement-de-maison Oyez, oyez,

Ce site devient plus simple, plus léger, plus lisible, bilingue, et encore un peu plus moyen-âgeux.

C'est Hubert Sainte-Force qui prend ma relève et qui vous invite dans sa taverne : À la bonne Sainte-Force !

Au plaisir de vous y voir !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Thu, 27 Jan 2011 13:57:30 -0800 Triche au piano avec ton autonote ! http://j.oin.name/triche-au-piano-avec-ton-autonote http://j.oin.name/triche-au-piano-avec-ton-autonote
Jouer du piano, c'est très sympa, mais quand on ne sait pas en jouer, c'est pas marrant. Or, le clavier de piano est encore l'interface la plus commode et la plus courante pour entrer de la musique dans un ordinateur. Imaginez maintenant que vous avez une super mélodie en tête, et que vous voulez la noter, avec les notes, l'expression, le rythme, tout ça. Si vous n'avez pas quelques années de clavier dans les doigts, il est probable que vous vous y repreniez à plusieurs fois. Et pour peu que ce que vous avez en tête soit un poil compliqué, ça devient une mission périlleuse. Avoir recours à la souris ou à un truc du style step-sequencer permet de faire moins d'erreurs, mais la manière d'entrer les notes, le rythme et l'expression sont terriblement chiants (et — mais il faut prendre un bon accent belge pour dire la suite — très très indirects) et le temps d'arriver à entrer les premières notes, vous avez déjà oublié votre idée géniale. Imaginez, en plus, que votre idée se joue à très grande vitesse et présente une bonne centaine de notes sur seulement quelques mesures. Allez écrire ça à la souris, avec l'expression et un rythme complexe !

La solution classique serait d'apprendre à jouer du clavier. Ça prend du temps, et en plus je trouve que les claviers de piano sont mal foutus (d'autres dispositions efficaces existent). Apprendre toutes ces notes et tous ces accords différents selon les tonalités, là. Si vous voulez mon avis, je trouve ça un peu... has-been.

Imaginons quelque chose qui nous permet de séparer le processus d'entrée de notes en deux parties. D'abord, il s'agirait de définir la suite des hauteurs des notes qu'on veut jouer. Ensuite, il suffirait juste de faire comme sur les synthés pour enfants, on appuie une touche quelconque tout le temps et ça joue les notes aux hauteurs qu'on a défini auparavant. On définit donc les hauteurs en premier, et ensuite on joue ces notes avec le rythme et l'expression qu'on veut sans se soucier de sur quelle touche on appuie. Ça permettrait de réaliser un peu plus facilement ces trucs de psychopathe qui résonnent dans votre tête et que vous allez maintenant pouvoir transformer en tubes interplanétaires !

Oui, car j'offre une version préliminaire de autonote, un petit système pour réaliser ce que je dis de manière rudimentaire. C'est un patch pour Pure data (ou pd pour les intimes), un environnement de programmation graphique en temps réel spécialisé dans le multimédia. Vous pouvez l'utiliser en installant pd et en configurant les entrées et sorties MIDI comme vous le souhaitez (pour l'entrée MIDI, si vous n'avez pas de clavier maître sous la main, un bon vieux VMPK pour Windows ou Linux ou MidiKeys pour Mac fera l'affaire. Une case à cocher permet d'activer ou de désactiver le mode apprentissage pendant lequel vous pouvez entrer une suite de notes. Quand l'apprentissage est désactivé, c'est le mode performance, on va dire, dans lequel vous pouvez jouer les notes précédemment entrées avec le rythme et l'expression de votre choix. Ça marche aussi à peu près en polyphonie également. Ça fonctionne plutôt bien malgré l'extrême simplicité du modèle et l'ergonomie douteuse (surtout que pd c'est très moche, et c'est vieux, vu que c'est en noir et blanc). J'envisage de faire quelque chose de plus propre et de plus poussé quand j'aurai le temps, peut-être même avec diverses manière de faire l'apprentissage ou la performance (en sifflant, en tapant, ça pourrait être sympa), ou en considérant le fait qu'on peut entrer des accords ou en séparant main gauche/main droite.

Pour celles et ceux que ça peut intéresser, l'idée ne vient pas que des synthés pour enfant avec les touches qui s'illuminent, mais aussi du métapiano, qui est quand même un concept bien plus poussé que je vous encourage à découvrir. Pour les autres, je me demande bien pourquoi vous avez continué à lire jusqu'ici si ça ne vous intéresse pas, vous devez avoir du temps à perdre ! Allez, du vent, du vent !

autonote.pd Download this file

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Mon, 09 Aug 2010 16:56:30 -0700 Chagny is the city where you smile and let it go http://j.oin.name/chagny-is-the-city-where-you-smile-and-let-it http://j.oin.name/chagny-is-the-city-where-you-smile-and-let-it
71150 Chagny (Alternate Take) by Join Listen on Posterous

On va dire que je radote mais il faut bien comprendre qu'étant donnée la popularité de Chagny et le fait que les enfants peuvent écouter, j'ai dû faire une version joyeuse, censurée et encore plus classe de mon précédent morceau, qui était un peu sombre. Dorénavant, selon l'humeur dans laquelle vous vous sentez, vous pourrez soit représenter à la manière d'un PIMP muni d'un médaillon diamanté, de préférence dans votre voiture, soit à la manière d'une personne super contente ! Dans tous les cas, vous avez l'obligation de groover. En bonus, les paroles sont dans le MP3.
Fait exceptionnel, ce bijou du funky style a été coréalisé avec ma sœur Morgane et une mélodie a même été trouvée par mon papa José. Du travail d'équipe (sauf quand il faut y passer plus de deux heures, alors là y'a plus personne) !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno Join - 71150 Chagny (Alternate Take)
Fri, 06 Aug 2010 13:47:00 -0700 Chagny is the city in the place for every ho' http://j.oin.name/chagny-is-the-city-in-the-place-for-every-ho http://j.oin.name/chagny-is-the-city-in-the-place-for-every-ho

Pendant les émeutes mémorables de Chagny la nuit du 6 août, je vous jure que j'étais pas en train de cramer des voitures, j'étais dans mon super snoop-studio avec mes lunettes Dre soleil et ma Cadillac avec suspensions d'enfer, et je faisais ce morceau. In the 7 1 1 5 0, Chagny is the city in the place for every ho' !

(avec la participation exceptionnelle de ma petite sœur, Didi)

71150 Chagny by Join Listen on Posterous

En parlant de Didi, elle a trouvé du courrier pour moi aujourd'hui. Vous en avez quelques photos.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno Join - 71150 Chagny
Thu, 05 Aug 2010 16:04:09 -0700 Deux morceaux en chantier http://j.oin.name/deux-morceaux-en-chantier http://j.oin.name/deux-morceaux-en-chantier
Cette semaine, c'est la fête, alors voici deux bouts de morceaux qui sont actuellement en chantier. Leur état actuel ne reflète peut-être pas du tout ce qu'ils deviendront plus tard, dans la vraie vie. En attendant leur naissance officielle, vous pouvez écouter Cinq Quatre, une chanson a la Scarface Club, ainsi que Dredrelaïtou, qui ne devait pas du tout sonner comme ça (d'ailleurs le titre original, Tralalaïtou, aura peut-être raison de l'ambiance West Coast d'ici peu, qui sait).

Et on ne vous le dira jamais assez : mettez de la crème solaire.

Dredrelaïtou (Incomplet) by Join Listen on Posterous

Cinq Quatre (Incomplet) by Join Listen on Posterous

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno Join - Dredrelaïtou (Incomplet) Join - Cinq Quatre (Incomplet)
Tue, 27 Jul 2010 10:59:57 -0700 Michel Zemel http://j.oin.name/michel-zemel http://j.oin.name/michel-zemel
Michel Zemel by Join Feat. Kosmos Listen on Posterous

Si l'année dernière était l'année de la Rivière Sacrée, cette année le fruit reggaematique de l'inceste musical que je livre quelquefois avec mon frère Kosmos a donné une version reggae quelque peu réarrangée de Michelle des Beatles. En ces temps de lois débilissimes sur la création, le partage et le droit d'auteur, nous nous sommes dits que la meilleure chose à faire était de se mettre du côté des majors en faisant une reprise un peu libre. Les paroles sont incluses dans le MP3 si vous souhaitez vous exercer à parler anglais.
Notez que ce morceau est en tous points supérieur à la version originale, et même à la version reggae de Harper et ses amis, car nous avons fait très attention à bien continuer le travail de ce cher Paul McCartnouille : toute la chanson bénéficie d'un accent ridicule !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno Join Feat. Kosmos - Michel Zemel
Mon, 19 Apr 2010 13:38:00 -0700 Deux scripts pour Xcode http://j.oin.name/deux-scripts-pour-xcode http://j.oin.name/deux-scripts-pour-xcode

Voici deux petits scripts que j'utilise pas mal avec Xcode pour un programme multi-plateforme que je développe avec en C++. Ces petits scripts fonctionnent avec du C et ne cassent pas trois culs à un canard, mais il se peut que j'en trouve d'autres prochainement si le besoin s'en fait sentir.

Quelques petites choses que j'ai trouvées pour l'édition des scripts (on accède à la fenêtre d'édition de scripts via le menu Scripts, qui est représenté sous forme d'une image dans la barre de menu) :

  • pour avoir la sélection courante, utilisez %%%{PBXSelection}%%% dans votre script;
  • pour avoir le fichier courant, utilisez %%%{PBXFilePath}%%% dans votre script;
  • pour insérer des placeholders, qui permettent de marquer les endroits où des choses sont à remplir et d'y naviguer avec la touche de tabulation, utilisez <#nom_du_placeholder#> dans votre script.

Et maintenant, voici deux exemples. Vous pourrez les ajouter dans la fenêtre des scripts grâce au petit bouton + !

Ajouter un commentaire long

Pour une classe, une fonction membre…

#!/bin/sh
    echo -en "/**\n * <#description#>\n */"

Écrire un include guard pour l'en-tête courant

Je sais, ce genre de noms est interdit par le standard. Vous aurez le loisir de modifier le script pour que ça marche.

#!/bin/bash
    NOM_FICHIER="`echo %%%{PBXFilePath}%%% | tr [:lower:] [:upper:] | sed -e s@^.*/@@g -e s/\\\./_/g`"
    echo -en "#ifndef __${NOM_FICHIER}\n#define __${NOM_FICHIER}\n\n<#contenu#>\n\n#endif"

C'est tout, les bébés !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Mon, 05 Apr 2010 09:22:11 -0700 Ouvrir un .nib compilé avec Interface Builder http://j.oin.name/ouvrir-un-nib-compile-avec-interface-builder http://j.oin.name/ouvrir-un-nib-compile-avec-interface-builder Il vous arrivera peut-être dans votre vie de vouloir vous payer le luxe de regarder un peu, pour des raisons strictement pédagogiques, le contenu des fichiers d'interface d'applications commerciales. Ces packages NIB (car ce sont des packages, qui contiennent des fichiers NIB, mais on ouvre les packages) sont une petite mine d'informations qui peuvent vous éclairer sur la manière de faire telle ou telle chose dans une application, la chose en question étant présente dans une application que vous reluquez comme un sale gros bébé voyeur. Lorsque vous tentez d'extraire un NIB d'une application publiée (prenons Finder.app pour l'exemple, et plus précisément son NIB /System/Library/CoreServices/Finder.app/Contents/Resources/English.lproj/PreferencesWindow.nib), et que vous l'ouvrez avec Interface Builder, soudainement votre cœur s'arrête puisque le message suivant se présente à vos yeux emplis de larmes :
Capture_dcran_2010-04-05_11
Ce message peut se traduire en ces termes : tutéféniké. C'est bien votre journée, tiens ! C'était bien le MOMENT de se faire AVOIR comme ça ! Prêt à exploser dans une rage violente et meurtrière, vous prenez le premier insecte venu et vous lui infligez votre regard Scarface, en espérant qu'il ne meure pas de peur tout de suite pour que vous puissiez lâcher complètement votre organe vocal contre le malheureux qui n'a rien fait. Stop, laissez ce lépidoptère à Timon et Pumbaa et lisez plutôt la suite.

Il existe un moyen de récupérer certaines informations sur un NIB déjà compilé comme celui que nous essayons d'ouvrir. Cependant, il n'est pas possible d'utiliser ces NIB tels quels, ils ne serviront qu'à regarder la jolie interface et la hiérarchie des vues, par exemple. Dans une certaine limite, on peut aussi voir des outlets et des actions branchées à des objets inexistants. Mais c'est une bonne base pour regarder un peu comment font les grands.

Il vous faut d'abord un package NIB datant d'Interface Builder 2 pour jouer le rôle d'hôte. Pas de nouveau truc avec des néons flashy, non, on a réellement besoin d'un NIB old-school, prêt à être sacrifié pour la bonne cause. J'en ai trouvé un dans Adium, par exemple ABSearch.nib. Si vous souhaitez chercher par vous-même, alors ouvrez le contenu d'une application, et dans le répertoire Resources/ ou Resources/English.lproj/ seront souvent cachés les NIB qui nous intéressent. Pour savoir si ce fichier convient à nos attentes, ouvrez-le dans Interface Builder, et assurez-vous que vous pouvez bien lire le fichier, qu'il n'est pas compilé et qu'Interface Builder n'est pas encore en train de se foutre de vous. Deuxième vérification, il faut afficher le contenu du package, et constater la présence de trois fichiers : classes.nib, info.nib et keyedobjects.nib. C'est bon, vous les avez ?

Maintenant, nous allons devoir cloner notre NIB hôte, afin de ne pas bousiller l'application originale. Copiez le package dans un endroit que vous choisirez avec soin, et donnez-lui un nom bien significatif, comme jambon. Une fois ceci fait, infiltrez-vous dans le contenu de ce package, et l'opération va commencer.

Nous allons devoir insérer l'esprit du NIB compilé que vous cherchiez à ouvrir dans le NIB hôte, qui n'est qu'une carapace, une coquille vide prête à recevoir une cervelle pour nous. Vous vous sentirez l'âme d'un savant fou procédant à des expériences immorales. Apportez un attention toute particulière au rire de savant fou que vous allez utiliser suite à la réussite de cette opération (allez-y de bon cœur, on est entre amis). Affichez le contenu du package NIB compilé qui vous a fait du tort, puis copiez le fichier keyedobjects.nib de ce package jusqu'au package que nous avons cloné (en remplaçant celui qui existe déjà). 

Notre package jambon peut maintenant être ouvert avec Interface Builder et vous révéler tous ses mystères !

Capture_dcran_2010-04-05_12

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Sat, 13 Mar 2010 10:41:00 -0800 Un aperçu de la prochaine chansonnette http://j.oin.name/un-apercu-de-la-prochaine-chansonnette http://j.oin.name/un-apercu-de-la-prochaine-chansonnette
Un Aperçu De La Prochaine Chansonnette by Join Listen on Posterous

Pour attendre un peu, voici un aperçu de la section rythmique prochaine chansonnette, featuring ma nouvelle basse sans corps.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno Join - Un Aperçu De La Prochaine Chansonnette
Wed, 10 Mar 2010 21:13:00 -0800 Utiliser Xcode pour programmer multiplateforme http://j.oin.name/utiliser-xcode-pour-programmer-multiplateform http://j.oin.name/utiliser-xcode-pour-programmer-multiplateform

Avec un titre pareil, vous devez certainement vous attendre à un baratin qui vous prend pour un(e) nigaud(e) : déjà que vous êtes sur un Mac, pouah, truc de bébé, en plus vous voulez programmer pour devenir un(e) grand(e) qui, et on doit penser que vous savez pas télécharger et installer Xcode même si Xcode c'est pour les gros bébés qui savent pas programmer autrement qu'avec des boutons bleus brillants et des feux tricolores (truc de bébé).

Si vous pensiez cela, vous êtes aussi loin de la vérité que je suis loin de chez moi (notez que ça dépend de la date à laquelle vous me lisez, et je vous conseille de vous dépêcher). J'écris cette petite page pour rapporter un peu mon expérience de Xcode dans un projet qui n'utilise (presque) pas Cocoa, et pour vous montrer comment utiliser Xcode pour vos travaux de développement "ordinaires".

Une histoire dont vous n'êtes pas le héros

Je pense que Xcode a pas mal d'avantages, et je parie que vous en connaissez déjà quelques-uns. L'éditeur est joli, pratique (complétion automatique sympa, code folding...) et intégré à tout le reste (les erreurs sont signalées, par exemple), l'application est légère (alors que mon Netbeans, il est bien sympa mais je crois que j'ai pas dû désactiver l'option qui transforme ma machine en 486) et permet de travailler sur plusieurs projets sans s'arracher les cheveux, ça réagit comme un programme Mac, c'est super génial, tout ça.
Dans le cadre d'un des cours de ma formation universitaire actuelle, à Sherbrooke, il est question d'un projet devant respecter des contraintes temps-réel. C'est pas trop le sujet de discuter temps réel ici, mais c'est juste pour dire que mon cher collègue Gafar (celui qui m'a donné l'idée d'écrire cet article à partir de notre expérience) et moi même avons la chance d'être des gros bébés, et vu que nous devons finaliser une étape importante de notre projet (si injustement nommé Mon piano d'amour) à la fin de cette semaine, nous avons envisagé l'utilisation collaborative de Xcode pour notre projet.
Malheureusement, nous avions peu de temps pour rédiger une sorte de cahier des charges de notre projet, et nous dûmes nous résoudre à utiliser des choses assez proches des enseignements de notre professeur magique, le vénéré Patrice Roy, pourfendeur des mauvaises pratiques, protecteur de la veuve et de l'orphelin, craint dans toute la galaxie, notamment parce qu'il sait lancer des chevrons plus vite que son ombre. Nous nous sommes donc arrêtés sur les choix technologiques suivants : utilisation du langage C++ et des bibliothèques SDL et Portaudio.
Avec ces choix, l'idée de travailler avec Xcode paraissait impossible. Et pourtant, la disponibilité d'un modèle de projet Xcode pour SDL m'a redonné la confiance que je semblais avoir perdu à jamais ! Le codage pouvait être envisagé avec Xcode, et il y avait même mieux puisque cet environnement de développement permet de travailler avec un système de gestion de versions comme SVN, ce qui permet d'accélérer le travail !
Nous sommes d'abord parvenus à faire deux ou trois unités de compilation de manière totalement désorganisée, sans plan, et nous avons pensé à un truc : le prof, aussi cool soit-il, il trouve vim dépassé, mais ça on s'en fout, et pire encore, il n'a pas Mac OS X ! Et il aimerait bien pouvoir jouer avec son piano d'amour lundi prochain... Nous avons donc cherché à gérer une structure qui puisse être multiplateforme et bien organisée. Nous avons trouvé : les fichiers spécifiques à OS X sont bien rangés, tout comme ce qui est spécifique aux autres plateformes, et ce qui est commun est rangé à une place commune.

Vous pouvez recommencer à lire à partir d'ici

On va donc voir comment procéder pour mettre en place un projet multiplateforme qu'on peut développer avec Xcode.

Configuration de Xcode

Je vous conseille d'abord de faire un petit changement dans votre configuration de Xcode. Ce changement concerne l'endroit où seront stockés les résultats de la compilation de toutes vos applications : il vaut mieux garder ces builds très volumineux en dehors des répertoires des projets, car cela permet de ne pas polluer le projet et alourdir le répertoire qui le contient. La configuration de cet endroit se fait dans les préférences de Xcode au rayon Building (à ne pas confondre avec les immeubles du même nom).

Pasted_graphic

 

C'est plus pratique lorsqu'on utilise un système de gestion de versions, par exemple, et qu'on est amené à souvent mettre à jour les fichiers concernés par un projet, et de manière générale ça permet de pouvoir éliminer tous ces produits de compilation intermédiaire en une fois !

Montage du squelette

Avant toute chose, prenons un répertoire bien vide, affublé d'un nom évoquant le projet à réaliser. À tout hasard, je suggère "monpianodamour". Assurons-nous qu'il ait une structure assez commune. Je propose de créer un répertoire par plateforme prévue : windows, linux, macosx (vous êtes libre d'en rajouter ou d'en enlever). Ces répertoires accueilleront tout ce qui est spécifique à une plateforme (cela peut être du code d'initialisation, des trucs pas vraiment jolis...). Dans le même niveau d'arborescence, on rajoutera des répertoires pour les choses communes à toutes les plateformes (donc le maximum de choses) : src (sources) et ressources (images, sons...).

Création du projet Xcode

Nous allons prendre un exemple bien particulier, mais doutez-vous bien que la création du projet Xcode fonctionnera avec n'importe quel type de modèle de projet, même le modèle vide (que vous aurez d'ailleurs plus de facilités à remplir de bonnes choses).
On va dire que SDL est installé, et qu'on crée un projet sur le modèle SDL Application. Une fois le projet créé dans le répertoire macosx/ de notre structure, on peut commencer à régler les préférences du projet (je pense à des choses comme la version du SDK de destination, ou la version de Xcode à utiliser, pour être sûr de la compatibilité du projet avec vos collaborateurs qui ont sûrement oublié de vous dire qu'ils étaient encore sur Leopard, par exemple...) ainsi que celles de l'application Cocoa (comme l'icône, la version, entre autres, si application il y a, et c'est le cas pour le modèle fourni par les développeurs de SDL). Il faudra peut-être ensuite déplacer certains fichiers. Ici, vu qu'on a affaire à une application SDL (les développeurs ont mis au point ce qu'il faut pour que l'application tourne sur Mac OS X en séparant tout de façon à ce que vous n'ayez pas besoin de faire de l'Objective-C), il faut déplacer le fichier main.c vers le répertoire des sources communes, et pourquoi pas le changer un peu pour en faire une source C++ respectant le standard. On a donc la hiérarchie suivante :
monpianodamour/
        macosx/
                English.lproj
                Icone.icns
                Info.plist
                monpianodamour.xcodeproj
                monpianodamour_Prefix.pch
                SDLMain.h
                SDLMain.m
        ressources/
        src/
                main.cpp
Il va maintenant falloir s'assurer d'organiser les groupes du projet (la liste à gauche dans la fenêtre du projet) afin qu'ils correspondent aux répertoires créés. Pour cela, vous n'avez qu'à créer des groupes et ajuster leurs propriétés afin qu'ils pointent vers les répertoires qu'ils désignent. Ainsi, tout fichier ajouté à un groupe ira à la bonne place dans la hiérarchie du projet, et c'est bien mieux ainsi !

Création du dépôt

Il faut qu'un serveur accueille le dépotoir que vous allez créer. Ici, par exemple, on a choisi Google Code, qui donne accès à un SVN. La page de création d'un projet est un peu galère à trouver, mais une fois que c'est fait, c'est le bonheur. Nous avons donc paramétré le projet Google Code et récupéré certaines informations afin de pouvoir utiliser le SVN.

Configuration du dépôt dans Xcode

Allons dans les préférences de notre petit Xcode chéri, au rayon SCM, car c'est là que sont indexés tous les dépôts que Xcode aura à gérer dans sa petite vie. Une fois entré dedans, rajoutons un dépôt (repository) et choisissons le nom et le système de gestion de versions qui correspond. Ici on a un SVN, et de toute façon Xcode ne propose pas 50 choix alors je doute que le vôtre sera différent.

Pasted_graphic_1

Une fois le dépôt ajouté, ajustons tranquillement les paramètres de connexion conformément aux infos que nous avons récupéré. Pour Google Code, le mot de passe à utiliser est dans votre page des préférences, il a une tête un peu bizarre. Lorsque Xcode est "Authenticated", c'est que tout roule, et que l'on est dans l'bestiau. Un détour par l'onglet Options nous permettra de vérifier que la case Configure SCM automatically est bien cochée. La copie d'écran ci-dessous permet de vous aider à remplir les cases. J'ai enlevé deux ou trois infos personnelles, rajouté des flèches mais il me semble que des petits voyous ont vandalisé ma capture d'écran ! On les retrouvera, va. 

Alors, heureuse ?

Ben oui, quoi ! C'est fait ! Quoi ? Vous attendez encore quelque chose ? Il vous manque peut-être le lien entre la super structure que vous avez préparé et le super dépôt auquel vous êtes maintenant connecté(e). Pas de panique.
Déjà, allez dans la fenêtre d'informations de votre projet, et assurez-vous de configurer ce que Xcode appelle Roots & SCM. Il s'agit de dire à Xcode que votre projet est en lien avec un SCM qu'il a enregistré, en précisant quel répertoire est la racine. Donc sur Xcode 3.2, une fois que vous avez cliqué sur Configure Roots & SCM, vous rajoutez un répertoire, et il faut que ce soit la racine de votre projet (pas monpianodamour/macosx/ mais monpianodamour/). Ce répertoire sera lié au SCM Monpianodamour que vous venez de rajouter.
Si Xcode n'importe déjà pas tout le projet comme un grand, on va le faire nous mêmes. Allez dans le menu SCM > Repositories afin d'accéder à la fenêtre des dépôts. Vous allez maintenant ajouter votre projet au dépôt, grâce au bouton de barre d'outils nommé Import. Choisissez le répertoire racine du projet (nommé monpianodamour, il s'entend), et rajoutez un petit commentaire du style : "Première révision, coucou maman je passe sur internet". Une fois votre importation réussie, vous pouvez être content(e) de vous, car vous avez fini.

De l'autre côté de la porte des étoiles

Vos collègues, eux, ils ont encore quelques petites étapes à accomplir. Ils doivent configurer Xcode comme je l'ai conseillé et rajouter le SCM avec leurs identifiants. Ensuite, ils pourront aller dans la fenêtre des dépôts, sélectionner le répertoire racine du projet et cliquer vaillamment sur Checkout afin d'extraire la révision courante du dépôt. Qu'ils l'enregistrent où ils le souhaitent. Une fois le répertoire rapatrié, il faudra qu'ils aillent ouvrir le projet Xcode situé dans macosx/ et ils pourront alors commencer à travailler, en s'assurant de faire des Commit pour soumettre leur travail, et des mises à jour pour récupérer les dernières versions des dépôts. Xcode inclut ce qu'il faut pour gérer les conflits de version et tout le bazar. Les collègues précautionneux prendront bien soin d'aller vérifier si le projet récupéré est bien relié au SCM qu'ils ont configuré, parce que sinon, ils ne peuvent pas participer à l'orgie de commits que vous leur aviez promis.
Vous pouvez donc maintenant utiliser Xcode pour des projets quelconques et collaborer à plusieurs sans quitter votre IDE préféré. Bien sûr, ce que j'ai montré n'était qu'un petit exemple, à vous de l'adapter à votre cas de figure...
...gros bébé :)

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Thu, 18 Feb 2010 17:53:00 -0800 Renouez avec les CLI récalcitrantes http://j.oin.name/renouez-avec-les-cli-recalcitrantes http://j.oin.name/renouez-avec-les-cli-recalcitrantes
Vous connaissez probablement ce problème. Oh oui, vous le connaissez ! Vous utilisez parfois un émulateur de terminal (comme xterm, *term, gnome-terminal, Konsole ou Terminal.app) et vous savez mettre à profit les petits raccourcis du shell, comme la flèche vers le haut pour naviguer dans l'historique, Ctrl+R pour chercher dans cet historique, les touches Début (ou Ctrl+A), Fin (ou Ctrl+e), flèche gauche et flèche droite pour vous déplacer dans la commande actuelle...
Vous savez aussi que sans ces touches le fait de taper dans une CLI (Command Line Interface) est une vraie baguette dans le cul. Et certains programmes ne se gênent pas pour vous le rappeler. Oui, beaucoup de programmes ont la fâcheuse tendance à ne pas proposer tous ces petits raccourcis sympathiques. Lorsque l'entrée standard est lue, par exemple, elle l'est de manière brute, donc adieu les raccourcis d'amour. Pour vous en convaincre, je vous invite à essayer juste l'entrée standard toute simple :
$ cat
pouet
pouet
ah ouais
ah ouais
^[[D^[[A^[[B^[[Cok   
 ok
^[^[^[^[
pourquoi ça marche pas ctrl+c????????
pourquoi ça marche pas ctrl+c????????
arrête de répéter ce que je dis
arrête de répéter ce que je dis
je suis un idiot
je suis un idiot
raaaah mais arrête !
raaaah mais arrête !
Alors, ça vous casse les bonbons ou quoi ? Si vous avez déjà fermé violemment votre émulateur de terminal, je vous rappelle que vous pouviez utiliser Ctrl+D pour fermer l'entrée standard. Voilà, vous êtes en rogne.
Heureusement il existe un programme qui vous permettra d'adorer à nouveau la ligne de commande, puisqu'il fonctionne avec quasiment toutes les CLI.

Le coupable

Il s'agit bien évidemment de rlwrap, un magnifique programme qui se contente d'utiliser readline lorsqu'il faut utiliser l'entrée standard. Ce truc bizarre nommé readline est une librairie GNU qui est responsable de tous les trucs que vous aimez bien dans le shell, c'est-à-dire les raccourcis-clavier, l'historique... En gros, si vous invoquez rlwrap en passant en argument le programme dont les mécanismes d'entrée vous hachent les bourses en petites lamelles (je pense en premier à ocaml ou sqlplus...), vous disposerez du même programme mais avec tous les petits raccourcis qui font votre bonheur !

Catwoman

Testons le comportement de rlwrap avec un programme très simple, cat, qui, lorsqu'il est appelé nature (comme les yaourts nature), recopie l'entrée sur la sortie. Nous n'allons pas revivre l'expérience humiliante de cat tout seul, alors regardons-le à l'œuvre avec sa super modification laser :
$ rlwrap cat
pouet
pouet
ah ouais
ah ouais
ah ouaisok
ah ouaisok
(reverse-i-search)`': ah ouais
Bon, je pense que vous avez compris, je ne vous fournis pas plus d'explications, car je sens que vous mourrez d'envie d'aller utiliser rlwrap en courant dans les champs !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Thu, 18 Feb 2010 17:26:00 -0800 Stocker automatiquement une jointure dans une table http://j.oin.name/stocker-automatiquement-une-jointure-dans-une http://j.oin.name/stocker-automatiquement-une-jointure-dans-une

Une fois n'est pas coutume, j'attire votre attention sur un petit truc tordu à destination des gens qui ont le malheur de toucher à Oracle.

Imaginez-vous avec deux tables R et S dont vous voulez stocker la jointure sur la condition R.aR = S.aS dans une table. Soit, faites-le avec un soupçon de... ceci ?
CREATE TABLE jointurez AS
        SELECT * FROM R, S
        WHERE R.a = S.b;
Il se trouve qu'il existe des cas dans lesquels vous adoreriez que ça marche, mais là où ça ne marche pas. Le cas typique, c'est quand la table R contient un champ de nom pouet, que S contient lui aussi ce champ, mais que vous ne faites pas la jointure sur ces champs ! Dans ce cas, si la sélection à elle seule marche bien, la table ne se créera jamais car le SGBD ne peut pas aplanir les résultats dans une table : il échoue avec l'erreur "y'a deux champs qu'ont l'même nom, ventrebleu" (erreur ORA-666).
Le problème est que si vous pouvez renommer les attributs du même nom de manière à ce qu'il n'y ait pas de conflit, vous ne pouvez sûrement pas le faire de manière automatique (dans un script, dans une application, dans un rêve que vous ne contrôlez pas directement...).
La solution malpropre est de créer une vue intermédiaire qui accueillera le résultat de la jointure, puis de créer la table qu'on voulait comme une sélection d'autant de colonnes que vous voulez de la vue intermédiaire. Ensuite vous pouvez dire au revoir à votre vue.
CREATE OR REPLACE VIEW temporaire AS
        SELECT * FROM R,S
        WHERE R.a = S.b;
CREATE TABLE jointurez AS 
        SELECT * FROM temporaire;
DROP VIEW temporaire;
Hé oui, ça paraît bizarre mais ça marche parfaitement !
Je ne vous conseille tout de même pas d'utiliser cette astuce si votre vie en dépend. En tous cas, je ne suis pas responsable de ce qui pourrait arriver.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Fri, 15 Jan 2010 12:24:54 -0800 Les révisions commencent... http://j.oin.name/les-revisions-commencent http://j.oin.name/les-revisions-commencent C'est le moment des révisions qui commence...

Photo_du_55349258-01-_15

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Mon, 04 Jan 2010 11:39:09 -0800 Photo souvenir du Canada http://j.oin.name/photo-souvenir-du-canada http://j.oin.name/photo-souvenir-du-canada Do you like them ?

Dscf5185

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Sun, 27 Dec 2009 08:41:44 -0800 Cacher son adresse mail avec Tinyurl http://j.oin.name/cacher-son-adresse-mail-avec-tinyurl http://j.oin.name/cacher-son-adresse-mail-avec-tinyurl Cette nuit, lorsque j'étais en train de fixer l'apparence style Louis-XIV sur ce nouveau site au lieu de dormir paisiblement, je me suis attardé sur le lien Contact que vous voyez en haut à gauche. En effet, mon site de départ, fait de mes mains avec CakePHP et tout fonctionnel qu'il était, proposait un lien de contact que je pensais réaliser à l'aide d'un formulaire pour éviter les spam. Évidemment, avec Posterous, c'est possible d'intégrer un formulaire de contact en bidouillant le thème et en faisant pointer le formulaire vers une application logée sur un serveur, mais est-ce bien raisonnable de proposer ce type de contact froid digne d'un site de compagnie aérienne (je dis ça parce que j'ai dû en contacter une récemment) alors qu'on s'apprête à vanter les mérites du système Posterous ? Bien sûr que non.
Et voici la solution pour proposer son adresse mail aux lecteurs en se mettant un peu à l'abri du spam, et en ne condamnant pas les lecteurs à devoir réécrire mon adresse mail parce que je l'affiche comme ceci : adresseAT_ENLEVEZ_CE_AT_CEST_AU_MOINS_CA_QUE_LES_SPAMMEURS_NAURONT_PASserveur.com. Par ailleurs, envoyer un mail étant gratuit, je doute de l'efficacité de cette méthode : un robot collecteur d'adresses pour le spam peut très bien tester toutes les expressions régulières qu'il veut sur les adresses potentielles qu'il trouve, ça ne coûte pas plus cher d'envoyer un mail à une adresse inexistante quand on fait du spam. Alors je ne vais pas vous faire patienter, puisque vous connaissez déjà la solution que j'ai trouvée, c'est marqué dans le titre du post. Je me suis dit que ce serait une bonne idée mais j'ai du me documenter un peu sur la manière dont les url-shorteners (c'est le nom qu'on donne à ce genre de sites) fonctionnaient. En effet, j'avais d'abord essayé de faire ça avec bit.ly, mais ma foi, ça n'a pas fonctionné car ce n'est pas une adresse mail : ça me renvoyait vers un site quoi qu'il arrive. Heureusement, tinyurl est moins regardant sur le contenu et m'a permis de faire un lien vers mailto:adresse@serveur.com.
Maintenant, vous vous demandez comment j'ai bien pu bien choper une adresse chez serveur.com ! Si vous trouvez la réponse, n'hésitez pas à m'en informer.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Sat, 26 Dec 2009 20:52:00 -0800 Adieu la presse internationale, bonjour la poste russe ! http://j.oin.name/adieu-la-presse-internationale-bonjour-la-pos http://j.oin.name/adieu-la-presse-internationale-bonjour-la-pos

Ce site se voit totalement chamboulé : en effet, j'ai arrêté Wordpress parce que c'est trop compliqué (je ne passe pas ma vie à blogger) et aussi parce que j'ai trouvé plus marrant. Ce site est maintenant hébergé par Posterous, un service gratuit de lifecasting, petit mot inventé par les gens qui perdent leur temps sur le web pour signifier un genre de diffusion de contenu entre le microblogging à la Twitter et le blogging lourd.

Pour faire court, l'intérêt de ce service est le suivant : vous envoyez un mail à post@posterous.com et vous avez créé le premier post de votre blog. Bien sûr, c'est fait pour abriter des petits messages au contenu hétéroclite, comme tumblr, et pas des gros articles avec cent mille fonctionnalités à rallonge du futur. C'est une plate-forme très simple et je pense qu'elle est très adaptée à mon fonctionnement et à mes exigences. Par rapport à mes objectifs d'origine pour ce site, c'est le pied : je voulais pouvoir diffuser simplement ma musique, et là il suffit que j'envoie un article avec mon MP3 en pièce jointe et j'ai mon nouvel article ! Magnifique ! De plus, je peinais auparavant pour rajouter simplement des images avec Wordpress, et je déteste les interfaces web qui sont toutes mal foutues pour faire de l'édition (d'ailleurs peut-être que j'aurai le temps d'écrire un post avec mes réflexions sur les interfaces des logiciels et des services web, ou un truc plus général, avec le questionnement suivant : pourquoi ils se font tous chier à recréer des interfaces qui du coup réagissent pas pareil ? C'est vrai, une sur le client, ça suffirait, et les services web ne seraient plus que des processeurs de contenu, ce qui faciliterait plein de choses) (mais aussi pourquoi les notes de bas de page n'existent pas en HTML ?) (je parie que là vous avez perdu le fil de ma phrase), et ce cher Posterous propose d'utiliser son client mail préféré (et donc, en ce qui me concerne, tous les avantages de Mac OS X pour la création de documents riches et la manipulation de fichiers via Mail.app) pour rédiger ses articles. Je crie au génie (calembour froid), pour une fois que quelque chose d'intelligent sort d'une des milliers de start-ups états-uniennes qui inventent des services à tire-larigot ! Certains me diront que Blogger, Wordpress et autres le font, oui, mais étant donné que c'est le cheval de bataille de Posterous, il est optimisé pour cet usage et propose des dizaines de petits trucs sympas comme la création d'une galerie photo et d'une option "Diaporama" lorsqu'on ajoute plus d'une photo dans son mail, la transformation de liens vers un service web en contenu du service web (par exemple, faites un lien Google Maps) et j'en passe... Leur blog est fourni en petits conseils magiques.
Cependant j'ai déjà remarqué quelques défauts :
  • la fonction d'édition avancée du thème est assez rudimentaire (et leur module d'édition de texte est un pain dans les fesses), le manuel pas assez explicite, et quelques petites erreurs de syntaxe peuvent vite vous laisser devant une page qui met des années à charger, alors que d'autres sont détectées tout de suite. Mais même lorsque ces erreurs sont tout de suite détectées c'est le moteur de templates liquid qui fait le sermon. Ben alors les start-uppers, on s'relâche ou quoi ? Au passage, ça m'aura permis de remarquer que Posterous est fait de Ruby on Rails. Piece of cake !
  • la fonction d'importation depuis un blog Wordpress marche bien, sauf pour les images en vignettes et la balise more : si vous utilisiez cette dernière alors enlevez-la de tous vos articles avant l'importation, car le programme d'importation n'ira jamais au-delà.
  • le système pour utiliser un nom de domaine personnalisé a l'air un peu foireux, et vous le remarquez peut-être quand vous naviguez : c'est un peu lent et ça fait des millions d'aller-retours.
Bien sûr, ce sont des problèmes mineurs !
J'ai eu un moment d'hésitation avant d'entreprendre un assez long travail de création d'un thème Posterous (et si vous jetez un œil au code source vous constaterez que ça tient à peine debout) en reprenant l'interface de mon site hybride d'origine, dont je parle dans le premier post. Les anciens posts, au passage, ne sont pas perdus et les permaliens d'avant seront redirigés vers le nouveau site au bon endroit. Donc j'ai hésité entre laisser le thème par défaut, clair et robuste, ou implanter l'interface style Louis-XIV, faiblement contrastée et peu agréable à l'œil, que j'avais créée dans l'intention d'en vêtir mon nouveau site mort-né qui, vous l'avez compris, s'est transformé en blog Wordpress puis en ce site Posterous. Ainsi, pour boucler la boucle, je m'y suis mis, et là il va être six heures du matin et je vois des étoiles. Et si cette apparence vous gêne pour lire, décollez un peu de votre écran, ça vous fera du bien :) !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Thu, 03 Dec 2009 19:05:19 -0800 Liste de lecture du moment http://j.oin.name/liste-de-lecture-du-moment-7 http://j.oin.name/liste-de-lecture-du-moment-7 Quelques noms à trouver...
  • Casiopea, jazz-rock japonais (oui ça fait la différence)
  • 4Front, metal progressif
  • Jamiroquai, au moins les trois premiers albums qui sont inimitables
  • K2r Riddim, l'album Appel d'R (reggae) qui est musicalement et vocalement rafraîchissant
  • The Abyssinians, l'album Forward on to Zion (reggae)
  • Dr Dre et son premier album The Chronic (hip-hop)
  • Sixun, groupe français de jazz-rock assez "ethnique" (prenez l'album Nomad's Land, j'aime bien la piste Djou Djou)
  • Et un petit peu de japonais pour la route, jazz-rock aussi mais très moderne : Machine
Lorsque j'aurai le temps, je ferai un petit article sur notre périple avec Paul sur un projet d'informatique où nous avons choisi d'utiliser le langage Objective Caml et de l'interfacer dans une page web garnie d'effets grâce à Prototype et Scriptaculous. L'article intéresserait les gens qui se questionnent sur la possibilité d'utiliser Objective Caml dans une page web, les gens qui se questionnent sur ce qu'on peut faire avec les libraires Prototype et Scriptaculous, et les gens qui sont intéressés par des choses bizarres Sinon je ferai un article sur un truc un peu moins complexe et chiant, mais je n'ai pas beaucoup de temps pour m'abandonner à des plaisirs simples qui ne concernent pas l'Université. On verra quand je serai parti au Canada !

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Sun, 22 Nov 2009 12:34:14 -0800 Georges Abitbol s'invite dans vos documents LaTeX ! http://j.oin.name/georges-abitbol-sinvite-dans-vos-documents-la-1 http://j.oin.name/georges-abitbol-sinvite-dans-vos-documents-la-1 Si, comme moi, vous êtes pointilleux(se) sur l'apparence de vos documents, car, entre autres, vous avez toujours compté sur la poudre aux yeux pour donner du poids à vos travaux, alors vous apprécierez peut-être ce qui suit. Lors du dernier mois, j'ai essayé de vivre avec quelques logiciels de traitement de texte pour savoir quelle était la manière la plus flexible (le prix n'entre pas en ligne de compte) et la plus simple pour éditer des documents tout en conservant un style personnel. Allons droit au but : c'est dans les descendants de TeX que j'ai trouvé mon bonheur. J'ai même réussi à capturer ce dernier dans une classe de document que vous pourrez adapter et réutiliser pour vos propres travaux sans aucun effort.

Un aperçu des logiciels de traitement de texte

Pour commencer, voici le résultat de ma petit enquête. Je ne prétendrai pas être exhaustif dans ce billet, mais je vais juste rapporter les choses que j'ai remarquées. J'ai testé :
  • le trivial Microsoft Word 2008 qui m'a étonné par son apparence très similaire aux programmes Mac. Ce logiciel aurait pu être agréable s'il n'avait pas été vraiment lourdingue, même sur une machine puissante. Ce n'est pas ce que je recherche dans un logiciel qui me sert juste à produire des documents. Ceci dit, il possède pas mal de fonctionnalités intéressantes pour la mise en page (un peu comme son pire ennemi de chez Apple).
  • le foudroyant Nisus Writer, dont la rapidité n'a pas été égalée parmi les programmes WYSIWYG sous Mac pour un tel foisonnement de fonctionnalités. La gestion des styles est très bien faite mais les possibilités de gestion des images sont limitées. Nisus Writer est très adapté pour de gros documents où le style est secondaire. De plus, il possède la fonctionnalité LinkBack (en même temps ça doit être eux qui l'ont inventée), ce qui est assurément un plus pour la cohabitation entre le logiciel de traitement de texte et d'autres logiciels, par exemple un truc pour faire des schémas comme l'excellent OmniGraffle.
  • le sublime Pages d'Apple, qui recèle de fonctionnalités intéressantes et qui est parfait pour qui aime bien s'attarder sur l'apparence de son document, avec sa conception hybride mi-traitement de texte, mi-PAO. Je n'en dirai pas plus, il est super cool.
  • le vieux OpenOffice.org Writer qui, malgré les nouvelles améliorations apportées par les nouvelles version, ne gère que très mal les images venant de l'extérieur et sa gestion des styles d'objet est pitoyable. De manière générale, en plus d'être lent sur toutes les plateformes, c'est une plaie à utiliser. Cependant c'est ce que je conseillerais pour des gens qui ne veulent pas se prendre la tête et rester avec un logiciel qui fait son boulot et qui, ce qui n'est pas négligeable, est libre. C'est ce qui se fait de mieux sur Linux et probablement sur Windows (avec Koffice).
J'ai bien sûr éclipsé les Abiword, Bean et tout, qui n'ont pas été présentés ici parce qu'ils sont moins connus, mais qui sont de très bons programmes. Un autre programme que j'ai éclipsé de la liste est un outil très vieux nommé TeX qui est l'équivalent d'un langage de programmation pour la conception de documents. Je l'ai utilisé plusieurs fois pour divers travaux (la première fois remonte à mon rapport de stage en 4e) mais je n'avais jamais considéré de l'employer pour faire des choses tape-à-l'œil. Certes, la présentation par défaut est déjà assez classe, mais quand vous lisez toutes les semaines des documents de sources différentes produits par LaTeX, dont la moitié apparaissent flous sur mon lecteur de PDF, vous en avez un peu marre de la famille Computer Modern. Quels sont donc les avantages à utiliser LaTeX au lieu de Pages, par exemple, pour produire des documents jolis tels que cette annexe de rapport de projet universitaire ?

Utilisation des styles

Qu'est-ce que c'est un style ?

Un point non négligeable de l'édition de documents de plusieurs pages est l'utilisation des styles, qui permettent d'appliquer des propriétés prédéfinies sur des éléments du texte. Dans les traitements de texte classiques, ainsi que dans LaTeX, au vu de son fonctionnement, les choses qui s'apparentent à des styles sont des jeux de propriétés (ou des bêtes commandes, pour LaTeX) qui ne renferment aucune donnée sémantique (comme en HTML par exemple où les titres h1, h2 et j'vais pas les faire tous ont une signification pour la structure du document), mais qui régissent la présentation. Evidemment, le fait qu'il puisse y avoir des marqueurs ou des numérotations permet d'indiquer au logiciel de traitement de texte quels éléments rajouter à la table des matières, mais cela n'a jamais fait figure de sens : les styles n'ont de sens que pour vous, et en WYSIWYG, difficile . Soit ! Mon rêve d'un traitement du texte basé sur HTML et un CSS adapté au papier attendra encore, mais que prendre comme substitut ?

Là où LaTeX gagne : le fond et la forme

Les personnes initiées au traitement de documents savent qu'il est nécessaire, comme dans le web, de séparer le contenu et la présentation, pour que l'écriture soit plus efficace (pas besoin de s'attarder sur les détails de la présentation) et la présentation plus flexible (on peut changer plus tard la façon dont les titres sont présentés, et un changement sur le style modifie automatiquement tous les titres). Je vous conseille dès maintenant de continuer la lecture de cet article en écoutant l'album de Fabe intitulé Le fond et la forme, histoire de vous mettre dans le bain. La séparation du fond et de la forme est facile, même dans un traitement de texte classique : il suffit de définir des styles dans son document (par exemple, un style de caractère pour signifier une accentuation, qui sera matérialisée par la mise en italique des caractères), et de les appliquer où ça a du sens. Sauf que l'utilisation des styles est tout bonnement limitée par les capacités du logiciel à gérer les styles. Et sur ce point, il n'y en a pas un pour rattraper l'autre ! Tant qu'on reste dans les styles appliqués sur un texte (c'est-à-dire 80% de l'utilisation de styles mais bien souvent la seule possible dans un logiciel WYSIWYG), le principal est là, mais le "superflu" (pourtant nécessaire pour avoir un style farfelu), repassez plus tard. Il n'est, en général, pas possible d'appliquer absolument tout ce que vous mettez sur un texte dans un style, car quelques fonctionnalités n'ont pas été pensées comme des attributs de style. Pourtant ces fonctionnalités sont uniquement des éléments de présentation. Je pense à la manière de rajouter des numérotations aux titres avec Pages, par exemple, mais vous trouverez bien vous-même un jour les limites de votre traitement de texte. Et pour les styles sur une figure, un cadre de texte, une image, un objet quelconque, n'y pensez même pas. Pages, à ce niveau, permet uniquement de mémoriser le style comme style par défaut, ce qui est souvent très peu pratique car toutes les figures ou cadres de texte n'ont pas la même signification. Quel pain dans le cul (pardonnez-moi cette mauvaise traduction tellement marrante) de ne faire ne serait-ce qu'un cadre autour d'un paragraphe de texte ! Pour faire ce que vous avez envie de faire, il vous faut alors entraver la règle magique de séparation du fond et de la forme, et vous récoltez d'un coup tous les inconvénients de ne pas utiliser cette règle, et vous perdez des journées entières de travail. Voilà où nous mène le WYSIWYG, actuellement. Notons que ce n'est pas un défaut inhérent au WYSIWYG, mais à l'ensemble des logiciels de traitement de texte WYSIWYG. Développeurs du monde entier, voici un challenge à relever ! Bref, me voilà bien emmerdé, à pointer du doigt une limite des traitements de texte qui ne sont, de plus, pas vraiment faits pour ça (quoique rien ne l'empêcherait). Surtout que si vous avez un peu l'esprit critique, vous vous direz que la présentation avancée rentre plutôt dans le domaine de la PAO et que pour faire un document super stylé, il faut faire ça en deux étapes : d'abord écrire son texte avec des styles, puis ensuite le mettre en page avec toutes les fioritures. Mais moi je suis comme ça, je veux le beurre et l'argent de la crémière. Et je crois que j'ai trouvé comment l'avoir. C'est un peu technique, mais ça marche. Et en plus, c'est libre !

Le vrai article commence ici

Désolé d'avoir étalé quelques lignes de réflexions insensées avant de commencer, mais j'aime bien expliquer ce qui fait que j'en suis arrivé là. Nous allons donc avoir besoin des choses suivantes :
  • une distribution LaTeX installée, qui normalement contient tout ce qu'il faut, même XeLaTeX et TikZ. Il y a MiKTeX pour Windows, Texlive pour Linux et MacTeX pour Mac
  • XeLaTeX et les packages courants (fontspec surtout)
  • PGF et son ami TikZ
  • une connaissance de base de LaTeX, parce que j'vais pas m'amuser à réexpliquer tout depuis le début, il existe énormément de documents dans toutes les langues du monde qui expliquent très bien comment produire des documents avec LaTeX
Une fois que tout ça est installé, alors faisons un peu de théorie.

Une arme à double tranchant

Si LaTeX permet à l'utilisateur de réaliser son rêve de ne s'occuper que d'écrire sans se soucier de la mise en forme que le logiciel optimise tout seul comme un grand, il n'y a aucun garde-fou (tant mieux) pour remettre l'utilisateur dans le droit chemin. C'est comme ça avec UNIX en général et c'est à l'utilisateur de maîtriser et de se rendre compte de son utilisation du système. Je dis ça parce que je vois souvent des gens qui, mécontents de la présentation que fait LaTeX, vont se mettre, trop peu souvent après avoir écrit leur texte mais plutôt en plein pendant qu'ils écrivent, à fignoler des détails comme le placement de flottants ou de tels ou tels détails qui ne leur plaisent pas. Ceci aboutit à du code tristement moche, à des redéfinitions hasardeuses, et au même genre de pain dans l'cul que les utilisateurs de traitement de texte WYSIWYG : on perd l'avantage de la séparation. C'est une situation que vous avez déjà sûrement vécue, et que moi-même j'ai vécue, et qui soulève une vérité fondamentale : il faut savoir ce qu'on veut ! Ainsi, pour bien faire et éviter le plus possible de perdre du temps à l'avenir, au lieu de bidouiller sans arrêt, lisez la doc des packages et regroupez tout dans des packages ou des classes de document ! Faites en sorte que toute modification de la présentation qui peut être amenée à se répéter soit enregistrée où il faut.

Exemple flagrant

Si ça vous paraît flou, voici un exemple flagrant. Le mec, il veut que tous ses titres ils soient en italique. Il n'a pas le temps de lire un peu de doc. Alors il fait quoi, le mec ? Il fait ça :
\section{\textit{Une section}}
Bien, mais après, il voit que ça apparaît en italique dans la table des matières, alors il décide de s'y prendre autrement en écrivant manuellement le titre puis en l'ajoutant manuellement à la table des matières (il lit un peu de doc) :
{\Large\textit{Une section}}
\addcontentsline{toc}{section}{Une section}
Le mec il est content, ça marche, mais c'est un peu long d'y penser à chaque fois, de marquer deux fois le titre et surtout c'est illisible, même en aérant. Ce n'est pas concis ! Il se dit donc qu'il va faire une commande, et après avoir lu pas mal de doc il pond ceci dans le préambule :
\newcommand{\masection}[1]{
 {\Large\textit{#1}}
 \addcontentsline{toc}{section}{#1}
}
Il peut donc faire des sections en faisant uniquement :
\masection{Une section}
Et il se dit qu'il retrouve tous les avantages de la séparation du fond et de la forme. Un peu plus tard, il décide d'employer le package hyperref qui permet de faire des liens dans un PDF, ou il décide de faire des références à ses sections dans son texte. Et là il se rend compte que vu que ses sections personnalisées ne sont pas des vraies sections, il ne pourra pas utiliser ces fonctionnalités à moins de passer des heures sur la doc pour rendre sa section compatible avec ces packages. Et là il s'exclame : "Ah putain, c'est de la merde LaTeX, je vais de ce pas retrouver mon Word chéri". Vous voyez un peu ce que vous avez fait ?

Et pourtant, ça commence par un P

Et pourtant, la solution était si simple. Il suffisait de chercher un peu pour voir que le package titlesec permettait de personnaliser les titres, et que deux lignes permettaient d'obtenir une solution très propre et qui reste compatible avec tous les packages :
\usepackage{titlesec}
\titleformat*{\section}{\itshape}
Vous me direz, il faut y penser. Et moi je vous dis, retenez bien ce que je vais vous dire, j'vous dis !

"Patron, patron !"

Respectez le plus possible la séparation fond/forme et modifiez les commandes éprouvées par 25 ans de tradition au lieu de réinventer la roue. Evidemment, les commandes \section ou \chapter ne sont pas des commandes prédéfinies de LaTeX mais des commandes des classes de document les plus utilisées, comme article ou report. Le fait est qu'au fil du temps les utilisateurs ont sorti des packages permettant de rajouter des fonctionnalités sur les objets LaTeX les plus connus. Il serait bête de ne pas en profiter, non ?

"Quoi, vous voulez me dire que Georges Abitbol vient de sortir de mon bureau ?"

Nous allons maintenant mettre en application ces principes pour essayer de s'approcher un peu plus de la classe américaine tout en gardant tous les avantages de LaTeX. La première chose à considérer est le fait suivant : LaTeX et les polices, c'est pas le couple de l'année. En effet, si les polices fournies avec la plupart des distributions LaTeX pètent déjà la classe et sont super complètes et très équilibrées, il est très difficile d'y rajouter d'autres polices pour rompre la monotonie (ou se servir de LaTeX comme un logiciel de PAO). Ceci vient du fait que LaTeX utilise un système assez vieux (mais qui marche très bien) pour gérer ses polices, et que personne n'a trouvé nécessaire de l'adapter au goût du jour et aux nouvelles technologies comme OpenType. Heureusement, il existe un logiciel qui a changé la donne. Il s'appelle XeTeX et permet d'accéder au monde merveilleux de l'Unicode et des polices OpenType. Nous allons l'utiliser sans modération car il permet des choses magnifiques. Pour compiler son document avec XeTeX tout en restant compatible avec LaTeX, il est nécessaire d'utiliser la commande suivante :
xelatex document.tex
Cette commande produira un fichier PDF. Voilà pour les bases !

"Non, patron, ça on s'en fout ! Georges Abitbol est vivant !"

La deuxième chose à considérer, c'est que TeX est un système qui mange des commandes et qui chie des pages, en gros. Ainsi, à part la composition de texte, des gens utilisent TeX pour écrire des partitions, des images vectorielles ou des schémas. On peut même combiner tout ça dans un seul document. De multiples packages existent pour apporter ce genre de fonctionnalités (ici on s'intéressera aux images vectorielles), mais nous allons nous attarder sur PGF et TikZ. Exactement comme TeX et LaTeX, PGF est le langage de bas niveau et TikZ un jeu de fonctionnalités permettant d'utiliser facilement le premier. Ce couple permet de produire des images vectorielles de haute qualité, en jouant avec des nodes qui permettent de créer des formes courantes comme des rectangles, des cercles, des lignes, qui peuvent contenir du texte, par exemple. Le style des nodes est modifiables, ont peut spécifier la position d'un node par rapport aux autres, bref la vie est belle. Je ne me suis pas vraiment beaucoup attardé sur TikZ, en vérité, et j'ai juste écrit les images nécessaires à la création de documents abitbolesques un peu comme un cochon, je l'avoue. A vous de faire mieux !

Création d'une classe de document classe

Nous allons démarrer comme je l'ai fait. Créez un répertoire et deux fichiers : un fichier .tex qui sera votre document de test et un fichier .cls qui sera votre classe de document. Nous nous concentrerons sur la création d'une classe de document basée sur scrreprt, qui est une classe de document pour les rapports et les mémoires appartenant au paquet KOMA-Script. Pourquoi cette classe précisément ? Un article de Bébert (dont les fiches sont excellentes) résume bien ce choix.

Le document d'exemple

Nous allons ainsi créer un document d'exemple nommé document.tex pour voir comment les modifications de notre classe de document se répercutent sur le document-cobaye. J'utilise le package lipsum qui permet de générer des Lorem Ipsum à tout va. Notez que je ne teste pas tout, ici, par exemple il n'y a pas de partie ni de sous-sous-sous-section. A vous d'adapter ça à vos besoin, car les éléments qui n'ont pas été testés s'afficheront avec leur apparence habituelle.
\documentclass{exemple}
\usepackage{lipsum}

\title{Un titre}
\author{join}

\begin{document}
\maketitle
\tableofcontents
\chapter*{Introduction}
\lipsum[2]
\chapter{Monde de merde}
Prenons un \textbf{verre} avec $\sum^n_{i=0}=x^3$ et
\texttt{\textbf{int} fork()} et tout. \lipsum[1]
\section{On va manger des chips}
 \lipsum[2]
\subsection{Je ne suis pas gentil !}
 \lipsum[5]
\subsection{Quand je me mets en colère}
 \lipsum[1]
\subsection{Je suis méconnaissable}
 \lipsum[2]
\section{C'est tout ce que ça te fait quand je te dis qu'on
va manger des chips ?}
\subsection{Y'a Peter qui fait du boucan dans les water}
 \lipsum[5]
\subsection{Ça y est, je suis guéri}
 \lipsum[1]
\subsection{Par contre on ne peut plus rentrer dans les chiottes,
y'en a par-tout}
\subsubsection{Ça doit être les burgers...}
 \lipsum[2]
\subsubsection{Bruit d'ascenseur}
 \lipsum[1]
\chapter{Ça te dirait de te bâfrer un bon chili con carne ?}
\section{A la fromagerie en bas de chez moi, ils vendaient trois
choses}
 \lipsum[3]
\subsection{Du fromage}
 \lipsum[1]
\subsection{Des ouiches lorraines}
 \lipsum[1]
\subsection{Et de la bouffe chinoise}
 \lipsum[4]
\end{document}
Cela devrait suffire.

La classe de document

Reportez-vous aux documentations pour savoir ce qu'il faut savoir sur la création d'une classe de document. Dans les prochaines sections j'expliquerai juste certaines choses. La classe de document doit s'appeler exemple.cls, si vous voulez que ça marche avec le document.tex d'au-dessus. Pour lui donner un autre nom, changez la commande \documentclass dans le document et \ProvidesClass dans la classe ci-dessous. Voici une classe de document minimale avec ce qu'on veut :
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exemple}
\LoadClass[a4paper,11pt]{scrreprt}
\RequirePackage[francais]{babel}
\RequirePackage[explicit]{titlesec}
\RequirePackage{fancyhdr,setspace,titletoc}
\RequirePackage{tikz, float, caption}
\usetikzlibrary{shapes}
\RequirePackage{fontspec,xltxtra,xunicode}
A ce niveau, la classe de document ne fait rien du tout. Et c'est normal ! Remarquez qu'on utilise RequirePackage et non pas usepackage, et LoadClass au lieu de documentclass. On charge donc les paquets suivants :
  • babel pour la gestion des règles typographiques françaises que l'on va pourrir peu à peu (mouahaha)
  • titlesec pour la modification du format des titres, avec l'option explicit pour décider quand nous incluons nous-mêmes le texte du titre
  • fancyhdr pour personnaliser les en-têtes et pieds de pages
  • setspace pour pouvoir utiliser des valeurs d'interligne complètement so special
  • titletoc est le penchant démoniaque de titlesec, il sert à personnaliser la table des matières
  • tikz vous connaissez, maintenant (on prend la librairie shapes pour avoir des formes excentriques comme star)
  • float et caption pour gérer les flottants
  • fontspec pour la gestion des polices TrueType et OpenType de votre système
  • xlxtra et xunicode pour la gestion de l'Unicode et de tous ces petits caractères tellement dingues
Ensuite, vous lisez les docs, mélangez ce qui vous intéresse et vous avez votre classe classe.

Quelques petits conseils

Gestion des polices

Vous aurez sûrement la gentillesse de partager vos classes classes avec vos ami(e)s, qui n'auront peut-être pas toutes vos polices et qui n'auront peut-être pas envie de se plonger dans le code infernal de votre classe. Voilà la solution que je propose pour gérer des jeux de polices qui passeront partout :
% Ensemble de polices courantes sous Linux et pas trop moches
\newcommand{\fontslinux}{
 \setmainfont{Liberation Serif}
 \setsansfont{Liberation Sans}
 \setmonofont{Liberation Mono}
 \newfontfamily{\hwfont}{Comic Sans MS}
 \newfontfamily{\fatfont}{Arial Black}
 \newfontfamily{\authorfont}{Liberation Serif}
}
% Ensemble de polices installées sur Mac OS X
\newcommand{\fontsmac}{
 \setmainfont[BoldFont={Optima Bold}]{Optima}
 \setsansfont[BoldFont={Kozuka Gothic Pro B}]{Kozuka Gothic Pro M}
 \setmonofont[BoldFont={Courier Bold}]{Courier}
 \newfontfamily{\hwfont}{Marker Felt}
 \newfontfamily{\fatfont}{Kozuka Gothic Pro H}
 \newfontfamily{\authorfont}{Zapfino}
}
% Uniquement des polices de LaTeX, pas de pignolette de fontspec
\newcommand{\fontslatex}{
 \newcommand{\hwfont}{\sffamily}
 \newcommand{\fatfont}{\bfseries\sffamily}
 \newcommand{\authorfont}{}
}
% Ensemble de polices so Windows des 90's (c'est moche)
\newcommand{\fontswindows}{
 \setmainfont{Times New Roman}
 \setsansfont{Arial}
 \setmonofont{Courier New}
 \newfontfamily{\hwfont}{Comic Sans MS}
 \newfontfamily{\fatfont}{Arial Black}
 \newfontfamily{\authorfont}{Times New Roman}
}
% Ensemble de polices professionnelles
\newcommand{\fontsclasses}{
 \setmainfont{Optima LT Std}
 \setsansfont{Myriad Pro}
 \setmonofont[BoldFont={ITC American Typewriter Std Bold}]
    {ITC American Typewriter Std Medium}
 \newfontfamily{\hwfont}{Marker Felt Thin}
 \newfontfamily{\fatfont}{Myriad Pro Black}
 \newfontfamily{\authorfont}{Trajan Pro Bold}
}

% Voici le choix par défaut
\fontslatex

% On traite les options pour mettre le choix de police par défaut
\DeclareOption{fontsclasses}{\fontsclasses}
\DeclareOption{fontswindows}{\fontswindows}
\DeclareOption{fontslinux}{\fontslinux}
\DeclareOption{fontsmac}{\fontsmac}
\ProcessOptions
Ceci permet d'appeler la classe de document avec une option parmi (fontsclasses, fontswindows, fontslinux, fontsmac) pour pouvoir avoir automatiquement les polices désirées. Un exemple :
\documentclass[fontsclasses]{exemple}
Et voilà.

Faire des boîtes web 2.0 avec TikZ

Pour ma classe trop classe, j'ai mis au point la commande suivante pour faire une boîte trop classe :
\newcommand{\emboiter}[3][4pt]{%
\begin{tikzpicture}[baseline=-0.1cm]
 \node[rectangle,draw=#2,fill,top color=#2!30, bottom color=#2!90,
rounded corners=#1] {{#3}};
\end{tikzpicture}%
}
Il y a deux arguments obligatoires, et un argument optionnel. Voici des exemples :
% Affiche un texte cool avec texte surligné en vert 2.0
un \emboiter{green}{texte} cool
% Affiche pareil avec des coins pointus
un \emboiter[0pt]{green}{texte} cool
% Affiche pareil en étoile, grâce à une propriété TikZ
un \emboiter[0pt,star]{green}{texte} cool
Vous pouvez donc utiliser cette fonction pour redéfinir des trucs (l'utiliser directement dans le texte contreviendrait un peu à notre règle).

Changer le style des notes de bas de page

Allez, pour celui-là j'en a bavé, parce que l'usage de babel fait que \@makefntext est changé au début du document et donc qu'il faut plutôt redéfinir la commande \@makefntextFB :
\makeatletter
% Numéro apparu dans le texte
\renewcommand{\@makefnmark}{%
 \begin{tikzpicture}[baseline=-6pt]\node[rectangle, rounded
corners=4pt, fill, color=gray, inner sep=1.5pt, text=white]
{\sffamily\bfseries\scriptsize{\@thefnmark}};\end{tikzpicture}
}
% Texte en bas de la page
\renewcommand\@makefntextFB[1]{%
 \parindent 1em%
 \begin{tikzpicture}[baseline=-0.1cm]\node[rectangle, rounded
corners=4pt, fill, color=gray, inner sep=1.5pt, text=white]
{\sffamily\bfseries\small{\@thefnmark}};
\end{tikzpicture}~\textcolor{gray}{#1}}
\makeatother

Style moderne de sous-sous-section

Voilà comment emboîter deux images vectorielles pour donner un style super style à vos sous-sous-sections :
\titleformat{\subsubsection}[hang]%
 {\sffamily\bfseries\large}%
 {}%
 {10pt}{\emboiter[8.5pt,top color=lightgray, bottom
color=lightgray]{lightgray}{
 \begin{tikzpicture}[overlay,baseline=-0.14cm]
 \node[circle, inner sep=3pt, draw=gray, fill, color=gray,
text=white]{\bfseries\thesubsubsection};
 \end{tikzpicture}\quad\thinspace #1
 }}{}
On utilise donc \emboiter mais dans le sens "mettre dans une boîte", hein.

Pour les fainéants

Vous voulez plutôt un truc tout fait ? Vous n'avez pas le temps de vous plonger dans le code et voulez profiter de l'expérience de Georges Abitbol en direct live ? Alors suivez le guide.

Téléchargement

Pour télécharger ma super classe de document joinreport, cliquez ici et sauvegardez cette classe à l'endroit où sera votre document qui va l'utiliser.

Configuration

Dans votre document, changez la classe de document par :
\documentclass[fontsclasses]{joinreport}
Remplacez fontsclasses par :
  • fontsclasses si vous avez les polices Optima LT Std, Myriad Pro, Marker Felt, ITC American Typewriter Std et Trajan Pro
  • fontsmac si vous avez un Mac ou les polices Optima, Kozuka Gothic Pro, Courier, Marker Felt, Zapfino (présentes sur tous les Mac depuis un bout de temps)
  • fontswindows si vous n'avez que des polices Windows (à partir de 95, voire de 3.11) et/ou que vous voulez vraiment un truc hideux
  • fontslinux si vous souhaitez utiliser un bon pourcentage de polices libres ou que vous avez les polices Liberation, Comic Sans MS et Arial Black (présentes sur pas mal de systèmes Linux récents)
Oubliez l'argument si vous voulez n'utiliser que les polices de LaTeX.

Ecriture

Ecrivez votre document avec les commandes standard, comme d'habitude. N'oubliez pas de compiler avec xelatex, et pas avec latex, pdflatex ou xetex ! Vous pouvez utiliser la commande \emboiter décrite plus haut pour surligner un élément. Vous pouvez également utiliser la commande \entetegraphique{dessin.pdf}{Ligne 1}{Ligne2}{Ligne3} pour rajouter un en-tête à votre page de garde. C'est à appeler au même endroit que \title ou \author et faites attention, ça remplace \date. Lorsque vous utilisez \author, faites attention à séparer les différents auteurs avec \and. Une fois votre page de titre configurée dans le préambule avec ces options, vous pouvez donc appeler \maketitle et hop, ça fait une page top classe. Vous pouvez écrire du texte avec un style manuscrit ou marrant (on dit script) en utilisant \texthw{texte}. Les éléments stylisés pour le moment sont donc :
  • en-tête, pied de page
  • table des matières
  • notes de bas de page
  • environnement description
  • flottants
  • titres (chapter, section, subsection, subsubsection)
  • texttt qui est surligné en jaune 2.0 (pour éviter de surligner, utilisez plutôt {\ttfamily{}le texte} ou supprimez la redéfinition dans le code de la classe de document)
  • page de garde

Un exemple

Vous pouvez voir une partie d'un compte-rendu TP que j'ai repris de vielles sources toutes collantes (attention si vous vous en servez pour apprendre, je ne garantis pas la véracité des informations) et non pas de la version finale non-collante (par collante je veux dire qui colle et qui pue). Pour essayer de recompiler ça, utilisez donc la source TeX et le logo de l'Université de Bourgogne. Bonne chance.

Conclusion

Vous voyez qu'avec ceci, au final, vous vous casserez moins le cul. Peut-on le prouver ? Oui, mais cette réduction du cassage de cul n'est valable que pour des grandes valeurs de n (approximativement n > 1).

Démonstration avec plein de fois le mot cul dedans

Soit A la quantité de cassage de cul occasionnée par l'écriture d'un document avec LaTeX sans porter attention à la mise en page. Soit B la quantité de cassage de cul occasionnée par la modification du style. On remarque que dans la plupart des cas, B tend à se rapprocher de A. Ainsi de manière générale, soit n le nombre de documents écrits, on définit S(n) la totalité du cassage de cul pour l'écriture de n documents LaTeX, et on a S(n)=n*(A+B). Soit C la quantité de cassage de cul occasionnée par l'écriture ou la récupération d'une classe de document classe, alors sauf dans des cas extrêmes, C n'excède pas 2B, et dans la plupart des cas C est inférieur à B (là je suppose que la plupart de mes peu nombreux lecteurs sont des fainéants). Alors dans le cas où une classe de document classe est utilisée, on a donc S(n)=C+n*A. Ainsi, dans la plupart des cas, pour n>1, on a : n*(A+B) > C+n*A. Au final, vous vous casserez donc moins le cul à faire une classe de document classe plutôt que d'éviter de le faire, si votre but est de produire des documents classe.

Corollaire super sympa

Ainsi, étant donné qu'en utilisant LyX (l'éditeur WYSIWYM pour LaTeX), vous vous cassez encore moins le cul pour écrire vos documents LaTeX en faisant fi de la mise en forme, alors imaginez la combinaison de LyX et d'une classe de document classe ! C'est le paradis ! Sauf que je n'ai pas eu encore le temps d'étudier la question de LyX, qui est assez simple pour l'écriture mais complexe lorsqu'il s'agit de changer une caractéristique comme l'ajout d'une classe. Deux problèmes majeurs m'empêchent d'utiliser LyX simplement pour le moment :
  • le fait que pour ajouter une classe il faut faire un layout, bon c'est pas trop chiant mais cela requiert quelques commandes
  • le fait que LyX n'utilise pas XeLaTeX par défaut, et qu'il faut donc soit rajouter un bouton et un convertisseur pour XeLaTeX, soit changer le comportement par défaut pour utiliser XeLaTeX au lieu de pdfLaTeX.
A suivre, donc, pour la réduction encore plus flagrante de cassage de cul, qui passerait de A à aucun cassage de cul !

Mon document ne paraît pas beau

J'ai remarqué cette chose : quand vous êtes sous evince le lecteur PDF de Gnome, le document apparaît avec des petits artefacts, comme des lignes où il ne faut pas. Cela est probablement dû à TikZ, mais je ne sais pas comment régler le problème. Un ou deux artefacts sont déjà apparus avec Aperçu sous Mac. Leur point commun est que quand vous zoomez suffisamment, tous les artefacts disparaissent. J'imagine également qu'à l'impression ça disparaît. La lecture des documents produits est bonne sur epdfview, Aperçu, Adobe Reader (pas testé mais j'imagine que c'est bon) et xpdf. Aidez-moi à agrandir la liste !

Parenthèse historique

Cet article fait de nombreuses références à Georges Abitbol, l'homme le plus classe du monde, dont vous trouverez une biographie exhaustive dans le film Le Grand Détournement : la classe américaine que je vous conseille de regarder.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Wed, 04 Nov 2009 09:20:00 -0800 Synchroniser ses agendas Google avec iCal http://j.oin.name/synchroniser-ses-agendas-google-avec-ical-0 http://j.oin.name/synchroniser-ses-agendas-google-avec-ical-0

Ce n'est pas pour reprendre ce qui a dû être abordé sur le web des milliers de fois, mais pour ajouter quelques précisions sur la gestion des agendas que j'écris cet article. En effet, avec Snow Leopard, il est maintenant simple d'ajouter son agenda Google dans iCal, puisque ce dernier fait tout tout seul. Il est même possible de synchroniser le reste des agendas suivis sur Google Agenda en tant que délégués, mais c'est précisément là que le bât blesse. Ces calendriers délégués sont bien jolis, mais par delà le problème de leur nom il existe une chose bien plus ennuyeuse : il est impossible de les utiliser dans d'autres programmes qui utilisent les données d'iCal. Et ça, c'est pas du joli ! Heureusement, il y a une méthode pas trop complexe (pas de SSH, promis) pour les faire reconnaître en tant que calendriers de plein droit.

Synchroniser un agenda

Mais déjà, voyons comment ajouter son agenda Google principal à iCal. La procédure est simple et très rapide avec Snow Leopard.

Media_httpoinnamewpco_kgbmg

Voilà.
Lancez iCal puis dirigez-vous dans les préférences. Vous vous dites qu'il y a peut-être un gros bouton "Synchroniser mon calendrier avec Google" dans le panneau Général, hé bien c'est perdu ! Par contre vous pouvez aller dans le panneau Comptes, qui sert à paramétrer des comptes CalDAV. C'est précisément le protocole qu'iCal utilise pour faire le petit boulot qu'on lui demande de faire. Cliquez sur le petit bouton + pour ajouter un nouveau compte CalDAV et c'est parti ! Vous choisissez Google comme type de compte et vous rentrez vos informations, à la manière de la copie d'écran. Une fois votre compte ajouté, c'est de la folie, ça synchronise tout de suite et tout ! Vous êtes immédiatement tenté(e) d'aller synchroniser vos autres agendas !

Ce qu'il ne faut pas faire

Il ne faut pas ! Vous parcourez l'onglet Délégation et vous découvrez la liste de vos autres agendas, avec des cases qui ne demandent qu'à être cochées et qui vous susurrent à l'oreille "Synchronise-moi ! Synchronise-moi !". Ne cédez pas au chant des sirènes, car en vérité je vous le dis, la délégation c'est du bi-don. Parfaitement, après quelques mois passés à utiliser ce système de calendriers délégués, je peux vous assurer que vous préférerez bénéficier de vos autres agendas de la même manière que votre agenda principal.

Synchroniser un (autre) agenda

Il faut plutôt voir le truc comme si vous aviez plusieurs comptes Google, sauf que vous n'en avez qu'un où sont réunis tous les agendas. N'essayez pas cependant de réitérer l'opération d'ajout de compte vue plus tôt car vous allez vous casser les dents sur un message d'iCal qui vous informera qu'il ne peut pas rajouter deux fois le même compte. Et il a raison, 'dedieu ! Alors comment faire ? La solution n'est pas si complexe. Si vous avez déjà tripoté un peu vos agendas, vous savez que chaque agenda est identifié par un truc qui ressemble à une adresse mail au format suhsiusesu28291hiu27h1h@group.calendar.google.com (si vous vous demandez comment j'ai fait pour inventer ça, attendez la fin de l'article pour ma recette d'identifiants de calendrier). Correctement inséré dans une URL bien précise, cet identifiant permettra à iCal de localiser l e serveur CalDAV à qui il doit parler pour que la synchronisation de cet agenda se déroule parfaitement.

Rapatrier les identifiants

La première étape consiste à rapatrier tous les identifiants des agendas que vous voulez synchroniser avec iCal. Pour cela, connectez-vous à votre Google Agenda (sur le web), puis allez dans les paramètres. Une fois dans ces paramètres, direction l'onglet Agendas, où vous trouverez une liste de tous vos agendas. Il y en a pas mal, non ? Non ? Autant pour moi. Faisons une petite pause en lançant un éditeur de texte léger quelconque, comme TextEdit. Vous allez vous en servir pour noter quelques trucs. Déjà collez cette url dans TextEdit, autant de fois que d'agendas à synchroniser :

https://www.google.com/calendar/dav/###/user

Vous voyez qu'il y a un endroit où vous allez devoir remplacer les ### de chaque ligne collée dans TextEdit par chaque identifiant d'agenda pour obtenir une adresse URL complète du style :

https://www.google.com/calendar/dav/aijoijsooj8383isdfuheu88282siuh8@group.ca...

"Mais comment fait-il pour créer des identifiants d'agenda à partir du néant ?" Vous le saurez à la fin de l'article, je vous dis ! Le but est donc d'avoir dans notre TextEdit plusieurs lignes d'URL comme celle-ci, mais pas avec des identifiants au hasard (merde, grillé) comme ci-dessus : il faut les identifiants de vos agendas à vous. Bon, c'est bien beau mais comment on les a, ces identifiants ? Mettez-vous face à la liste de vos agendas dans les paramètres de Google, et cliquez sur le nom d'un agenda à synchroniser. Vous trouverez l'identifiant de cet agenda dans la ligne Adresse URL de l'agenda, où, après quelques petits boutons colorés et charmants, on vous indique l'ID de l'agenda. Copiez donc cet identifiant et collez-le à la place d'un des ### dans votre TextEdit. Vous pourrez ainsi faire de même pour chaque agenda à synchroniser et vous aurez une belle liste d'URL, à la fin.

Ajouter les agendas dans iCal

Maintenant, revenez dans la fenêtre de préférences d'iCal, au panneau Comptes, où les délégués vous narguent encore peut-être. Prenez le temps de leur cracher au visage (je ne suis pas responsable des dégâts matériels occasionnés) car bientôt vous n'aurez plus jamais besoin d'eux. Cliquez sur le bouton + pour ajouter un compte CalDAV et remplissez les informations comme suit :

  • Type de compte : CalDAV
  • Nom d'utilisateur : adresse@gmail.com
  • Mot de passe : (votre mot de passe)
  • Adresse du serveur : (l'URL de l'agenda à synchroniser)

Vous pouvez ensuite cliquer sur le bouton Créer et vous aurez un nouveau "compte" lié à un autre de vos agendas. Réitérez l'opération pour chaque agenda à synchroniser. Une fois que c'est terminé, fermez TextEdit parce que vous n'en avez plus besoin.

On a gagné !

Vous pouvez profiter, maintenant, de la douceur de programmes tiers qui communiquent avec iCal pour obtenir vos informations d'agendas, comme le widget Organized. Si vous avez des événements dans un de vos calendriers aujourd'hui même, vous pourrez constater que ça marche bien en ouvrant Dashboard et en consultant le widget iCal.

Bonus : génération d'identifiants Google Calendar

Je vous l'ai promis, je vous le dois : voilà ma recette pour générer comme par enchantement des identifiants Google Calendar. Vous avez besoin uniquement d'un ordinateur, d'un clavier et d'une zone de texte.

  1. Placez-vous devant l'ordinateur, face au clavier.
  2. Cliquez sur la zone de texte que vous avez choisie. Elle prend alors le focus et attend que vous tapiez quelque chose.
  3. Prenez l'arrière de votre crâne avec votre main directrice et balancez-le sur le clavier. Une série de caractères s'affiche alors dans la zone de texte.
  4. Répétez (3) si vous n'avez pas assez de caractères. Un identifiant d'agenda correct comporte entre 10 et 20 caractères, selon le temps qu'il fait.
  5. Si vous avez des lunettes, remettez vos lunettes en place.
  6. Rajoutez @group.calendar.google.com à la fin.
  7. Vous avez un identifiant d'agenda ! Servez frais.

Bien entendu, cette technique peut également être réalisée en compagnie d'un président de la république ou d'un ennemi quelconque. Notez que je ne suis pas responsable des dégâts occasionnés.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno
Mon, 02 Nov 2009 15:38:00 -0800 Utiliser Gmail à travers SSH http://j.oin.name/utiliser-gmail-a-travers-ssh-1 http://j.oin.name/utiliser-gmail-a-travers-ssh-1

L'objet de cet article est de prolonger celui sur l'utilisation de Gmail avec Fluid. Vous allez certainement vous dire que j'ai un problème avec Gmail parce que je n'arrête pas d'en parler, mais c'est juste parce que c'est mon fournisseur de mails, j'y peux rien ! Toujours en quête de manières efficaces d'utiliser ma boîte mail, je vous avais donc présenté la manière d'utiliser le webmail de façon un peu plus conviviale que directement dans le navigateur, et ce grâce à l'émergence des SSB. Or cette solution, bien que pratique par plusieurs aspects (surtout que le webmail de Gmail est super bien branlé), n'égale toujours pas l'utilisation d'un vrai client mail. On n'est pas tous dans la vague du cloud computing, et c'est pourquoi une alternative existe dans la méthode du tunnelling SSH. Je tiens à remercier kik pour avoir relu cet article et pour m'avoir aidé à corriger certains gros défauts de jeunesse pouvant avoir un impact sur votre sécurité. Remerciez-le !

Les raisons de la colère

Après quelques semaines d'utilisation de cette méthode SSB, j'ai pu constater qu'elle était vraiment casse-bonbons, et ce pour plusieurs raisons :

  • c'est lent de se connecter, d'initialiser Gmail, même hors-ligne
  • le badge, et c'est inhérent à la méthode employée, ne s'affiche que lorsqu'on est sur la boîte de réception
  • toujours pas de drag-and-drop (bien que ce problème puisse être résolu sous Prism ou Firefox avec une petite extension bien placée)
  • une intégration foirée au reste du système Macintosh (mais ce serait le même problème si j'utilisais KDE ou n'importe quoi d'intégré)
  • le webmail, si ça a beau être le meilleur, n'est pas pratique à mes yeux

Présentation

Mais alors comment faire pour utiliser mon client mail préféré alors que ma fac bloque ce p*$!# de port SMTP ? Une solution reste alors le magique tunnelling SSH. En quoi ça consiste ? Regardons un peu ma situation :

Media_httpoinnamewpco_gizga

L'état actuel des choses
Vous voyez que lorsque je veux aller sur le web, je peux le faire en me connectant au réseau de la fac, qui filtre mes requêtes, et qui voit que lorsque j'utilise le protocole http, alors je suis un gentil garçon donc il me laisse passer et je peux aller sur Gmail en utilisant l'interface web. Très bien. Je peux également y aller de manière sécurisée, d'après ce schéma. En parlant de sécurisé, j'ai un pote qui m'a fourni un accès ssh sur son serveur, que nous allons appeler myssh.net. Grâce à tout le tapage qu'on a fait il y a un an, nous avons réussi à faire débloquer SSH à l'université. Par contre, le SMTP, il est hors de question : le gouvernement n'est soi-disant pas d'accord et c'est une mesure anti-spam. Qu'à cela ne tienne, on a notre SSH ! L'idée est la suivante : c'est la machine sur laquelle est mon compte SSH qui va aller se connecter au serveur SMTP de Google, en faisant ce que je lui dis. Si tant est que l'accès à Internet de la machine sur laquelle je me connecte en SSH n'est pas également restreint, ça devrait fonctionner au poil. Nous utiliserons alors une fonctionnalité de SSH nommée tunnel qui consiste à rediriger tout ce qu'il reçoit de nous vers un autre serveur, avec un autre port, comme ceci :
Media_httpoinnamewpco_zcdwh

Mon tunnel, et hop ! Pompopopom popopom pom pom...
C'est complètement démoniaque. Que nous faut-il pour réaliser cette opération ? Un compte SSH quelque part, et c'est peut-être le plus dur à avoir. Cherchez dans vos amis, ou alors mettez en place un tel serveur chez vous. Nous allons voir comment s'y prendre avec Snow Leopard, le fournisseur Gmail et l'application Mail, mais cette technique géniale pourrait marcher avec tous les systèmes d'exploitation, tous les clients web et tous les fournisseurs du monde.

Un petit essai

Nous allons tout d'abord faire un petit essai pour voir si ça marche. Lancez votre cher Terminal et tapez la commande suivante (en adaptant). N'exécutez que les commandes en caractères monospace où la ligne commence par $ mais omettez le $. Cela indique une commande à exécuter en mode utilisateur (et donc pas en mode administrateur). Le reste des lignes en mode monospace non préfixées de $ sont ce que renvoie le terminal.

$ ssh -N -f userssh@serveurssh.net -L1025:smtp.gmail.com:25 sleep 60

Vous allez vous connecter à votre serveur SSH et il va vous demander votre mot de passe. Une fois la connection établie, ssh vous rendra la main. Voilà, c'est fait. Mais qu'est-ce qui a été fait ? En fait vous avez fait en sorte d'ouvrir votre port local 1025, de manière à ce qu'il soit connecté (via ssh) au serveur SMTP de Gmail (si ces notions de port et de serveur vous perdent, je vous conseille de lire ce petit article explicatif). Ainsi, nous allons maintenant essayer de nous connecter à ce serveur par le biais de notre tunnel grâce au programme telnet :

$ telnet 127.0.0.1 1025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.google.com ESMTP e20sm6373203fga.10

Si cette dernière ligne s'est affichée, c'est que c'est gagné, vous êtes arrivé(e) de l'autre côté. Pour vous enfuir de ce telnet austère, faites Ctrl+$ puis Ctrl+D. Vous êtes maintenant revenu(e) au shell, ce bon vieux shell ! Tuons le processus ssh qui ouvre notre port 1025 et nous pourrons ainsi arrêter le tunnel :

$ killall ssh

Bien. Nous revoilà au point de départ. Maintenant il doit vous venir une petite question en tête : comment automatiser cette tâche ? Et surtout, même si la tâche est automatisée, comment faire en sorte d'éviter que ssh nous demande notre mot de passe, sans pour autant compromettre grandement la sécurité ?

Définir une poignée de main secrète

Si vous avez déjà été initié(e) à la cryptographie, vous devez savoir comment assurer la sécurité de vos échanges grâce au système à clé publique. SSH permet de faire cela eet de se passer de mot de passe. Je vous conseille de lire cet article de l'encyclopédie la plus utilisée au monde pour comprendre de quoi il en retourne, mais le principe est à peu près comparable à une poignée de main secrète qui garantit l'authenticité des transferts et de leurs acteurs. Une petite vidéo vous expliquera mieux que des mots comment réaliser une poignée de main secrète :

Poignée de main secrète à gogo

Ainsi, nous allons générer une poignée de main, certes pas aussi stylée que celle sur la vidéo, mais pas trop mal non plus. Entrez cette commande dans votre terminal :

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/join/.ssh/id_rsa): (appuyez sur Entrée)
Enter passphrase (empty for no passphrase): (entrez un mot de passe)
Enter same passphrase again: (le même mot de passe)

Vous aurez droit à pas mal de petits dessins super sympas et un message qui dit qu'il a fini (ayé maman). Ne pas mettre de passphrase c'est grandement compromettre la sécurité de votre système. Je vous aurai mis en garde. Vous avez maintenant généré deux clés. Oui, car ce programme permet de générer deux clés : une clé publique et une clé privée. La clé publique est la poignée de main secrète brillamment réalisée devant tout le monde, c'est la manière de coder les messages. Par contre, la clé privée, c'est en quelque sorte comment réaliser, et donc comprendre, cette poignée de main secrète si subtile qui fait de vous le légitime membre d'un gang, c'est ce qui sert à décoder les messages. La prochaine étape consiste à envoyer votre clé publique au destinataire, c'est-à-dire au serveur ssh où vous pouvez vous connecter. Nous allons faire cela en une seule commande (n'oubliez pas de l'adapter) :

$ cat ~/.ssh/id_rsa.pub | ssh user@serveurssh.net "cat - >> ~/.ssh/authorized_keys"

Vous pouvez écrire le caractère pipe (|) en utilisant la combinaison de touches ⇧⌥L. Je vous le dis parce que j'ai eu du mal à trouver. Une fois la session ssh fermée, vous pouvez vous servir une coupe de champagne... Ah non... Il manque le principal !

Automatiser la tâche

Nous allons maintenant toucher un peu au service responsable du lancement de multitudes de choses sous Mac OS X, depuis la version 10.4 : il s'agit, mesdames et messieurs, de launchd ! Ce démon est configurable à travers le programme launchctl et permet pas mal de trucs fantastiques. Son utilité principale est de lancer des programmes, que ce soit en réponse à un événement précis ou non, sous tel nom d'utilisateur ou en tant qu'administrateur, qu'il pleuve ou qu'il vente. C'est ce qui s'occupe du démarrage de l'ordinateur, par exemple. Notre tâche, afin d'automatiser la création d'un tunnel, est donc de créer une entrée de lancement dans ce démon, c'est-à-dire de créer un agent qui sera responsable de la création du tunnel, au bon moment.

Créer un agent launchd

Nous allons créer un agent qui lancera le tunnel une fois qu'on demandera à accéder au port local 1025. Un tel agent est en réalité un simple fichier plist, le format de fichier dont Apple est amoureux, qui est une sorte de XML très simplifié qui sert juste à stocker des entrées de dictionnaire, c'est-à-dire des couples clé/valeur, de manière hiérarchisée. En clair, c'est comme une page web mais en tout con, vous allez voir. Créons d'abord le fichier qui abritera notre agent, dans le répertoire de recherche utilisateur de launchd :

$ vim ~/Library/LaunchAgents/oin.mail

Si vous ne savez pas comment faire un tilde (~, décidément), c'est simple mais j'en ai aussi chié pour trouver : tapez ⌥N. Vous entrez dans le meilleur programme du monde, c'est-à-dire vim, l'éditeur de texte à tout faire et mieux qu'Emacs en plus :). Mettez-vous en mode insertion (en tapant i) et collez le texte ci-dessous :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Debug</key>
 <false/>
 <key>Label</key>
 <string>oin.mail</string>
 <key>OnDemand</key>
 <true/>
 <key>ProgramArguments</key>
 <array>
  <string>/usr/bin/ssh</string>
  <string>-N</string>
  <string>-f</string>
  <string>user@serveurssh.net</string>
  <string>-L1025:smtp.gmail.com:25</string>
 </array>
 <key>Sockets</key>
 <dict>
  <key>Listeners</key>
  <dict>
   <key>SockServiceName</key>
   <string>1025</string>
   <key>SockType</key>
   <string>stream</string>
  </dict>
 </dict>
 <key>StandardErrorPath</key>
 <string>/tmp/sshmail.err</string>
 <key>inetdCompatibility</key>
 <dict>
  <key>Wait</key>
  <false/>
 </dict>
</dict>
</plist>

N'oubliez pas d'aller changer ce que j'ai mis en rouge (si vous n'avez jamais utilisé vim, bonne chance). Pour sauvegarder et quitter, tapez sur Echap pour quitter le mode d'insertion et se remettre en mode normal, puis entrez :wq et confirmez en tapant sur la touche Entrée. Vous êtes revenu(e) dans le shell. Ouf ! Notre agent va faire en sorte que launchd lance le tunnel ssh lorsqu'on tripote le port local 1025 (je crois que je referai un petit article sur launchd tellement c'est marrant de jouer avec).

Charger l'agent

Nous devons maintenant tester ce que nous avons fait, notre bébé. Chargeons l'agent que nous avons créé par cette commande :

$ launchctl load -S Aqua ~/Library/LaunchAgents/oin.mail

Nous avons besoin du switch S pour préciser à launchctl que nous voulons que cet agent se lance avec le type Aqua, ce qui lui permettra de pouvoir interagir avec l'interface graphique. Nous verrons que c'est diablement important. Vérifiez maintenant que ce démon est bien listé grâce à cette magnifique commande :

$ launchctl list | grep oin.mail
-    0    oin.mail

C'est bon. Roulez, jeunesse !

Autoriser la connection

Vous allez tôt ou tard être confronté(e) à cette horrible boîte de dialogue :

Media_httpoinnamewpco_fphog

Allez, paye ton pass quoi !
Elle vous somme de rentrer votre mot de passe. C'est la passphrase que vous avez rentré plus haut, lorsque vous avez créé vos clés. Une fois votre mot de passe entré dans la boîte de texte, je vous conseille de cocher Mémoriser le mot de passe dans le trousseau pour ne plus avoir à revivre ce terrible épisode. Cliquez sur OK et le tour est joué.

Configurer Mail.app

Media_httpoinnamewpco_sdbde

Au fait, SMTP ça veut dire quoi ?
Il reste maintenant à configurer notre client mail pour utiliser ce serveur SMTP. Je fais l'hypothèse que vous avez déjà configuré votre compte Gmail dans l'application Mail. Lancez cette dernière, puis allez dans les préférences, dans le panneau Comptes. Sélectionnez votre compte puis, dans l'onglet Informations du compte, cliquez sur la liste déroulante en face de Serveur d'envoi pour pouvoir cliquer sur Modifier la liste des serveurs SMTP. Vous arrivez face à une feuille modale qui apparaît et vous propose de configurer vos serveurs SMTP. Vous en avez déjà un, c'est celui qui a été configuré à la création du compte dans Mail, et nous allons le laisser (oui, c'est plus direct et souvent plus rapide de ne pas avoir d'intermédiaire). Ajoutez un nouveau serveur SMTP en cliquant sur le bouton + puis remplissez les champs comme sur la capture d'écran ci-contre. Une fois les modifications effectuées, cliquez sur OK et fermez la fenêtre des préférences de Mail. Ecrivons un nouveau message à notre destinataire préféré : vous-même ! N'oubliez pas de sélectionner le serveur SMTP que nous venons d'ajouter, qui est en fait notre tunnel.
Media_httpoinnamewpco_smaaq

Un cas très banal de schizophrénie. Pas mal, le fond d'écran, non ?
Envoyez le mail et attendez environ quelques secondes et demi. Surprise :
Media_httpoinnamewpco_wffwa

Père Noël !
Je crois que tout est dit, ça marche et je vous ai sauvé la vie, pas la peine de m'embrasser je suis malade. Oh non, j'ai encore oublié quelque chose !

Alternative à launchd

Si, pour une raison ou une autre, vous ne voulez pas utiliser launchd, vous pouvez toujours vous rabattre sur cette superbe application qui vous permettra de faire des tunnels SSH à tour de bras, de les lancer et de les arrêter graphiquement, et surtout de voir que vous avez tapé pas mal de commandes pour rien. Mais ce que vous avez peut-être appris ici valait bien le dérangement, non ?

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/348714/IMG_1390.JPG http://posterous.com/users/3sTujOPdbuiR Jonathan Aceituno join Jonathan Aceituno