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 $ makePasser en mode administrateur puis :# make installAllez 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 ...
Samsung clp-315
Canon mg-5150
Merci à @Antiloque pour son billet d'installation des drivers d'imprimante [ CANON MG5150 ]
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.gzExtraction 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.shen mode utilisateur: $ sudo ./install.shIl vous suffira de répondre aux différentes questions puis d'utiliser enfin votre nouvelle imprimante.
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.gzExtraction 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.shen mode utilisateur: $ sudo ./install.shLe 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 ...
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é:
- Renseigner le chemin
- Renseigner le nom de fichier
- Renseigner l'extension
- Configurer cet utilitaire avec un alias dans $HOME/.bashrc
Le cahier des charges est (très) simple:
- Une aide
- Une fonction de test avec uniquement un affichage des opérations à l'écran
- Gestion des paramètres en ligne de commande
J'ai ajouté:
- 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: FALSENotez que:
- 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
- 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
- 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:
- http://edu.ca.edu/exemples/lettrines/lettrine.html
- http://on-air.hiseo.fr/css3/lettrine-en-css3/
- http://www.css-faciles.com/mise-en-page.php
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
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 0Il suffira de rendre le fichier SaveWithRsync.sh exécutable avec la commande:$ chmod +x ./SaveWithRsync.shPuis de l'activer comme ceci:$ ./SaveWithRsync.shVous 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 rsyncIci 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
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) = 4Et 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 ...Et donc, après ces minis modifications, les tests sont ok chez moi:
- 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
$ ./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.2Une 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 $ makePuis en mode adminitrateur:# make installEt à 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
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
Les sources de Time management
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=/usrVous pouvez enchaîner avec la commande:$ makeEt effectuer un premier test avec:$ ./src/tmInstallation sur le système en mode administrateur:# make install
linechec
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 ...Mais j'attends de prendre contact avec l'auteur (Gerald DUMAS) pour une éventuelle modification de code ...
- 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.
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
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_listPour créer le fichier [ macro.txt ] qui utilise le fichier de définitions [ def_macro.txt ]$ iptc_exiftool.pl -make_listPour 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:Les informations IPTC sont des informations de description qui nécessitent l'intervention d'un agent humain:
- la marque et le modèle de l'appareil photo
- la date exacte de prise de vue
- etc. ..
- 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_listLes 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.jpgUn dernier appel ...$ iptc_exiftool -runva 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
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:Les informations IPTC sont des informations de description qui nécessitent l'intervention d'un agent humain:
- la marque et le modèle de l'appareil photo
- la date exacte de prise de vue
- etc. ..
- 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
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.
Un double click sur une image dans la liste permet la visualisation de la vignette
La partie de droite permet l'édition des tag du fichier sélectionné.
L'éditeur de définitions de tags permet une modélisation très fine de la partie édition/visualisation.
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=/usrVous pouvez enchaîner avec la commande:$ makeEt effectuer un premier test avec:$ ./src/iptceditInstallation 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
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 connaissanceListe = {'Nom_1' : False,'Nom_2' : False,'Nom_3' : False,'Nom_4' : False,'Nom_5' : False,'Nom_6' : False };
Documentations utilisées
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
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.gladeCette 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.pyDont 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
!---------------------- ! ! 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:Mais je vous invite à lire le contenu du script ppt.py pour les détails ...
- 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
Utilisation du script: ppt.py ( Python Project Translating )
Téléchargement$ wget http://download.tuxfamily.org/xcfaudio/Python/ppt/ppt.pyRendre le script executable$ chmox +x ./ppt.pyInstallation$ sudo ./ppt.py /usr/bin/ppt.pyPremiè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 versionUne seconde fois avec le paramètre -go$ ppt.py -g ...... permettra la création des fichiers nécessaires à la traduction de votre applicationpo/all.pot po/en_GB.mo po/en_GB.po po/en.mo po/en.po po/fr.mo po/fr.poIl 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
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 depuishttps://code.google.com/p/fricorder/pour mes début en programmation dans le langage Python.
Copyright 2005-2008 - manatlan - Licence GPL2
http://fricorder.googlecode.com
http://manatlan.com
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.xzRendez vous dans le menu Multimédia et cliquez sur l'entrée FricorderDepuis le paquet tar.gz $ tar xvfz ./fricorder-x.x.x.tar.xz $ cd fricorder-x.x.x/ $ ./fricorder.pyInstallation et configuration de la librairie at $ sudo -S pacman atConfiguration de at pour systemctl$ sudo systemctl enable atd $ sudo systemctl start atd $ sudo systemctl enable atd.serviceVé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/atdUn reboot de ma machine fut chez moi nécessaire !$ reboot
Fricorder en images
Documentation utilisée
Introduction à Python:
Un (très) vieux bouquin (première édition janvier 2000) mais également très instructifEtude (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
!---------------------- ! ! 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:Mais je vous invite à lire le contenu du script bpf.py pour les détails ...
- 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
Utilisation du script: bpf.py (Build Pot File )
Téléchargement du PKGBUILD$ wget http://download.tuxfamily.org/xcfaudio/Python/bpf/PKGBUILDPréparation du binaire$ makepkgInstallation du binaire$ sudo pacman -U ./bpf-1.6-1-any.pkg.tar.xzPremiè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.5Une 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 applicationpo/all.pot po/en_GB.mo po/en_GB.po po/en.mo po/en.po po/fr.mo po/fr.poIl 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
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/PKGBUILDPréparation du binaire$ makepkgInstallation du binaire$ sudo pacman -U ./pacman-shell-1.5-1-any.pkg.tar.xzActivation en ligne de commande$ pacman-shell.shLe 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 )
b2im est une interface graphique conviviale qui permet la construction d'image(s) ISO pour la distribution Manjaro.
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:Puis vous générez le fichier ISO.
- 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
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/PKGBUILDPréparation du binaire$ makepkgInstallation du binaire :$ sudo pacman -U ./build2isomanjaro-0.8.3-1-any.pkg.tar.xzRendez 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
Un exemple concret depuis VirtualBox
dvbtv
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.
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.confSé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/PKGBUILDPréparation du binaire$ makepkgInstallation du binaire :$ sudo pacman -U ./dvbtv-0.0.9-1-any.pkg.tar.xzRendez 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
Create Base Py
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.
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
X Build Pot File
Internationalisation de projet .en Python, Perl, Bash, C, ...
Mise à jour, création, traduction et production de fichiers MO.
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/PKGBUILDPréparation du binaire$ makepkgInstallation du binaire$ sudo pacman -U ./xbpf-1.8-1-any.pkg.tar.xzRendez-vous dans le menu [ Développement ] et cliquez sur [ xbpf ]