Le blog de syeric

PyGTK, ben c'est génial !

Bonjour !

Haaa, pygtk c'est génial :) Et en ce moment je m'amuse ! Je me suis mis en tête de générer une série de pages, des tutoriels par exemple, où on navigue avec des boutons "Continuer" et "Précédent", mais le tout automatiquement et uniquement avec des fichiers texte. Ca présente l'intérêt que une fois que vous avez fait le programme, ben pour modifier le contenu et faire des ajouts, vous n'avez besoin de rien d'autre que des fichiers textes ;-)

Voyons ça de plus près ;-)

C'est des fonctions que l'on va appeler depuis un autre script.

On commence par la fonction widget_tuto qui génère le cadre dans lequel va se trouver le document et les boutons et même une image !

[python]
def widget_tuto(fichier):
	"Fonction qui génère la box qui va contenir la page du tuto et les boutons"
	#Un petit cadre
	cadre = gtk.Frame()
	#cération d'une boite horizontale
	box1=gtk.HBox(False, 5)
	#on l'ajoute au cadre
	cadre.add(box1)
	#Fenetre "scrollable"
	fd = gtk.ScrolledWindow()
	fd.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
	#On l'ajoute à la box1
	box1.pack_start(fd, True, True, 10)
	#on importe le texte
	text=chainaslist(fichier)
	#on crée une boite verticale
	box=gtk.VBox(False, 5)
	#on l'incorpore à la fenêtre scrollable
	fd.add_with_viewport(box)
	#On crée un label
	label1=gtk.Label()
	#On rempli le label avec text en tenant compte des balise
	label1.set_markup(text)
	#On ajoute le label à box
	box.pack_start(label1, False, False, 5)
	#On crée une image
	image = gtk.Image()
	#on l'importe à partir du nom donné dans le fichier du tuto
	image.set_from_file(getimage(fichier))
	#on la met dans la box
	box.pack_start(image, False, False, 5)
	#on crée le bouton suivant avec la fonction get_next
	next=get_next(fichier)
	#on crée le bouton précédent avet la foction get_previous
	previous=get_previous(fichier)
	#si c'est le premier
	if previous=="first":
		boutonnext=gtk.Button("Continuer")
		boutonnext.connect("clicked", nexttuto, next, cadre, box1)
		#On crée une boite horizontale
		box2=gtk.HBox(False, 5)
		#on y met le bouton
		box2.pack_start(boutonnext, False, False, 5)
	else:
		boutonprev=gtk.Button("Précédent")
		boutonprev.connect("clicked", nexttuto, previous, cadre, box1)
		boutonnext=gtk.Button("Continuer")
		boutonnext.connect("clicked", nexttuto, next, cadre, box1)
		#On crée une boite horizontale
		box2=gtk.HBox(False, 5)
		#on y met le bouton
		box2.pack_start(boutonnext, False, False, 5)
		box2.pack_start(boutonprev, False, False, 5)
	#on met la box2 dans box
	box.pack_start(box2, False, False, 5)
	#on montre tout ça
	cadre.show_all()
        return cadre



Bon ! Il y a une série de fonctions la dedans. Déjà, lorsqu'il s'agit des pages suivantes, il faut créer une deuxième fonction, quasi identique sauf qu'il n'y a pas le cadre...

[python]
def widget_tuto2(fichier, cadre):
	"fonction qui va générer les tutos suivants"
	#cération d'une boite horizontale
	box1=gtk.HBox(False, 5)
	#Fenetre "scrollable"
	fd = gtk.ScrolledWindow()
	fd.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
	#On l'ajoute à la box1
	box1.pack_start(fd, True, True, 10)
	#on importe le texte
	text=chainaslist(fichier)
	#on crée une boite verticale
	box=gtk.VBox(False, 5)
	#on l'incorpore à la fenêtre scrollable
	fd.add_with_viewport(box)
	#On crée un label
	label1=gtk.Label()
	#On rempli le label avec text en tenant compte des balise
	label1.set_markup(text)
	#On ajoute le label à box
	box.pack_start(label1, False, False, 5)
	#On crée une image
	image = gtk.Image()
	#on l'importe à partir du nom donné dans le fichier du tuto
	image.set_from_file(getimage(fichier))
	#on la met dans la box
	box.pack_start(image, False, False, 5)
	#on crée le bouton suivant avec la fonction get_next
	next=get_next(fichier)
	#on crée le bouton précédent avet la foction get_previous
	previous=get_previous(fichier)
	#si c'est le premier
	if previous=="first":
		boutonnext=gtk.Button("Continuer")
		boutonnext.connect("clicked", nexttuto, next, cadre, box1)
		#On crée une boite horizontale
		box2=gtk.HBox(False, 5)
		#on y met le bouton
		box2.pack_start(boutonnext, False, False, 5)
	else:
		boutonprev=gtk.Button("Précédent")
		boutonprev.connect("clicked", nexttuto, previous, cadre, box1)
		boutonnext=gtk.Button("Continuer")
		boutonnext.connect("clicked", nexttuto, next, cadre, box1)
		#On crée une boite horizontale
		box2=gtk.HBox(False, 5)
		#on y met le bouton
		box2.pack_start(boutonnext, False, False, 5)
		box2.pack_start(boutonprev, False, False, 5)
	#on met la box2 dans box
	box.pack_start(box2, False, False, 5)
	#on montre tout
	box1.show_all()
        return box1



Bien, ensuite, les fonctions get_next et get_previous.

[python]
def get_next(fichier):
	#on ouvre fichier grace à la fonction openfilelist de fileFunctions.py
	chaine=fileFunctions.openfilelist(fichier)
	#On évalue le nombre de lignes
	a=len(chaine)
	#chaine de caractère qui va être le nom du fichier
	name=chaine[a-3]
	#chaine de caractères qui est le nom du tuto
	name_tuto=chaine[a-1]
	#enfin, le chemin global du fichier (fonction suppr_char supprime le retour chariot en fin de ligne)
	finalchar=".""/Tutos/"+fileFunctions.suppr_char(name_tuto)+"/text/"+fileFunctions.suppr_char(name)
	return finalchar
	

def get_previous(fichier):
	#on ouvre fichier grace à la fonction openfilelist de fileFunctions.py
	chaine=fileFunctions.openfilelist(fichier)
	#On évalue le nombre de lignes
	a=len(chaine)
	#chaine de caractère qui va être le nom du fichier
	name=chaine[a-2]
	#chaine de caractères qui est le nom du tuto
	name_tuto=chaine[a-1]
	finalchar=""
	#enfin, le chemin global du fichier (fonction suppr_char supprime le retour chariot en fin de ligne)
	if name=="first\n":
		finalchar="first"
	else:
		finalchar=".""/Tutos/"+fileFunctions.suppr_char(name_tuto)+"/text/"+fileFunctions.suppr_char(name)
        return finalchar

fileFunctions.suppr_char() est une fonction de fileFunctions.py qui supprime le retour charriot en fin de ligne.

La fonction chainaslist()

[python]
def chainaslist(fichier):
	"fonction qui va ouvrir fichier et retourner la chaine de caratères entre le début et la balise [endtext]"
	#on ouvre le fichier
	chaine=fileFunctions.openfilelist(fichier)
	#variable de boucle
	i=0
	#on crée une chaine de caractère vide txt
	txt=''
	#Et c'est parti, tant que la ligne est différente de [endtext]\n, on rempli txt avec son contenu plus la ligne
	while chaine[i] != "[endtext]\n":
		txt=txt+chaine[i]
		i=i+1
	#on retourne txt
	return txt



Enfin, la fonction nexttuto() :

[python]
def nexttuto(widget, fichier, cadre, wid):
	cadre.remove(wid)
	box=widget_tuto2(fichier, cadre)
	cadre.add(box)
	cadre.show_all()



Alors, qu'est ce que ça fait tout ça ? Ca va générer un cadre dans lequel il y a un texte qui est lu dans "fichier" jusqu'à la balise endtext en prenant en compte le balisage pango. Ensuite, ça prend une image avec getimage en lisant dans le fichier le nom de l'image dans fichier. Ensuite, ça défini les boutons. Si l'avant dernière ligne de fichier est égale à "first", alors on ne met pas de bouton précédent. Sinon, et bien on crée les deux boutons, on lit le nom des fichiers qui correspondent aux suivant et précédent dans fichier, et grace à la fonction nextuto, on détruit l'intérieur du cadre et on régénère le nouveau document avec les nouveaux noms.

Au final, si vous voulez ajouter des documents, en enlever etc, vous avez juste à modifier les noms dans les fichiers ;-)

A bientôt.

Sylvain

Mon disque dur est mort, au secours ! Pas de panique ! On va tenter de récupérer les données !

Bonjour !

AVERTISSEMENT !

Je vous prie de lire cet avertissement avec la plus grande attention ! Ce que je vais décrire après peut vous sauver la mise ! Et accessoirement vous éviter un passage en chambre blanche facturé 500 € pour récupérer vos données. Le mec qui a codé ça est un génie.

MAIS ! Il faut savoir ce que l’on fait pour l’utiliser ! Je décline toute responsabilité si vous vous plantez !

Situation

Votre disque dur ne se monte plus, fait des bruits d’outre tombe, et vos 30 Go de musique (que vous avez obtenu légalement) sont en passe de devenir un vieux souvenir. Heureusement, dd_rescue est là !

Pré requis

  • Un disque dur endommagé...
  • Une partition ou disque entier VIERGE de taille supérieure à votre disque endommagé.
  • Connaissances de commandes telles que fdisk ou fsck
  • Une machine à café avec deux sachets de dosettes



Utilisation

Déjà, commencez par télécharger dd_rescue :

Décompresser puis make pour créer le binaire, qui sera dans le même répertoire.

Ensuite, je vais prendre la situation suivante :

  • Le disque dur endommagé est /dev/sdb1
  • Le disque dur ou la partition libre est /dev/sdc1



Vous obtenez ces infos avec :

fdisk -l

Alors, placé dans le répertoire de dd_rescue :

dd_rescue -l transfer_errors.log /dev/sdb1 /dev/sdc1

transfert_errors.log sera un fichier texte qui va lister les blocs qu’il n’a pas plus traiter. Il vous faut de la place, selon le cas il peut faire plusieurs gigas.

C’est le moment d’utiliser la machine à café. C’est très très long.

Une fois que c’est fait, vous faites alors un :

fsck.ext2

ou

fsck.ext3

ou

fsck.vfat

selon le système de fichiers sur le disque de secours bien entendu.

Il y a des cas où vous aurez une bouillie de fichiers avec des extensions bizarres. Ca ne m’est pas arrivé mais il existe des logiciels pour réparer ça qui seront donnés dans le document source en fin de ce tuto.

Cet outil est puissant. Vous pouvez, grâce à d’autre scripts (voir document source) récupérer la table de partition et autre secteur de boot.

Encore une fois, j’écris ce document à titre d’info. Faites très attention en l’utilisant.

Source

La source de ce tuto est le document beaucoup plus complet de enfoiro consultable ici

A bientôt !

Sylvain

Un nouveau blog intéressant

Bonjour !

Un nouveau blog vient d'être créé par deux membres de Linuxpourlesnuls, qui a un objectif audacieux : Apprendre ubuntu, une distribution GNU/Linux, uniquement en mode graphique !

Ca s'adresse donc tout particulièrement à ceux qui croient que l'on doit apprendre 36000 commandes pour arriver à lire une vidéo...

C'est par là

A bientôt !

Sylvain

Pourquoi j'utilise des logiciels libres ?

Bonjour !

Voilà une question qui peut paraitre importante ! Pourquoi donc ? Quelle idée ? Est-ce pour des raisons techniques ? Est-ce que c'est parce que j'adore l'informatique ? Où bien est-ce pour autre chose ?

Je vais tenter d'y répondre. Pour moi, leur utilisation est avant tout une question idéologique. En effet, je n'accepte pas que d'autres décident à ma place ! C'est ce que font les logiciels "privateurs" comme dirait Richard Stallman. Ces logiciels soumettent tout simplement les utilisateurs à leur propre point de vue. Si les clients veulent un changement, ils attendent que les développeurs veuillent bien le faire et payent une mise à jour pour en profiter.

Je ne fais pas confiance au logiciel propriétaire. Comment le faire ? On ne peut pas en voir le code. Il est impossible de vérifier ce que le programme fait vraiment. Par exemple, realplayer enregistre toutes les oeuvres que vous consultez et les envoie à leur base de données, tout ça sans que vous le sachiez ! Bien sûr, vous me direz, c'est des questions de programmeurs, pas d'utilisateurs. Pourtant si, car savoir ce que vous regardez ou écoutez, c'est une violation de la vie privée !

En France aujourd'hui, et ce depuis l'année dernière, il est illégal de créer un logiciel libre capable de lire le contenu crypté d'un DVD, sous couvert de protéger la propriété intellectuelle. Seulement, cela pose un problème majeur : ceux qui en ont le droit sont en situation de monopole ! Autrement dit, vous n'avez pas la liberté de choisir un autre logiciel que celui autorisé. On appelle cela des DRM, ou encore menottes numériques.

Je veux avoir la liberté de partager mon programme avec mes amis. Ce n'est pas que je veuille la mort des entreprises qui font du logiciel. Mais aujourd'hui, votre ami vient vous demander la copie d'un logiciel. Qu'est-ce que vous faites ? Vous refusez car vous n'avez pas le droit ? Vous acceptez mais vous devenez hors la loi ? Ce n'est pas possible ! A force de créer des formats que seuls certains logiciels peuvent lire, cela crée une grave injustice sociale car tout le monde en a besoin mais tout le monde ne peut pas payer !

Le logiciel libre est créateur d'emploi. Et oui. Certains vous dirons que non mais pourtant, en 2005, il y avait 10000 personnes qui travaillaient dans le logiciel libre en France. (chiffre vérifiable). Combien sont ils aujourd'hui ?

Le logiciel libre permet à tous, à condition d'être en possession d'un ordinateur, d'accéder à l'informatique. Ce n'est pas anodin ! Aujourd'hui, l'informatique est quelque chose d'indispensable pour la vie professionnelle. Ce sont donc des compétences qui doivent être accessibles à tout le monde !

Les éditeurs de logiciels propriétaires créent une sorte d'addiction à leur produit. Ce n'est pas pour rien que Micro$oft donne gratuitement des licences windows à des établissements scolaires ! Ce n'est pas pour le plaisir de ne pas gagner d'argent mais bien pour conditionner les enfants dès leur plus jeune âge ! Certains naïfs disent "ils sont gentils chez micro$oft, regardez Billou qui donne quasiment toute sa fortune à une fondation...". Déjà, Billou n'est plus président de cette entreprise mais en plus, il ne faut pas oublier que c'est une société cotée en bourse et soumise à la loi de leurs actionnaires ! Pourquoi donc attaquent-ils régulièrement le logiciel libre ? Car ce n'est pas dans leur intérêt, peu importe l'utilisateur !

Ils se permettent même de tolérer les versions de leur logiciels piratées. Et bien oui, pensez vous vraiment qu'ils ne savent pas que vous avez un word pas très légal ? A chaque mise à jour, XP envoie la liste complète des logiciels qui sont installés sur votre PC... Mais ils s'en moquent car cela accroit leur position dominante, impose le format .doc comme seul et unique format de publication et donc oblige les professionnels à n'utiliser que ça.

Voilà quelques raisons qui font que j'utilise des logiciels libres. Je crois que l'informatique doit être un champ de liberté de choix, d'égalité d'accès et de fraternité entre les utilisateurs.

A+

Sylvain

Des videos qui parlent du libre

Bonjour !

Voici une petite sélection de vidéos qui parlent du logiciel libre.

Elles sont pour la plupart en format ogg, format libre, mais qui, sauf erreur de ma part, n'est pas pris en charge nativement par window$ (du moins pas XP). VLC pourra y remédier ;-).

Conférence de Richard Stallman en Francais s'il vous plait !

Table ronde politique autour du logiciel libre avec : Christophe Espern (eucd.info), Michel Rocard (PS), Richard Cazenave (UMP), Martine Billard (Verts), François Bayrou (UDF). Premiere partie deuxième partie

Reportage Arte datant un peu mais toujours bon

Emission 8-Fi "Le monde du libre, les succès de l'open-source" (format mp4)

Bon, et bien deja avec ca, vous en avez pas mal ;-)

A bientôt !

Sylvain

Le modèle économique du logiciel libre

Bonjour !

Voici un sujet délicat pour les mentalités du monde économique.

En effet, ce "modèle" existe bel et bien mais sort totalement du cadre classique auquel sont habitués les spécialistes...

Et après tout, se poser des questions sur ce sujet peut être légitime : "Comment faire de l'argent avec des logiciels généralement gratuits et surtout dont tout le monde peut utiliser le code source ?"

Cette question, l'AFUL (Association Francophone des Utilisateurs de Linux et des Logiciels Libres) y répond et le fait bien. Aidés de références dans le monde économique ainsi que par des acteurs majeurs du logiciel libre, ils ont créé un dossier complet qui explique ce modèle économique.

http://www.aful.org/professionnels/modeles-economiques-ll

A mettre entre les mains des entrepreneurs sceptiques !

A bientôt !

Sylvain