tag:blogger.com,1999:blog-357363602024-02-19T08:01:31.718+01:00$ cat blogBrunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.comBlogger75125tag:blogger.com,1999:blog-35736360.post-4967372847075864162016-11-16T09:57:00.000+01:002016-11-16T10:01:09.019+01:00vim colorscheme for Go (golang) : goFunctionCall and goMethodCall<p>In Go, functions are first-citizens and are a type as another. Semantically, this is right but does this have to apply to a theme ? I don't think so.</p>
<p>When i jump from a call to a function or method definition with <code>CTRL-]</code> (<code>CTRL-$</code> for frenchies), i hate seeing the color changing from a <code>*Type</code>'s color to a <code>Function</code>'s color, imho, this lacks consistency.</p>
<p>I understand <a href="https://github.com/fatih/vim-go/blob/master/syntax/go.vim">the choices made by the Go's authors</a> but this blows my mind for a theme. As a non-purist because <a href="https://www.youtube.com/watch?v=oHhgllqSKro">I'm too old for this shit</a>, I think a <code>goFunctionCall</code> and a <code>goMethodCall</code> should be in the group <code>Function</code> and not in the group <code>*Type</code> for a colorscheme.</p>
<p>So, if you are like me, you can add those two lines to your <code>.vimrc</code> (obviously, after loading the wonderful <a href="https://github.com/fatih/vim-go">vim-go</a> plugin):
<pre>hi def link goMethodCall Function
hi def link goFunctionCall Function</pre>
Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-60365367887674588482016-11-13T15:25:00.000+01:002016-11-15T11:44:27.443+01:00Compiling Vim 8.0 - Mac OS X SierraI know <a href="http://brew.sh/index_fr.html">Homebrew</a> but I hate those tools which pollute my system. This is mine. I want to pollute it myself !<br /><br />
<h2>
1. Compile gettext</h2>
<br />
I want <a href="https://www.gnu.org/software/gettext/">gettext</a> but if you don't care about, you can safely skip this step and directly go to 2.<br />
<pre>% cd && mkdir -p src/tarball && cd src
% curl http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.gz -o tarball/!#:^:t
% tar xvzf !$
% cd !$:t:r:r
% ./configure
% make
% sudo make install
% sudo rm -rf /usr/local/share/doc/gettext/examples/</pre>
<p>You can close the dialog box about Java.</p>
<br />
<h2>
2. Compile lua</h2>
<br />
I need <a href="https://www.lua.org/">lua</a> support to test <a href="https://github.com/Shougo/neocomplete.vim">neocomplete</a> but, as for 1., if you don't care about, you can safely skip this step and directly go to 3.<br />
<pre>% cd && mkdir -p src/tarball && cd src
% curl http://www.lua.org/ftp/lua-5.3.3.tar.gz -o tarball/!#:^:t
% tar xvzf !$
% cd !$:t:r:r
% make macosx test
% sudo make install</pre>
<br />
<h2>
3. Compile Vim</h2>
<br />
<pre>% cd && mkdir -p src/tarball && cd src</pre>
<br /><strong>a)</strong> Copy and paste the text below in a file inside the <code>src</code> directory and name it: <code>configuration_vim8</code><br />
<pre>export CONF_OPT_X="--without-x"
export CONF_OPT_GUI="--disable-gui"
export CONF_OPT_PYTHON="--enable-pythoninterp"
export CONF_OPT_RUBY="--enable-rubyinterp"
export CONF_OPT_CSCOPE="--enable-cscope"
export CONF_OPT_MULTIBYTE="--enable-multibyte"
export CONF_OPT_FEAT="--with-features=huge"
export CONF_OPT_FAIL="--enable-fail-if-missing"
export CPPFLAGS="-isystem /usr/local/include"
export CONF_OPT_COMPBY="--with-compiledby='your name <your email>'"
export CONF_OPT_LUA="--enable-luainterp"
export CONF_OPT_LUA_PREFIX="--with-lua-prefix=/usr/local"</pre>
<p>If you skipped the lua compilation (2.), you should remove <code>CONF_OPT_LUA</code> and <code>CONF_OPT_LUA_PREFIX</code> from the configuration file (or copy without the last 2 lines).</p>
<p>Anyway, you should modify the <code>CONF_OPT_COMPBY</code> option to put your name and email.</p><br />
<br /><strong>b)</strong> Copy and paste the text below in a file inside the <code>src</code> directory and name it: <code>apply_patches_vim80</code><br />
<pre>PATCHES=../vim80-patches/*;
for f in $PATCHES; do
echo "Applying patch $f";
patch -p0 < $f;
done</pre>
<br /><strong>c)</strong> Get the vim 8.0 sources:<br />
<pre>% curl ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2 -o tarball/!#:^:t
% bzip2 -dc !$ | tar xvf -</pre>
<br /><strong>d)</strong> Get the patches for vim 8.0:<br />
<p>The vim sources in the tarball are already patched until .0069 version so we only get patches we are interested in.</p>
<pre>% mkdir vim80-patches && cd !#:^
% ftp ftp://ftp.vim.org/pub/vim/patches/8.0/
ftp> prompt
ftp> mget *.007*
ftp> mget *.008*
ftp> quit</pre>
<p>At the date of writing this article, patch 8.0.0083 is the last.</p>
<br /><strong>e)</strong> Apply the patches:<br />
<pre>% cd ../vim80
% sh ../apply_patches_vim80</pre>
<br /><strong>f)</strong> Set up the environment variables for the compilation:<br />
<pre>% source ../configuration_vim8
% env | grep -E 'CONF|CPPFLAGS'</pre>
<p>The above command should show you the environment variables fixed by the <code>configuration_vim8</code> file. If this is not the case, then we are in trouble. Ensure you have not mistyped something in the configuration file.</p>
<br /><strong>g)</strong> Compile vim:<br />
<pre>% cd src
% make distclean
% make</pre>
<p>At this stage, you can use the produced binary to see if vim is correctly build with your options:</p>
<pre>% ./vim --version</pre>
<p>You should see <code>+ruby</code>, <code>+pyhton</code>, <code>+gettext</code> and <code>+lua</code> (for the last two, only if you followed the steps 1. and 2.)</p>
<br /><strong>h)</strong> If all is fine, you can install vim:<br />
<pre>% sudo make install</pre>
<br />
<h2>
4. Make the new vim accessible</h2>
<h4>
<br />
Create a link for vi</h4>
<pre>% cd /usr/local/bin
% sudo ln -s ./vim vi</pre>
<h4>
Modify your <code>~./bashrc</code></h4>
<pre>export PATH=/usr/local/bin:$PATH</pre>
<h4>
Source your .bashrc</h4>
<pre>% . ~/.bashrc</pre>
Done.
<br />
Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-52147033734542907882013-05-09T13:20:00.000+01:002013-05-09T13:20:02.197+01:00Enable write on NTFS for free (Mac OS X Lion / Mountain Lion)<p>1. <a href="http://sourceforge.net/projects/catacombae/files/NTFS-3G%20for%20Mac%20OS%20X/2010.10.2/ntfs-3g-2010.10.2-macosx.dmg/download">Download NTFS-3G</a> and install it.</p>
<p>2. <a href="http://www.tuxera.com/mac/macfuse-core-10.5-2.1.9.dmg">Download MacFuse</a> and install it.</p>
<p>3. <a href="https://github.com/downloads/bfleischer/fuse_wait/fuse_wait-1.1.pkg">Download a patch</a> and install it.</p>
<p>Done.</p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-37868456969769489632013-05-01T14:36:00.000+01:002013-05-01T14:36:55.879+01:00Grub2 - EFI - Asus P8H67-M Pro (Debian Sid 64b)<p>Une mise à jour récente avait cassé le système de boot de ma Debian (écran noir avec curseur clignotant). Ma carte mère est une <a href="http://support.asus.com/download.aspx?SLanguage=en&p=1&s=39&m=P8H67-M%20PRO&os=">Asus P8H67-M Pro</a> avec un bios non mis à jour (version 0806).</p>
<p>
<p>Voici ce que j'ai fait pour retrouver un système de boot fonctionnel.</p>
<h3>Mettre à jour le bios de la CM avec la version 3806</h3>
<p>
Mettre la rom sur un stick USB formaté en FAT et depuis le BIOS, flasher : menu ADVANCED MODE >> TOOLS >> ASUS EZ FLASH UTILITY (merci à Asus pour cet utilitaire très pratique accessible directement depuis le Bios).
<p><a href="http://support.asus.com/download.aspx?SLanguage=en&p=1&s=39&m=P8H67-M+PRO&os=">Lien pour récupérer le nouveau Bios</a></p>
</p>
<p>
<h3>Créer un stick USB avec une <a href="http://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso">netinstall</a> Debian (lien pour AMD64)</h3>
<br>
Depuis un Mac (machine de secours) :
<pre><code>$ diskutil list</code></pre>
(repérer le device correspondant au stick)
<pre><code>$ diskutil unmountDisk /dev/disk1</code></pre>
(modifier /dev/disk1 pour le bon device)
<pre><code>$ dd if=debian-testing-amd64-netinst.iso of=/dev/disk1 bs=512</code></pre>
(adapter le path pour if= et of=)
<pre><code>$ diskutil eject /dev/disk1</code></pre>
</p>
<h3>Booter sur le stick USB de la debian en mode <strong>UEFI</strong></h3>
<br>
Important de booter le stick USB en <strong>UEFI</strong> sinon vous n'aurez pas accès à /sys/firmware/efi/vars y compris en levant le module (modprobe efivars)<br><br>
- Choisir le "rescue mode" (Options avancées, mode de récupération [de mémoire :/]).<br>
- Lancer un shell sur la partition correspondant à la racine du système (/dev/sdax)<br>
<pre><code># mount -va</code></pre>
(pour lever /boot/efi qui ne sera pas monté par défaut)
<pre><code># update-grub</code></pre>
<pre><code># grub-install</code></pre>
<pre><code># efibootmgr -v</code></pre>
(devrait montrer "debian")
</p>
<p>
Au reboot, grub devrait être présent.
</p>
<p>Post rapide en espérant que ça aidera des debianistes ayant le même problème.</p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-91176852052911075942012-07-20T12:40:00.000+01:002012-07-20T12:40:40.669+01:00VIM : Aujourd'hui, c'est TIPEX !<h3>Tip Ex Vim</h3>
<p>Comment automatiser à la volée certaines actions en fonction de son contexte de travail.</p>
<p>On pourrait bien évidemment mettre ces commandes dans son <code>.vimrc</code> mais, à l'usage, il est bien plus pratique de modifier les commandes en fonction des circonstances. <code>:m</code> + <code>flèche vers le haut</code> donnera les précédents mappings et il suffit juste d'en modifier un pour l'usage du moment (donc très rapide).</p>
<p> </p>
<p><object width="500" height="306"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=46084873&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=46084873&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="306"></embed></object></p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-85857916566237991962012-07-13T09:36:00.000+01:002012-07-13T09:42:25.823+01:00VIM : macro<p>Vim possède une notion de macro. Grâce aux macros, on enregistre des actions qu'on peut réutiliser autant de fois qu'on le souhaite.</p>
<p>Classiquement :
<ul>
<li>On enregistre une macro avec <code>q</code></li>
<li>On arrête une macro avec <code>q</code></li>
<li>On utilise une macro avec <code>@q</code></li></p>
</ul>
<p>Si on met la macro dans un registre, ce que j'ai pour habitude de faire, on peut avoir par exemple :
<ul>
<li>On enregistre la macro dans le registre <code>a</code> par <code>qa</code></li>
<li>On arrête la macro par <code>q</code></li>
<li>On utilise la macro par <code>@a</code></li>
</ul>
<p>Dans l'exemple vidéo, on voit qu'il y a 29 lignes en bas à droite, donc on sait qu'il y a 15 noms de fleurs. Une fois exécutée notre enregistrement, il reste donc 14 noms de fleurs à traiter d'où le <code>14@a</code> qui apparait à l'écran.</p>
<p><object width="500" height="306"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=45690636&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=45690636&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="306"></embed></object></p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-85851737538272779542012-07-12T01:45:00.001+01:002012-07-12T10:23:29.328+01:00VIM : Copier/Coller Depuis/Vers une ressource externe<p>Vim possède 26 registres.</p>
<p>Le registre <code>*</code> communique avec le système. C'est celui qu'on va utiliser pour faire du copier/coller</p>
<p>On accède au contenu d'un registre Vim en utilisant <code>"</code></p>
<p>Donc, pour accéder au registre <code>*</code>, on tape <code>"*</code></p>
<p>Voici comment utiliser ce registre pour :
<ul><li>copier un texte provenant d'une source externe dans Vim</li>
<li>coller ailleurs un texte copié depuis Vim</li></ul></p>
<p><object width="500" height="319"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=45611873&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=45611873&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="319"></embed></object></p>
<p>Et si ça ne fonctionne pas avec votre version de Vim, <a href="http://bcarrere.blogspot.fr/2012/07/compiling-vim-73-mac-os-x-lion.html">il vous reste à faire ça</a> ou utiliser <code>:set paste</code>. Un petit résumé de la soirée d'un ami mac-vimiste :) Cela aura au moins eu le mérite de réactiver un peu ce blog.</p>
<p>Pfff... j'ai écrit au moins pour 2 ans, là !</p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com2tag:blogger.com,1999:blog-35736360.post-68740528761161038692012-07-11T22:47:00.000+01:002012-07-12T10:30:43.956+01:00Compiling Vim 7.3 - Mac OS X Lion<h2>Préambule</h2>
<p>Si vous utilisez RVM, passez votre version de ruby sur celle par défaut (livrée avec le système) le temps de la compilation de Vim (surtout avec cette daube de RVM !). Rbenv is more Unix way ! Try it ! Use it ! Eat it !</p>
<p> </p>
<h2>1. Compiler gettext (Mac OSX Lion)</h2>
<p>Si les messages de Vim en français vous importent peu, sautez directement au 2.</p>
<pre>% cd
% mkdir -p src/tarball && cd src
% curl http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.1.1.tar.gz -so tarball/!#:^:t
% tar xvzf !$
% cd !$:t:r:r
% curl https://trac.macports.org/export/79617/trunk/dports/devel/gettext/files/stpncpy.patch -so stpncpy.patch
% patch -p0 < !$
% ./configure --disable-dependency-tracking --disable-debug --without-included-gettext --without-included-glib --without-included-libcroco --without-included-libxml --without-emacs --without-git --without-cvs
% make
% sudo make install
% sudo rm -rf /usr/local/share/doc/gettext/examples/</pre>
<p> </p>
<h2>2. Compiler Vim (Mac OSX Lion)</h2>
<pre>% cd
% mkdir -p src/tarball && cd src</pre>
<h3>Créer les 2 fichiers ci-dessous dans src</h3>
<p>Fichier <code>apply_patches_vim73</code> :</p>
<pre>rep="vim73-patches";
total_patches=$(ls -al ../$rep/7.3.* | wc -l)
for i in $(seq $total_patches); do
echo "Application du patch $i";
patch -p0 < ../$rep/7.3.$(printf "%.3d" $i);
done</pre>
<p>Fichier <code>configuration_vim73</code></p>
<pre>export CONF_OPT_X="--without-x"
export CONF_OPT_GUI="--disable-gui"
export CONF_OPT_PYTHON="--enable-pythoninterp"
export CONF_OPT_RUBY="--enable-rubyinterp"
export CONF_OPT_CSCOPE="--enable-cscope"
export CONF_OPT_MULTIBYTE="--enable-multibyte"
export CONF_OPT_COMPBY="--with-compiledby='Votre nom <votre adresse email>'"</pre>
<pre>% curl ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2 -so tarball/!#:^:t
% bzip2 -dc !$ | tar xvf -
% mkdir vim73-patches && cd !#:^
% ftp ftp://ftp.vim.org/pub/vim/patches/7.3/
ftp> prompt
ftp> mget *
ftp> quit
% cd ../vim73
% sh ../apply_patches_vim73
% source ../configuration_vim73
% env|grep CONF
% cd src
% make distclean
% make
% sudo make install</pre>
<p> </p>
<h4>Créer un lien vi</h4>
<pre>% cd /usr/local/bin
% sudo ln -s ./vim vi</pre>
<p> </p>
<h4>Modifier son <code>.bashrc</code></h4>
<pre>export PATH=/usr/local/bin:$PATH</pre>
<p> </p>
<h4>Ressourcer son .bashrc</h4>
<pre>% . ~/.bashrc</pre>
<p> </p>
Done.
<p> </p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com2tag:blogger.com,1999:blog-35736360.post-28051050671869534142011-06-06T18:14:00.000+01:002011-06-06T18:14:27.378+01:00Crappy sound whith flash on x86_64 (64b) Debian Wheezy<a href="https://bugzilla.redhat.com/show_bug.cgi?id=638477#c38">Linus give us a solution here</a>.<br />
<br />
So, make your <code>mymemcpy.so</code> and prepend the launch of your browser with <code>LD_PRELOAD=/path/to/mymemcpy.so</code>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-33016432383306807522011-05-25T13:36:00.006+01:002011-07-18T11:33:59.119+01:00Compile ruby 1.9.2 using RVM on Debian Wheezy<p><strong>UPDATE 18/07/11 : seems no longer needed with ruby-1.9.2-p290</strong></p>Thin needs openssl support but sslv2 is broken on Debian Wheezy. <br />
So we need a patch to disable sslv2<br />
I made it <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=620998#10">from this one</a> :<br />
<br />
<pre>diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb
index 55e4142..1ab64fa 100644
--- a/ext/openssl/extconf.rb
+++ b/ext/openssl/extconf.rb
@@ -33,6 +33,14 @@ if with_config("debug") or enable_config("debug")
end
end
+##
+## From openssl 1.0, SSLv2 becomes disable by default.
+## If you want to use SSLv2 in ruby, you need config with --enable-opensslv2.
+##
+if enable_config("opensslv2")
+ $defs << "-DENABLE_OPENSSLV2"
+end
+
message "=== Checking for system dependent stuff... ===\n"
have_library("nsl", "t_open")
have_library("socket", "socket")
diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c
index eb7ae29..3155d81 100644
--- a/ext/openssl/ossl_ssl.c
+++ b/ext/openssl/ossl_ssl.c
@@ -107,9 +107,11 @@ struct {
OSSL_SSL_METHOD_ENTRY(TLSv1),
OSSL_SSL_METHOD_ENTRY(TLSv1_server),
OSSL_SSL_METHOD_ENTRY(TLSv1_client),
+#if defined(ENABLE_OPENSSLV2)
OSSL_SSL_METHOD_ENTRY(SSLv2),
OSSL_SSL_METHOD_ENTRY(SSLv2_server),
OSSL_SSL_METHOD_ENTRY(SSLv2_client),
+#endif
OSSL_SSL_METHOD_ENTRY(SSLv3),
OSSL_SSL_METHOD_ENTRY(SSLv3_server),
OSSL_SSL_METHOD_ENTRY(SSLv3_client),</pre>Use with : <br />
<pre>rvm install 1.9.2 --patch path/to/my_patch</pre>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com1tag:blogger.com,1999:blog-35736360.post-12834649046981044692010-07-02T09:08:00.000+01:002010-07-02T09:08:44.456+01:00irb and console rails vim powered<p> </p><h3>Utiliser vim avec l'irb ou la console Rails, ça vous tente ?</h3><p><object width="601" height="338"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13028264&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=13028264&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="601" height="338"></embed></object></p><p>Pourquoi n'est-ce pas natif ? c'est tellement pratique voire indispensable qu'on est en droit de se poser la question :)</p><br />
<h3>Installer 'interactive_editor'</h3><p><pre>gem install interactive_editor</pre></p><p> </p><h3>Modifier son .irbrc</h3><p>On ajoute un p'tit <code>require</code> à son <code>.irbrc</code> :<pre>require 'rubygems' # si ligne absente de votre .irbrc
require 'interactive_editor'</pre></p><p>et... c'est tout ! On peut enfin travailler confortablement avec l'irb ou une console Rails. Magique, je dis... :)</p><p> </p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-78813783588153089142010-06-26T14:47:00.002+01:002010-06-26T14:51:26.591+01:00vim and screen 256 colors - MacOS X Snow Leopard<h3>Nature du problème</h3><p>Je souhaite utiliser des thèmes 256 couleurs avec <a href="http://bcarrere.blogspot.com/2010/05/compiling-vim-72-mac-snow-leopard.html" title="Compiler Vim sur Mac"">Vim</a> et plus spécifiquement le thème <a href="http://www.vim.org/scripts/script.php?script_id=2175" title="Thème railscasts"">railscasts</a> que j'utilisais sous Linux (<a href="http://railscasts.com/about" title="About RailsCasts">thème</a> d'origine TextMate utilisé par <a href="http://workingwithrails.com/person/6491-ryan-bates" title="Ryan Bates">Ryan Bates</a> pour ses <a href="http://railscasts.com/" title="railscasts.com">screencasts</a>). Vim et <a href="http://iterm.sourceforge.net/" title="iTerm">iTerm</a> sont capables d'utiliser des thèmes 256 couleurs. Concernant iTerm, il suffit de choisir 'xterm-256color' dans la section 'Terminal Profiles'. Quant à Vim, il suffit d'ajouter <code>set t_Co=256</code> à son <code>.vimrc</code>.</p><p>Attention, le <a href="http://www.apple.com/fr/macosx/what-is-macosx/apps-and-utilities.html#terminal">Terminal</a> livré avec Leopard ne supporte toujours pas un mode 256 couleurs. De toute façon, vous avez tout à gagner à passer à iTerm si ce n'est pas déjà fait (full screen, profiles à gogo suivant l'activité, etc...)</p><p><strong>Le réel problème vient de la version de <a href="http://www.gnu.org/software/screen/">screen</a> livrée avec Leopard qui ne supporte pas le mode 256 couleurs</strong>. Evidemment, comme j'utilise à outrance 'screen', c'est plus qu'ennuyeux de se retrouver avec un Vim en mode dégradé (surtout lorsqu'on épluche du code Rails à gogo comme c'est mon cas depuis plus d'une semaine). J'ai donc craqué et pris le temps de recompiler 'screen' avec le support du mode 256 couleurs.</p><br />
<h3>Choix des sources</h3><p>A défaut de faire correctement son boulot pour les utilitaires et logiciels en ligne de commande, Apple propose, sans doute pour se faire pardonner, <a href="http://www.opensource.apple.com/" title="Open Source et Apple">des pages sur les logiciels Open Source</a> utilisés pour le Mac. Je suis donc parti des sources de 'screen' pour Mac OS X <strong>version 10.6.4</strong>.</p><p>Je récupère également les sources du 'screen' correspondant à la version '10.6.2' car il manque 3 patches à la version '10.6.4' pour qu'on puisse le compiler correctement en ligne de commande. Les autres patches sont inutiles car les fichiers précédemment concernés ont déjà été modifiés (ils sont <code>__APPLE__</code> powered ^^).</p><br />
<h3>Lignes de commande en mode Canal+</h3><p>J'ai choisi d'utiliser des commandes qui paraitront un peu 'cryptées' pour la plupart. Compiler un programme n'a rien de passionnant, alors autant apporter un peu de fun 'bash' pour le faire. Il suffit de copier les lignes qui suivent <strong>en respectant l'ordre</strong> et <strong>sans rien taper de plus entre chaque commande</strong> pour que ça se passe parfaitement (copier-coller roxe des mamans ours). Une ligne est fortement exagérée (celle du 'cd') et j'avoue que je ne l'aurais jamais tapée si ce n'était pour l'exemple et par nostalgie (cette ligne me rappelle la belle époque du <a href="http://en.wikipedia.org/wiki/Obfuscated_Perl_Contest">Obfuscated Perl Contest</a>).</p><br />
<h3>Compilation et installation de 'screen'</h3><p><pre>cd
mkdir -p src/tarball && cd !#:2:h
wget http://www.opensource.apple.com/tarballs/screen/screen-19.tar.gz -O tarball/!#:^:t
wget !*:gs/9/6
tar xvzf !$:gs/6/9
mkdir !$:t:r:r/patches
tar xvzf !w:$ -C !$ --strip-components=2 *.diff
cd !mk:$:h/!#:$:h:gs/-19/
patch -p0 < ../patches/Makefile.in.diff
patch -p0 < ../patches/config.h.in.diff
patch -p0 < ../patches/configure.diff
./configure --enable-locale --enable-telnet --enable-colors256 --enable-rxvt_osc --prefix=/usr/local --disable-dependency-tracing
make
sudo make install</pre>
</p><h3>Modification du .screenrc</h3><p>Il suffit d'ajouter ces lignes à son .screenrc (comme indiqué dans l'en-tête de railscasts.vim)<pre>attrcolor b ".I"
termcapinfo xterm-color 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defbce "on"
term screen-256color-bce
</pre>où <code>xterm-color</code> doit correspondre à la réponse de <code>echo $TERM</code>
</p><h3>Utiliser son nouveau 'screen'</h3><p>Je ne préfère pas toucher à l'installation d'Apple car je n'ai pas envie qu'une prochaine mise à jour vienne me compliquer la vie ^^. Pour utiliser des programmes recompilés (et donc, déjà existants sur le système), j'opte généralement pour l'utilisation de mon <code>~/bin</code>. Il n'existe pas par défaut, il faut donc le créer si vous ne l'avez pas déjà fait.<pre>mkdir ~/bin</pre></p><p>Depuis son <code>~/bin</code>, on fait simplement un lien vers son 'screen'.<pre>ln -s /usr/local/bin/screen-4.0.3 screen</pre></p><p>Si ce n'est pas déjà fait, on ajoute enfin son <code>~/bin</code> à son <code>PATH</code> (dans son <code>.bashrc</code> ou son <code>.bash_profile</code>) en s'assurant qu'il sera bien le premier à être interrogé.<pre>if [ -d ~/bin ]; then
export PATH=~/bin:$PATH
fi
</pre></p><p><code>which screen</code> doit vous dire que le système utilisera bien le screen nouvellement installé.</p><p>That's all.</p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-76528010718619372792010-05-28T13:16:00.005+01:002010-05-28T13:35:37.658+01:00Installer PyQt 64bits - MacOS X Snow Leopard<h3>Récupérer et compiler les sources de Qt</h3><p><pre>wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz
tar xvzf qt-everywhere-opensource-src-4.6.2.tar.gz
cd qt-everywhere-opensource-src-4.6.2
./configure -arch x86_64
make
sudo make install</pre></p><p>A partir du <code>make</code>, on peut aller prendre un café, promener le chien, faire son ménage et faire ses courses. Prévoyez environ 3h30 de compilation... (pour un iCore5).</p><h3>Récupérer et compiler SIP</h3><p><pre>wget http://www.riverbankcomputing.co.uk/static/Downloads/sip4/sip-4.10.2.tar.gz
tar xvzf sip-4.10.2.tar.gz
cd sip-4.10.2
python configure.py
make
sudo make install</pre></p><h3>Récupérer et compiler PyQt</h3><p><pre>wget http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-mac-gpl-4.7.3.tar.gz
cd PyQt-mac-gpl-4.7.3
python configure.py -q /usr/local/Trolltech/Qt-4.6.2/bin/qmake
make
sudo make install</pre></p><p>C'est tout, on a une jolie version de PyQt 64b qui roxe des mamans ours.</p><p><pre>$ python -c 'import PyQt4; print PyQt4'
<module 'PyQt4' from '/Library/Python/2.6/site-packages/PyQt4/__init__.py'></pre></p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com1tag:blogger.com,1999:blog-35736360.post-9373073798545082762010-05-28T12:40:00.000+01:002012-07-13T09:42:25.825+01:00Compiling Vim 7.2 - Mac Snow Leopard<p>Afin d'éviter des commentaires inutiles, je connais l'existence de <a href="http://code.google.com/p/macvim/" title="MacVim">MacVim</a> mais je ne veux pas l'utiliser pour différentes raisons.</p><h3>Pourquoi compiler une autre version de Vim ?</h3><p>Par défaut, la version de Vim livrée avec Snow Leopard ne supporte pas l'interpréteur ruby et python. Je ne comprends pas pourquoi Monsieur Apple ne compile pas ces options pour Vim alors qu'il livre par défaut une version de Ruby et Python. C'est plutôt incohérent.</p><p>Je me fais ici un bloc-notes (comme souvent) qui pourra servir à d'autres.</p><h3>Récupérer les tarballs de Vim 7.2</h3><p>On récupère tous les tarballs pour disposer d'une version francisée et également pour pouvoir appliquer les patches sur les sources :<pre>wget ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gz
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz</pre></p><h3>Déployer les sources de Vim 7.2</h3><pre>bzip2 -dc vim-7.2.tar.bz2 | tar xvf -
tar xvzf vim-7.2-extra.tar.gz
tar xvzf vim-7.2-lang.tar.gz</pre><h3>Appliquer les patches</h3><p>Les patches pour Vim 7.2 se récupèrent sur <a href="ftp://ftp.vim.org/pub/vim/patches/7.2/" title="Patch Vim">ftp://ftp.vim.org/pub/vim/patches/7.2/</a>.</p><pre>mkdir vim72-patch && cd !$
wget ftp://ftp.vim.org/pub/vim/patches/7.2/*</pre><p>On applique un patch en tapant <code>patch -p0 < ../vim72-patch/7.2.001</code> (en étant dans le répertoire <code>vim72</code> bien évidemment). Comme il y a, à ce jour, plus de 400 patches, il est vivement conseillé de se faire un script pour ne pas y passer trop de temps. Pour information, la version de Vim livrée avec Snow Leopard ne comporte que les 108 premiers patches. J'ai personnellement appliqué tous les patches car il y a quand même quelques patches plus que nécessaires après le 108.</p><h3>Préparer un fichier avec ses options de compilation</h3><p>Créer son fichier avec ses options de compilation est amha le moyen le plus efficace pour modifier ses options et/ou appliquer ses options sur une prochaine version de Vim (on met juste le fichier de côté pour une utilisation ultérieure). Voici le contenu de mon fichier <code>vim_comp_options</code> :<pre>export CONF_OPT_X="--without-x"
export CONF_OPT_GUI="--disable-gui"
export CONF_OPT_PYTHON="--enable-pythoninterp"
export CONF_OPT_RUBY="--enable-rubyinterp"
export CONF_OPT_CSCOPE="--enable-cscope"
export CONF_OPT_MULTIBYTE="--enable-multibyte"
export CONF_OPT_COMPBY="--with-compiledby='Bruno Carrere'"</pre></p><p>Il suffit de sourcer le fichier <strong>depuis le term utilisé pour configurer et compiler Vim</strong> en tapant :<pre>source path_vers_fichier/vim_comp_options</pre>Vous pouvez contrôler que les options de configurations sont bien prises en compte en tapant <code>env|grep CONF</code>.</p><h3>Configuration et compilation de Vim</h3><p><pre>cd vim72/src
make config
make
sudo make install</pre></p><p><image src="http://img.skitch.com/20100528-c4snjp4gybiq5tenxwjy6xyf54.jpg" height="554" width="595" title="Vim 7.2.438" /></p><h4>Pour ceux qui ne veulent pas appliquer les patches</h4><p>Dans ce cas, on rencontre pas mal de soucis et il faut procéder à des aménagements au niveau des options de compilation.</p><p>On commence classiquement :<pre>cd vim72/src
make config</pre></p><p>On édite ensuite le <code>/vim72/src/auto/config.mk</code> comme suit :<pre>DEFS = -DHAVE_CONFIG_H -D_FORTIFY_SOURCE=0
CFLAGS = -g -Os -pipe -mdynamic-no-pic
LDFLAGS = -L. -arch x86_64 -L/usr/local/lib</pre>puis on procède normalement pour la fin :<pre>make
sudo make install</pre></p><p>Je ne conseille vraiment pas cette méthode mais je la renseigne quand même car j'ai vu sur le net pas mal de personnes ayant des soucis avec la compilation de Vim dès lors qu'on n'applique pas les patches et qu'on se cantonne à une base 7.2 (et non 7.2.438 en appliquant tous les patches).</p><p>Vim PoWa !</p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-75895657814068240632010-05-18T10:33:00.000+01:002010-05-18T10:33:08.791+01:00Mettre à jour le JDK Java sur Debian Lenny<div align="center"><object width="601" height="376"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11832519&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11832519&server=vimeo.com&show_title=0&show_byline=0&show_portrait=0&color=00adef&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="601" height="376"></embed></object><br />
</div><p>C'est une vidéo en live, je n'ai pas réalisé de montage. Du coup, comme il s'agit d'une vieille machine de test, je suis désolé pour le passage concernant la construction du paquet qui est un peu long. :/ J'espère juste que votre machine est plus rapide que mon vieux bousin :) </p><p>Si vous avez déjà installé la version Java fournie par la distribution (cf 1. & 2.), vous pouvez directement vous rendre au point 3.</p><br />
<h3>1. Modifier son sources.list</h3><p>Avant de commencer, il faut d'abord s'assurer qu'on a accès aux dépôts complémentaires (les paquets Java sont dans <code>non-free</code> et <code>java-package</code> est dans <code>contrib</code>). Modifiez votre <code>/etc/apt/sources.list</code> en conséquence.<br />
<pre>deb http://ftp.fr.debian.org/debian/ lenny main <strong>contrib non-free</strong>
deb-src http://ftp.fr.debian.org/debian/ lenny main <strong>contrib non-free</strong>
deb http://security.debian.org/ lenny/updates main <strong>contrib non-free</strong>
deb-src http://security.debian.org/ lenny/updates main <strong>contrib non-free</strong></pre>On update ses sources :<pre># apt-get update</pre></p><br />
<h3>2. Installer le JDK 6 Debian</h3><p>Pour maintenir Java, on va s'appuyer sur certains fichiers fournis par l'installation standard de la Debian. Dans un premier temps, on va donc installer le JDK 6 Java classiquement. A ce jour, c'est l'update 12 qui sera installée via le dépôt <code>non-free</code>.<br />
<pre># apt-get install sun-java6-{jdk,plugin}
# update-java-alternatives -s java-6-sun</pre>Pour contrôle :<pre>$ java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)</pre></p><p>On vérifie que c'est fonctionnel en se rendant sur <a href="http://www.java.com/fr/download/installed.jsp">java.com</a>.</p><br />
<h3>3. Générer et installer le dernier JDK</h3><p><strong>a.</strong> On récupère le dernier <a href="http://java.sun.com/javase/downloads/index.jsp" title="Download JDK"><strong>JDK</strong> chez Sun</a> (Oracle). Rien de particulier à ce niveau, il suffit de se laisser guider.</p><p><strong>b.</strong> On installe ensuite le paquet <code>java-package</code><pre># apt-get install java-package</pre></p><p><strong>c.</strong> Avant de pouvoir générer le paquet contenant la mise à jour, on va corriger un fichier qui pose soucis sur Lenny car il ne prend pas en compte plus de 9 update pour Java 6 (c'est balot :/).<pre># vi +48 /usr/share/java-package/sun-j2sdk.sh</pre>et modifier la ligne comme suit :<pre>"jdk-6u"[0-9]<strong>[0-9]</strong>"-linux-i586.bin") # SUPPORTED</pre>Modification de la ligne 49 :<pre>j2se_version=1.6.0+update${archive_name:6:<strong>2</strong>}${revision}</pre>Suivant votre architecture, vous serez amenés à modifier les lignes 91-92 (pour amd64) ou 96-97 (pour x64).</p><p><strong>d.</strong> On passe maintenant en <strong>mode utilisateur</strong> et on génère la paquet à partir des sources du téléchargement<pre>$ fakeroot make-jpkg /chemin_vers_jdk_sun/jdk-6u20-linux-i586.bin</pre></p><p><strong>e.</strong> On repasse en root et on installe le paquet généré<pre># dpkg -i sun-j2sdk1.6_1.6.0+update20_i386.deb</pre></p><br />
<h3>4. Finaliser l'installation</h3><p>Malheureusement, le paquet généré à l'aide de <code>java-package</code> ne permet pas d'utiliser tel quel <code>update-java-alternatives</code>. Il faut donc procéder à quelques aménagements.</p><p><strong>a.</strong> On link notre nouveau JDK dans <code>/usr/lib/jvm</code><pre># cd /usr/lib/jvm
# ln -s /usr/lib/j2sdk1.6-sun j2sdk1.6-sun</pre></p><p><strong>b.</strong> <code>update-java-alternatives</code> a besoin de son fichier <code>.jinfo</code>. Comme il n'est pas généré automatiquement par l'installation de notre paquet 'maison', on va le créer en s'appuyant sur celui qui existe pour <code>java-6-sun</code><pre># cat .java-6-sun.jinfo|sed -e 's/java-6-sun[0-9\.-]*/j2sdk1.6-sun/'|sed -e 's/java-6-sun/j2sdk1.6-sun/'|sed -e 's/63/65/' > .j2sdk1.6-sun.jinfo</pre></p><p><strong>c.</strong> <code>update-java-alternatives</code> positionne l'alternative mais ne la crée pas. On doit donc préalablement créer les alternatives. Cela peut être très fastidieux compte tenu du nombre d'alternatives à créer pour Java. Il est finalement plus rapide et confortable d'utiliser un script créé pour l'occasion :<pre>#!/bin/sh
# install-alternatives-for-java-package.sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# modifier jdiralias pour les futures version de Java (1.7 ?)
jdiralias=j2sdk1.6-sun
######################
priority=65
basedir=/usr/lib/$jdiralias
basediralias=/usr/lib/jvm/$jdiralias
jre_tools='ControlPanel java java_vm javaws jcontrol keytool pack200 policytool rmid rmiregistry unpack200 orbd servertool tnameserv'
jdk_tools='HtmlConverter appletviewer apt extcheck idlj jar jarsigner java-rmi.cgi javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc'
browser_dirs='xulrunner-addons firefox iceape iceweasel mozilla midbrowser xulrunner'
PLUGIN=libnpjp2.so
PLUGINPTH=/usr/lib/jvm/$jdiralias/jre/lib/i386/$PLUGIN
for i in $jre_tools; do
update-alternatives \
--install \
/usr/bin/$i \
$i \
$basediralias/jre/bin/$i \
$priority
done
for i in $jdk_tools; do
update-alternatives \
--install \
/usr/bin/$i \
$i \
$basediralias/bin/$i \
$priority
done
for browser_dir in $browser_dirs; do
if [ $browser_dir = xulrunner-addons ]; then
browser=xulrunner-1.9
else
browser=$browser_dir
fi
update-alternatives --quiet --install \
/usr/lib/$browser_dir/plugins/libjavaplugin.so \
$browser-javaplugin.so \
$PLUGINPTH \
$priority
done
update-alternatives \
--install \
/usr/bin/jexec \
jexec \
$basediralias/jre/lib/jexec \
$priority
exit 0
</pre></p><p><strong>d.</strong> On lance le scipt qui va créer les alternatives à notre place :<pre># ./install-alternatives-for-java-package.sh</pre></p><p><strong>e.</strong> Finalement, on utilise <code>update-java-alternatives</code> pour mettre à jour les alternatives avec notre nouveau JDK :<pre># update-java-alternatives -s j2sdk1.6-sun</pre><pre>$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)</pre></p><p>Tout cela peut paraître un peu long pour une mise à jour mais il n'en est rien (la vidéo le démontre puisqu'il faut moins de 10mn pour tout installer). De plus, pour les prochaines mises à jour, on pourra s'arrêter au 3. (tout le 4. devenant inutile tant qu'on ne passe pas à un Java 7 :p).</p><p>En résumé, des efforts minimes pour tenir à jour proprement son JDK "à la Debian".</p>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com1tag:blogger.com,1999:blog-35736360.post-15683222423179646392010-05-12T11:24:00.000+01:002010-05-12T11:24:54.747+01:00Jouer à World of Warcraft sous Debian LennyLe résultat est plutôt bluffant compte tenu de la carte graphique :<pre>$ lspci|grep nVidia
01:00.0 VGA compatible controller: nVidia Corporation GeForce 8600 GT (rev a1)
</pre>et du processeur :<pre>model name : Intel(R) Pentium(R) D CPU 3.00GHz</pre>On joue à WoW avec une fluidité et une qualité graphique difficilement soupçonnables compte tenu du matériel. Même si la vidéo peut laisser penser que c'est parfois saccadé, il n'en est rien, tout est d'une fluidité remarquable (l'encodage se fait avec 15 img/s ce qui provoque quelques désagréments visuels). On peut bien évidemment jouer en plein écran avec le même confort, WoW a juste été fenêtré le temps de la vidéo.<br />
<br />
<center><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11670803&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11670803&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></center>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-23157107425100749352010-05-11T10:23:00.001+01:002010-05-11T10:27:03.001+01:00Chrome, Iceweasel et Flash - 05/10Je suis obligé de passer quelques jours sur un autre système qu'OS X en attendant avec impatience l'arrivée de mon nouveau MacBook Pro. Ne pouvant toujours pas calmer mon urticaire à la vue d'un windows, je remonte rapidement une Debian Lenny Desktop (Ubuntu aussi me file des boutons, désolé, je suis Debian et Mac addict).<br />
<br />
Certaines choses ne me manquaient absolument pas ces 2 dernières années au niveau du desktop. En autres, les galères avec cette technologie douteuse qu'est 'flash'. Vivement qu'HTML5 remplace tout ce qui ressemble de près ou de loin à du flash.<br />
<br />
Je voulais simplement écouter de la musique sur Deezer avec Chrome et là... patatra... navigateur quasi gelé allant jusqu'au reboot de la session X. Burp ! J'apt-get donc un iceweasel et là, carrément pas de flash comme il se doit sur un système libre (sors de ce corps vieux barbu !).<br />
<br />
J'ai donc repris mes vieilles habitudes de 'linuxien goret'.<br />
<br />
Tout d'abord, j'ai téléchargé la version du <a href="http://get.adobe.com/flashplayer/thankyou/?installer=Flash_Player_10_for_Linux_(.tar.gz)">flashplayer en tarball</a>. Ensuite, il suffit de créer un répertoire dans <code>/usr/lib</code> pour y déposer le contenu du tarball.<pre># mkdir /usr/lib/flashplayer && cd !$
# tar xvzf path_vers_tarball/install_flash_player_10_linux.tar.gz</pre><br />
<h3>Iceweasel</h3><br />
On linke simplement la lib du flashplayer d'Adobe à Iceweasel<pre># cd /usr/lib/iceweasel/plugins
# ln -s /usr/lib/flashplayer/libflashplayer.so libflashplayer.so</pre>C'est tout. Après avoir redémarré Iceweasel, <code>about:plugins</code> (dans la barre d'adresse du navigateur) doit annoncer que flash est installé (2 lignes : <code>Shockwave Flash</code> et <code>FutureSplash Player</code>)<br />
<br />
<h3>Google Chrome</h3><br />
Même principe sauf qu'on va remplacer la lib utilisée par défaut par celle qu'on a récupérée (en lui donnant évidemment le nom de la lib d'origine utilisée par Chrome).<pre># cd /opt/google/chrome
# mv libgcflashplayer.so libgcflashplayer.so.orig
# ln -s /usr/lib/flashplayer/libflashplayer.so libgcflashplayer.so</pre><br />
Comme on dit, "chez moi ça marche". Si vous avez une autre solution, n'hésitez pas à lâcher votre commentaire.Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com1tag:blogger.com,1999:blog-35736360.post-39358619382939753912010-05-10T14:54:00.014+01:002010-05-10T15:16:54.051+01:00Installer compiz-fusion sur Debian Lenny - 05/10Une commande qui commence par # est exécutée en tant que root<br />
Une commande qui commence par $ est exécutée avec votre compte utilisateur. <br />
<h3>Nvidia</h3><br />
Tout d'abord, pour ceux qui ont une carte Nvidia, voici la marche à suivre pour respecter le Debian-Way.<br />
<br />
Ajouter les dépôts pour 'contrib' et 'non-free' dans son /etc/apt/sources.list :<br />
<pre>deb http://ftp.fr.debian.org/debian/ lenny main <strong>contrib non-free</strong>
deb-src http://ftp.fr.debian.org/debian/ lenny main <strong>contrib non-free</strong>
deb http://security.debian.org/ lenny/updates main <strong>contrib non-free</strong>
deb-src http://security.debian.org/ lenny/updates main <strong>contrib non-free</strong>
</pre>suivi d'un :<br />
<pre># apt-get update</pre>Installer le nécessaire pour compiler le module<br />
<pre># apt-get install build-essential nvidia-kernel-common module-assistant mesa-utils</pre>et générer le module par :<br />
<pre># module-assistant auto-install nvidia</pre>Si certains paquets manquent, ils devraient être installés.<br />
<br />
Charger le module :<br />
<pre># modprobe nvidia</pre>Ajouter dans son /etc/X11/xorg.conf (faites auparavant une copie de votre <code>xorg.conf</code>, on ne sait jamais ;) la section <code><strong>Module</strong></code><br />
<pre>Section "Module"
Load "glx"
EndSection
</pre>puis fermer la session.<br />
<br />
Ouvrir une session et depuis un Term, lancer la commande :<br />
<pre>$ glxinfo|more</pre>Une ligne de la sortie devrait indiquer :<br />
<pre>direct rendering: <strong>Yes</strong></pre>(dans la foulée, on peut aussi essayer <code>glxgears</code>)<br />
<br />
<h3>Compiz</h3><br />
Installer les paquets nécessaires :<br />
<pre># apt-get install compiz</pre>puis modifier son fichier <code>xorg.conf</code>.<br />
<br />
Ajouter à la section <code><strong>Device</strong></code> les lignes suivantes :<br />
<pre>Driver "nvidia"
Option "AddARGBGLXVisuals" "True"
Option "AllowGLXWithComposite" "True"
</pre>Ajouter à la section <code><strong>Screen</strong></code> :<br />
<pre>DefaultDepth 24</pre>Créer une section <code><strong>Extensions</strong></code> :<br />
<pre>Section "Extensions"
Option "Composite" "Enable"
EndSection
</pre>Pour inscrire compiz en tant que Window Manager par défaut : <br />
<pre>$ echo "export WINDOW_MANAGER=/usr/bin/compiz" >> ~/.gnomerc</pre><br />
<em>cet article a été écrit avec le rustre gnome-blog-poster pour tester.</em>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-53366255532345345802010-04-23T10:51:00.000+01:002010-04-23T10:51:05.302+01:00Premature end of script headersConfiguration :<br />
<ul><li><a href="http://www.modrails.com/">Phusion Passenger</a> 2.0.6</li>
<li>Apache2</li>
<li><a href="http://www.sinatrarb.com/">Sinatra</a> 1.0</li>
</ul>Une méthode POST ne fonctionnait pas et l'erreur Apache était "Premature end of script headers". Erreur totalement inexplicable, à s'arracher les cheveux. La documentation d'Apache sur cette erreur est d'ailleurs plus que laconique.<br />
<br />
Après des tests interminables, j'ai finalement upgradé Passenger vers la version 2.2.11 et tout est rentré dans l'ordre sans pour autant que je ne comprenne vraiment d'où venait cette erreur.<br />
<br />
En ce moment, j'ai un talent fou pour perdre du temps avec ce que j'appellerais “des conneries” :/ Grand gagnant au tirage au sort des bugs en tous genres.Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-83815029375482302792010-04-08T13:02:00.002+01:002010-04-08T13:06:25.628+01:00Le cache de pages avec SinatraLe cache de pages avec <a href="http://www.sinatrarb.com/">Sinatra</a> est extrêmement simple avec le gem <a href="http://github.com/kematzy/sinatra-cache">sinatra-cache</a>.<br />
<pre>require 'sinatra/base'
require 'sinatra/cache'
class MyClass < Sinatra::Base
set :root, 'full_path_vers_mon_app'
register(Sinatra::Cache)
set :cache_enabled, true
set :cache_output_dir, 'full_path_vers_mon_cache'
... / ...
end</pre>Si on utilise <a href="http://www.modrails.com/">Passenger</a>, le minimum fonctionnel pour le fichier de conf est :<br />
<pre>RewriteEngine On
RewriteRule ^([^.]+)$ /mon_cache/$1.html [QSA]</pre>Pour purger une page en cache <code>cache_expire('/path_vers/ma_page')</code>.Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-21500481784911881732010-04-07T14:35:00.000+01:002010-04-07T14:35:37.046+01:00Bundler : un must-have du développeur rubygem <a href="http://gembundler.com/">Bundler</a> gem vraiment beaucoup !<br />
<br />
Ryan Bates le présente dans un de ses <a href="http://railscasts.com/episodes/201-bundler">screencasts dans le cadre de Rails 3</a> mais c'est tout aussi pratique (sinon plus) lorsqu'on développe un petit projet sans Rails.Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-24061628009099822772010-04-07T14:10:00.000+01:002010-04-07T14:10:20.980+01:00DataMapper master branch is now compatible with both active_support and extlib<a href="http://www.mail-archive.com/datamapper@googlegroups.com/msg02509.html">DataMapper master branch is now compatible with both active_support and extlib</a><div><br />
</div><div>humm... humm... à condition d'avoir une version 1.8.7 de Ruby. Je ne sais plus où j'avais lu que la compatibilité avait été testée avec une version 1.8.6 de Ruby mais chez moi, ça ne marche pas :/</div><div><br />
</div><div>J'ai donc du upgrader la version de Ruby de 1.8.6 (patch 287) à 1.8.7 (patch 173) sur un serveur pour que cette news devienne une réalité car, sans cela, extlib (0.9.4) et activesupport (2.3.5) ne faisaient vraiment pas bon ménage (sur un serveur Debian Etch qui commence par dater, il est vrai :p).</div><div><br />
</div><div>Si ça peut éviter à quelqu'un d'autre de chercher quelques longues minutes... ^^</div><div><br />
</div>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-17172032186203739852010-03-26T10:46:00.003+01:002010-03-26T10:59:37.986+01:00Modifier __MyCompanyName__ dans XcodePar défaut, <a href="http://developer.apple.com/technologies/tools/xcode.html">Xcode</a> récupère correctement le nom de l'utilisateur mais renseigne <code>__MyCompanyName__</code> pour le nom de l'entreprise.<br />
<br />
<pre>//
// CooptAppDelegate.m
// Coopt
//
// Created by Bruno Carrere on 26/03/10.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//</pre><br />
Pour modifier <code>__MyCompanyName__</code>, il faut passer par le <a href="http://www.apple.com/macosx/what-is-macosx/apps-and-utilities.html#terminal">Terminal</a> et entrer :<br />
<br />
<pre>defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{"ORGANIZATIONNAME" = "LE_NOM_DE_MON_ENTREPRISE";}'</pre><br />
(en remplaçant évidemment <code>LE_NOM_DE_MON_ENTREPRISE</code> par celui qui convient dans votre cas.)<br />
<br />
Si quelqu'un dispose d'une solution graphique pour modifier cette variable, qu'il n'hésite pas à se manifester ^^Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-53015894337687202082009-10-14T10:30:00.001+01:002009-10-14T10:30:21.104+01:00Django vu par un utilisateur de Rails (1)<div xmlns='http://www.w3.org/1999/xhtml'>Tout ce que vous allez lire est à prendre avec des pincettes car je ne suis qu'au début de ma découverte du framework Django. Je suis donc loin d'être un spécialiste de Django et je ne fais que donner « <b>mon ressenti à chaud</b> » par rapport à un autre framework que je connais mieux : Rails.<br/><br/><b><big>Création d'un projet</big></b><br/>Après avoir installé Django (ce qui fera sans doute l'objet d'un autre article), première surprise de taille à la création d'un projet :<br/><pre>$ django-admin.py startproject taisteuh<br />$ cd taisteuh<br />$ ls<br />__init__.py manage.py settings.py urls.py</pre>On ne peut pas dire qu'on est embarrassé par le nombre de fichiers générés ! Un peu déroutant lorsqu'on vient de Rails mais finalement une bonne surprise pour la courbe d'apprentissage. Comme je ne veux pas transformer ma bafouille en didacticiel, je résumerai en disant que "settings.py" est un peu le pendant "de l'environment.rb et du database.yml cumulés" alors que "urls.py" serait le "routes.rb" de Rails.<br/><br/>Mais alors, où sont mes modèles, mes controllers, mes vues et tout le toutim ? Va falloir y aller à la mimine mon gars ! (python manage.py startapp xxx sera notre ami la prochaine fois)<br/><br/><b><big>Moins de ciment entre les briques</big></b><br/>Bien que ce soit « troublant » lorsqu'on vient de Rails, on ressent rapidement une plus grande liberté d'action et d'organisation ainsi qu'une meilleure compréhension du framework si j'essaie de me rappeler de l'époque de ma prise en main de Rails (même si ça date un peu maintenant). Les briques de Django sont moins étroitement liées que celles de Rails ce qui ouvre un « champ des possibles » plus important en terme d'organisation mais au détriment d'une production de code « initiale » également plus importante. Rails demande moins de code initial mais au détriment de conventions plus lourdes. <i>Il faut penser « à la Rails » alors que je n'ai pas eu l'impression d'avoir à penser « à la Django » jusqu'à maintenant</i> (enfin... beaucoup moins).<br/><br/>On se sent également plus proche du langage sous-jacent (Python pour Django vs Ruby pour Rails). Bizarre comme sensation. Encore une fois, c'est juste un ressenti personnel que je livre « tel quel » sans pour autant me l'expliquer réellement pour l'instant (juste peut-être parce que Rails dispose au départ de plus de « magie » que Django ?). Évidemment, la syntaxe de Python étant nettement moins « human friendly » que celle de Ruby, ça va certainement à terme user mes nerfs et mes yeux (Wait & See).<br/><br/>Du coup, pour un petit projet, Django est certainement beaucoup plus adapté que Rails. L'artillerie à mettre en place est beaucoup plus légère, on n'a pas l'impression de sortir un « canon de 75 » pour tuer un moustique. Attention ! je ne dis surtout pas que Django n'est pas adapté aux gros projets (je pense même l'inverse si j'entrevois bien ses possibilités et sa logique qui me laisse la mienne). Je dis juste que si j'avais un site léger (dynamique ou pas) à mettre en ligne, j'opterais sans hésiter pour Django même en l'état actuel de mes pauvres connaissances (d'ailleurs, si Merb existe, ce n'est pas pour rien ^^).<br/><br/><b><big>MVC ? MVT ?</big></b><br/>Un autre point déroutant au départ est la vision d'un MVC par Django. En résumant, ses vues seraient les controllers de Rails et ses templates seraient les vues de Rails. On pourrait plus parler d'un pattern MVT (Model-View-Template). En fait, en creusant un peu, c'est surtout une histoire de vocabulaire et de définition. Pour Django, les vues décrivent les données qui vont être présentées à l'utilisateur mais ne tient pas compte de la forme (ce sont les templates qui s'occupent de cela). Pour Rails, c'est le contrôleur qui détermine quelles données seront présentées et ce sont les vues qui les mettent en forme. Pas de quoi fouetter un chat une fois qu'on a fait le point sur le sujet. Juste une question d'angle de « vue » (mouarf !).<br/><br/><b><big>Template (équivalent Vues de Rails)</big></b><br/>Le système de templates de base de Django est surprenant mais réellement pertinent. « Surprenant » parce qu'on ne peut pas y insérer directement du code Python et « pertinent » parce que ça oblige à réellement séparer « la logique métier » de la présentation. Avec Rails, on peut rapidement se laisser aller à ne pas respecter ce point (mode goret ON). On doit donc se limiter aux tags de Django même s'il est à noter que sa souplesse nous autorise à utiliser un autre système de template ou à étendre celui existant. Quelques tags m'ont fait sourire car on sent bien l'adéquation aux cas rencontrés. A titre d'exemple, pour les boucles 'for', le 'forloop.counter' permet de savoir le nombre de fois qu'on a parcouru la boucle, le 'forloop.last' (booléen) permet de savoir si c'est le dernier élément de la liste parcourue (et donc, de ne pas mettre de "|" après le dernier élément d'une liste pour un menu par exemple. Le 'forloop.first' existe également). Bref, par expérience, des « tags malins » et une syntaxe 'template' très propre. L'héritage de template devrait permettre de garder une organisation propre tout en offrant un maximum de possibilités (à tester avec des cas m'ayant posé des soucis avec Rails).<br/><br/>Un autre point particulièrement soigné de Django, ce sont les pages d'erreurs. Du bonheur ! Contrairement à celles de Rails, elles permettent réellement d'aider à débugger. Ça dépasse largement le cadre de la page d'erreur. Rails devrait s'en inspirer.<br/><br/>La suite au prochain épisode.<br/><br/><br/><div class='zemanta-pixie'><img src='http://img.zemanta.com/pixy.gif?x-id=4dbd3084-e877-89a1-883b-c368cb03e75c' alt='' class='zemanta-pixie-img'/></div></div>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com0tag:blogger.com,1999:blog-35736360.post-77287413566074204292009-09-30T08:34:00.001+01:002009-09-30T08:34:45.384+01:00Mémo Mac<div xmlns='http://www.w3.org/1999/xhtml'>Fermer une application qui ne répond plus :<br/><b>CMD-OTION-ESC</b> (équivalent du CTRL-ALT-SUPPR de l'autre)<br/><br/>Applications qui se lancent au démarrage :<br/>Préférences Système > Comptes > Ouverture<br/><br/>Quelques raccourcis :<br/><b>CMD-A</b> Tout sélectionner<br/><b>CMD-X</b> Couper<br/><b>CMD-C</b> Copier<br/><b>CMD-V</b> Coller<br/><b>CMD-Z</b> Annuler<br/><b>CMD-F</b> Chercher<br/><b>CMD-T</b> Ouvrir un nouvel onglet<br/><b>CMD-K</b> Se connecter à un serveur<br/><b>CMD-Q</b> Quitter l'application<br/><b>CMD-I</b> Ouvrire la fenêtre d'informations (I comme Info)<br/><b>CMD-TAB</b> Cycler à travers les applications ouvertes<br/><b>CMD-`</b>(sur MacBook) Cycler à travers les fenêtres d'une même application<br/><b>CMD-SHIFT-N</b> Crée un nouveau dossier<br/><b>CMD-L</b> Créer un alias (L comme Link)<br/><b>CMD-D</b> Dupliquer un objet<br/><br/>Réduction de fenêtre dans l'icône de l'application (<b>Snow only</b>)<br/>Préférences Système > Dock<br/>Cocher « Réduction des fenêtres dans l'icône de l'application »<br/><br/><br/><div class='zemanta-pixie'><img src='http://img.zemanta.com/pixy.gif?x-id=341b8ab3-e170-8bd5-9da2-ac071f833d9f' alt='' class='zemanta-pixie-img'/></div></div>Brunohttp://www.blogger.com/profile/02276559527931211899noreply@blogger.com2