Angerwhale

user_icon admin | icon2 Catalyst | icon4 26/7/2007 13h46| Type doc: article| Type File: txt| icon3 2 Comments

Angerwhale


1. Qu'est ce que c'est

Angerwhale est un blog écrit en Perl par Jonathan Rockway dont les documents sont stocké sur le disque. Aucune base de donnée n'est donc nécessaire.

Il intègre un système de cryptographie

Les documents peuvent être publiés sous divers formats ( text , wiki , HTML , POD , ...) et leurs auteurs déterminés par leur signature numérique. Les catégories , commentaires , tags , Feed RSS/XML/YAML sont aussi supportés.

La colorisation assure une lecture agréable des codes source.

Les documents stockés produisent du XHTML1.1 .

En un mot du bonheur ;)

2. Installation

Angerwhale s'appui sur la framework MVC Calayst dont la devise est 'Pourquoi réinventer la roue ?' , et qui de ce fait est créé à partir de nombreux modules Perl déjà développés.

Donc pour installer AngerWhale il nous faut dans un premier temps procéder à l'installation de Catalyst.

Sous Debian les packages Catalyst sont présent dans la distribution. J'imagine qu'ils doivent aussi l'être pour de nombreuses autres.

apt-get install libcatalyst-perl libcatalyst-modules-perl libcatalyst-modules-extra-perl

Testons immédiatement le fonctionnement de Catalyst par la création d'un simple site.

catalyst.pl MonSite
...

cd MonSite
perl script/monsite_server.pl

Vérifons en se connectant à l'url http://localhost:3000/

Et maintenant en avant pour l'installation d'AngerWhale

wget http://search.cpan.org/CPAN/authors/id/J/JR/JROCKWAY/Angerwhale-0.04.tar.gz


tar xvzf Angerwhale-0.04.tar.gz
cd Angerwhale-0.04

perl Makefile.PL
make
make test

On peut maintenant tester AngerWhale

perl script/angerwhale_server.pl

De la même manière on se connecte à http://localhost:3000/

Les yeux émerveillés on découvre ça:

3. Configuration

Angerwhale est très simplement configurable, il nous suffit pour cela d'éditer le fichier angerwhale.yml .

cat angerwhale.yml

- ---
title: Angerwhale
description: Welcome to Angerwhale.  You should change this.
author: Your Name
contact: nobody@example.com
base: __path_to(root/posts)__
sidebar_picture: ~
#date_format: %c
language: en-us
feeds: ~
#feeds:
# - title: "delicious"
#   location: "http://del.icio.us/rss"
#max_feed_entries: 5

# pick your theme, currently "legacy" or "phokus"
theme: phokus
        

On peut donner un nom et une description à notre blog.

Décommenter date_format pour que les dates soient affichée avec la locale qui va bien, changer le thème ...

Un autre fichier permet le paramétrage du blog, il s'agit de root/resources.yml .

Dans ce fichier nous pourrons créer un nouveau thème, ajouter/supprimer un filtre.

4. Utilisation

4.1. Publication de document

Rien de plus simple :)

Dans le répertoire root/posts/ on dépose un document ayant une extension txt par exemple.

echo "Mon premier document au format texte" > root/posts/test1.txt

goto http://localhost:3000/ et merveille ça fonctionne.

On peut aussi tester avec des documents pod, html ... voir les formats supporté dans lib/Angerwhale/Format/

4.2. Les catégories

Une catégorie est représentée par un répertoire et donc si l'on souhaite qu'un document appartient à une catégorie il nous faut le lier à celle-ci.

Et comment fait-on ? par la création d'un lien symbolique vers le document, ainsi le document peut appartenir à plusieurs catégories.

mkdir root/posts/categorie1

mkdir root/posts/categorie2

cd root/posts/categorie1 && ln -s ../test1.txt .


cd ../categorie2 && ln -s ../test1.txt .

Notre document appartient à ces deux catégories :)

4.3. Les tags ou mot clés

Les documents peuvent être "marqués" par des tags. Cela permet en plus des catégories de faire des recherche par mot clés.

Mais pour pouvoir positionner un tag à un document il nous faut dabord nous connecter à Angerwhale. C'est l'objet du prochain chapitre.

5. Signer ses documents

Angerwhale intègre un mécanisme permettant la signature des commentaires et l'authentification utilisateur via clé de cryptage. Voici une méthode pour l'utiliser.

Pour signer un message il faut posséder une clé de cryptage. GPG nous permet d'en créer une simplement:

gpg --gen-key

Nous pourrons ensuite utiliser notre clé fraichement créée pour signer un message

gpg --clearsign --armor  msg.txt

Mouai ... c'est bien beau mais comment Angerwhale saura que cette clé est valide ?

Il faut qu'elle soit connue du reste du monde ...

Nous allons enregistrer notre clé sur un serveur de clé, par exemple http://pgp.mit.edu/ .

Voyons pour cela l'identifiant de notre clé:

gpg --list-keys


/home/gaston/.gnupg/pubring.gpg
- ----------------------------
pub   1024D/12345678 2007-03-31
uid                  gaston athur gaston.arthure at toto.fr
sub   1024g/87654321 2007-03-31

Notre identifiant dans ce cas sera : 12345678

On s'enregistre auprès du serveur de clé avec la commande suivante:

gpg --keyserver pgp.mit.edu --send-keys 12345678
        

Maintenant on force Angerwhale à chercher les clés sur pgp.mit.edu . Dans le fichier angerwhale.yml on ajoute simplement:

keyserver: pgp.mit.edu
        

Une vérification s'impose. Pour cela nous allons tout dabord signer un document et dans un second temp nous connecter à Angerwhale.

cd root/posts/
gpg --clearsign --armor test1.txt
...
        

Et en effet, le nom enregistré dans la clé apparait dans l'entête du message

L'étape suivante est de se connecter à Angerwhale. => Login

Le texte qui apparait dans la fenre de saisie doit être signé. On le copie dans un fichier et on le signe.

Le texte a copier dans msg.txt
- --- !!perl/hash:Angerwhale::Challenge 
date: 1180355692
nonce: 267680616209453840849248415704288288287
uri: http://localhost:3000/


gpg --clearsign --armor msg.txt
        

Le contenu du fichier msg.txt.asc sera à copier/coller en remplacement du précédent.

Et nous voilà connecté :)

Il nous est maintenant possible de poisitonner des tags en cliquant sur le '+' et après avoir indiquer le tag, cliquer sur 'ok' pour confirmer.

6. Etendre Angerwhale

Chaque document lors de se création dispose de divers attributs (author, signed, tags, data ...). Les données (le texte brut) pour être affichées sont passées à travers divers plusieurs filtres. Angerwhale dispose aujourdui de 9 filtres configurés dans root/resources.yml :

  • Encoding : decode les données et metadonnées en utf8 et les transforme en caratères Perl

  • Checksum : ajoute le checksum du document aux metadonnées

  • Title : Le titre du document

  • Author : son auteur

  • PGP : Decode les infos PGP du document et les enregistre dans les metadonnées.

  • Format : j'en parle dessous

  • Summary : Les premières lignes du documents

  • URI : Les urls du documents

  • Finalize : et le dernier qui transfère toutes données receuillies à un objet FinalizedItem

L'un d'eux nous intéresser plus particulièrement : le filtre Format

Ce filtre, comme son nom l'indique, formate les documents en fonction de leur extention. Il existe donc plusieurs 'Formatter' pour les type de documents connus d'Angerwhale. Ainsi un fichier texte utilisera le Formatter PlainText.pm

Si l'on se penche sue celui-ci on constate qu'il dispose d'une methode 'can_format' qui vérifie que le fichier comprte l'extention voulue:

sub can_format {

    my $self    = shift;
    my $request = shift;


    return 100 if ( $request =~ /te?xt/ );

    return 1;    # everything is text, so let this match a little
}

Une autre méthode importante est 'format'. Celle-ci est chargée de formater le texte brut.

Il est donc très simple de créer de nouveaux Formatter :)

A ce propos ce document est créer au format Docbook pour lequel j'ai développé le Formatter DocBook.pm (J'aime ce format très structué :)

Je me suis aussi amusé sur le formatter 'Links' qui permet d'afficher des urls relatives à une catégories.

Toutes les contributions sont bienvenues, Jonathan les acceptera bien volontiers :)

Commentaires:

user_iconUlhume icon4 26/7/2007 - 18h13
WOuata ! Un CMS en ligne de commande, dommage que je n'ai pas découvert cela plus tôt :) En tout cas cela semble bien sympathique sur le concept. Le seul problème que j'y vois est qu'un CMS va un peu plus loin que les documents textes, par exemple des galeries de photos, des vidéos, etc... Et là ça risque de bloquer un peu non ? Enfin cela dépends du "jusqu'où" tu pousses le zinzin.
user_icondab icon4 26/7/2007 - 19h0

Oui en effet ça semble moins adapté car les filtres recoivent le contenu du fichier et s'attendent à y trouver du texte. Mais faut voir :)

Par contre j'ai un pb de cache avec le formateur DocBook. Il reformate le contenu du fichier à chaque chargement de la page et là ça ne va plus :(

De plus le système de connexion est un peu lourd dingue. J'aurai préférer un simple login/pass en sqlite.

La version est 0.0.5, ceci explique cela, il reste néanmoins très prometteur.



Add a comment

Validator_logo
Catapulse v0.06
( 0.116284 s)