Midilibre.fr
Tous les blogs | Alerter le modérateur| Envoyer à un ami | Créer un Blog

16/10/2008

[deb] - Obtenir la liste des paquets(deb) installés

applications-engineering copie.jpgJe cherchais à obtenir la liste des paquets installés sur une machine pour pouvoir réinstaller à l'identique :

en ligne de commande dpkg --get-selections permet de lister les paquets et awk nous permets de récupérer ce dont on a besoin (la bonne colonne) :

dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}' > liste

et on reinstalle avec :

cat package_list | xargs apt-get install

Sinon dans le même esprit sinon il y a wajig qui est un front end a ce que nous venons de voir ci dessus :

on sauvegarde :

wajig listinstalled > liste

on restaure :

wajig fileinstall liste

simple mais il faut installer un autre paquet....

[EDIT] il y a encore plus smple, grâce à boris (et moins bricole):


# Pour sauvegarder la liste des paquets
dpkg --get-selections > liste.txt

# Pour 'sélectionner' la liste des paquets
dpkg --set-selections < liste.txt

# Pour valider la sélection et installer les paquets
apt-get dselect-upgrade

 

* nota : le tout en root bien sur !

15/10/2008

[gimp] - Faire une photo "digitale"

prev.jpgHier j'ai été confronté à un problème : comment une photo de nature peut elle apparaitre hi-tech?..... je me suis tordu les méninges. Aprés analyse du mot hi-tech (c'était le mot d'ordre de mon client ;-)) je me suis dis bon, prenons les pixels comme base de départ et tachons de faire quelque chose de cohérent. je vous livre ici mon petit tutorial pour transformer une simple image d'abeille en quelque chose de beaucoup plus moderne.

Ci dessous notre image de départ:

800px-BeeOnFlower.jpg

La première étape sera de dupliquer cette image (quatrième option tout en bas ou MAJ+CTRL+D) et d'appliquer un filtre de pixellisation avec : Filtres -> flou -> pixeliser et mettez 20 à largeur et à hauteur

Capture-1.png


Mettre le calque en mode Lumière douce et le dupliquer à nouveau. Sur ce dernier calque appliquer un nouveau filtres pour marquer les contour de nos pixels :
Filtres -> Détection des bords -> Contour Laissez l'algorithme sur sobel, quantité 2 et Etaler

Capture-2.png

Mettre ce calque en lumière douce
Et pour affiner un peu on peut ajouter un masque de calque sur le dernier calque (clic droit ajouter un masque de calque) et avec un pinceau assez epais on peut tracer un cercle sur l'abeille pour la faire ressortir. Voici le résultat que je trouve assez intéréssant :

Capture-3.png

 

14/10/2008

[screenstapp] - v0.3 pour la capture d'écran sous Gnome

Capture.pnget voici la v0.3 de ScreenStApp
(dite la "Claude release" puisque tout ce qui y est rajouté vient de remonté qu'il m'a fait sur la ML de
Linux on the root
dont je fait fièrement parti)

Changelog:
Permet la capture de fenêtre uniquement
Mémorise le répertoire de capture
Taille de la fenêtre statique
Choix du type de fichier (jpg,...)
Amélioration de l'increment sur les noms de fichier

Tout se passe ici

13/10/2008

[pygtk] - Python débutant rajouter une interface avec Glade

Suite à notre petite mise en jambe de la dernière fois avec python, nous allons maintenant voir comment sortir de l'atmosphère de la ligne de commande pour rajouter une interface graphique à nos petits programmes. Les paquets que vous devez ajouter sont : python-gtk2 (pour l'interface entre python et gtk) et glade pour concevoir facilement des interfaces en mode visuel.
L'objectif d'aujourd'hui sera de faire une conversion euros vers dollars (on reste dans le financier, crise oblige ;-)).
De quoi avons nous besoins ? du taux de change, que nous récupérerons sur http://download.finance.yahoo.com/d/quotes.csv?s=EURUSD=X... qui nous fournira un csv (comma separated value) un fichier séparé par des virgules qui sera trés simple à exploiter.

Première étape la création de l'interface :

pugtk_glade.pngDans glade, créez une nouvelle fenêtre, et ajoutez y un conteneur de type boîte horizontal (avec 3 colonnes).
Dans la colonne de gauche créez une "saisie de texte" (dans Contrôle et affichage) pour laquelle vous donnerez le nom de 'montant_euro'. Au centre rajoutez un "label" dont le texte sera "Euros font en Dollars".

Et dans la colonne de droite, une autre saisie de texte, qui s'appelera "resultat_dollars".

Nous avons notre interface, sauvegardons là dans un dossier, sous le nom de convertisseur.glade

Deuxième étape voici venu le temps de python et de pygtk :

tout d'abord il nous faut faire les imports nécéssaire :

import gtk.glade
import urllib

nous avons bien entendu besoin de gtk.glade pour bénéficier de gtk sous python pour analyser le fichier glade que nous crée.
et nous avons besoins de urllib pour récupérer en ligne le taux de change.

le coeur du programme :

if __name__ == '__main__':

taux = urllib.urlopen('http://download.finance.yahoo.com/d/quotes.csv?s=EURUSD=X&f=sl1d1t1ba&e=.csv')
liste = taux.read().split(',')
app = window1()
gtk.main()

la première ligne est classique, elle demande à python de vérifier si le programme est bien lancé en autonome (et non pas une fonction).
nous stockons le csv dans la variable taux, qui est ensuite lu avec read() et découpé avec split(',') la virgule permet de définir ce qui sépare les éléments dans le fichier.
l'avant dernière ligne premet d'indiquer le nom de notre fenêtre (attention le nom doit correspondre à ce que vous avez mis dans glade)

Concernant la variable liste, elle est structurée de la sorte :

['"EURUSD=X"', '1.3403', '"10/10/2008"', '"5:36pm"', '1.3401', '1.3406rn']

ainsi pour récupérer le taux de change il faudra faire appel au deuxième élément de la liste avec liste[1] (on compte à partir de 0)

La création de classe de notre fenêtre :

class window1:
def __init__(self):

ui = gtk.glade.XML('convertisseur.glade')
self.main_window = ui.get_widget('window1')
self.montant_euro = ui.get_widget('montant_euro')
self.resultat_dollars = ui.get_widget('resultat_dollars')
self.montant_euro.set_text(liste[1])
self.resultat_dollars.set_text("1")
self.main_window.connect('destroy', gtk.main_quit);
self.montant_euro.connect('changed', self.modification_du_dollar);
self.main_window.show_all()

Nous créons donc notre classe, et initialisons les différents éléments avec __init__
le ui.get.widget permet de récupérer les différents éléments crée avec glade et de les stocker dans des variables.
set_text permet de régler le texte dans une zone de saisie, ainsi nous mettons 1 pour nos euros et la variable 1 de la liste récupéré chez yahoo.
le .connect permet d'indiquer ce que nous voulons faire, destroy si un appel de type fermeture sur la main_window. et 'changed' sur montant_euro permet de détecter dés que l'on change le texte et ainsi d'appeler la fonction modification_du_dollar
enfin nous affichons la fenêtre avec .show_all()

La fonction qui fait tout le travail :

def modification_du_dollar(self, widget):

try:

euros = self.montant_euro.get_text()
resultat = float(euros)*float(liste[1])
self.resultat_dollars.set_text(str(resultat))

except:

pass

donc nous avons vu que dés que vous allez modifier le texte dans la zone 'montant_euro' nous appelons la fonction modification_du_dollar, qui est en fait l'endroit ou nous allons faire le calcul par rapport au nouveau prix. Il faut donc récupérer le texte avec get_text() sur montant_euro. la valeur du dollar est dans liste[1] comme nous l'avons vu, il ne reste qu'a stocker la multiplication dans resultat. float (salut reeth) permet de convertir notre texte (string) en chiffre à virgule (flottant float). set_text permet d'affecter le resultat (en le convertissant en texte avec str (pour string)) à resultat_dollars.

Vous remarquerez que j'ai entouré ces trois ligne d'un try et d'un except, je demande en fait a python d'essayer de faire le calcul, si il n'y arrive pas (parceque yahoo n'a pas fournit le csv ou que vous avez tapez du texte dans les zones de saisie) il appelle except, à qui nous demandons de ne rien faire avec pass.

voici le résultat de notre application une fois terminé :

pygtk_convert.png

Vous trouverez l'exemple complet ici.

11/10/2008

[python] - Programmation débutante sous linux

Nous allons nous lancer dans une série qui va apprendre à faire des petits programmes en Python.

Pré-requis - Créons notre fichier :

Grâce à cette série sur la programmation, nous allons également aborder la "console"... sous kde vous pouvez lancez konsole et sous gnome gnome-terminal

Vous vous trouvez devant un terminal qui va nous permettre de donner des ordres à l'ordinateur.

Ce que nous voulons faire :

1- créer un dossier, pour cela vous devez taper mkdir python et valider avec la touche entrée, vous venez de créer un dossier python dans votre dossier utilisateur (qui est l'emplacement par défaut du terminal) mkdir signifie make directory (créer un répertoire), vous pouvez allez voir dans gestionnaire de fichiers graphique il est bien là.

2- nous déplacer dedans, tapez cd python ce qui signifie que vous êtes dans le répertoire python (Change Directory).

3- créer un fichier,nous allons maintenant lancer notre éditeur de texte pour taper le programme. Sous kde, tapez kate bonjour et sous gnome gedit bonjour (vous l'aurez compris bonjour sera le nom de notre programme) une fois cela fait tapez :

#!/usr/bin/python
print "Bonjour"

C'est tout simple, la première ligne indique où se trouve python, elle sera systématiquement présente dans tous vos programmes, et la deuxième indique qu'il faut afficher le mot bonjour.Enregistrez votre programme.

4- le rendre exécutable, de retour dans notre terminal nous allons rendre notre programme exécutable : chmod +x bonjour voilà il ne nous reste plus qu'à lancer notre joli programme ./bonjour (le ./au début indique qu'il faut lancer le fichier bonjour dans le répertoire dans lequel on se trouve)

5- voir le rendu :

e9a80eef16adc6c85e2b9a06d63f787e.png

Notre programme nous dit bonjour, vous avez crée votre premier programme,.Nous allons maintenant rendre le programme plus évolué et plus poli, nous allons faire en sorte qu'il nous demande notre nom, et qu'il nous réponde bonjour "votre nom".

Réeditez votre programme (inutile de tout retaper, utilisez les flèches du clavier vers le haut pour revenir au moment  ou vous avez tapé kate bonjour ou gedit bonjour) et rajoutez les éléments en vert

#!/usr/bin/python
nom = raw_input('Votre nom : ')
print "Bonjour" + nom

lancez votre programme en tapant   ./bonjour et voyez la différence.....

f9b6230bfe02b85b64ca5df2d851a6f5.png
En fait vous avez stocké le nom dans ce qu'on appelle une variable, qui ici s'appelait nom, et nous l'avons appelé au moment de dire bonjour.
Un peu de calcul....
Travailler sur des chaînes c'est bien mais un peu de calcul ne fait pas de mal. Supposons que vous multipliez encore les chiffres par 6.55957 (allez savoir pourquoi...) nous allons créer un programme convertir.py (sur la même base que ci dessus) qui va récupérer un chiffre que nous allons donné à la suite du programme pour nous afficher la conversion :

#!/usr/bin/python
from string import atoi

valeur = raw_input('Montant : ')
combien = atoi(valeur)
multiplication = combien * 6.55957

print valeur + " en francs fait " + str(multiplication) + " Francs"

Automatiquement votre programme vous converti votre valeur en francs. Analysons un peu le code. une nouveauté  la deuxième ligne : nous avons besoins de convertir ce que vous allez rentré en chiffre (sinon cela s'appelle un string : autrement dit du texte) il est donc nécessaire d'appeler en renfort  des modules qui vont nous permettre de faire cela automatiquement en l'occurrence atoi d'ou le "from string import atoi".
la 3eme ligne vous demande le champs comme nous l'avons vu. et la quatrième permet de convertir votre texte (string) en chiffre (ici un int c'est à dire un chiffre sans virgule, si vous tapez 15.2 vous aurez une erreur). la variable combien converti donc votre texte (string) en chiffre entier (int). la variable multiplication elle, permet de multiplier "combien"
par 6.55957... et la vous me direz mais y'a une virgule là?

Et oui effectivement, 6.55957 est un flottant (float), mais python fait le nécessaire pour vous et converti automatiquement votre "combien" (qui est un int) en float. d'où le résultat que vous obtenez avec le print.

Un programme plus probant serait d'autoriser la saisie de variable avec virgule(en fait des points), pour cela il suffit de remplacer à la ligne 2 et 5 les atoi en atof pour convertir notre texte (string) en flottant (float).

Pour réaliser des opérations de calcul, vous avez à votre disposition : + pour les additions,  - pour les soustractions, * pour les multiplications et / pour les divisions.

Les conditions
Notre programme était jusqu'à  présent très linéaire, il suivait le programme de la première ligne jusqu'à  la dernière, nous allons introduire un nouveau concept : les conditions. Admettons que vous ayez dans votre portefeuille un certains montant et que vous souhaitiez acheter un objet. Nous allons demander à python de vérifier si vous avez assez pour vous faire plaisir.

#!/usr/bin/python
from string import atof

combien_sur_vous = atof(raw_input('Combien avez vous : '))
objet_desire = atof(raw_input('Montant de votre achat : '))

if combien_sur_vous < objet_desire:
print "Rentrez a la maison"
else:
print "ok vous pouvez achetez"

On rècupèrer donc le module atof (il est possible que quelques centimes traînent au fond de la poche et donc engendre des virgules).

Petite nouveauté vous constatez que l'on a placé atof et raw_input sur la même ligne, on gagne de la place en en-capsulant les variables, atof converti directement le retour de raw_input. On prends donc les deux variables (combien_sur_vous et objet_desire)
Nota: jamais d'espace ni d'accent dans les noms de variables ... attention.
et nous commencons notre conditions if combien_sur_vous < objet_desire: qui signifie tout simplement SI combien_sur_vous est inférieur à la variable objet_desire, on demande à l'ordinateur d'afficher une petite phrase nous demandant de rentrez chez nous plutôt que de faire du leche vitrine. dans le cas inverse ELSE (sinon) on demande d'afficher l'accord.

NOTE IMPORTANTE : python structure son code sur les espaces ou les tabulations, c'est à dire qu'aprés le IF et le ELSE vous avez notez que j'ai rajouté une tabulation, en fait chaque tabulation correspond à un niveau d'ordre dans les blocs de conditions.
Donc si vous avez 10 lignes dans un IF il vous faudra indenter (mettre le même nom d'espace ou de tabulation entre le bord et le début de votre texte) de la même manière chacune des 10 lignes). C'est un concept propre à Python mais qui permet d'avoir un code finalement  propre.

10/10/2008

[devtodo] - Gérer sa todo list en ligne de commande

Comme vous le savez maintenant, j'occupe un peu de mon temps à faire des applications, c'est passionnant et j'ai souvent des retours d'utilisateurs qui sont trés pertinents, donc je note ça sur des fichiers, des post it et selon l'endroit où je me trouve tout ce qui me tombe sous la main... seulement pour centraliser tout ça, ce n'est pas simple. J'ai trouvé l'outil qui me convient à la perfection : devtodo.
Il s'agit d'un gestionnaire de todo en ligne de commande, qui gére les priorités, les sous tâches etc.... il est composé de plusieurs petits outils todo (pour lister) tda pour ajouter une tâche et tdr pour supprimer, tde pour éditer et tdd pour marquer le todo comme étant traité. (l'outil todo permet de centraliser le tout avec des options, je vous renvois au man devtodo qui liste tout ceci avec précisions)

Le paquet devtodo permet d'installer le tout, voici ce que j'ai :

steph@debian:~$ apt-cache search devtodo
devtodo - hierarchical, prioritised todo list manager

Une fois installé le principe est simple, pour ajouter un todo il suffit de faire :

tda -p medium "Ajouter la fonction outils"

où -p est la priorité du todo (qui peut être veryhigh high medium low verylow)
et pour lister:

todo

chaque todo à un numéro, pour effacer, renommer... il suffit de se référer à ce numéro. par exemple pour effacer le todo 1 :
tdr 1

Une option également trés intéressante est de faire des sous ventilations des todo en les groupant :

tda -p low -g 1 "todo dépendant d'un autre todo"

et pour visualiser:

todo all

Bien entendu rien ne vous empeche de gérer une todoliste de course :

tda -p veryhigh "acheter du vin et du saucisson"

devtodo.jpg

09/10/2008

[linus torvald] - Le blog à Linus ?

linus_blog.jpgPour rebondir sur la note de Cedynamix et sur le fait que Linux vient de fêter sa presque majorité : quelques jours avant cette date Linus Torvald à ouvert son blog : (lien) .
En bref la vie de Linus au quotidien. On y apprend qu'il interdit à ses enfants de n'utiliser l'ordinateur que pour des jeux en flash ("Notably, they can't just play all those flash games all the time") et qu'il a toujours une carte verte.... et surtout qu'il a développé un outil pour faire du time tracking pour controler le temps passé sur internet par ses enfants (et ca déja c'est plus intéressant ;-)) je vais jeter un oeil dessus.

Aprés Hulk hogan, eve angeli, ozzy osbourne et les autres, on saura tout sur la vie à Linus.... A condition que cela soit bien lui, car certains doute de la validité de ce blog (du fait surtout du choix de blogspot en tant qu'héberguer de blog) :

En fait il existe un entretien avec Linus à propos de son blog.

La confirmation de Linus comme quoi il s'agit bien de lui : "Oui je suis bien Le Linus, Un faux Linus aurait au moins éssayé d'être amusant".

et j'ai retrouvé le message qui fait le pont entre lkm.org et son blog : ici

Par contre il existe par contre un vrai fake de blog de linux torvald : ici

...en attendant le facebook de Richard Stallman....

[gnome] - ScreenStApp la capture d'écran en v0.2

screenstapp.png

Voici la v0.2 de ScreenStApp, l'outil de capture d'écran sous gnome, développé par mes soins.
La liste des nouveautés :

Mise dans le systray pour gagner de la place et de la vitesse
Possibilité de cacher la fenêtre pendant la capture
Au lancement (après un ALT+F2 -> screenstapp) le programme s'enregistre avec la touche imprecran (possibilité de revenir à gnome-screenshot)
Ne se lance qu'une fois (pour éviter de polluer le systray à l'inverse de gnome-screenshot)
Auto increment des fichiers pour prendre des captures en rafale....

Les sources et le deb ici

Pour la v0.3, je vais tacher de me défaire de la dépendance a imagemagick (pour limiter les paquets installés) et implémenter la fonction drag'n'drop sur la prévisualisation.

08/10/2008

[gimp] - Mélanger couleur et noir-blanc

2bd92b76ccd38c7b35d41d0be1718171.jpgNous allons apprendre à réaliser un effet simple dans la pratique mais avec un rendu trés intéressant : la superposition d'une image en couleur sur un fond en noir et blanc.
Pré-requis : avoir pris connaissance de mon tutoriel sur les ciseaux ici
Vous pouvez obtenir la source de l'image ici
La première étape est donc de détourer le papillon avec les ciseaux, une fois cela fait il faut faire une sélection (que vous savez faire puisque vous avez suivi le tutoriel sur les ciseaux...sinon pour rappel il faut faire le tour avec les ciseaux boucler le tour, et cliquez dans le centre des points).
Une fois votre papillon sélectionné (comme ci dessous) il faut le copier (soit avec CTRL+C, soit avec Edition -> Copier)
40df537acba85daac0c6d56840631c83.jpg
Passez ensuite votre image en niveaux de gris : Image -> Mode -> Niveaux de gris.
Et repassez immédiatement en mode RVB : Image -> Mode ->RVB
Collez ensuite votre papillon (CTRL+V ou Edition Coller), vous allez avoir ceci :
8c14ff800e778a9418d9e070ad5fcae9.jpg
Il ne vous restera plus qu'a ajuster la position du papillon pour qu'il soit placé exactement au dessus de l'autre. Et voila le résultat.
2bd92b76ccd38c7b35d41d0be1718171.jpg

07/10/2008

[grabouille] - Le dessin pour les petits sous linux en v0.4

grabouille-0.4.jpg

1 mois que je n'avais pas touché au code de Grabouille, j'avais mis des idées de coté, et puis de chose en chose, du temps manquant, des aides diverses (G'mic par exemple ;-))...
Alors ce week end j'ai pris les choses en mains, et j'ai implémenté tout ce que j'avais noté dans ma todolist.
Et voilà le changelog de la V0.4.
- ajout d'un écran d'accueil
- fonctionnalité de sauvegarde dans mes_grabouilles du dossier utilisateur (CTRL+s)
- choix d'un théme (garçon/fille)
- possibilité de taper au clavier en linéaire
- ajout de 5 nouveaux fonds
- ajout d'un fond sonore sur l'intro
- nouveau mode de jeu : Attraper (catch the flag/flower pour petitou)
- ajout d'un menu dans Educations (plus besoins de lancer le logiciel en mode console) (merci Romain et Claude pour vos informations à ce sujet)

Le deb ici et les sources