lundi 13 septembre 2010

Nettoyer automatiquement la liste de fichiers/documents récents

Il peut être intéressant de nettoyer les fichiers récents de certaines entrées sans pour autant supprimer toutes les entrées.

J'ai donc un exemple de script qui pourra vous aider dans ce sens.

Pour l'utiliser, créez un fichier (par exemple "monScript") et copiez-y le code suivant:

#!/usr/bin/perl
use strict;

###
# To configure everything
  # File to clean (actually only xml-built with boommark as keyword at the moment)
my $file = "/home/login/.recently-used.xbel"; #replace by your login
my $filter_keyword_bgn = "<bookmark ";
my $filter_keyword_end = "<\/bookmark>";

  # List of regexp to look for
my @searched_list = (
          "searched_keyword_1"
#        , "searched_keyword_1" # keyword2, etc...
             );

  # Actions: 1=leave only if keyword found ; 0=remove if keyword found
my $const_action  = 0;

###
# Must not be modified
my $copy = 1; # Initialize to 1 to copy the begining of the file

my $tmp_file = $file.".tmp";
my $tmp_regexp;

#Processing
if (-f $file ){
  #Filtered copy to a temporary file
    open (FILE_SRC , "<".$file);

    unlink $tmp_file if (-f $tmp_file);
    open (FILE_DST , ">".$tmp_file) or die();

    while (<FILE_SRC>){
        if ($_ =~ m/$filter_keyword_bgn/i) {
            $copy = !$const_action;

          #Loop on filter_keyword
            foreach $tmp_regexp (@searched_list) {
                if ($_ =~ m/.*$tmp_regexp.*/i) {
                    $copy = $const_action;
                    last;
                }
            }
        }
        print FILE_DST $_ if (1 == $copy);
        $copy = 1 if $_ =~ m/$filter_keyword_end/i;
    }

    close (FILE_DST);
    close (FILE_SRC);

  #Final copy from the filtered result to the original file
    #Erase the previous file
    unlink $file;

    #Open the files in read or write
    open(FILE_SRC, "<".$tmp_file);
    open(FILE_DST, ">".$file);

    #Copy the result to the original file
    while (my $len = sysread(FILE_SRC, my $buffer, 512))
    {
      syswrite(FILE_DST, $buffer, $len);
    }
    close(FILE_DST);
    close(FILE_SRC);

    #Remove the temporary file
    unlink $tmp_file;
}

Comme c'est du perl vous aurez besoin de ce paquet : perl

Rendez votre fichier exécutable et copiez-le dans un dossier bin inclus dans votre path (echo $PATH dans un terminal).

Pour le configurer: cherchez la liste @searched_list et mettez tous les mots clefs qui vous intéresse (rechercher des infos sur les tables dans perl si vous ne savez pas comment faire).

Vous pouvez choisir d'effacer ou ne laisser uniquement les entrées que vous mettez dans @searched_list grâce à la variable $const_action.

Il ne reste plus qu'à exécuter le script régulièrement en l'ajoutant à cron.

samedi 4 septembre 2010

Scanner HP scanjet 4600 et ubuntu

Bon, ce scanner, c'est une longue histoire, mais en résumé, c'est la cause de mes 3 précédents échecs avec Ubuntu et de retour à Windows.

Mais ça y est j'ai trouvé la solution!

Je n'ai rien créé, car j'ai trouvé la solution à mes problèmes ici:

Lien

Pour les non anglophones, voici une aide à l'installation (plusieurs manip' pas forcément évidentes sont au programme):

Prérequis:
Pour l'installation des packages via firefox, voir ici
Paquets: libusb-1.0-0, libusb-dev et gcc


Installation:
Récupérer les fichier depuis le site cité ci-dessus ou depuis les liens suivants:
hp4600-scanfullpage11.c > qui se chargera de lancer le scan de la page
fixhp4600output02.c > qui se chargera de corriger une différence de codage des couleurs entre la sortie du scanner (RGB) et un fichier bitmap (BGR). Si vous êtes curieux, essayez avec une image qui tire vers le orange, elle s'affichera dans des tons bleus. Plutôt étrange...

Ces fichiers sont des sources, il faut donc les compiler:
Ouvrez un terminal et placez vous dans le répertoire où vous avez enregistré ces 2 fichiers.
Puis:
sudo mkdir out
sudo gcc -o out/hp4600-scanfullpage11 hp4600-scanfullpage11.c -lusb
et
sudo gcc -o out/fixhp4600output02 fixhp4600output02.c

Vous avez 2 jolis exécutables qui vous permettent de scanner désormais.

Pour permettre leur reconnaissance par le système, copiez-les au bon endroit et avec les bons droits (ainsi il sera possible de les exécuter de n'importe où):
sudo chmod 4711 ./out/*
sudo mv ./out/* /bin
sudo rmdir ./out
Utilisation:
Scan: hp4600scanfullfile nom_du_fichier_scanne.bmp
Correction: fixhp4600output02 nom_du_fichier_scanne.bmp > nom_du_fichier_final.bmp


Je suis en train de finaliser un script qui lancera les 2 dans la foulée, avec une option de conversion en pdf. Une fois achevé, sage ich euch bescheid :D