Programmation

Fil des billets

vendredi 27 septembre 2013

Contourner le bug #65002 dans Poppler avec Vala

Récemment, je me suis mis à apprendre le langage Vala (je ne connais pas encore toutes les suptilités), et en essayant de comprendre un des exemples, la compilation a échoué.

J'ai trouvé, qu'il avait déjà été mentionné ici.

En parcourant le fichier poppler-glib.deps, on constate qu'il y a une référence à Gtk+2 (en réalité c'est GDK 2).

Donc si on remplace le nom du package gdk-2.0 par gdk-3.0 tout fonctionne correctement.

Pour éviter de modifier un fichier sur le système, le plus simple consiste à le copier [1] (dans le dossier où se trouve notre programme vala).

$ cp /usr/share/vala-0.20/vapi/poppler-glib.* .

On fait le remplacement, et si l'on a besoin de compiler avec le support de Poppler, voici les options qu'il faut passer au compilateur.

$ valac --vapidir=. --pkg poppler-glib ...

Pour conclure, je vous présente un programme,qui va rechercher des informations contenu dans un fichier PDF.

Pour le compiler.

$ valac --vapidir=. --pkg poppler-glib --pkg glib-2.0 --pkg gio-2.0 pdf-info.vala

Si tout se passe bien (ne faites pas attention aux warnings), on le lance de cette manière.

$ ./pdf-info -h
Usage:
  pdf-info [OPTION...] 

Help Options:
  -h, --help         Show help options

Application Options:
  -f, --filename     Path to PDF file

$

Quelques exemples de résultats possibles

$ ./pdf-info -f ~/Documents/packaging-tutorial.fr.pdf
title: Tutoriel : la construction de paquets Debian
Nb pages: 78
pdfTeX-1.40.13
$

$ ./pdf-info -f ~/Téléchargements/accuseReception.pdf 
No title
Nb pages: 2
Apache FOP Version 1.0
$

$ ./pdf-info -f ~/Téléchargements/BSD_08_2013.pdf 
title: BSD Magazine
Nb pages: 48
Adobe PDF Library 9.9
$

Note

[1] La version de vala peut être différente, esayez find /usr/share/ -maxdepth 1 -type d -name 'vala-*' -print

Lundi 12 août 2013

Aperçu du widget, GtkComboBox

Nous continuons notre série de billets consacrés aux principaux widgets sous Gtk.

Cette fois-ci, il s'agit de GtkComboBox, cet élément permet de créer une liste déroulante.

Lire la suite...

Lundi 5 août 2013

Découverte du widget GtkEntry avec Python

Dans ce billet nous allons découvrir le widget, GtkEntry.

Cet élément graphique permet à un utilisateur de rentrer du texte (qui pourra, par la suite être traité).

Lire la suite...

Dimanche 23 juin 2013

Voir et revoir les vidéos de Arte+7 en ligne de commande

Si vous souhaitez voir ou revoir facilement les vidéos du site Arte+7, vous pouvez utiliser le script shell [1]), qui se trouve en annexe.

Il repose sur le fabuleux framework, GStreamer.

Édit (mise à jour, 28 juin 2013) : Lisez bien les prérequis notamment si vous êtes sous Debian/Ubuntu ou LinuxMint.

Note

[1] Je me suis appuyé sur sh(1), donc il fonctionne avec n'importe quel interpréteur de commandes tels que Bash, cshell, mksh, ...

Lire la suite...

samedi 16 mars 2013

Le pattern-matching dans Bash

En faisant la mise à jour de Dotclear, via les patches, j'ai oublié de préciser qu'il fallait omettre le dossier parent. Je me suis donc retrouvé avec des fichier portant l'extension .rej.

assoavignu@pastis $ for file in `find . -type f -name '*.rej'`; do echo ${file}; done
./blogs.php.rej
./blog_theme.php.rej
./comment.php.rej
./categories.php.rej
./category.php.rej
./comments_actions.php.rej
./comments.php.rej
./blog_pref.php.rej

Pour retrouver leurs extensions d'origine (.php), une simple boucle suffit :

assoavignu@pastis $ for file in `find . -type f -name '*.rej'`; do mv ${file} ${file%.*}; done

Je ne suis pas certain que la « syntaxe » ${variable%.*} fonctionne avec tous les shells.

mercredi 13 février 2013

Transformer des dates avec le module python-dateutil

Récemment, j'ai eu besoin de transformer des dates écrites dans ce format : Wed, 13 Feb 2013 05:34:15 +0100 en quelque chose de plus « normé », ISO 8601.

Lire la suite...

mardi 31 janvier 2012

Comment exclure un module avec setuptools ?

Pour ceux ou celles, qui maintiennent (ou on l'intention de créer) des paquets Python pour leur distribution favorite, je vous livre une astuce si vous voulez exclure un, ou plusieurs modules.

Dans mon cas, je ne voulais pas installer le dossier tests/ (il dépend bien souvent de la bibliothèque nose), lors de la création de mon package.

Nous allons utiliser la fonction find_packages() du module setuptools.

Voici ce que nous dit la docstring :

[...]

FUNCTIONS

find_packages(where='.', exclude=()) Return a list all Python packages found within directory 'where'

'where' should be supplied as a "cross-platform" (i.e. URL-style) path; it will be converted to the appropriate local path syntax. 'exclude' is a sequence of package names to exclude; '*' can be used as a wildcard in the names, such that 'foo.*' will exclude all subpackages of 'foo' (but not 'foo' itself).

[...]

La documentation :

[...]

find_packages() takes a source directory, and a list of package names or patterns to exclude. If omitted, the source directory defaults to the same directory as the setup script.

Exclusion patterns are package names, optionally including wildcards.

[...]

Un exemple va nous aider à bien comprendre (on se place dans les « mêmes conditions », qu'au moment de la création d'un paquet) :

olivier@bornem:~ $ tar -xzf /usr/ports/distfiles/waitress-0.8.tar.gz
olivier@bornem:~ $ cd waitress-0.8/
olivier@bornem:~/waitress-0.8 $ python
Python 2.7.2 (default, Jul  4 2011, 20:20:01) 
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
>>> from setuptools import find_packages
>>> l = find_packages(where='.')
>>> l
['waitress', 'waitress.tests', 'waitress.tests.fixtureapps']
>>> 

on obient une liste, de tous les dossiers contenant un fichier __init__.py.

Si l'on ne souhaite pas installer le répertoire waitress/tests, il faut le mentionner :

>>> l = find_packages(where='.', exclude=['waitress.tests'])
>>> l
['waitress', 'waitress.tests.fixtureapps']
>>> 

waitress/tests/fixtureapps/ est toujours présent (la compilation échouera, car le module tests sera absent). Il faut également le préciser tous les sous-dossiers

>>> l = find_packages(where='.', exclude=['waitress.tests', 'waitress.tests.fixtureapps'])
>>> l
['waitress']
>>> 

On peut utiliser un joker (ou wildcard).

>>> l = find_packages(where='.', exclude=['waitress.test*'])
>>> l
['waitress']
>>> 

Le plus gros du travail est fait, il ne reste plus qu'à rechercher un fichier MANIFEST.in, ou SOURCES.txt, et de supprimer les lignes correspondantes à ce module (on crée alors un patch).

Une dernière chose, la fonction find_packages() se trouve dans le fichier setup.py, on va également le patcher.

mercredi 23 novembre 2011

Présentation du micro-framework Flask

logo framework Flask

Ce billet constitue une présentation du framework, Flask. Il permet de créer rapidement et très simplement des applications Web (blog, forum, etc.).

Par la suite d'autres billets seront publiés pour présenter d'une manière plus approfondi quelques unes de ses caractéristiques.

Lire la suite...

page 2 de 2 -