2009/04/29

On Change !!

J'en avais ras le bol de l'hébergement Free, j'avais surtout marre de ne pas pouvoir éditer mes billets en vim proprement sans passer par des outils/add-ons tordus, j'ai donc mis un petit blosxom directement chez moi, après l'ajout de quelques plugins : antispam, tags, tagcloud, metaclear, metamail, paging, entries_index, Markdown et writeback, je me retrouve avec un beau blog en perl pour lequel j'édite les news en vim directement, que demande le peuple.

J'ai quand même du me coder moi même un petit plugin pour faire de la colorisation syntaxique des bloques de codes, mais quoi de plus simple avec perl et Syntax::Highlight::Engine::Kate.

Un petit script perl maison pour importer les données de dotclear via l'interface XMLRPC :

use Data::Dumper;
use Encode;
use Date::Manip;
use HTML::WikiConverter;
use RPC::XML::Client;
use RPC::XML;
use strict;

my $xmlrpc = RPC::XML::Client->new('http://baptux.free.fr/index.php?xmlrpc/default');
my $request = RPC::XML::request->new("metaWeblog.getRecentPosts",RPC::XML::string->new("1"),RPC::XML::string->new("bapt"),RPC::XML::string->new("secret"),RPC::XML::int->new(25));
my $result=$xmlrpc->send_request($request);
my %entries={};
for my $value (@{$result->value}) {
        my $filename=encode("utf-8",decode("iso-8859-1",$value->{title}));
        my $title=encode("utf-8",decode("iso-8859-1",$value->{title}));
        $filename =~ s/\s+/_/g;
        $filename =~ s/é/e/g;
        $filename =~ s/è/e/g;
        $filename =~ s/à/a/g;
        $filename =~ s/"//g;
        $filename =~ s/'//g;
        $filename =~ s/\(//g;
        $filename =~ s/\)//g;
        open(FILE,">data/$filename.txt");
        print FILE "Title: $title\n";
        print FILE "Tags: ",$value->{mt_keywords},"\n\n";
        my $content = encode("utf-8",decode("iso-8859-1",$value->{description}));
        $content =~ s/<br\ \/>/<br>/g;
        my $wc = new HTML::WikiConverter( dialect => 'Markdown' );
        print FILE $wc->html2wiki( $content );
        close FILE;
        print $filename, $value->{dateCreated},"\n";
        my $date = ParseDate($value->{dateCreated});
        $entries{"/usr/local/www/virtualhosts/blog/data/$filename.txt"}=UnixDate($date,"%s");
}
open(ENTRIES,">plugins/state/.entries_index.index");
print ENTRIES Dumper \%entries;
close ENTRIES;

Ce script se connecte sur mon ancien blog récupère la liste des posts (25 car je n'en avais que 25) crée dans un répertoire data et fichier .txt pour chaque post, les convertis au format markdown et en utf8.

Afin de conserver les dates des posts, il crée aussi un fichier plugins/state/.entries_index.index contenant les dates epoch de création de chaque post.

Ce script n'est pas parfait j'ai du faire quelques manipulations à la main pour finaliser le formattage des posts, mais il fait quand même le plus gros du boulot.

Par contre j'ai perdu tous les commentaires, dommage.

Dans quelques jours je vous parlerai plus en détail du petit plugin de colorisation syntaxique

EDIT : oui je sais mon code perl est pas beau, on peut faire plus simple et beau mieux :)

EDIT2 : il n'y a pas de grosse base de donnée SQL qui pu derrière, juste du bon vieux flat file

2009/04/18

Changer le disque système sur FreeBSD

La manipulation suivante a été faite sur un FreeBSD 8-CURRENT récent "kern.osreldate: 800074" Je ne sais pas si elle fonctionne sur les versions 7.x out of box. Qui plus est gjournal pour la partition / pose des soucis sur les freebsd plus vieux que FreeBSD 7.2.

La disque système de ma machine commençait à faire des siennes dessus il y avait mon / et mon /home le reste était réparti sur les autres disques durs.

Je voulais donc changer de disque dur sans me prendre la tête (ie sans livecd, sans réinstaller) Comme c'est une machine perso je ne me suis pas pris la tête sur le partitionnement, le disque faisant 80Gio j'ai mis :

J'ai donc rajouté un disque de la même taille sur la machine (il m'en restait un qui traînait dans un coin), enfin n'importe quel disque aurait pu faire l'affaire.

Une fois la machine bootée je me retrouve avec mon nouveau disque (ad2) et mon ancien disque (ad3)

Préparation du disque ad2

Pour le fun je me suis dis que j'allais partitionner mon disque au format GPT, puisque c'est à la mode (ça sert à rien dans mon cas, mais je voulais jouer avec)

j'ai donc détruit le partionnement existant :

$ gpart destroy ad2

Puis recréer en précisant le système de partitionnement GPT

$ gpart create -s GPT ad2

Une vérification que tout c'est bien passé :

$ gpart show
=>       34  156301421  ad2  GPT  (75G)
    	 34  156301421        - free -  (75G)

Les BIOS classiques ne sont pas capable de booter sur du GPT, mais sous FreeBSD il y a une astuce qui marche impeccable

$ gpart add -b 34 -s 16 -t freebsd-boot ad2
$ gpart bootcode -b /boot/pmbr ad2
$ cp /boot/gptboot /tmp
$ dd if=/dev/zero bs=641 count=1 >> /tmp/gptboot
$ dd if=/tmp/gptboot of=/dev/ad2p1 bs=512

ainsi le système est bootable;

j'ai plus qu'à recréer mes partitions

$ gpart add -b 50 -s 20971520 -t freebsd-ufs ad2
$ gpart add -b 20971570 -s 4194304 -t freebsd-swap ad2
$ gpart add -b 25165874 -s 131135581 -t freebssd-ufs ad2

Vérification :

$ gpart show
=>       34  156301421  ad2  GPT  (75G)
	 34         16    1  freebsd-boot  (8.0K)
	 50   20971520    2  freebsd-ufs  (10G)
   20971570    4194304    3  freebsd-swap  (2.0G)
   25165874  131135581    4  freebsd-ufs  (63G)

maintenant j'active le gjournal pour les partitions ufs

$ gjournal label /dev/ad2p2
$ gjournal label /dev/ad2p4

On format le tout (pour rappel sous freebsd pas besoin de formatter les partitions swap

$ newfs -J -L root /dev/ad2p2.journal
$ newfs -J -L home /dev/ad2p4.journal

Le -L signifie que l'on écrit un label ainsi les partitions sont facilement montable grâce à GLABEL qui les représente sous la forme : /dev/ufs/LABEL

Migration des données

maintenant il s'agit de migrer le contenu des partitions / et /home sur les nouvelles le tout à chaud :

$ mkdir /newroot
$ mount -o async /dev/ufs/root /newroot
$ cd /newroot
$ dump -0uanL -f - / | restore -rf -
$ mkdir /home2
$ mount -o async /dev/ufs/home /home2
$ cd /home2
$ dump -0uanL -f - /home | restore -rf -

il faut pour finir modifier la fstab du nouveau root pour rajouter :

Le fichier /etc/fstab obtenu est donc :

# Device		Mountpoint	FStype	Options		Dump	Pass#
/dev/ad2p3		none		swap	sw		0	0
/dev/ufs/root		/		ufs	rw,async	1	1
/dev/ufs/bapt		/home	ufs	rw,async	1	1

Il ne reste plus qu'à rebooter dessus.

2009/01/13

du café commerce équitable pour freebsd

Bon alors voila, depuis quelque temps le support des BSD (MacOS X compris) pour openJDK est officialisé au sein de projet bsd-port.

Ne voyant toujours rien venir dans les ports (on est obligé de se farcir du java pas libre et surtout de ce faire chier à dl à la mano tous les trucs qui vont bien pour pouvoir l'installer en acceptant des licences à droite et à gauche), je dis que je vais me le builder moi même depuis les sources.

Il y a deux possibilités d'avoir l'OpenJDK en libre : la version officielle, et la version icedtea.

Je me suis d'abord rabattu sur la version Icedtea, en effet la version 1.8 annonce intégrer le projet bsd-port. Icedtea me semblait plus simple de prime abord car toutes les dépendances sont testées par les autotools, et qu'un presque simple ./configure && make && make install devrait faire l'affaire.

C'est sans compter sur les linuxismes, en effet, il lui faut gawk, md5sum (appelé md5 sur FreeBSD donc il ne le trouve pas) plus plein de choses à droite à gauche. En ayant eu marre de patcher toutes les 5 mins les autotools, de rajouter les 25000 dépendances qui me sont inutiles, j'ai honteusement lâché l'affaire pour me rabattre sur l'OpenJDK officiel. Et là magique simple et rapide pour le faire (pas rapide à compiler par contre) :

Tout d'abord il faut commencer par préparer son environnement, pour cela il faut installer :

Ensuite il faut récupérer les sources pour cela deux manières : celle recommandée mais chiantes (que j'ai moi) passe par mercurial, l'autre passe par un snapshot mercurial :

installer mercurial ajouter le plugin forest :

$ hg clone http://www.bitbucket.org/pmezard/hgforest-crew/
$ cp hgforest-crew/forest.py /laoujaienvie/forest.py

Puis dans le ~/.hgrc, ajouter :

[extensions]
hgext.forest=/laoujaienvie/forest.py

cloner l'aborescence openjdk :

$ hg fclone http://hg.openjdk.java.net/bsd-port/bsd-port

récupérer les plugs icedtea

$ fetch http://www.intricatesoftware.com/distfiles/jdk-7-icedtea-plugs-1.6a.tar.gz

compiler le tout (attention c'est long)

$ gmake \
ALT_BOOTDIR=/usr/local/diablo-jdk1.6.0/ \
ALT_FREETYPE_HEADERS_PATH=/usr/local/include \
ALT_FREETYPE_LIB_PATH=/usr/local/lib \
ALT_BINARY_PLUGS_PATH=/home/build/jdk-7-icedtea-plugs \
ANT_HOME=/usr/local \
NO_DOCS=true \
HOTSPOT_BUILD_JOBS=1 \
OPENWIN_HOME=/usr/local \
OPENWIN_LIB=/usr/local/lib \
X11_PATH=/usr/local

Attention pour tout cela il vous faudra environ 1.2Go d'espace disque.

Une fois toute cette opération terminée vous obtiendrez dans le rép bsd-port/build un joli répertoire bsd-i586 ou un joli répertoire bsd-amd64 suivant votre archi contenant votre jdk libre tout propre.

La seconde méthode consiste à ne pas utiliser mercurial mais à prendre un snapshot depuis l'hgweb

Par exemple, pour la dernière version disponible :

$ fetch http://hg.openjdk.java.net/bsd-port/bsd-port/archive/tip.tar.bz2

Le reste est identique.

Résultat :

$ /home/build/bsd-port/build/bsd-i586/bin/java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.g7.0-internal-root_2009_01_12_16_54-b00)
OpenJDK Client VM (build 14.g0-b10, mixed mode)

Voila il ne me reste plus qu'a pondre une joli ports et hop.

A noter que pour la permière compilation il faudra quand même diablo-jdk, mais ensuite votre openjdk pourra compiler les nouvelles version d'openjdk.

PS: En fait ça me fait chier les post en Anglais :)

2008/11/10

ZSH 4.3.9 featuring completion improvements for freebsd

First of all from now this blog will be written in english (why? because I decided :))

the news now:

since 3 Nov 2008 zsh 4.3.9 is released it is mostly a bugfix release but for us, there is some interesting things: the inclusion of some of the new functions from our project including burncd, sockstat, fetch and others.

Sorry sbz still no portaudit, but I promise I'll send it soon and it will be in the next zsh release :) (along with _pfctl)

2008/08/25

ZSH les ports et l'arbre de dépendances

voila un petit script zsh qui permet d'afficher sous la forme d'un arbre l'ensemble des dépendances d'un ports donné, je trouve ça très pratique lorsque l'on crée un nouveau ports pour pouvoir vérifier ces dépendances, ou lorsque l'on est sur le point d'installer un ports pour affiner son installation en voyant qu'elle dépendance installe qu'elle dépendance.

Cerise sur le gâteau, comme ce script fait des appels make pour récupérer la liste des dépendance, il prends en compte les options et les knobs que vous avez pu choisir.

#!/usr/bin/env zsh
PORTSDIR=$(make -V PORTSDIR)
function showdep() {
    local level=$1
    cd $2
    all_dep=(${${=${(f)"$(make -V BUILD_DEPENDS)"}}#*:} ${${=${(f)"$(make -V LIB_DEPENDS)"}}#*:} ${${=${(f)"$(make -V RUN_DEPENDS)"}}#*:})
    for dep (${(ou)all_dep}){
        repeat $level print -n "  "
        print ${dep//${PORTSDIR}\//}
        (( newlevel = level + 1 ))
        showdep $newlevel $dep
    }
}
showdep 0 "."

2008/08/07

Amélioration de la completion ZSH sous FreeBSD

Je me lance dans l'amélioration de la completion ZSH sous FreeBSD, N'hésitez pas à venir me faire part de ce que vous souhaiteriez voir améliorer, ajouter.

Seule limitation, l'amélioration ne concernera que ce qui fait parti du userland ou ce qui est spécifique à FreeBSD (portmaster/portupgrade par exemple).

J'ai mis en place en 1s un wiki pour que vous puissiez me faire vos retours/attentes.

Tout ce passe ici

La même chose est en cours depuis un moment pour Gentoo ici

2008/08/07

Amélioration de la completion ZSH sous FreeBSD la suite

Voila ça a commencé, tout est disponible sur ce git pour le moment il n'y a pas grand chose (powerd et fetch) mais ça va grossir, n'hésitez pas à venir m'aider, en codant ou en testant les différentes fonctions de completion.

Vous pouvez suivre l'état d'avancement et me faire des retours ici

2008/07/18

libpuzzle : une lib pour comparer les images

Je maintien un ports pour freebsd de la libpuzzle (développée par Frank DENIS aka Jedi/Sector One)

Pour ceux qui ne le connaisse pas c'est un monsieur qu'il est vachement bien, ma conf ZSH d'origine vient de lui, (elle a beaucoup évoluée depuis) il est l'auteur des très bon logiciels suivants :

Revenons en a libpuzzle, j'ai crée ce ports sans trop connaitre la libpuzzle car c'est un dépendance d'un autre programme que j'utilise et maintien : ftwin

Récemment je me suis intéressé de plus près a libpuzzle, il s'agit donc d'une librairie permettant de comparer des images entre elles, afin de déterminée celles qui sont visuellement identiques, même dans des formats différentes. Cette lib a le bon gout de venir avec un petit utilitaire nommé puzzle-diff, qui permet de comparer en ligne de commande 2 images entre elles.

Un exemple d'utilisation sympathique c'est par exemple la détection automatique d'une image de référence dans un flux vidéos, ainsi quand on encode une série de vidéos enregistrées depuis la freebox ou il y a des pubs au début, il suffit d'avoir une image de référence pour le début de la partie intéressante de la vidéos. Le petit script suivant permet ainsi de déterminer le point de départ de l'encodage a faire :

#!/usr/bin/env zsh
FILM=$1
STARTTIME=1
date
while [ : ];do
    mplayer -really-quiet -ss $STARTTIME -vo jpeg -nosound -frames 1 "$FILM" 2>&1 >/dev/null
    [[ $(puzzle-diff 00000001.jpg startref.jpg) -lt 0.1 ]] && break
    (( STARTTIME = STARTTIME + 1 ))
done
echo $STARTTIME

il suffi ensuite de reporter le $STARTTIME dans mencoder de la manière suivante :

# mencoder -ss $STARTTIME ...

2008/07/18

Merise en console tout simplement

Toi aussi tu dois faire un diagramme merise ? toi aussi tu ne trouve pas d'éditeur correcte pour faire ça.

Par contre du aime les trucs simple bien foutu et qui marchent. Donc ton shell de prédilection c'est forcément zsh, tu utilises latex pour rédiger des documents, du utilises metauml pour faire de beaux diagrammes UML, tes superbes diagrammes sont fait avec pgf et tikz mais tu n'as rien pour le merise.

sbz (sur #freebsd-fr) vient de me donner un lien qui va surement te raviré : merisedot, il s'agit la d'un beau script zsh utilisant Graphviz. c'est beau, c'est simple, ça fait plaisir.

Cerise sur le gateau, ceux qui sont sur #zsh-fr connaissent l'auteur, il s'agit de khatar

EDIT : gros méa culpa sbz de t'avoir confondu avec kimelto, mais il faut dire que kimelto parle tout le temps sur le chan aussi... :)

2008/07/18

Mutt c'est beau, mutt c'est bien

Dans un poste précédent, j'explique que mutt c'était vraiment bien, et que avec le patch sidebar c'était encore mieux, mais que ce patch ne fonctionnait pas dans la sa dernière version si les "folder" sont lu via un serveur imap.

Et bien comme on me l'a gentiment fait remarqué dans les commentaires il y a peu, le 11 juin 2008 ça a été corrigé

June 11, 2008 Fixes the indenting folder patch -- no more null's being displayed.

Je sais c'est vieux, mais comme le gentil porteur du paquet mutt-devel sous FreeBSD n'a pas incrémenté son PORTREVESION quand il a mis à jour le patch, je n'ai pas pu le voir.

Bref testé et approuvé, plus besoin de manip à la con pour avoir mon beau mutt avec une sidebar et des répertoires incrémentés correctement.

Merci au développeur du patch en question.

Pages : 1 2 3 4 5 6 7