willoblog

Aller au contenu | Aller au menu | Aller à la recherche

Tag - linux

Fil des billets

vendredi 26 août 2011

Gedit, spell check and PHP syntax

I've been using for a few years Gedit as editor of all my scripts, including bash scripts and PHP scripts. So I use it a lot...

For a while, it seems that spell check is broken. I noticed that when I upgraded to Ubuntu Natty. Here is the issue : When you are editing a PHP script (and PHP syntax highlight is chosen), the only words that are underlined if mispelled are in single-quoted or double-quoted strings. All other words, especially those which are outside php code, aren't checked (nor in heredoc text).

A few bugs are open : on Ubuntu Launchpad, Redhat Bugzilla and Debian bugreport, but I found no ready-to-use solution after googling a moment.

The syntax files of Gedit are in /usr/share/gtksourceview-2.0/language-specs/ (at least for me). Each one defines what is every portion of code (type like string, attribute, keyword, number...) and its properties. "no-spell-check" is one of the properties.

The problem in php.lang is at the last lines : all is defined as "no-spell-check" class (line 321, id "php"), that is all the script, including what is outside php code. The solution is pretty simple : define as "no-spell-check" only what is actually php code, line 291, id "php-block" and erase the "no-spell-check" class on line 321.

As I prefer to check heredoc texts, I had to proceed :

sudo sed -i -e '/id="here-doc-string"/s/>/ class-disabled="no-spell-check">/' -e '/id="php-block"/s/>/ class="no-spell-check">/' -e '/id="php"/s/ class="no-spell-check"//' /usr/share/gtksourceview-2.0/language-specs/php.lang

Bonus : in HTML highlighting, values of attributes are checked. I don't think it's relevant, so I changed that :

sudo sed -i '/attrib-value/s/ class-disabled="no-spell-check"//' /usr/share/gtksourceview-2.0/language-specs/html.lang

This is not perfect yet, as we would like to see the HTML outside php code like in HTML syntax highlight.

jeudi 12 novembre 2009

Ubuntu Karmic et Packard Bell EasyNote BG46-P-018

J’ai acheté un Packard Bell EasyNote BG46-P-018 à Noël 2007, et présenté ici.

Après un an d’utilisation, on peut le dire : cet ordinateur avait le seul intérêt à l’époque d’être vraiment pas cher pour un 12 pouces. C’est un Packard Bell, et comme tous les Packard Bell il est assez mal conçu. En particulier, il chauffe beaucoup et son ventilateur, bruyant, est en marche en permanence.

Un certain nombre de problèmes se posaient, et il fallait un peu lutter avec Ubuntu Gutsy (7.10).

Deux ans plus tard, de grands progrès ont été faits :

  • l’affichage en 16/10 fonctionne de suite
  • l’affichage sur un écran externe (j’ai un HP 19 pouces en format 5/4) fonctionne de suite, après un passage dans Préférences/Affichage pour l’activer
  • le son fonctionne de suite
  • la webcam fonctionne de suite et apparaît dans le bon sens (elle apparaissait à l’envers avant)
  • compiz ne pose plus de problème, et le processeur ne tourne pas pour rien même avec l’écran supplémentaire.

Seule ombre au tableau, les boutons « wifi » et « éco » qui des fois s’éteignent. Mais la connexion wifi est pourtant toujours active. Il me semble même qu’elle est plus stable qu’avant.

À noter, pour la webcam, que cela est dû à une modification des drivers. Nombreuses sont les webcams « montées à l’envers » sur les ordinateurs portables. Les fabricants le savent et fabriquent des drivers pour windows qui retournent automatiquement l’image. Sous Linux, il faut que quelqu’un tombe sur le modèle posant problème, le dise aux personnes compétentes pour modifier la liste des webcams concernées dans la librairie correspondante (v4l).
Si un logiciel comme cheese affiche l’image de la webcam à l’endroit, alors c’est gagné. Mais si en essayant avec VLC (souvent avec la commande vlc v4l2:///dev/video0) ou skype l’image est encore à l’envers, vous devez simplement faire précéder systématiquement la commande de LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so, sur la même ligne. Pour skype par exemple, c’est facile à automatiser. Il suffit de créer un fichier /usr/local/bin/skype contenant

#!/bin/bash
 
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so /usr/bin/skype

(tapez gksudo gedit /usr/local/bin/skype dans un terminal, collez-y ce qui précède, enregistrez, et rendez le fichier exécutable en tapant sudo chmod +x /usr/local/bin/skype dans le terminal)
Il sera utilisé à chaque fois que la commande skype sera lancée.

jeudi 29 octobre 2009

SNI, TLS : multiples virtual hosts avec Ubuntu Karmic

Ah, enfin. Ça y est, hourra, depuis le temps que l’on attendait cela, c’est enfin possible : il est enfin possible avec Apache et OpenSSL d’héberger sur un même serveur plusieurs sites sécurisés avec chacun son certificat propre.

J’héberge sur mon serveur plusieurs sites. Deux en particulier ont besoin d’être sécurisés, non pas pour garantir qu’il s’agit de moi (je ne suis pas une banque, personne n’essaiera jamais de se faire passer pour moi), mais parce que ce qui y est écrit est personnel et que je suis un grand parano qui ne veux pas laisser d’accès à des personnes que je ne connais pas.
Comme je veux cependant garantir l’accès de mes sites au plus grand nombre, je cherche à éviter les affichages d’erreurs moches et incompréhensibles des problèmes de sécurité, qui deviennent particulièrement pénibles avec Firefox 3.5. Du coup, deux choses à faire :

  • acheter des vrais certificats, du moins ne pas utiliser des certificats auto-signés. C’est tout à fait contre ma pratique et mes habitudes en informatique, mais il faut se rendre à l’évidence : tous les navigateurs font croire que l’on tombe chez des pirates quand le certificat est auto-signé. C’est très triste d’en arriver là. Néanmoins, ayant trouvé des certificats à pas cher, je me fournis maintenant chez RapidSSL pour des certificats que ne m’ont causé aucun problème.
  • pouvoir séparer les noms de domaine sur mon serveur web.

Le deuxième point paraît simple. Il s’agit pourtant d’une grande impossibilité du chiffrement SSL tel qu’il été conçu à l’origine : le chiffrement est effectué sur l’adresse dès l’envoi de la requête par le navigateur, et le déchiffrement n’a lieu sur le serveur qu’après sélection du certificat pour déchiffrer… La sélection du certificat ne peut donc pas dépendre de l’adresse demandée.
Sous Ubuntu, une solution existait jusqu’à maintenant. Utiliser GnuTLS, qui comme son nom l’indique permet l’utilisation du protocole TLS, dernière évolution de SSL. Pourquoi ? Parce qu’avec TLS, il est possible de balancer en clair l’adresse grâce à l’extension appelée SNI. Problème de GnuTLS, c’est un peu instable et il arrive notamment en cas de requêtes multiples de se voir servi par un mauvais certificat : on retombe sur les messages d’erreur, encore plus dérangeant parce qu’incompréhensibles vu que ça fonctionnait une seconde avant…
Apache, le logiciel serveur, supportait le TLS, mais pas le SNI avec OpenSSL. C’était un bug connu, qui a été réparé début août, mais pour Ubuntu Karmic uniquement. Cette version est installée depuis quelques jours (tout juste avant sa sortie finale, soyons fous…) sur mon serveur, et cela marche comme un charme. Il suffit de mettre dans la configuration générale, par exemple /etc/apache2/ports.conf :

Listen 443
NameVirtualHost *:443

puis dans la configuration de chaque site :

<VirtualHost _default_:443>
  ServerName votredomaine.fr
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/votrecertificat.crt
  SSLCertificateKeyFile /etc/apache2/ssl/laclécorrespondante.key
  ...
</VirtualHost>

À noter aussi l’existence d’un autre logiciel serveur, Lighttpd. Il a notamment l’avantage d’être plus léger qu’Apache. Je ne l’utilise pas sur mon serveur plus par inertie, parce qu’Apache est parfaitement configuré, mais je l’utilise sur mon portable pour avoir un serveur web de test avec moi, et je le trouve très bien et très réactif. Je pensais qu’il supportait SNI depuis quelques temps, mais visiblement ce n’est le cas que depuis 5 jours. Bref, le choix est ouvert, comme toujours dans le monde libre.

dimanche 25 octobre 2009

Ubuntu karmic freeze on Asus M2n

Ubuntu Karmic is to be released on thursday, and the release candidate is available since a few days. So I tried to install it on a laptop that I don’t really use daily. I installed from scratch, with the live CD, desktop version.

This is a laptop I bought in May 2004, an Asus M2400n. It almost worked…
First, you have to specify on the live CD boot : acpi=off and nolapic by hiting F6. Then, you have no sound but it will work at the end. Installation works fine, as usual. To first boot after installation, you have to hit shift and escape when Loading GRUB is displayed (it’s very quick), then «e» to edit the first menu item and add the same boot options on the kernel line.

There are three things to do to make the release candidate work (hope this will be fix this week). One on Grub to boot properly, and two big issues with the display.

Modify Grub boot options

New in Karmic : Grub2 is finally used, and the famous /etc/boot/grub/menu.lst doesn’t exist anymore. Some explanations are available within the Internet. All you need to know is that you have to modify /etc/default/grub, and particularly the GRUB_CMDLINE_LINUX_DEFAULT variable to add nolapic. Do not add acpi=off, or you will never ear any sound.
After any modification of /etc/default/grub, you have to do sudo update-grub in order to modifiy the Grub intern files.

Kernel issue

The new kernel display handling (Kernel mode-setting, KMS) may be a little buggy… Anyway, with this method and with Intel graphic chipset like the i855GM in this laptop, it makes Xvideo not available (which results in a very buggy display, CPU high load, and unespected reboot with some softwares or websites). To deactivate KMS, you have to add nomodeset] to the boot options in /etc/default/grub.

This two issues can be simply solved by

sudo sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/s/^\(.*\)"$/\1 nolapic nomodeset"/' /etc/default/grub
sudo update-grub

Intel driver issue

The current Intel driver has also some bugs. With this driver, the display freezes sometimes, very quickly after login, even before. It’s only a display freeze, not a system crash at all (computer is still pingable and ssh-ing still works).
I hope most of these bugs will be quickly solved, but till then we can use the vesa generic driver. It’s not as simple as before, because Xorg has also changed, and the famous /etc/X11/xorg.conf no longer exists… But you can write a new minimalist one, only containing what you want to modify. You can this way write in /etc/X11/xorg.conf:

Section "Device"
  Identifier      "Configured Video Device"
  Driver 	  "vesa"
EndSection

Section "Monitor"
  Identifier      "Configured Monitor"
EndSection

Section "Screen"
  Identifier      "Default Screen"
  Monitor         "Configured Monitor"
  Device          "Configured Video Device"
EndSection

Nothing else to do, the configuration file is automatically read as soon as the system reboots or Xorg restarts.

This way, presently my Asus M2400n works fine. Hope this helps.

lundi 10 août 2009

Utiliser Firefox 3.5 sous Ubuntu

Firefox 3.5 est sorti il y a maintenant plus d'un mois. Il ne sera pas intégré dans Jaunty, la version actuelle d'Ubuntu, ni dans les précédentes. C'est normal, c'est une question de stabilité : aucun logiciel ne peut être intégré dans sa nouvelle version après le gel de la version de la distribution. Même Firefox, aussi important soit-il.

Mais il est pourtant possible d'obtenir Firefox 3.5. Rien de très compliqué, mais on pourra faire les choses de façon expéditive ou méticuleuse... Je vous propose la deuxième.

Avant de commencer, installons

On commence par installer Firefox, qui est disponible en dépôt pour Ubuntu Jaunty, si, si :

sudo aptitude install firefox-3.5 firefox-3.5-gnome-support

Firefox 3.5 est disponible par la commande firefox-3.5, alors que la commande firefox est liée à Firefox 3.0.

ls -l /usr/bin/firefox*
lrwxrwxrwx 1 root root 11 2009-08-04 09:07 /usr/bin/firefox -> firefox-3.0
lrwxrwxrwx 1 root root 32 2009-08-04 09:07 /usr/bin/firefox-3.0 -> ../lib/firefox-3.0.12/firefox.sh
lrwxrwxrwx 1 root root 31 2009-07-21 15:08 /usr/bin/firefox-3.5 -> ../lib/firefox-3.5.1/firefox.sh

Pour les plus vieilles versions d'Ubuntu, Firefox 3.5 n'est pas disponible en dépôt et il faut aller le chercher sur le site officiel, puis le décompresser par exemple dans /usr/local/src :

sudo mv firefox*tar.bz2 /usr/local/src
tar -xjvf /usr/local/src/firefox*tar.bz2

et l'utilitaire se trouve alors à /usr/local/src/firefox-3.5

La mauvaise méthode

Je vous vois venir : c'est facile, il suffit de lier la commande firefox au bon endroit

sudo rm /usr/bin/firefox && sudo ln -s firefox-3.5 /usr/bin/firefox

C'est la mauvaise méthode. Pourquoi ? Au moins deux raisons :

  • Rien ne vous assure que le lien ne sera pas remis à la prochaine mise à jour de Firefox. Il a bien été mis là ce lien, il vient pas de nulle part.
  • Vous allez peut-être regretter d'avoir bousillé votre profil Firefox (voir aussi les explications sur Geckozone). C'est ce qui arrive quand on ne fait pas attention.

Une bonne méthode

Il faut savoir que quand une commande est ordonnée (par vous très souvent), l'interpréteur (souvent bash) va chercher dans certains répertoires les uns après les autres. Ceci est réglé par la variable $PATH, que l'on peut voir dans une console :

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

D'abord on cherche dans /usr/local/sbin, puis dans /usr/local/bin, puis... Donc si un firefox se trouve dans /usr/local/bin, celui de /usr/bin ne sera jamais lancé ! Et /usr/local/bin a comme grand avantage de ne pas être écrit par le système (d'où le « local », pour l'écriture locale de l'administrateur). Il suffit donc de faire :

sudo ln -s /usr/bin/firefox-3.5 /usr/local/bin/firefox

Et on pourra avoir Firefox 3.5 avec firefox ou Firefox 3.0 avec /usr/bin/firefox.

Mais la deuxième objection reste toujours valable...

La gestion des profils

Le mieux est de créer deux profils, parce que Firefox 3.5 peut ne pas fonctionner exactement comme la version précédente, et parce que les extensions elles aussi connaissent des versions différentes, compatibles ou non avec les différentes version de Firefox. Pour chaque utilisateur, vous pouvez avoir accès au Gestionnaire de profils par firefox -P. Alors vous pouvez créer ou supprimer un répertoire. Je suppose que celui utilisé jusqu'à maintenant (par Firefox 3.0) est default. Créez-en un nouveau, en le nommant par exemple F3-5 (le point serait gênant). Puis fermez.

Les profils Firefox peuvent être choisis au démarrage du logiciel de deux façons. Avec firefox -P, le Gestionnaire de profils permet ce choix en mode graphique. Avec firefox -P default ou firefox -P F3-5 dans notre cas, on peut choisir directement sans fenêtre supplémentaire le profil voulu.

Nous pouvons donc créer deux lanceurs, que l'on mettra par exemple dans /usr/local/bin/firefox-3.0 :

#!/bin/sh
 
/usr/bin/firefox3.0 -P default $* &

et dans /usr/local/bin/firefox-3.5 :

#!/bin/sh
 
/usr/bin/firefox-3.5 -P F3-5 $* &

Après un

sudo chmod +x /usr/local/bin/firefox*

les commandes firefox-3.0 et firefox-3.5 sont maintenant transformées : ainsi, elles ne peuvent plus lancer le mauvais profil... Il ne reste plus qu'à lier firefox à celle que l'on souhaite :

sudo ln -s firefox-3.5 /usr/local/bin/firefox

(supprimez /usr/local/bin/firefox si vous l'aviez créé précédemment).

On y est presque : derniers détails

Vous venez d'ouvrir Firefox 3.5, et vous vous rendez compte d'une chose abominable : l'interface est en anglais !
No problemo. Après avoir regardé le numéro exact de votre version dans le menu « Aide -> À propos de Mozilla Firefox » (du genre 3.5.x), il suffit d'installer par simple téléchargement l'extension qui va bien, que vous pourrez trouver sur le site de mozilla.org en choisissant là votre 3.5.x puis linux-i686 -> xpi -> fr.xpi. Elle ne s'installe que dans votre profil actuel, le F3-5 (on retrouve l'intérêt de ne pas avoir le même profil pour les deux versions).

Mais où sont passés tous vos mots de passe, vos historiques, vos entrées de formulaires, vos habitudes ?
Facile : fermez le Firefox ouvert, et copiez d'un profil à l'autre les fichiers qui vont bien :

cd ./mozilla/firefox/*.default
cp -a bookmarks.html cert8.db content-prefs.sqlite cookies.sqlite downloads.sqlite formhistory.sqlite key3.db signons3.txt urlclassifier3.sqlite urlclassifierkey3.txt ../*.F3-5

À noter que signons3.txt, contenant vos mots de passe, sera transformé en signons.sqlite désormais. Il restera les extensions à réinstaller, ce que vous pouvez éventuellement vous éviter en recopiant le répertoire extensions. Peut-être qu'il est intéressant de temps en temps de se demander de quelles extensions on a vraiment besoin (je vous conseille fortement Adblock Plus, Flashblock ; Firebug pour les développeurs et TabMixPlus pour ceux qui aiment bien avoir pas mal d'onglets ouverts).

jeudi 6 août 2009

SyntaxHighlighter, php et scripts Bash

SyntaxHighlighter : présentation

J'ai découvert il y a quelques semaines un (gros) bout de code génial. Comme le dit le site dédié, il s'agit d'un code de surlignage syntaxique, ou comment rendre des bouts de codes déjà lisibles encore plus lisibles.

L'utiliser n'est pas très compliqué, puisqu'il suffit de télécharger le dernier .zip, de le dézipper et de regarder ce qu'on trouve. Un répertoire scripts contenant en particulier shCore.js qui est le cœur de la machinerie, ainsi que plein de shBrush*.js, qui contiennent les définitions des syntaxes pour différents langages. Personnellement, je n'ai pas besoin de tout, donc je n'ai choisi de garder que ce qui m'intéresse : Bash, Php, Plain que j'utiliserai souvent, Css, JScript et Sql un peu moins, et puis aussi au cas où Diff, Perl, Python, Xml. Un dossier styles contient lui les fichiers de mise en page css, parmis lesquels shCore.css est obligatoire et ensuite shThemeDefault.css correspond au seul thème écrit en noir sur blanc (les autres font du blanc sur noir, je déteste ça). Sans oublier les trois icônes qui seront affichées dans la toolbar et l'icône de retour à la ligne.

Donc on prend tous ces fichiers, on met tout ça dans un répertoire, appelé par exemple syntaxhighlighter, à la racine du site. Il ne reste plus qu'à modifier les pages web en ayant besoin. Il faut rajouter dans l'entête html :

[html]
  <script type="text/javascript" src="/syntaxhighlighter/shCore.js"></script>
  <link type="text/css" rel="stylesheet" href="/syntaxhighlighter/shCore.css"/>
  <link type="text/css" rel="stylesheet" href="/syntaxhighlighter/shThemeDefault.css"/>
  <script type="text/javascript" src="/syntaxhighlighter/shBrushPlain.js"></script>
  <script type="text/javascript" src="/syntaxhighlighter/shBrushBash.js"></script>
  <script type="text/javascript">
    SyntaxHighlighter.all();
  </script>

Ensuite, tous les paragraphes de type <pre> seront analysés, pour peu qu'on dise à quel langage ils correspondent, en ajustant la classe :

[html]
<pre class="brush: bash">

par exemple. J'ajoute aussi, pour éviter la numérotation des lignes quand il s'agit d'une simple ligne de commande :

[html]
<pre class="brush: plain; gutter: false">

Mais il y a encore deux trois détails à gérer. Petits trucs et astuces pour pouvoir afficher des scripts bash comme cela est réalisé sur mon site.

Pour le transcript, deux problèmes

Balises malgré elles

SyntaxHighlighter transforme tous les chevrons « < » et « > » en entités html correspondantes, respectivement « &lt; » (less than) et « &gt; » (greater than). Ce ne serait pas grave s'il ne le faisait pas seulement pour presque tous les chevrons... Or il cherche à détecter automatiquement les balises (ce qui n'est pas très malin dans du code bash d'ailleurs, ce qui fait que mon adresse mail par exemple était comprise comme une balise, dégradant quelque peu la suite de l'affichage. Total : il faut le faire pour lui.
Au départ, j'avais choisi d'utiliser readline en php, à savoir

[php]
<pre class="brush: bash">
<?PHP  @readline('compil'); ?>
</pre>

Mais transformer les chevrons à l'avance n'est pas beaucoup plus compliqué :

[php]
<pre class="brush: bash">
<?PHP  echo str_replace('<','&lt;',str_replace('>','&gt;',file_get_contents('compil'))); ?>
</pre>

Vous aurez remarqué que du coup, dès que le fichier est modifié, c'est le code de la dernière version qui s'affiche. Zéro maintenance (le fichier compil est un lien symbolique vers /usr/local/bin/compil sur mon serveur).

Décidément, ces chevrons...

Et c'est à ce moment que l'on relit un peu ce qui s'affiche à l'écran, et qu'on se rend compte que plein de chevrons (mais pas tous) sont restés à l'état d'entités html. Alors qu'en enlevant l'influence de SyntaxHighlighter, on obtient bien le résultat attendu. Il m'aura fallu quelques minutes pour me souvenir que lt et gt, sont des mots-clés en bash, justement pour des tests numériques plus grand/plus petit (ouais, tout est lié). Un grand dilemme se pose alors. Soit on laisse comme ça, et le code affiché est faux. Soit on s'arrange pour ne jamais avoir de chevrons (ce qui est impossible quand on a besoin de redirections). Soit on commente les mots-clés gt et lt dans le fichier de définition shBrushBash.js, et tant pis pour leurs rares apparences en tant que tests, où ils ne seront pas colorés comme il faut. J'ai choisi cette dernière solution.

Pour l'aide

Ah, là ça se corse. Au départ j'avais recopié telle quelle la réponse de compil -h. Je me suis dit alors « mais si t'as une coquille dans l'aide ou que tu la modifies, il faudra revenir ici... au secours ». Alors j'ai trouvé un moyen. Après plusieurs tâtonnements et hésitations sur la meilleure fonction php entre exec, system et passthru, j'ai opté pour

[php]
<pre class="aide">
$ compil -h

<?PHP 
exec('[ ! -e compil.help -o compil -nt compil.help ] && compil -h | tr -d "\033" | sed -e "s/\[1m/<b>/g" -e "s/\[0m/<\/b>/g" > compil.help');
@readfile('compil.help'); ?>
</pre>

Explication : la dernière commande lit et affiche un fichier compil.help. On va donc y mettre l'aide. Problème, j'utilise un formatage à base de caractères bizarres qui permettent de mettre en gras du texte en console. On prend donc le résultat de compil -h, on en vire donc le caractère bizarre (grâce à la commande tr -d), puis on identifie le début et la fin des mises en gras, que l'on remplace de façon moche mais fonctionnelle par des balises de formatage html.
Le début est un test, qui permet d'exécuter la commande seulement si compil.help n'existe pas ou est plus ancien que compil. Cela semble fonctionner à peu près correctement.

dimanche 1 mars 2009

latex et césures

Suite de mes découvertes latex du weekend : je me suis rendu compte que beaucoup de césures effectuées automatiquement par Latex étaient incorrectes. Après recherche, mon fichier de log contenait désespérément :
Package babel Warning: No hyphenation patterns were loaded for
(babel) the language `French'
(babel) I will use the patterns loaded for \language=0 instead.

Et cela, malgré toutes les options possibles et imaginables à babel, le package latex de traduction. L'erreur était en fait un peu plus haut dans le fichier de log :
Babel <v3.8h> and hyphenation patterns for english, usenglishmax, dumylang, nohyphenation, loaded.
Il n'y a pas « french » ! La faute à un paquet Ubuntu qui n'est bizarrement pas installé automatiquement, texlive-lang-french.

Il suffisait donc de faire : sudo aptitude install texlive-lang-french. Et après, c'est gagné :
Babel <v3.8h> and hyphenation patterns for english, usenglishmax, dumylang, nohyphenation, basque, french, loaded.

latex et virgule

Petite astuce latex que j'ai découverte hier : l'espace qui est systématiquement insérée derrière une virgule, y compris en mode mathématique, est supprimable. Cette espace me gênait beaucoup, juste parce que c'est moche. C'est un format anglais, et c'est typographiquement incorrect en français.

Après quelques recherche, on trouve plusieurs solutions :

  • rajouter des accolades autour de chaque virgule dans les formules mathématiques. Problème, il faut le faire pour chaque virgule concernée. Moi, mes 135 pages sont déjà écrites, c'est impensable.
  • rajouter une macro des packages de traduction, \nombre{}, autour de chaque formule mathématique. Même problème (même si c'est un peu plus simple à gérer en ligne de commande via sed par exemple).
  • simplement utiliser le package icomma. Intérêt : une seule ligne à changer, et après recompilation toutes les espaces indésirables auront disparu !

Pour ceux qui ont du mal à suivre, plus en détail :

  • Disposer du fichier icomma.sty. Sous Ubuntu par exemple, il suffit d'installer le bon paquet, si ce n'est déjà fait : sudo aptitude install texlive-latex-extra
  • dans le préambule de vos sources latex, insérer \usepackage{icomma}

dimanche 4 janvier 2009

Samsung YP-P2 et Ubuntu

Pour Noël, j'ai eu un lecteur mp3 Samsung YP-P2. Il s'agit, comme présenté dans un très bon site dédié, d'un lecteur sorti fin 2007, dont l'interface est entièrement tactile, à l'instar de l'Ipod Touch. L'écran semble un peu moins « précis » que celui de l'Ipod, mais le comportement général est quand-même très agréable à utiliser.

Trois problèmes majeurs :

  • l'utilisation obligatoire du logiciel Samsung
  • le format propriétaire de la vidéo
  • l'affichage des pochettes (ou cover) des albums

Tout écrire ici serait trop long et illisible. J'ai préféré détailler cela dans une page spéciale. Ce n'était en fait pas très compliqué de résoudre ces trois problèmes.

jeudi 11 septembre 2008

latex (texlive), pdf et fontes horribles

Je viens de trouver la solution d'un problème qui me turlupinait depuis environ 1 an (au moins...).

Mes pdf produits par latex étaient jolis, vus de loin. En se rapprochant de l'écran, pas génial, mais ce n'est pas très grave, les pdf c'est fait pour être imprimé. Plus gênant, beaucoup plus gênant, la sélection de texte étant une vraie plaie, pour ne pas dire que ça faisait n'importe quoi. Dans Evince et dans l'Acrobat Reader d'Adobe, rien à faire. Et je ne parle pas de la recherche de texte... Et le meilleur venait de l'impression : si Acroread n'avait pas grand problème, Evince ramait tellement qu'il en attaquait la plage : saturation du processeur pendant plus de 10 secondes par page, et rendu vraiment abominable sur toutes les imprimantes laser à ma disposition, à peine lisible pour le texte, mais parfait pour les formules et les images. Bref, la fête.

J'ai essayé plein de méthodes pour générer différemment mes pdf. J'utilise couramment ce formidable logiciel qu'est Lyx, avec la compilation via latex+latex+dvips+ps2pdf. La première idée était de changer l'option PDFSETTINGS de ps2pdf, comme indiqué dans la documentation. J'ai réussi à améliorer la qualité des images en réglant cette option à printer, mais rien sur les fontes et l'impression par Evince... Je me suis dit à un moment que c'était Lyx. Depuis, j'ai l'occasion maintenant d'utiliser beaucoup plus du « vrai » latex, avec plein de petits bouts de macros dedans (je m'amuse comme un fou en ce moment :) ), vraiment compilé à la main, et pareil... Au cas où le fautif serait ps2pdf, j'ai essayé pdflatex (que je n'ai pas encore adopté parce que j'ai toutes mes images en ps, fabriquées par le très « original » logiciel de dessin Xfig et l'excellent script fig2ps, qui permet d'avoir simplement des figures avec du texte et des formules latex dedans...). Même résultat.

J'ai donc trouvé la cause de tous ces problèmes. J'imagine que je suis pas le seul à qui ça arrive, mes fichiers tex n'ont rien de particulier, et mes documents lyx sont d'un commun tout juste compensé par la haute valeur ajoutée du contenu scientifique qu'ils contiennent. L'installation d'Ubuntu est récente sur cette machine et sans grande modification. J'ai pourtant mis du temps à trouver. J'espère que des personnes faisant la recherche sur « latex pdf evince impression » ou « latex pdf ubuntu affichage » ou « latex pdf sélection texte » pourront tomber ici...

Le problème venait visiblement de texlive, devenue la distribution latex « officielle » sous Ubuntu depuis Gutsy (tout pile un an), remplaçant petit à petit l'ancienne distribution tetex. Les polices ne sont visiblement pas gérées de la même façon et maintenant (je ne peux pas vérifier comment c'était avant), les lettres sont transformées en images bitmap, à la fois pixellisées (donc moche) et lourdes (donc qui prennent du temps à être envoyées à l'imprimante et de la place sur le disque dur). Deux possibilités pour arranger cela :

  • installer le paquet cm-super, via par exemple sudo aptitude install cm-super. Besoin de rien modifier dans le fichier tex|lyx, les polices moches bitmap utilisées avant (« cm ») seront remplacées automatiquement à la prochaine compilation. Un problème : si dans trois ans vous changez de machine et que vous oubliez que vous aviez installé cm-super, rebelote...
  • rajouter dans le préambule de votre fichier tex l'utilisation du package des polices latin modern : \usepackage{lmodern}. L'inconvénient étant certes qu'il faille modifier vos fichiers actuels, mais l'avantage est qu'ils seront compilés partout pareil. De plus, il paraît (j'y connais rien, c'est ce que j'ai lu) que cette police est un peu plus fidèle aux anciennes polices bitmap que cm-super...

Ce qui est bien, c'est que j'ai un mémoire un peu plus présentable maintenant... :)

jeudi 31 janvier 2008

Lancer totem en fullscreen

J'ai réinstallé récemment l'ordinateur qui me sert de télé/media center. J'ai un certain nombre de fichiers avi, que je regarde de temps en temps. Avant, je faisais ça avec, au choix, vlc, mplayer ou xine. Je me suis décidé à passer à Totem.

Pourquoi Totem ?

Bin simplement parce que c'est le logiciel par défaut de chez Gnome en fait, et donc le truc a priori le mieux intégré à mon environnement. Il est installé par défaut, il ne pause plus de problèmes de codecs comme j'ai toujours eu avant (et qui faisaient que je préférais l'éviter justement). Bref, pourquoi pas...
Autre avantage, il est plus rapide à se lancer que vlc, plus convivial que xine et... bon, ok, rien ne sera jamais mieux que mplayer. :)

Les codecs

Oui, tiens, précisons-le : il suffit d'installer le paquet ubuntu-restricted-extras, et il fait tout le reste... C'est pourtant simple, non ?

Problème : le lancement en plein écran

Moi ce que je veux, c'est juste d'ouvrir de façon systématique mes fichiers en double-cliquant dessus et que ça s'ouvre en plein écran. Je suis flemmard et je ne veux pas appuyer sur F après avoir ouvert le fichier. Avec tous les autres lecteurs, c'est une préférence à régler (dans un menu ou éventuellement un fichier de configuration).

Et là, on tombe sur un os. Impossible de trouver aucune configuration particulière, à part un .gconf/apps/totem/%gconf.xml inutilisable et un .gnome2/Totem/state.ini minimaliste. Le tout est visiblement mal documenté, ou du moins après avoir longtemps cherché je n'ai rien trouvé. Le menu des préférences bien sûr ne sert à rien.

Le man nous dit qu'il existe une option --fullscreen, mais uniquement pour Passer en plein écran une instance existante de Totem. Bon... Mal barrée cette histoire.

Et là, l'idée : créer un fichier /usr/local/bin/totem, qui sera systématiquement lancé à la place de l'original /usr/bin/totem, et y mettre ce qui va bien :

#!/bin/bash
 
[ "$TERM" != xterm ] && /usr/bin/totem $* || /usr/bin/totem "$*" &
sleep 1
/usr/bin/totem --fullscreen

Explications :

  1. On lance /usr/bin/totem avec tous les arguments qu'on lui passe (en particulier, les noms de fichiers). Il faut échapper les noms si on lance totem en console, c'est pour ça que c'est un poil compliqué.
  2. On attend une seconde, le temps que totem ait démarré. Sur une machine qui met un peu plus de temps, il faut rallonger...
  3. On passe en plein écran.

C'est améliorable, je prends toute idée utile...

Edit 10 jours plus tard : J'avais oublié qu'il y a deux façon de prendre tous les arguments d'un script : "$*" concatène tout le monde entre des guillemets, on ne voit plus qu'un «mot»; "$@" met chaque argument entre des guillemets et les sépare par une espace, on voit le bon nombre de «mots». Il suffit donc de faire :

#!/bin/bash
 
/usr/bin/totem "$@" &
sleep 1
/usr/bin/totem --fullscreen

samedi 5 janvier 2008

Installation d'Ubuntu sur un portable Packard Bell EasyNote BG46-P-018 (12") (1/2)

J’ai acheté un nouveau portable pour Noël (pas pour moi, pour Amélie en fait). Il s’agit d’un ultraportable. Le choix est restreint sur ce segment, sachant qu’on voulait un portable à la fois léger (2kg max) et puissant (processeur Intel Core 2 Duo T7100 minimum), et le tout sans mettre plus de 1300€.

Lire la suite...

mercredi 4 juillet 2007

Histoire de clavier

Juste pour le garder à l'esprit, ça pourrait servir (piqué sur le blog de Damocles, en licence CC-ASA) :

Disposition du clavier français sous Linux

Ça peut toujours servir. Au passage, ceux qui n'étaient pas au courant noteront combien il est facile de taper des accents sous Linux...

vendredi 6 octobre 2006

aptitude et paquets marqués 'delete'

Hier, un collègue me demande pourquoi est-ce que, quand il utilise aptitude, il voit des paquets avec marqué 'id' en début de ligne. Après une recherche dans Google, impossible d'avoir un embryon de réponse. En fait, il faut lire le fichier /usr/share/doc/aptitude/html/index.html (dans Firefox par exemple). On y trouve, en plein milieu, que ce 'd' signifie que le paquet est vu par aptitude comme devant être bientôt supprimé (mais le paquet est bien installé et fonctionnel). Ce n'est donc pas gênant, puisque tout fonctionne normalement, mais c'est juste un peu moche...

La solution, elle est indiquée dans le même fichier, elle consiste à taper pour chaque paquet

sudo aptitude install nom_du_paquet:

Mais dans le cas de mon collègue, c'est assez usant, il y a au moins 40 paquets concernés... Alors là je lui dis "pas de problème, je te le fais en une ligne", et je fais mon malin :

  • voir tous les paquets de votre système (attention, c'est très long) :
sudo aptitude search "~A"
  • voir seulement les lignes commençant par 'id' ('i' = paquet installé)
sudo aptitude search "~A" | grep -e "^id"
  • sur chaque ligne choisie, ne garder que le nom des paquets
sudo aptitude search "~A" | grep -e "^id" | sed 's/^[idA]*[ ]*\([a-z0-9.+-]*\)[ ]*.*$/\1/'
  • ne garder que le nom des paquets, mais y ajouter à chacun deux points
sudo aptitude search "~A" | grep -e "^id" | sed 's/^[idA]*[ ]*\([a-z0-9.+-]*\)[ ]*.*$/\1:/'
  • enfin, passer tout ça à sudo aptitude install
sudo aptitude install `sudo aptitude search "~A" | grep -e "^id" | sed 's/^[idA]*[ ]*\([a-z0-9.+-]*\)[ ]*.*$/\1:/'`

(Attention, les trois types de guillemets sont utilisés, et ici ne sont pas interchangeables...)