2009/08/05

Du nouveau sous le capot

Depuis quelques temps déjà je me suis mis à essayer de faire du C pour de vrai. Pour cela il me fallait un vrai projet, alors je me suis dit tiens un planet BSD pour les BSDistes actifs francophone ça sera pas mal, du coup j'ai codé CPlanet. Ce qui m'a fait découvir une bibliothèque vraiment choupi s'il en ait pour faire du Web en C : clearsilver.

Résultat : planet.etoilebsd.net

CPlanet est donc un aggrégateur de flux rss et atom (merci libmrss) qui génère un site statique. Il utilise un fichier de conf vraiment simplissime. C'est la solution pour qui souhaite mettre en place un planet sans contrainte, puisque celui-ci n'utilise aucun langage de script, ni de base de données, juste un tout petit binaire.

Tout ça m'a bien motivé alors vlati pas que je me dis que blosxom c'est sympa, mais ça fait pas tout ce que je veux et en plus ça m'oblige à ajouter des lib perl de partout pour les plugins. Je ressors donc mon plus beau vim, mon petit clearsilver tout choupi qui ne me quitte plus et je me lance. Cerise sur le gâteau, je découvre discount, une jolie lib pour transformer du texte en html en suivant la syntaxe markdown.

Resultat : un moteur de blog en C (sous la forme d'un cgi) qui ne nécessite donc pas de langage de script, qui ne nécessite pas non plus de base de donnée toute bloatée. Il reprend le format de post de bloxsom si vous l'utilisiez avec les plugins tags et markdown.

CBlog est bien sûr libre sous license BSD.

Ce blog est donc maintenant propulsé par CBlog version de développement j'ai changé mes rewrite rules afin que le minimum de liens soit cassé.

Et non pour le mauvaise langue ce n'est pas à cause de cblog que mon site de sera pas disponible pendant 15 jours à compter de samedi, c'est pour cause de vacances et de coupure de machine.

EDIT CPlanet et CBlog sont écologiques !!! comme ils ne sont pas plein de bloat de partout, ils vous font économiser du CPU donc des Watts, alors il n'y a aucune raison de ne pas les utiliser.

PS: si vous avez des flux pour le planet à proposer je suis preneur à noter que si les gens sur le planet doivent être francophone, leurs posts n'ont pas besoin de l'être.

2009/04/29

Colorize la vie

Blosxom est très sympathique, très simple à utiliser, dispose de plein de plugin bien foutu, mais j'avais quand même un reproche à lui faire : impossible de trouver un plugin de colorisation syntaxique.

Bref je me dis que ça doit pas être trop compliqué à faire, alors je sors mon plus beau vim et je m'apprête à en code un moi même.

Un petit tour sur le CPAN et je trouve deux projet permettant de mettre des belle couleurs sur du texte :

Je choisis le second car Text::VimColor fait des appels système à vim ce qui ne me plait pas. Ensuite je jette un oeil sur la doc développeur de blosxom, et je me rends vite compte que c'est très très simple de faire de nouveau plugin.

Pour la rédaction j'utilise Markdown, celui-ci génère des blocs de code html entre les balises <pre><code>...</code></pre>, Il ne me reste plus qu'a récupérer le contenu de ces balises, positionner un marqueur pour le choix du langage, et à passer le tout dans la Syntax::Highlight::Engine::Kate, puis de le remettre dans la page d'origine.

Ce qui donne colorize le marquer à mettre en début de bloc est [_langage_], la liste des langages est disponibles dans la doc de Syntax::Highlight::Engine::Kate

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

Pages : 1