Import en masse de photos dans F-spot: une solution ;-)

Depuis pas mal de temps, j’accumule les photos numériques comme beaucoup d’entre vous. J’en suis à 14000 photos en 8 ans, mon système de classement en dehors de tout logiciel de gestion de photos, se base sur une arborescence chronologique.

Capture-Photos2007 - Navigateur de fichiers

On voit bien les limites de ce système, il manque une gestion efficace des tags. Après avoir testé divers produits: digikam, picasa, jbrout, mon intérêt s’est porté sur F-spot. Étant utilisateur de Gnome, c’est celui qui semble le mieux intégré à l’environnement. Les fonctionnalités sont intéressantes, mais il manque cruellement d’une fonctionnalité d’import en masse qui marche (l’import prévu dans f-spot ne permet pas de dépasser le millier de photos sous peine de saturer toute la ram) et qui ne perturbe pas mon classement en dossiers. Après une petite analyse de leur système de stockage des metadata (sqlite3), voici un petit script perl vite fait qui permet d’importer en masse sans déplacer vos photos.

[code lang= »bash »]

sudo apt-get install libdbd-sqlite3-perl libdate-manip-perl libdbi-perl libimage-exiftool-perl

wget https://www.equinoxefr.org/wp-content/uploads/2008/07/import2fspot.pl

chmod +x import2fspot.pl

[/code]

Lancez maintenant F-spot une première fois si ce n’est pas déjà fait afin qu’il créé une base de donnée vierge.

F-spot vide

Quittez F-spot,ensuite, dans un terminal, lancez l’import.

Capture-pierre@EquinoxeFR: ~-.gnome2-f-spot.png

Quelques minutes plus tard, vous voilà avec toutes vos photos importées dans F-spot. Voilà les temps relevés avec la commande time pour importer 13800 photos:

real    17m28.227s
user    12m12.038s
sys    0m23.117s

Les photos sont toutes taggées avec le nom du répertoire dans lequel elles se trouvent pour ne pas perturber le classement par répertoire. Normalement, les photos déjà importées ne sont pas réimportées.

F-Spot bien rempli

Je n’ai pas importé les éventuels tags exifs existants dans les photos (je n’en ai pas) mais ce n’est pas très difficile à faire. Si jamais quelqu’un s’y intéresse, merci de m’envoyer le code, je publierai les modifs ici 😉

Rémy vous propose une nouvelle version disponible ici http://zouf.org/public/import2fspot.pl Merci 🙂

Grisbi et un compte de la BanquePostale

Etant utilisateur de grisbi et titulaire d’un compte à la BanquePostale, je souhaitais contrôler facilement mes comptes au travers du service Videoposte.

Comme d’habitude, mon fidèle ami Perl est là pour m’aider 🙂

Grisbi est un excellent logiciel de comptabilité personnelle. Seulement voilà, il permet d’importer des fichier pour faire des pointages, mais pas de les récupérer directement sur les sites internet des banques. Voilà un petit script perl pour combler cette lacune.

Tout d’abord, il faut récupérer le module Perl permettant d’accéder au site web de votre banque, ici la BanquePostale.
[code lang= »bash »]
wget http://search.cpan.org/CPAN/authors/id/P/PI/PIXEL/Finance-Bank-LaPoste-4.00.tar.gz
tar xvf Finance-Bank-LaPoste-4.00.tar.gz
cd Finance-Bank-LaPoste-4.00
perl Makefile.PL
make sudo make install
[/code]
Ensuite, il fait créer le script videoposte.pl suivant:

[code]

#!/usr/bin/perl -w

use Finance::Bank::LaPoste;
use POSIX;

my @accounts = Finance::Bank::LaPoste->check_balance(username => « XXXXXX »,
password => « NNNNNN »);

foreach my $account (@accounts)
{
my $date=strftime(« %Y%m%d », localtime);
my $qifdate=strftime(« %d/%m/%Y », localtime);
my $filename=$account->;account_no. »_ ».$date. ».qif »;
open(FD, »> $filename » );
print FD « !Type:Bank\n »;
print FD « D ».$qifdate. »\n »;
print FD « T ».$account->balance. »\n »;
print FD « CX\n »;
print FD « PSolde\n »;
print FD « L[« .$account->name. »]\n »;
print FD « ^\n »;
foreach ($account->statements)
{
my ($y,$m,$d)=($_->date =~ m/(\d+)\/(\d+)\/(\d+)/);
print FD « D ».$d. »/ ».$m. »/ ».$y. »\n »;
print FD « P ».$_->description. »\n »;
print FD « M ».$_->description. »\n »;
print FD « T ».$_->amount. »\n »;
print FD « L[Import AUTO]\n^\n »;
}
close(FD);
}

[/code]

Pensez à remplacer les XXXX et NNNN par vos numéros de compte et votre mot de passe. Ensuite, le script va vous créer autant de fichier QIF que vous n’avez de comptes. Chaque fichier contient votre relevé de compte des 30 derniers jours. Vous pouvez par exemple placer ce script dans la crontab pour qu’il vous récupère vos relevés de comptes toutes les semaines.

Vous n’avez plus qu’à importer ces fichiers dans grisbi pour pointer automatiquement vos opérations.

Je n’ai pas testé, mais le script doit fonctionner pour les autres banques, il suffit juste d’utiliser le bon module Perl.

Comme il est précisé sur le site de l’auteur, celui-ci vous invite à relire son code pour s’assurer de son intégrité (On ne sait jamais, quand il s’agit d’argent…).

Amusez vous bien 😉

[EDIT 5/04]: Module perl mis à jour en version 4.00 pour supporter la nouvelle authentification mise en place par la Banque Postale.

BibblePro et les RAW

Voilà quelques temps que j’utilise BibblePro pour exploiter les images RAW de mon appareil photo. Oui, je sais, ce n’est ni libre ni gratuit… mais je n’ai pas trouvé mon bonheur en libre et en plus il est bien alors j’ai craqué…

main_browser_800.jpg

Continuer la lecture de « BibblePro et les RAW »

GNU Linux Magazine N°100 et les articles du CD

Avec la super initiative de GLMF, vous voilà avec quelques 550 articles sur un CDROM. Voilà une petite astuce pour les exploiter au mieux 😉

lmag100.jpg

A l’ouverture du CD, j’ai été un peu déçu de ne pas trouver un sommaire pour exploiter cette mine d’informations. Qu’à cela ne tienne, un petit coup de PERL et nous voilà avec un apercu HTML de la première page des articles. Le script calcule le nombre de pages de l’article grâce à l’information contenue dans le nom du fichier et le compare avec le nombre de pages du PDF afin de déduire s’il s’agit d’un fichier avec un copyright normal ( 1 page au début ) ou avec une licence Creative commons (2 pages au début et 2 à la fin). Le script génère alors un aperçu PNG de la 1° page de l’article qu’il insère dans une page HTML.

voilà les actions à faire pour mettre en oeuvre le script. Les pdf sont copiés sur le disque dur pour plus de confort. (450Mo)

mkdir -p GLMF/PDF
cd GLMF
wget https://www.equinoxefr.org/public/build_index.pl
sudo apt-get install libpdf-api2-perl imagemagick
cd  PDF
find /media/cdrom/ -iname "*.pdf" -exec cp {} ./ \;
cd ..
./build_index.pl
reset

On aurait pu aussi supprimer les pages « gênantes », ce que j’aurais fait sans scrupule s’il s’était agit d’une pub et non d’une licence (Cf GLMF N°97 P82) . On aurait juste aimé que ces pages soient en fin de fichier et non au début afin de ne pas perturber les aperçus de fichiers.

Capture-Index_Linux-Magazine_-_Mozilla_Firefox.png

Voilà le script, fait à la « vas vite » mais qui marche sauf pour quelques PDF qui semblent altérés (un petit bug dans ghostscript entraine un affichage tout pourri dans le terminal d’où est lancé le script. heureusement un coup de reset remet tout en ordre).

#! /usr/bin/perl

use strict;
use PDF::API2;

my $PDF_PATH="./PDF";

mkdir("THUMBNAILS");
open(FD,">index.html");
my $nb=0;
opendir(DIR, "$PDF_PATH") || die "can't opendir ./PDF: $!";
my @files = grep { /\.pdf$/ } readdir(DIR);
closedir DIR;

print FD "<BODY><TITLE>Index Linux-Magazine</TITLE>\n";
print FD "<table border=1>\n";
foreach my $filename (sort(@files))
{
    if ($filename !~ /GLMF_083_014_021/i)
    {
	my $pdf = PDF::API2->open("$PDF_PATH/$filename");
	my $pdf_pages = $pdf->pages;
	$pdf->end();
	my ($mag_num,$page_start,$page_end) = ($filename =~ m/^GLMF_(\d+)_(\d+)_(\d+).pdf$/i);
	my $art_pages = $page_end - $page_start;
	my $copyright_pages = $pdf_pages - $art_pages;
	if (!($nb % 4))
	{
	    if ($nb)
	    {
		print FD "</TR><TR>";
	    }
	    else
	    {
		print FD "<TR>";
	    }

	}
	print "Convert $filename $pdf_pages pages in pdf, $art_pages in article diff:$copyright_pages\n";
	print "Info: Mag n° $mag_num, article page $page_start to $page_end\n";
	my ($base_name) = ( $filename =~ m/(.*?)\.pdf$/i );
	if (! -f "./THUMBNAILS/COVER_${base_name}.png")
	{
	    if ($copyright_pages >= 5)
	    {
	       `convert -scale 400x300 "${PDF_PATH}/${filename}\[2\]" ./THUMBNAILS/COVER_${base_name}.png`;
	    }
	    else
	    {
	       `convert -scale 400x300 "${PDF_PATH}/${filename}\[1\]" ./THUMBNAILS/COVER_${base_name}.png`;
	    }
	}
	print FD "<TD align=center>GLMF Numero $mag_num<br>$pdf_pages pages<br><a href=\"$PDF_PATH/$filename\"> <IMG src=\"./THUMBNAILS/COVER_${base_name}.png\"></a></TD>\n";
	$nb++;
    }
    }
print FD "</table>\n";
print FD "</BODY>\n";
close(FD);