Quantcast
Channel: Développement sous GNU/Linux
Viewing all 25 articles
Browse latest View live

Samsung clp-315

$
0
0

J'ai fais l'acquisition d'une imprimante samsung clp-315 mais hélas, pas de driver approprié depuis ma Debian:Squeeze !
Après quelques recherches voici la solution (peut être même une parmi tant d'autres ...)

Rendez vous sur cette page et téléchargez le driver adéquate ...

Dans mon cas, il s'agit du fichier foo2zjs.tar.gz qui se trouve dans la rubrique: Unsupported Printer mais pas de soucis pour la suite ...

Il suffit ensuite d'extraire le fichier, d'ouvrir une fenêtre shell depuis le dossier puis :

$ ./configure --prefix=/usr
$ make
Passer en mode administrateur puis :
# make install
Allez faire un tour dans le menu: Système->Administration->Impression pour valider cette installation.

Ah, au fait, n'hésitez pas à me laisser un commentaire si vous avez trouvé une meilleure ou autre solution ;-)
Bin voilà, c'est déjà fini, bonne impression ...

Canon mg-5150

$
0
0
canon_mg5150.png

Merci à @Antiloque pour son billet d'installation des drivers d'imprimante [ CANON MG5150 ]



imprimante_canon_mg5150.png
Télécharger le fichier printer driver 3.40

Extraction de [ Linux IJ Print Driver_mg5100.tar ]
Déplacez vous dans le dossier [ Linux IJ Print Driver_mg5100 ] ou vous trouverez:
  cnijfilter-mg5100series-3.40-1-deb.tar.gz
  cnijfilter-mg5100series-3.40-1-rpm.tar.gz
  guidemg5100series-pd-3.40-1_en.tar.gz
Extraction de [ cnijfilter-mg5100series-3.40-1-deb.tar.gz ]
Déplacez vous dans le dossier [ cnijfilter-mg5100series-3.40-1-deb ] et executez depuis une fenêtre shell:
  • en mode administrateur:
# ./install.sh
  • en mode utilisateur:
  • $ sudo ./install.sh
    Il vous suffira de répondre aux différentes questions puis d'utiliser enfin votre nouvelle imprimante.


    scanner_canon_mg5150.png
    Télécharger le fichier scanner driver 1.60

    Extraction de [ Linux IJ Scan Driver_mg5100.tar ]
    Déplacez vous dans le dossier [ Linux IJ Scan Driver_mg5100 ] ou vous trouverez:
      guidemg5100series-sd-1.60-1_en.tar.gz
      scangearmp-mg5100series-1.60-1-deb.tar.gz
      scangearmp-mg5100series-1.60-1-rpm.tar.gz
    Extraction de [ scangearmp-mg5100series-1.60-1-deb.tar.gz ]
    Déplacez vous dans le dossier [ scangearmp-mg5100series-1.60-1-deb ]
    executez depuis une fenêtre shell:
    • en mode administrateur:
    # ./install.sh
  • en mode utilisateur:
  • $ sudo ./install.sh
    Le scanner ne fonctionnera qu'avec le programme [ scangearmp ] pour lequel vous pourrez créer un lanceur que vous placerez en barre de tache(s).

    Impossibilité chez moi d'utiliser xsane ou SImpleScan, etc ... :p

    Scriptons un peu ...

    $
    0
    0
     

    script_img.png

    Un même script dans plusieurs langages


    Bof !
    hhhmmmmmm !
    pourquoi pas !
    Cela ne sert pas à grand chose sinon à passer un bon moment ;)

    Sont déjà (ou seulement) présents:

    A la demande de Zarer


    Un script permettant de renommer des fichiers avec les options suivantes:
    J'ai ajouté:
    • Une aide
    • Une fonction de test avec uniquement un affichage des opérations à l'écran
    Le cahier des charges est (très) simple:
    • Gestion des paramètres en ligne de commande
      • Renseigner le chemin
        -p < chemin/ >
        par défaut: $HOME
      • Renseigner le nom de fichier
        -f < fichier >
        par défaut: ketanou_mbiwi
      • Renseigner l'extension
        -e < extention >
        par défaut: jpg
      • Configurer cet utilitaire avec un alias dans $HOME/.bashrc
        -alias < alias >
        par défaut: FALSE
      J'ai ajouté:
      • Une aide
        -h
        par défaut: FALSE
      • Une fonction de test avec uniquement un affichage des opérations à l'écran
        -t
        par défaut: FALSE
      Notez que:
      • Une utilisation du script en mode administrateur pourrait 'downloader' la dernière version et l'installer dans /usr/bin/ !
    • Boucle sur une copie (ou un rename) des fichiers avec prise en compte des paramètres

    Les scripts ...


    Sont ici ...

    Un exemple valant mieux qu'un grand discours


    $ ./renparam.pl -h
    
    ParamFile is:     ketanou_mbiw
    ParamExtFile is:  jpg
    ParamPath is:     $HOME
    ParamTest is:     FALSE
    ParamHelp is:     TRUE
    ParamAlias is:    FALSE
    
    +============================================================
    |  renparam.pl  0.0.6
    |  SCRIPT PERL PERMETTANT DE RENOMMER DES FICHIERS
    |  AVEC INCREMENTATION D'UN COMPTEUR
    |------------------------------------------------------------
    |  BULIN Claude  -  gpl3  -  http://www.xcfa.tuxfamily.org/
    +============================================================
    
    	-p	CHEMIN/		Renseigner le chemin de recherche
    	-f	FICHIER		Renseigner le nom de fichier
    	-e	EXTENTION	Renseigner l'extension
    	-alias	ALIAS		Ajouter un alias dans $HOME/.bashrc
    	-t			Tester avec visualisation du resultat 
    	-h			Cette aide
    	Exemple:
    	   $ ./renparam.pl -p $HOME -f fichier -e png -t
    	   $HOME/file.png  -->  $HOME/fichier_01.png
    	   $HOME/img.png   -->  $HOME/fichier_02.png
    	   ...
    $ ls ori/
     Photo_Paris.png
     Photo_Valence.png
     Photo_Nice.png
     Photo_04.png
     Photo_05.png
     Photo_06.png
    $ ./renparam.pl -f NewPhoto -p ori/ -e png
    $ ls ori/
     NewPhoto_01.png
     NewPhoto_02.png
     NewPhoto_03.png
     NewPhoto_04.png
     NewPhoto_05.png
     NewPhoto_06.png

    SI ...


    ... cela amuse un geek de respecter le cahier des charges pour concevoir un script en Ruby, Python, ... nous pourrons alors compléter la collection !
    ;)

    Améliorer PluXml

    $
    0
    0
     
    • CREATION DE LA BALISE codeshell

        L'idée du contenu de cette structure à été rédigé à une époque fort lointaine par Christophe alias zarer que je salue bien bas ;-)
        Il etait possible d'intégrer un script de coloration syntaxique tel SyntaxHighlighter pour un rendu plus sympa mais Bof ! Pourquoi faire compliqué quand on peut faire (plus) simple ...

      Code à ajouter au fichier css:
      .codeshell {
      	background-color: black;
      	border-left: 10px solid green;
      	color: white;
      	font-size: 13px;
      	font-family:  "Courier New", Courier, Monaco, Lucida, serif;
      	font-weight: normal;
      	margin: 8px 0pt;
      	overflow: auto;
      	padding: 5px;
      	text-align: justify;
      	text-indent: 0px;
      }
      Exemple de code script:
      <pre class="codeshell">
      // 
      // 
      gboolean dvd_foreach_is_norm_selected (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) 
      {
      	VAR	*var = NULL;
      	gtk_tree_model_get (model, iter, DVD_POINTER_STRUCT_COLUMN, &var, -1);
      	if (var->type_list_dvd == _DVD_DATA_ALL || var->type_list_dvd == _DVD_DATA)
      		if (var->EtatNormalise == TRUE) var_dvd.BoolNormIsSelected = TRUE;
      	return FALSE;
      }</pre> 
      Résultat:
      // 
      // 
      gboolean dvd_foreach_is_norm_selected (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) 
      {
      	VAR	*var = NULL;
      	gtk_tree_model_get (model, iter, DVD_POINTER_STRUCT_COLUMN, &var, -1);
      	if (var->type_list_dvd == _DVD_DATA_ALL || var->type_list_dvd == _DVD_DATA)
      		if (var->EtatNormalise == TRUE) var_dvd.BoolNormIsSelected = TRUE;
      	return FALSE;
      }
      Libre à vous de modifier le contenu de la structure codeshell suivant ce que vous désirez comme effets ! ...

    • MODIFICATION DE LA BALISE <pre>

        Plus besoin de déclaration de la balise codeshell depuis le fichier css ! Une simple modification comme suis sera alors necessaire :
      pre {
      	color: white;
      	background-color: black;
      	border-color: silver;
      	border-style: solid;
      	border-width: 1px 1px 1px 5px;
      	border-left: 5px solid green;
      	padding: 5px;
      	overflow: auto;
      }
      Exemple de code script:
      <pre>
      // 
      // 
      gboolean <FONT COLOR="red">dvd_foreach_is_norm_selected</FONT> (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) 
      {
      	VAR	*var = NULL;
      	gtk_tree_model_get (model, iter, DVD_POINTER_STRUCT_COLUMN, &var, -1);
      	if (var->type_list_dvd == _DVD_DATA_ALL || var->type_list_dvd == _DVD_DATA)
      		if (var->EtatNormalise == TRUE) var_dvd.BoolNormIsSelected = TRUE;
      	return FALSE;
      }</pre> 
      Résultat:
      // 
      // 
      gboolean dvd_foreach_is_norm_selected (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) 
      {
      	VAR	*var = NULL
      	gtk_tree_model_get (model, iter, DVD_POINTER_STRUCT_COLUMN, &var, -1);
      	if (var->type_list_dvd == _DVD_DATA_ALL || var->type_list_dvd == _DVD_DATA)
      		if (var->EtatNormalise == TRUE) var_dvd.BoolNormIsSelected = TRUE;
      	return FALSE;
      } 

    • CREATION DE LA BALISE lettrine

    • Le code à ajouter au fichier css:
    .lettrine {
    	color: black;
    	float: left;
    	font-family: Georgia, georgia, serif;
    	font-size: 52px;
    	font-weight: 900;
    	line-height: 45px;
    	margin-right: 3px;
    }
    Exemple de code script:
    <span class="lettrine">C</span>
    eci est peut-être une évidence (il est bien connu, et depuis longtemps, que ``Nécessité est mère d'Invention'') mais trop souvent on voit des développeurs de logiciels passer leurs journées à se morfondre à produire des programmes dont ils n'ont pas besoin et qu'ils n'aiment pas. Ce n'est pas le cas dans le monde Linux -- ce qui peut expliquer pourquoi  plupart des programmes issus de  communauté Linux sont de si bonne facture.
    
    ... et qui produira: ( paragraphes puisé depuis cette page )

    C eci est peut-être une évidence (il est bien connu, et depuis longtemps, que ``Nécessité est mère d'Invention'') mais trop souvent on voit des développeurs de logiciels passer leurs journées à se morfondre à produire des programmes dont ils n'ont pas besoin et qu'ils n'aiment pas. Ce n'est pas le cas dans le monde Linux -- ce qui peut expliquer pourquoi plupart des programmes issus de communauté Linux sont de si bonne facture.

    Vous trouverez des pages qui expliques différemment l'Art de la lettrine:
  • CREATION DE LA BALISE kbd

  • Le code à ajouter au fichier css:
    kbd {
    	border: 2px outset;
    	padding: 2px;
    	background-color: #E5E5E5;
    }
    Exemple de code script:
    Le raccourci clavier <kbd>Ctrl + A</kbd> ...
    Résultat:
    Le raccourci clavier Ctrl + A ...

    Sauvegarder ses données avec rsync

    $
    0
    0

    Je viens de relire par hasard un article rédigé par @soupaloignon sur LinuxOnTheRoot traitant de sauvegarde incrémentale à l'aide l'utilitaire rsync.
    Et ce même hasard fait plutôt bien les choses alors que je possède un disque de taille conséquente qui va finalement me permettre d'y stocker la totalité du contenu de mon $HOME via le script rédigé par @soupaloignon revu et corrigé pour mes besoins propres et que j'ai nommé SaveWithRsync.sh:

    #!/bin/bash 
    
    rsync -Haurov --stats --delete $HOME/ /mnt/save/cat/HOME/
    # 
    # OPTIONS:
    # 
    # -H, --hard-links            preserve hard links
    # -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
    # -u, --update                skip files that are newer on the receiver
    # -r, --recursive             recurse into directories
    # -o, --owner                 preserve owner (super-user only)
    # -v, --verbose               increase verbosity
    # --stats                     give some file-transfer stats
    # --delete                    delete extraneous files from dest dirs
    # 
    # SOURCE:
    # 	$HOME
    # 
    # DESTINATION:
    # 	/mnt/save/cat/HOME/
    
    echo "DERNIERE SAUVEGARDE LE $(date +%d-%m-%Y\ TO\ %H\:%M\:%S\ )">> $HOME/RSINC/date-rsync-log
    echo
    echo
    cat $HOME/RSINC/date-rsync-log
    
    exit 0 
    Il suffira de rendre le fichier SaveWithRsync.sh exécutable avec la commande:
    $ chmod +x ./SaveWithRsync.sh 
    Puis de l'activer comme ceci:
    $ ./SaveWithRsync.sh 
    Vous pourrez modifier pour vos besoins propres le contenu de ce script avec par exemple de nouvelles options pour rsync dont les explications vous seront données par la commande:
    $ man rsync 
    Ici une traduction en Français de "man rsync" dont je ne sais si elle est actuelle !


    PS:
    Ah oui ! Au fait ! Le script bash est ici.
    Bonne sauvegarde ;)

    Update WavSplit

    $
    0
    0
    Un utilisateur de XCFA m'a écrit dans un Mail que l'application WavSplit (Tobias Weihmann) n'est plus maintenue !

    Une visite chez Debian me confirme hélas l'affaire ... :/
    Ici aussi ... :/
    Un Mail à Tobias Weihmann m'est revenu avec l'état d'erreur !

    Le temps d'aller chercher la dernière version (1.2.1) pour tests : récupération du tar.gz, extraction, binarisation (Ôh, un nouveau mot) et tests sur plusieurs fichiers de type WAV.

    WavSplit m'expédie quelques phrases de mécontentement sur le moniteur et libère le prompt de mon shell !

    Très curieux, j'ouvre les fichiers wavsplit.c et wavsplit.h.
    Les Devs ayant une façons très spécifique de voir et de mettre en valeur les choses, je redoute le pire ... Le code de Tobias Weihmann correspond t-il a ce que je suis capable de comprendre ?
    Les définitions des structures WAVEFORMAT et WAVE_HEADER du fichier wavsplit.h m'indiquent apparemment que les définitions byte et word sont mal dimensionnées.
    typedef struct {
    	u_long	dwSize;
    	u_short wFormatTag;
    	u_short wChannels;
    	u_long	dwSamplesPerSec;
    	u_long	dwAvgBytesPerSec;
    	u_short wBlockAlign;
    	u_short wBitsPerSample;
    } WAVEFORMAT;
    
    typedef struct {
    	char	RiffID[4];
    	u_long	RiffSize;
    	char	WaveID[4];
    	char	FmtID[4];
    	u_long	FmtSize;
    	u_short wFormatTag;
    	u_short nChannels;
    	u_long	nSamplesPerSec;
    	u_long	nAvgBytesPerSec;
    	u_short nBlockAlign;
    	u_short wBitsPerSample;
    	char	DataID[4];
    	u_long	nDataBytes;
    } WAVE_HEADER;
    
    Un très simple morceau de code me le confirme:
    printf( "sizeof(u_short)   = %lu\n", sizeof(u_short));
    printf( "sizeof(u_long)    = %lu\n", sizeof(u_long));
    printf( "sizeof(short int) = %lu\n", sizeof(short int));
    printf( "sizeof(int)       = %lu\n", sizeof(int));
    Ce qui donne:
    sizeof(u_short)   = 2
    sizeof(u_long)    = 8
    sizeof(short int) = 2
    sizeof(int)       = 4
    Et puis, et puis ... après une analyse du code, je pense également que ces deux structures font double emploi (réflexion très personnelle) et que pour finir (faut quand même bien que mes critiques 'constructives' cesses un jour: non mais !), il serait tout de même interessant d'avoir un emballage plus sympa. du style autotools avec des options du genre:
    $ ./configure --prefix=/usr
    $ make
    $ make distcheck
    # make install
    # make uninstall
    etc, etc ...
    D'autant plus que ce tout nouveau et tout beau paquet tar.gz pourrait être transformé très facilement en un paquet DEB, GZ, RPM, etc ...

    • Hop, hop, quelques rectifications de code ...
      Il me semble avoir lu quelque part qu'un bug concerne les fichiers supèrieurs en taille à 2 Go !
      Il y à déjà de quoi faire mais cette coquille si elle existe pourrait (peut être !) être palliée avec une lecture séquentielle ... Une analyse plus en profondeur du code est donc souhaitable ...
      Après vérification du code, la lecture est séquentielle ... houfffffffff !
    • Fabrication d'un paquet tar.gz avec BaseBuild
    Et donc, après ces minis modifications, les tests sont ok chez moi:
    $ ./src/wavsplit --help
    
    !================================================================================
    ! WAVSPLIT version 1.2.2 (http://www.fomalhaut.de)
    ! Licensed under GPL by author Tobias Weihmann
    !--------------------------------------------------------------------------------
    ! Hour patch by Sacha Bartok (sacha@myrealbox.com)
    ! Modified for frames, hours, seconds, decimal seconds by Alan Fitch
    ! Modified for individual track lengths (non-cumulative splits) by Derek Schuff
    ! Update by Claude BULIN in version 1.2.2
    !      bytes struct WAVE_HEADER
    !      packaging with autotools
    !      http://www.xcfa.tuxfamily.org/article14/wavsplit
    !================================================================================
    
    Usage: wavsplit [options] wavfile split split split...
    
    Options:
    	-q	--quiet		Quiet mode (no messages)
    	-H	--Hours		Use Hours
    				wavsplit [options] wavfile hr:min:sec [hr:min:sec]...
    	-f	--frames FPS	use Frames
    				FPS (frames per second) must be either 12, 24, 25, 30, or 75
    				wavsplit [options] wavfile min:sec:fr [min:sec:fr]...
    	-s	--seconds	Use Seconds
    				wavsplit [options] wavfile sec [sec]...
    	-t	--tracktimes	Use individual track times (instead of cumulative split times)  
    	-h	--help		This info
    
    You can combine both Hours and frames options
    
    Examples:
    	wavsplit --frames 30 file.wav 32:21:15 45:10:0
    	wavsplit --Hours file.wav 1:32:21:59.2 1:45:10:0.3
    	wavsplit --seconds file.wav 300.1 500.2
    
    Une découpe d'une minute :
    $ ./src/wavsplit ./01.wav -H 0:0:0:0.0 0:1:0:0.0
    
    !================================================================================ 
    ! WAVSPLIT version 1.2.2 (http://www.fomalhaut.de)
    ! Licensed under GPL by author Tobias Weihmann
    !--------------------------------------------------------------------------------
    ! Hour patch by Sacha Bartok (sacha@myrealbox.com)
    ! Modified for frames, hours, seconds, decimal seconds by Alan Fitch
    ! Modified for individual track lengths (non-cumulative splits) by Derek Schuff
    ! Update by Claude BULIN in version 1.2.2
    !      bytes struct WAVE_HEADER
    !      packaging with autotools
    !      http://www.xcfa.tuxfamily.org/article14/wavsplit
    !================================================================================
    
    INFO: Hours:mins:sec format selected
    -------------------------------
    ./01.wav
    -------------------------------
    RiffID       : RIFF
    RiffSize     : 21872676
    WaveID       : WAVE
    FmtID        : fmt 
    FmtSize      : 16
    FormatTag    : 1
    Channels     : 2
    SamplesPerSec: 44100 Hz
    gBytesPerSec : 176400
    BlockAlign   : 4
    BitsPerSample: 16
    DataID       : data
    DataBytes    : 21872640
    -------------------------------
    Split         Hours  Mins   Seconds         Bytes         %
    [01]	until     0     0     0.000             0    0.00%
    [02]	until     0     1     0.000      10584000    48.39%
    [03]	until the end                    21872640   100.00%
    Success.
    
    Bref, si cette mise à jour d'application bien utile intéresse une Linuxienne ou un Linuxien, les paquets sont ici ...

    La phase de transformation en binaire depuis le code source reste très simple:
    $ tar xvfz ./wavsplit-1.2.2.tar.gz
    $ cd wavsplit-1.2.2/
    $ ./configure --prefix=/usr
    $ make
    Puis en mode adminitrateur:
    # make install
    Et à vous les joies du 'Split' avec par exemple depuis un dossier contenant des WAV:
    $ wavsplit ./musique.wav -H 0:0:0:0.0 0:1:0:0.0


    S i l'auteur initial de WavSplit passe dans le coin, qu'il s'arrête pour discuter autour d"un café ou d'une bière puis il pourra, si il le souhaite et si il est satisfait de mes modifications de code pour cette excellente application, repartir avec ce nouveau paquet sous le bras ;-)

    Time management

    $
    0
    0

    Une gestion très simple des horaires de boulot à travers une saisie de début et de fin et d'une sélection de durée hebdomadaire.
    Il est possible d'initialiser la base pour une année complète ou mois par mois.
    Il sera finalement possible de consulter le tout via la création de fichiers PostScript ( ps ), pdf, et texte.


    Le cahier des charges très simple pour Time Management


    • environnement
      GNU/Linux + Langage C + Gtk2 + Glade pour l'interface
    • pourquoi
      Pour avoir une vue d'ensemble des horaires sur une année

    Ce mini-logiciel n'est qu'une ébauche mais est fonctionnel.
    Voici d'ailleurs une liste non exhaustive de ce qu'il est possible d'ajouter:

      • édition du manpage
      • sauvegarde et récupération des options de l'interface
      • visualisation sous différentes formes des horaires
      • etc, ...

    ... Mais je laisse le soin aux Geeks les plus expérimentés de continuer à coder ce qu' il manque à Time Management ;-)

    L'interface de Time management



    time_management_about

    time_management

    time_management_init

    time_management

    Les sources de Time management


    Les fichiers du projet TIME MANAGEMENT sont ici.


    Installation avec les fichiers sources:


    Récupérez la dernière version de Time Management ici puis utilisez ces commandes depuis une fenêtre shell texte en adaptant bien sur le numéro de version que vous venez de télécharger:
    $ tar xvfz ./tm-0.2.6.tar.gz
    $ cd tm-0.2.6/
    $ ./configure --prefix=/usr
    Vous pouvez enchaîner avec la commande:
    $ make
    Et effectuer un premier test avec:
    $ ./src/tm
    Installation sur le système en mode administrateur:
    # make install

    linechec

    $
    0
    0

    C'est quoi linechec



    linechec est un jeu d'échecs dont la dernière mise à jour date de 2007.

    Après la récupération du tar.gz, extraction puis fabrication d'un binaire, j'ai enfin pu tester très rapidement linechec qui est plutôt sympa.

    J'ai souhaité ensuite fabriquer des paquets binaires: amd64 et i386 pour le système Debian mais l'auteur n'a écrit qu'un fichier Makefile à la racine des sources et mon empaquetage impliquerait alors un complément de rédaction du dit Makefile !

    Je me suis donc décidé à mettre contribution BaseBuild pour concevoir une enveloppe à base des autotools.
    La maintenance ( ! ) et la fabrications des (futurs) paquets n'en sera que plus simple, etc ...

    Chose dite, presque chose faite ...
    • Création d'une enveloppe avec BaseBuild
    • Correction ici et là des quelques erreurs/oublis mineurs dans le code signalées par
      // DEBUG by xcfaudio
    • linechec peut être appelé par le menu: Applications -> jeux
    • Prise de notes pour signaler tout cela à l'auteur par E-Mail.
    Mais j'attends de prendre contact avec l'auteur (Gerald DUMAS) pour une éventuelle modification de code ...

    linechec



    Les binaires et les sources



    Les différents paquets sont ici


    S i l'auteur initial de linechec passe dans le coin, qu'il s'arrête pour discuter autour d"un café ou d'une bière puis il pourra, si il le souhaite et si il est satisfait de mes modifications de code pour cette excellente application, repartir avec ce nouveau paquet sous le bras ;-)


    Et hop ...



    Gérald DUMAS vient de m'envoyer un Mail plutôt sympa et a récupéré le nouveau paquet 0.0.5 pour de futures modifications notamment une intégration de linechec sous Gtk-3 et même plus si le temps le lui permet ...

    Dans tous les cas, merci à toi Gérald ;-)


    Les pages très intéressantes à visiter:




    iptc_exiftool

    $
    0
    0
    Script de gestion des tags IPTC pour les fichiers images
    Le script utilise EXIFTOOL (libimage-exiftool-perl):

    L'idée est de créer un fichier de définitions récurrentes qui permettra de construire un second fichier de définitions qu'il faudra au besoin éditer et compléter.
    Et enfin, la commande [ $ iptc_exiftool.pl -run ] communiquera tous les paramètres à [ exiftool -overwrite_original ].

    Pour créer le fichier [ def_macro.txt ]
    $ iptc_exiftool.pl -make_list
    Pour créer le fichier [ macro.txt ] qui utilise le fichier de définitions [ def_macro.txt ]
    $ iptc_exiftool.pl -make_list
    Pour lire le fichier [ macro.txt ] et appliquer les paramètres aux fichiers images
    $ iptc_exiftool.pl -run

    Au fait, IPTC et EXIF, c'est quoi !


    Les informations EXIF et IPTC sont des meta-informations (des données sur les données) relatives à une photographie.

    Les informations EXIF sont des informations techniques descriptives de la prise de vue et sont renseignées automatiquement par l'appareil photo numérique:
    • la marque et le modèle de l'appareil photo
    • la date exacte de prise de vue
    • etc. ..
    Les informations IPTC sont des informations de description qui nécessitent l'intervention d'un agent humain:
    • nom et titre de l'image
    • légende
    • date de création
    • auteur ou créateur
    • copyright
    • etc. ..

    Pourquoi le script: iptc_exiftool


    Extrait du Mail de Christophe concernant les tags IPTC

    Je suis confronté à un nouveau problème. Voilà. Pour ajouter des métadonnées IPTC, j'ai utilisé Sagittarius. Sagittarius est maintenant obsolète ! J'ai utilisé pendant un temps Digikam mais c'est une vraie usine à gaz. C'est lourd, très lourd mai c'est le seul logiciel que je connaisse qui gère un profil d'IPTC. En somme, l'idéal serait de créer un p'tit script qui me permettrait de renseigner à la volée certains champs d'IPTC :

    # Add IPTC tags

    exiftool -overwrite_original \
    -iptc:ObjectName="Bidonville de Manga Télé" \
    -iptc:Keywords="Bidonville, Mayotte" \
    -iptc:City="Mamoudzou" \
    -iptc:Country-PrimaryLocationName="Mayotte, France" \
    -iptc:Credit="Christophe Gallaire" \
    -iptc:CopyrightNotice='Copyright Christophe Gallaire. Tous droits réservés.' \
    -iptc:Source="Christophe Gallaire" \
    -iptc:Caption-Abstract="France - Bidonville de Manga Télé - Christophe Gallaire" \
    -iptc:Description="Enfants de Manga Télé"\

    Il m'en manque encore quelques-uns mais voilà en somme l'idée... je te la soumets des fois que...


    Le cahier des charges pour le script: iptc_exiftool


    Une Graphical User Interface faisant appel à exiftool serait sympa. à développer mais je ne connaît pas suffisamment les futurs problèmes posés.

    Une écriture en langage de script Bash ou Perl s'impose donc !
    • environnement
      GNU/Linux + Perl
    • pourquoi
      Gestion des tags IPTC
    • pour qui
      Toute personne gérant sa collection de photographies
    • objectif
      L'idée est de créer un fichier de définitions récurrentes qui permettra de construire un second fichier de définitions qu'il faudra au besoin éditer et compléter.
      Et enfin, la commande [ $ iptc_exiftool.pl -run ] communiquera tous les paramètres à [ exiftool -overwrite_original ].

      Mes réflexions m'ont conduit au paramétrage suivant:
      $ iptc_exiftool
          -h -H : 
              Page d'aide 
          -make_list : 
              Création du fichier de définitions récurrentes [ def_macro.txt ] si il n'existe pas et qu'il faudra éditer
              Création du fichier [ macro.txt ] d'après le fichier de description [ def_macro.txt ] et qu'il faudra éditer 
          -run : 
              Lecture du fichier [ macro.txt ] pour passage des paramètres à [ exiftool -overwrite_original ]

    Utilisation du script: iptc_exiftool


    Le fichier de définitions [ def_macro.txt ] est créé si il n'existe pas.
    $ iptc_exiftool -make_list
    Les connaissances de l'utilisateur sont mises ici à contribution !
    Il est en effet possible d'ajouter ou de supprimer des mots clés et les définitions associées.
    Le caractère dièse # indique une ligne de commentaire non prise en compte.
    Vous devez éditer ici les définitions récurrentes.
    #
    # def_macro.txt
    #
    # contient les definitions a modifier
    #
    # AUCUN ESPACE ENTRE LE MOT CLE ET LA DEFINITION
    #
    -iptc:ObjectName="WRITE HERE YOUR TEXT"
    -iptc:Keywords="WRITE HERE YOUR TEXT"
    -iptc:City="WRITE HERE YOUR TEXT"
    -iptc:Country-PrimaryLocationName="WRITE HERE YOUR TEXT"
    -iptc:Credit="WRITE HERE YOUR TEXT"
    -iptc:CopyrightNotice='Copyright Christophe Gallaire. Tous droits réservés.'
    -iptc:Source="Christophe Gallaire"
    -iptc:Caption-Abstract="WRITE HERE YOUR TEXT"
    #	-iptc:Description="WRITE HERE YOUR TEXT"
    -imagedescription="WRITE HERE YOUR TEXT"
    La même ligne de commande lis le fichier [ def_macro.txt ] ...
    $ iptc_exiftool -make_list
    ... puis créé le fichier [ macro.txt ] depuis lequel vous devez également éditer les définitions non communes:
    -iptc:ObjectName="WRITE HERE YOUR TEXT"
    -iptc:Keywords="WRITE HERE YOUR TEXT"
    -iptc:City="WRITE HERE YOUR TEXT"
    -iptc:Country-PrimaryLocationName="WRITE HERE YOUR TEXT"
    -iptc:Credit="WRITE HERE YOUR TEXT"
    -iptc:CopyrightNotice='Copyright Christophe Gallaire. Tous droits réservés.'
    -iptc:Source="Christophe Gallaire"
    -iptc:Caption-Abstract="WRITE HERE YOUR TEXT"
    -imagedescription="WRITE HERE YOUR TEXT"
    NAME_FILE_IMG=/home/cat/DEV/IPTC_EXIFTOOLS/iptc_exiftool/image.jpg
    Un dernier appel ...
    $ iptc_exiftool -run
    va lire le fichier [ macro.txt ] pour passer les paramètres à [ exiftool -overwrite_original ]
    exiftool -overwrite_original \
        -iptc:ObjectName="WRITE HERE YOUR TEXT" \
        -iptc:Keywords="WRITE HERE YOUR TEXT" \
        -iptc:City="WRITE HERE YOUR TEXT"  \
        -iptc:Country-PrimaryLocationName="WRITE HERE YOUR TEXT" \
        -iptc:Credit="WRITE HERE YOUR TEXT" \
        -iptc:CopyrightNotice='Copyright Christophe Gallaire. Tous droits réservés.' \
        -iptc:Source="Christophe Gallaire" \
        -iptc:Caption-Abstract="WRITE HERE YOUR TEXT" \
        -imagedescription="WRITE HERE YOUR TEXT" \
        /home/cat/DEV/IPTC_EXIFTOOLS/iptc_exiftool/image.jpg
    
        1 image files updated
    

    Visualisation des tags


    Pour visualiser les tags d'un fichier image en ligne de commande:
    $ exiftool --list -s -G1 ./image.jpg
    ...
    [IFD0]          ImageDescription                : WRITE HERE YOUR TEXT
    ...
    [IPTC]          ObjectName                      : WRITE HERE YOUR TEXT
    [IPTC]          Keywords                        : WRITE HERE YOUR TEXT
    [IPTC]          City                            : WRITE HERE YOUR TEXT
    [IPTC]          Country-PrimaryLocationName     : WRITE HERE YOUR TEXT
    [IPTC]          Credit                          : WRITE HERE YOUR TEXT
    [IPTC]          Source                          : Christophe Gallaire
    [IPTC]          CopyrightNotice                 : Copyright Christophe Gallaire. Tous droits réservés.
    [IPTC]          Caption-Abstract                : WRITE HERE YOUR TEXT
    ...
    

    Installation de: iptc_exiftool


    Il suffit d'importer la dernière version de [ iptc_exiftool ] puis de l'installer sur le système:
    su root<passwd>
    # cp ./iptc_exiftool-0.0.8.pl /usr/bin/iptc_exiftool.pl
    # chmod +x /usr/bin/iptc_exiftool.pl
    # exit

    Pour quand une GUI


    Ne plaçons pas la charrue avant les boeufs.
    Je vais déjà attendre quelques retours quand au concept et à l'utilisation puis une Interface graphique (GUI) verra peut être le jour si je dispose d'un peu plus de temps ...

    Le projet a débuté ...

    Un article suivit d'une discussion ...


    Rédaction d'un article écrit par Christophe sur les tags IPTC

    IptcEdit

    $
    0
    0

    IPTCEDIT est un éditeur/visualisateur de légendes IPTC ( et même plus à terme ) de vos images de type JPG ou JPEG.

    IPTCEDIT fait suite au script Perl iptc_exiftool.pl.

    L'idée ici, est également de pouvoir ajouter, supprimer, modifier les tags IPTC (et même plus à terme) contenus dans un fichier image de type JPG ou JPEG à l'aide de exiftool contenu dans le paquet libimage-exiftool-perl.

    En reprenant l'idée de base appliquée au script Perl [ iptc_exiftool.pl ], à savoir que l'utilisateur définit lui même les tags à appliquer à travers des macros-définitions, il est également possible depuis IPTCEDIT de définir les champs éditables souhaités avec leurs tags associés ainsi que les commentaires éventuels.

    L'interface de IPTCEDIT possède une GUI (Graphical User Interface) qui est partiellement inspirée de Sagittarius.

    Christophe m'a expliqué patiemment ses idées d'utilisateur averti que j'essaye de coder.


    Au fait, IPTC et EXIF, c'est quoi !


    Les informations EXIF et IPTC sont des meta-informations (des données sur les données) relatives à une photographie.

    Les informations EXIF sont des informations techniques descriptives de la prise de vue et sont renseignées automatiquement par l'appareil photo numérique:
    • la marque et le modèle de l'appareil photo
    • la date exacte de prise de vue
    • etc. ..
    Les informations IPTC sont des informations de description qui nécessitent l'intervention d'un agent humain:
    • nom et titre de l'image
    • légende
    • date de création
    • auteur ou créateur
    • copyright
    • etc. ..

    Le cahier des charges pour IPTCEDIT


    • environnement
      GNU/Linux + Langace C + Glade
    • pourquoi
      Ajout, suppression, modification des tags IPTC ( et plus à terme )
    • pour qui
      Toute personne gérant sa collection de photographies
    • objectif
      Gestion des tags IPTC depuis une GUI (Graphical User Interface)
    • Actuellement
      La visualisation des tags est actuellement correcte.
      Reste la partie enregistrement à coder.

    IPTCEDIT en images



    iptcedit_about.png

    A gauche, vous sélectionnez le dossier dont le contenu s'affichera sous forme de liste au centre.
    Une sélection dans la liste (au centre) affiche le contenu intégral des tags du fichier image.

    iptcedit_01.png

    Un double click sur une image dans la liste permet la visualisation de la vignette

    iptcedit_02.png

    La partie de droite permet l'édition des tag du fichier sélectionné.

    iptcedit_03.png

    L'éditeur de définitions de tags permet une modélisation très fine de la partie édition/visualisation.

    iptcedit_04.png



    Les sources et les binaires pour IPTCEDIT


    Les fichiers du projet IPTCEDIT sont ici.


    Installation avec les fichiers sources:


    Récupérez la dernière version de IPTCEDIT ici puis utilisez ces commandes depuis une fenêtre shell texte en adaptant bien sur le numéro de version que vous venez de télécharger:
    $ tar xvfz ./iptcedit-0.3.4.tar.gz
    $ cd iptcedit-0.3.4/
    $ ./configure --prefix=/usr
    Vous pouvez enchaîner avec la commande:
    $ make
    Et effectuer un premier test avec:
    $ ./src/iptcedit
    Installation sur le système en mode administrateur:
    # make install


    Au fait ...


    Ne perdez pas de vue que que l'option concernant les tags et qui est utilisée par exiftool est [ -overwrite_original ] !
    Cela implique que les tags sont directement modifiés dans les fichiers originaux.

    Script xchat hexchat

    $
    0
    0

    hello.py est un script très simple écrit en python qui permet de saluer automatiquement des personnes sur IRC.

    Voici le code


    # 
    # hello.py
    # xcfaudio at gmail dot com
    # 
    
    __module_name__ = "hello"
    __module_version__ = "0.1"
    __module_description__ = "Said hello automatically"
    __module_author__ = "xcfaudio"
    
    
    try:
        import hexchat as xchat
    except ImportError:
        import xchat
    
    
    Liste = {
    'Nom_1'   : False,'Nom_2'   : False,'Nom_3'   : False,'Nom_4'   : False,'Nom_5'   : False,'Nom_6'   : False
     };
    
    
    myhook = None   # Trace timer
    
    
    def func_scan_users():
        """Compare la liste aux utilsateurs du salon"""
        global Liste
        StringUser = ""
        print'func_scan_users():'
        userlist = xchat.get_list('users')
        for user in userlist:
            Champs = user.nick.strip()
            if len(Champs) > 0:
                for elem in Liste:
                    if elem.lower() == Champs.lower():
                        if Liste[ Champs ] == False:
                            Liste[ Champs ] = True
                            # xchat.command("say Salut %s" % Champs)
                            # adressage de liste : salut un, deux, trois, etc ...
                            StringUser = StringUser + Champs + ''
        if StringUser:
            # print( 'Salut ' + StringUser )
            xchat.command("say Salut %s" % StringUser)
    
    def autoJoin_timeout_cb(userdata): 
        """Timer quand quelqu'un rejoint le salon"""
        global myhook 
        func_scan_users()
        # Disabling the timeout
        if myhook is not None: 
            xchat.unhook(myhook) 
            myhook = None 
            print "TIMEOUT deactivate !"
        return 1
    
    # ------------------------------------------------------------
    # Bascule vers un canal l'IRC mode auto ou ligne de commande
    # ------------------------------------------------------------
    
    def autoJoin(word,word_eol,userdata):
        """Bascule vers un canal l'IRC"""
        global myhook 
        myhook = xchat.hook_timer(2000, autoJoin_timeout_cb) 
    
    xchat.hook_print('You Join', autoJoin)
    
    # ------------------------------------------------------------
    # Un utilisateur rejoint l'IRC
    # ------------------------------------------------------------
    
    def user_join_channel(word,word_eol,userdata):
        """Un utilisateur rejoint l'IRC: word[0]"""
        global myhook 
        myhook = xchat.hook_timer(2000, autoJoin_timeout_cb) 
    
    xchat.hook_print('Join', user_join_channel)
    
    # ------------------------------------------------------------
    # Bascule vers un canal IRC par click bouton
    # ------------------------------------------------------------
    
    def goto_Join(word, wordEOL, userData):
        """Bascule vers un canal IRC par click bouton"""
        func_scan_users()
    
    xchat.hook_command('Join', goto_Join)
    
    # ------------------------------------------------------------
    # Script Loaded
    # ------------------------------------------------------------
    
    print
    print "[ hello.py ] Loaded !"
    print

    Modification de la liste


    Vous avez juste besoin de: ajouter / retirer / remplacer les chaines [ 'Nom_1', 'Nom_2', etc ] par des pseudos de votre connaissance
    Liste = {'Nom_1'   : False,'Nom_2'   : False,'Nom_3'   : False,'Nom_4'   : False,'Nom_5'   : False,'Nom_6'   : False
     };

    Documentations utilisées


    Python pour XChat.
    Le Blog du Troll.
    OverBlog.


    Il apparaît comme évident que ...


    ... ce script peut / doit être complété par exemple avec une fonction de surveillance du signal away afin de ne pas saluer un nouvel arrivant connu durant notre absence ou inversement !, une autre fonction de sauvegarde / récupération des noms du jour, etc ...
    Bref ! La seule limite est l'imagination ...

    gtkbuilder-code-generator

    $
    0
    0

    gtkbuilder-code-generator.py est un script écrit en python qui permet de générer une classe python à partir d'un fichier glade.

    Par exemple


    Sont dans votre répertoire:
    $ ls -l
        gtkbuilder_code_generate.py
        test.glade
    Cette ligne de commande ...
    ./gtkbuilder_code_generate.py test.glade test.py
    ... va générer le fichier: test.py
    $ ls -l
        gtkbuilder_code_generate.py
        test.glade
        test.py
    Dont le contenu est:
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # 
    # From: test.glade
    # 
    
    import sys
    try:
        from gi.repository import Gtk, GObject
    except:
        print("GTK Not Availible")
        sys.exit(1)
    class test:
    
        def __init__( self ):
        
            try:
                self.builder = Gtk.Builder()
                self.builder.add_from_file("test.glade")
            except:
                sys.exit(1)
            # Easy Handlers for control objects
            self.label_exemple=self.builder.get_object("label_exemple")
            self.spinbutton_exemple=self.builder.get_object("spinbutton_exemple")
            # Easy Handlers for control windows
            self.window_main=self.builder.get_object("window_main")
            dic={"on_window_main_destroy_event": self.on_window_main_destroy_event,"on_window_main_delete_event": self.on_window_main_delete_event,"on_menuitem_quit_activate": self.on_menuitem_quit_activate,"on_menuitem_help_activate": self.on_menuitem_help_activate,
            }
            self.builder.connect_signals(dic)
            # self.Easy_Handlers_for_control_windows.show_all()
        def on_window_main_destroy_event(self, widget, data=None):
            pass
        def on_window_main_delete_event(self, widget, data=None):
            pass
        def on_menuitem_quit_activate(self, widget, data=None):
            pass
        def on_menuitem_help_activate(self, widget, data=None):
            pass
    if __name__ == '__main__':
        tst = test()
        Gtk.main()

    Modifications du code:


    Bin ouiai ! Je n'ai pu m'empêcher déjà d'améliorer cet excellent code !
    Vous trouverez gtkbuilder-code-generator.py modifié ici

    Merci ...


    ... à l'auteur de ce script qui facilite bien l'apprentissage de python

    Python Project Translating

    $
    0
    0
    !----------------------
    ! 
    ! ppt (Python Project Translating) V0.0.8
    ! 
    ! Internationalisation d'un projet python.
    ! 
    !----------------------
    ! 
    Le script Python ppt.py prend en charge l'arborescence de l'endroit ou il est activé, recherche de façon récursive les fichiers [ *.py, *.ui, *.glade ] et dépose les résultats dans un dossier po/ : [ *.po, *.pot, *.mo ].

    Il suffira de compléter les fichiers *.po pour la traduction, de relancer ppt.py -g pour produire le ou les fichiers *.mo puis de copier ces fichiers *.mo vers /usr/share/locale/XX pour obtenir un programme traduit.

    Internationalisation d'un projet python.


    Je débute avec la programmation en Python.
    Je fais mes classes avec le projet Fricorderécrit initialement en Python-2 que j'ai décidé de porter vers Python-3 avec entre autres choses l'utilisation de gtk_builder.

    Je suis arrivé au stade de l'internationalisation et là ! Point de salut si vous ne faites pas vous même toutes les opérations au clavier :/

    C'est franchement chiant et rébarbatif et j'ai donc écrit un script en langage Python pour simplifier ce problème récurrant.

    Principe du script: ppt.py ( Python Project Translating )


    Le script s'appuie sur ces programmes pour fonctionner:
    • xgettext
      Lecture des fichiers [ *.py, *.ui, *.glade ] et production d'un fichier *.pot
    • sed
      Remplacement dans le fichier *.pot de: 'charset=CHARSET' par 'charset=UTF-8'
    • msgcat
      Ajout des datas du fichier *.pot dans le fichier all.pot
      Notez que msgcat doit être appliqué sur l'ensemble des fichiers *.pot
    • msgmerge
      Ajout des datas du nouveau fichier all.pot vers les fichiers *.po
    • msgfmt
      Production des fichiers *.mo correspondant aux fichiers *.po
    Mais je vous invite à lire le contenu du script ppt.py pour les détails ...

    Utilisation du script: ppt.py ( Python Project Translating )


    Téléchargement
    $ wget http://download.tuxfamily.org/xcfaudio/Python/ppt/ppt.py
    Rendre le script executable
    $ chmox +x ./ppt.py
    Installation
    $ sudo ./ppt.py /usr/bin/ppt.py
    Première utilisation sans paramètre après vous être placé à la racine d'un projet
    $ ppt.py
    !----------------------
    ! 
    ! ppt (Python Project Translating) V0.0.8
    ! 
    ! Internationalisation d'un projet python.
    ! 
    !----------------------
    ! 
    ! Lecture recursive des dossiers depuis l'endroit ou est active ppt.py avec
    ! une reconnaissance des fichiers PY et GLADE qui seront traites par xgettext,
    ! sed, msgcat,msgmerge et enfin msgfmt. 
    ! Par defaut, les fichiers de langues fr, en et en_GB seront crees dans le dossier
    ! po/ si ils n'existent pas et les autres fichiers de langues seront conserves et
    ! mis a jour.
    ! Au final seront crees les fichiers po, pot et mo correspondants a l'application
    ! traitee.
    ! 
    ! Claude Bulin
    ! http://www.xcfa.tuxfamily.org/
    ! 
    !----------------------
    
    usage: ppt.py [-h] [-g] [-v]
    
    optional arguments:
      -h, --help      show this help message and exit
      -g, --generate  generate translating project
      -v, --version   print version
    
    
    Une seconde fois avec le paramètre -go
    $ ppt.py -g
    ...
    ... permettra la création des fichiers nécessaires à la traduction de votre application
    po/all.pot
    po/en_GB.mo
    po/en_GB.po
    po/en.mo
    po/en.po
    po/fr.mo
    po/fr.po
    Il suffira ensuite de traduire depuis les fichiers *.po puis de réactiver ppt.py -g pour obtenir les fichiers *.mo qu'il vous faudra copier vers le dossier /usr/bin/locale/XX pour enfin obtenir une application valide dans les langues désirées.

    Adaptation de ppt.py à d'autres langages


    Je pense notamment à Perl !
    Très certainement pas bien compliqué ...
    Avis aux courageux !

    Les sources ...


    ... de ppt.py sont ici.

    Si ...


    ... ppt.py vous est utile, faites le moi savoir par Mail : ça fait plaisir xD

    Fricorder

    $
    0
    0

    Le projet Fricorder est (re)codé en Python-3 (utilisation de gtk_builder, ...) et permet l'enregistrement des programmes TV depuis votre FreeBox.

    Reprise de projet


    J'ai repris le projet Fricorder dans la version 0.7.40 depuis
    https://code.google.com/p/fricorder/
    Copyright 2005-2008 - manatlan - Licence GPL2
    http://fricorder.googlecode.com
    http://manatlan.com
    pour mes début en programmation dans le langage Python.

    Mes différents E-Mails à l'auteur pour lui signaler cette mise à jour (évolution) sont restés sans réponse !

    Nouveautés pour Fricorder


  • Utilisation de classes dans le code
  • Utilisation de Gtk.builder pour charger les fichiers *.glade qui sont indépendants
  • Est internationalisé avec les fichiers: fr, en et en_GB
  • Sauvegarde et restitution de tous les paramètre dans $HOME/.config/fricorder
  • Un menu avec la commande 'Quitter' et un appel à une fenêtre 'A propos'
  • N'utilise plus l'enregistrement depuis le Web
  • Ajout d'un manpage
  • Debug du code de fricorder_record.sh

  • fricorder est dépendant de: vlc, at, zenity et python => 3

    Paquets disponibles


    Un PKGBUILD est disponible pour les distributions ArchLinux, Manjaro, ..., ainsi que le tar.gz et le pkg.tar.xz

    Cliquez ici pour le choix du téléchargement.

    Versiion disponible: 0.8.1

    Installation et activation de Fricorder


  • depuis le paquet pkg.tar.xz
    $ sudo pacman -U ./fricorder-x.x.x.pkg.tar.xz
    Rendez vous dans le menu Multimédia et cliquez sur l'entrée Fricorder
  • Depuis le paquet tar.gz
    $ tar xvfz ./fricorder-x.x.x.tar.xz
    $ cd fricorder-x.x.x/
    $ ./fricorder.py
  • Installation et configuration de la librairie at
    $ sudo -S pacman at
    Configuration de at pour systemctl
    $ sudo systemctl enable atd
    $ sudo systemctl start atd
    $ sudo systemctl enable atd.service
    Vérification ...
    $ systemctl status atd
    atd.service - ATD daemon
       Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
       Active: active (running) since sam. 2013-08-03 22:03:17 CEST; 3h 7min ago
      Process: 1033 ExecStart=/usr/bin/atd (code=exited, status=0/SUCCESS)
     Main PID: 1052 (atd)
       CGroup: name=systemd:/system/atd.service└─1052 /usr/bin/atd
    Un reboot de ma machine fut chez moi nécessaire !
    $ reboot

  • Fricorder en images


    fricorder.png

    Documentation utilisée


  • Introduction à Python:
    Un (très) vieux bouquin (première édition janvier 2000) mais également très instructif
  • Etude (d'une partie) des sources de OpenShot
  • Etude (d'une partie) des sources de Ekd
  • Pas mal d'échanges avec @Esclapion sur l'IRC #manjaro.fr

  • A @manatlan, auteur initial de fricorder


    S i l'auteur initial de Fricorder passe dans le coin, qu'il s'arrête pour discuter autour d"un café ou d'une bière puis il pourra, si il le souhaite et si il est satisfait de mes modifications de code pour cette excellente application, repartir avec ce nouveau paquet sous le bras ;-)

    Build Pot File

    $
    0
    0
    !----------------------
    ! 
    ! bpf (Build Pot File) 1.5
    ! Internationalisation de projet.
    ! 
    !----------------------
    Le script Python bpf.py prend en charge l'arborescence de l'endroit ou il est activé avec une reconnaissance des fichiers passés en paramètre avec l'option -t qui seront traités par xgettext, sed, msgcat,msgmerge et msgfmt puis dépose les résultats dans un dossier po/ : [ *.po, *.pot, *.mo ].

    Par défaut, les fichiers de langues fr, en et en_GB seront créés dans le dossier po/ si ils n'existent pas et les autres fichiers de langues seront conservés et mis à jour.

    La complétion des fichers 'po' pourra ête faite avec les options -f et/ou -c.

    Il suffira de compléter les fichiers *.po pour la traduction, de relancer bpf.py -g pour produire le ou les fichiers *.mo puis de copier ces fichiers *.mo vers /usr/share/locale/XX pour obtenir un programme traduit.

    L'origine de ce code


    Je débute avec la programmation en Python.
    Je fais mes classes avec le projet Fricorderécrit initialement en Python-2 que j'ai décidé de porter vers Python-3 avec entre autres choses l'utilisation de gtk_builder.

    Je suis arrivé au stade de l'internationalisation et là ! Point de salut si vous ne faites pas vous même toutes les opérations au clavier :/

    C'est franchement chiant et rébarbatif et j'ai donc écrit un script en langage Python pour simplifier ce problème récurrant.

    Principe du script: bpf.py ( Build Pot File )


    Le script s'appuie sur ces programmes pour fonctionner:
    • xgettext
      Lecture des fichiers [ *.sh, *.py, *.ui, *.glade ] et production d'un fichier *.pot
    • sed
      Remplacement dans le fichier *.pot de: 'charset=CHARSET' par 'charset=UTF-8'
    • msgcat
      Ajout des datas du fichier *.pot dans le fichier all.pot
      Notez que msgcat doit être appliqué sur l'ensemble des fichiers *.pot
    • msgmerge
      Ajout des datas du nouveau fichier all.pot vers les fichiers *.po
    • msgfmt
      Production des fichiers *.mo correspondant aux fichiers *.po
    Mais je vous invite à lire le contenu du script bpf.py pour les détails ...

    Utilisation du script: bpf.py (Build Pot File )


    Téléchargement du PKGBUILD
    $ wget http://download.tuxfamily.org/xcfaudio/Python/bpf/PKGBUILD
    Préparation du binaire
    $ makepkg
    Installation du binaire
    $ sudo pacman -U ./bpf-1.6-1-any.pkg.tar.xz
    Première utilisation sans paramètre après vous être placé à la racine d'un projet
    $ bpf.py
    !----------------------
    ! 
    ! bpf (Build Pot File) 1.5
    ! Internationalisation de projet.
    ! 
    !----------------------
    
    Lecture récursive des dossiers depuis l'endroit ou est activé bpf.py
    avec une reconnaissance des fichiers passés en paramètre avec
    l'option '-t' qui seront traités par xgettext, sed, msgcat,msgmerge
    et msgfmt.
    Par défaut, les fichiers de langues fr, en et en_GB seront créés
    dans le dossier po/ si ils n'existent pas et les autres fichiers de
    langues seront conservés et mis à jour.
    Une option permet la traduction automatique des champs de msgstr.
    Au final seront créés les fichiers po, pot et mo correspondants
    à l'application traitée.
    
    usage: bpf.py [-h] [-a ADDPOTFILE] [-c] [-f] [-g] [-t TYPEPARSE] [-v]
    
    bpf (Build Pot File) 1.5
    
    optional arguments:
      -h, --help            show this help message and exit
      -a ADDPOTFILE, --AddPotFile ADDPOTFILE
                            Add *.po files from country1.po[,country2.po,...]. See
                            the manpage for countries
      -c, --CompletionTranslate
                            Complete the missing translations to "msgstr"
      -f, --ForceTranslate  Force the translation of all fields to "msgstr"
      -g, --generate        Build files *.po, *.mo and *.pot
      -t TYPEPARSE, --TypeParse TYPEPARSE
                            Types of files to scan: py[,c,sh,,...].
      -v, --version         Version is 1.5
    Une seconde fois avec le paramètre -g et par exemple pour un script Python soit: -t py
    $ bpf.py -g -t py
    ...
    ... permettra la création des fichiers nécessaires à la traduction de votre application
    po/all.pot
    po/en_GB.mo
    po/en_GB.po
    po/en.mo
    po/en.po
    po/fr.mo
    po/fr.po
    Il suffira ensuite de traduire depuis les fichiers *.po puis de réactiver bpf.py -g pour obtenir les fichiers *.mo qu'il vous faudra copier vers le dossier /usr/bin/locale/XX pour enfin obtenir une application valide dans les langues désirées.

    Traductions


    Le script à été adapté pour les langues suivantes:
    • french
    • english
    • german
    • catalan
    • galician
    • spanish
    • portuguese
    • italian

    Adaptation de bpf.py à d'autres langages


    bpf.py prends maintenant en charge (normalement) tous les langages utilisant gettext.

    Les sources ...


    ... de bpf.py sont ici.

    Si ...


    ... bpf.py vous est utile, faites le moi savoir par Mail : ça fait plaisir xD

    Pacman-Shell

    $
    0
    0

    fricorder.png

    Pacman simplifié


    L'idée du développement du script Bash pacman-shell m'est venue suite à l'utilisation de yaourt-gui conçu pour les distributions Gnu/Linux ArchLinux et Manjaro.

    Après l'installation du paquet, le script peut être activé depuis le menu système->pacman-shell et vous fait profiter des commandes les plus communes qui doivent être en temps normal tapotées depuis une fenêtre shell.

    Téléchargement du PKGBUILD
    $ wget http://download.tuxfamily.org/xcfaudio/MANJARO/pacman_shell/PKGBUILD
    Préparation du binaire
    $ makepkg
    Installation du binaire
    $ sudo pacman -U ./pacman-shell-1.5-1-any.pkg.tar.xz
    Activation en ligne de commande
    $ pacman-shell.sh
    Le script possède une traduction vers les langues: de en_GB en es fr it

    La quête du Graal


    Pour les Geeks en quête de perfection, le code écrit en Bash est très simple à modifier, à améliorer.
    Les traductions de pacman-shell peuvent être par construites avec Build Pot File ( bpf )
    .

    Build 2 Iso Manjaro ( b2im )

    $
    0
    0

    b2im est une interface graphique conviviale qui permet la construction d'image(s) ISO pour la distribution Manjaro.

    b2im_about.png

    Générer une ISO, on a déjà manjaroiso !


    b2im remplace avantageusement les commandes compliquées au clavier depuis une fenêtre shell texte pour la manipulation des outils ManjaroISO.

    En quelques clics de souris, vous choisissez:
    • d'installer ou de réinstaller les bases indispensables:
      • librairies 'Manjaroiso-git...'
      • le dossier $HOME/work/ contenant la base de vos futures images ISO
    • un bureau parmis:
      • Cinnamon, E17, Gnome, Kde, Lxde, Mate, Net, Openbox, Xfce
    • le type d'image ISO à produire:
      • image 32 bits ou image 64 bits
    • le noyau (kernel)
      • linux34, linux38, linux310, linux311, linux312 (au moment de la rédaction de cet article)
    • d'ajouter ou retirer des paquets (logiciels) depuis un éditeur de texte
    • la langue utilisée lors du boot de l'image produite
    • L'image de fond (jpg) lors du boot du live cd
    Puis vous générez le fichier ISO.

    L'image produite peut être gravée sur une clé usb via une excellent outils nommé ISOUSB conçu par Esclapion.

    Ce que b2im ne fait pas


    Le café (!) ainsi qu'une image depuis le système !
    b2im s'appuie sur les scripts de ManjaroISO et a donc besoin d'une connexion internet.

    Ou trouver b2im, l'installer et le lancer


    Téléchargement du PKGBUILD
    $ wget http://download.tuxfamily.org/xcfaudio/MANJARO/build2isomanjaro/PKGBUILD
    Préparation du binaire
    $ makepkg
    Installation du binaire :
    $ sudo pacman -U ./build2isomanjaro-0.8.3-1-any.pkg.tar.xz
    Rendez maintenant dans le menu système et cliquez sur b2im

    Informations techniques


    b2im est écrit en python, utiise la librairie Gtk3 ainsi que Glade et est traduit dans les langues suivantes: catalan, german, english, spanish, french, galician, italian.
    A la demande de:.
    • @Ayceman: Roumain inlus
    • @tulliana: Turque inclus

    Merci ...


    ... aux Geeks de chez Manjaro et en particulier à Esclapion pour avoir partagé les informations nécessaires à la construction de b2im.

    b2im en images


    b2im_packages.png

    b2im_desktop.png

    b2im_kernel.png

    b2im_edit.png

    b2im_gfxboot.png

    b2im_generate_iso.png

    Un exemple concret depuis VirtualBox


    example.png

    dvbtv

    $
    0
    0


    dvbtv qui est une application fonctionnelle écrite en langage C avec Gtk3 pour regarder des programmes DVB, est le pendant ( en moins bien ! ) de l'excellente application qu'est Typhony qui écrite en Python.
    dvbtv_about.png

    Pourquoi cette réécriture


    Très simplement par curiosité suite à la lecture du code Python de Typhony. et parce que j'ai été très étonné de ne pas trouver ce code en langage c pour du dvb-x !
    J'ai donc cherché en vain sur le Net des exemples de code C sur ce sujet ou j'ai évidemment trouvé du code C++ tels Me-Tv et kaffeine qui m'ont aussi servit d'exemple.

    Ma référence restera Typhony.
    Pas simple de transcrire les subtilités d'un langage objet tel que Python ! Mais le défi est lancé ...

    Le concept


    Le code actuel ne tiens compte que du réseau terrestre ! Je n'ai accès qu'à la TNT actuellement :(
    Un jour peut être seront inclus le cable et le satellite

    Lecture du contenu du fichier channels.conf qui peut être créé par
    $ w_scan -ft -c FR -X > channels.conf
    Sélection d'un canal
    Activation de mplayer en mode esclave avec récupération de stdin et stdout
    Création d'un fichier fifo
    Prise en compte du fichier fifo par mplayer via stdin
    Ouverture du canal dvr
    Ouverture du canal frontend
    Passage des paramètres de la chaine en sélection à la carte dvb
    Activation des devices vidéo et audio
    Boucle sur une lecture de dvr dans un buffer d'une taille de 1504 octets

    Todo ou ce qu'il reste à faire !


    • L'enregistrement
      Ce module est partiellement développé.
    • Les données EPG
      qui correspondent aux titres, commentaires, ... des émissions.
    • Une sortie vidéo autre que par mplayer
      par exemple avec la librairie libxine mais là ! je coince sur les mise en forme des données mpeg-2 et mpeg-4 !
      !!! Si des Geeks pouvaient m'aiguiller (participer) sur ce problème de développement, n'hésitez pas à me contacter ;-)
    • Mémorisation ...
      du dernier canal visionné.
    • Plus ...
      tout le reste ! Y a du boulot !

    Ou trouver dvbtv, l'installer et l'utiliser


    • Depuis Manjaro ou ArchLinux
      Téléchargement du PKGBUILD
      $ wget http://download.tuxfamily.org/xcfaudio/DVBTV/PKGBUILD
      Préparation du binaire
      $ makepkg
      Installation du binaire :
      $ sudo pacman -U ./dvbtv-0.0.9-1-any.pkg.tar.xz
      Rendez maintenant dans le menu multimédia et cliquez sur b2im
    • Depuis les sources
      Téléchargement
      $ wget http://download.tuxfamily.org/xcfaudio/DVBTV/dvbtv-0.0.9-1.tar.gz>
      Décompression du paquet et compilation ...
      $ tar xvfz ./dvbtv-0.0.9-1.tar.gz
      $ cd dvbtv-0.0.9-1/
      $ ./configure --prefix=/usr
      $ make
      # make install
    • Utilisation de dvbtv
      $ dvbtv

    dvbtv en images


    dvbtv.png

    Create Base Py

    $
    0
    0

    createbasepy est une interface graphique qui permet de générer un squelette en code Python depuis un ou plusieurs fichiers créés par l'application Glade.

    createbasepy_about.png

    C'est à dire !


    Vous venez de créer un une interface à l'aide de l'application Glade que vous voulez manipuler avec du code Python !

    createbasepy va vous permettre de créer un squelette et vous n'aurez plus qu'à vous concentrer sur le code de l'application elle même.

    Depuis l'interface de createbasepy vous adaptez les Nom, Version, Auteur ainsi que la Destination de votre projet puis vous importez votre fichier de type Glade.

    Cliquez sur suivant ...

    Les langues pour l'internationalisation de votre application sont sélectionnées par défaut et vous pouvez aisément les modifier en cliquant sur le bouton [ Ajouter des langues ] ...

    Cliquez sur suivant ...

    Vous activer le bouton [ Génération du projet ] et vous pouvez vous rendre dans le dossier de votre projet pour pouvoir commencer à vous concentrer sur votre code

    Un exemple de ce que vous obtiendrez:
    ├── AUTHORS
    ├── ChangeLog
    ├── COPYING
    ├── data
    │   ├── ProjectName.desktop
    │   └── wind_main.glade
    ├── fconfig.py
    ├── __init__.py
    ├── man
    │   ├── manpage.txt
    │   └── ProjectName.1
    ├── po
    │   ├── ALL.pot
    │   ├── de.mo
    │   ├── de.po
    │   ├── en.mo
    │   ├── en.po
    │   ├── es.mo
    │   ├── es.po
    │   ├── fr.mo
    │   ├── fr.po
    │   ├── it.mo
    │   └── it.po
    ├── ProjectName.py
    └── src
        ├── __init__.py
        ├── Language_Init.py
        └── wind_main.py
    

    Les sources de createbasepy


    Les sources de createbasepy sont accompagnées d'un fichier PKGBUILD pouvant être utilisé sous Archlinux ou Manjaro dont l'utilisation est:
    $ wget http://download.tuxfamily.org/xcfaudio/Python/createbasepy/PKGBUILD
    $ makepkg
    $ sudo pacman -U ./createbasepy-0.0.8-1-any.pkg.tar.xz

    Mais les utilsateurs d'autre distribution (Debian, ... ) pourront aussi très simplement importer puis extraire le fichier createbasepy.tar.gz et activer l'application de cette façon:
    $ ./createbasepy.py

    Les limites de createbasepy


    createbasepy est écrit avec du code Python-3 et ne peut fonctionner qu'avec des fichiers venant de Glade en version récente !

    Une doc parmis d'autres ....

    createbasepy en image


    createbasepy_1.png


    createbasepy_2.png


    createbasepy_3.png


    createbasepy_4.png

    X Build Pot File

    $
    0
    0
    Internationalisation de projet .en Python, Perl, Bash, C, ...
    Mise à jour, création, traduction et production de fichiers MO.

    xbpf_about.png

    Principe X Build Pot File


    Il suffit d'importer par Drag And Drop ou via une boite de sélection un dossier valide possédant des fichiers à traduire en Python, Perl, Bash, C, ...

    Puis de sélectionner le ou les types de fichiers de traductions à mettre à jour ou à ajouter.

    Et enfin de valider la génération des fichiers MO.

    J'ai repris le code de bpf pour l'intégrer dans une GUI.

    Utilisation de X Build Pot File


    Téléchargement du PKGBUILD
    $ wget http://download.tuxfamily.org/xcfaudio/Python/xbpf/PKGBUILD
    Préparation du binaire
    $ makepkg
    Installation du binaire
    $ sudo pacman -U ./xbpf-1.8-1-any.pkg.tar.xz
    Rendez-vous dans le menu [ Développement ] et cliquez sur [ xbpf ]

    X Build Pot File en image


    xbpf_1.png


    xbpf_2.png


    xbpf_3.png
    Viewing all 25 articles
    Browse latest View live