Blogger dispose maintenant de nouveaux modes d'affichages assez allechant.
En témoigne la vidéo suivante issue du post "fresh new perspectives for your blog" de Blogger Buzz.
Si le mode Snapshot est assez attrayant, il déforme quelque peu l'affichage de certains blogs.
C'est entre autre le cas de ce blog pour lequel les sections d'affichage de code source sont altérées.
Pour activer le mode view pour ce blog, cliquer sur domeu.blogspot.com/view
jeudi 31 mars 2011
mardi 29 mars 2011
Des stickers pour Linux
Le site OpenStickers.com contient deux livrets permettant d'imprimer soi même ses propres stickers pour remplacer ceux que vous voudriez dégommer :-)
Liens vers le site: www.openstickers.com
Liens vers le site: www.openstickers.com
jeudi 24 mars 2011
BeautifulSoup - comment extraire ou manipuler une page html en Python
Introduction
Dans la vie d'un programmeur, il peut être un jour nécessaire d'extraire des informations depuis une page web.
Mais tout le monde n'a pas envie de se prendre la tête avec le format HTML ni envie de savoir exactement comment cela fonctionne.
Si vous avez seulement besoin d'extraire des informations depuis le Web, Beautiful Soup est le module qu'il vous faut.
Beautiful Soup est un parser HTML/XML pour Python qui permet de créer un arbre à partir d'un document HTML même si ce dernier contient des incohérences dans les balises.
Beautiful Soup offre des possibilités de navigation idéomatique simple, il est également possible de faire des recherches et des modifications de document HTML.
Beautiful Soup fait partie de cette catégorie d'outil qui permet de d'épargner de nombreuses et laborieuses heures/journées de travail.
Beautiful Soap stocke uniquement des chaines de caractère Unicode.
Une méthode de détection heuristique est utilisé par beautiful soup pour déterminé le type d'encodage du document, ce qui permet son décodage et stockage en unicode en mémoire. Il n'est donc pas nécessaire de se prendre la tête avec la problématique de conversion lorsque l'on veut extraire des informations depuis un site japonais :-)
Cependant, depuis Beautiful Soup 4, l'auteur du package à fait le nécessaire pour utiliser invariablement BeautifulSoup pour l'HTML et XML. Pour obtenir une instance de BeautifulSoup spécialisé dans le traitement XML, il suffit alors de coder BeautifulSoup(markup, "xml"). Sinon, par défaut, BeautifulSoup considerera qu'il s'agit d'un document HTML. Il est aussi possible d'utiliser la notation explicite BeautifulSoup(markup, "html" )
Documentation
La documentation de Beautiful Soup est concise et regorge d'exemples.
Une large variété de cas y sont abordés.
http://www.crummy.com/software/BeautifulSoup/documentation.html
Installation
Note 22/03/2011: la version actuelle de Beautiful Soup installée sur Ubuntu 10.10 est la 3.1.0.1.
Il est possible de consulter la version à l'aide de BeautifulSoup.__version__
Les limites de BeautifulSoup
Dans un premier temps, j'ai voulu rédiger cet exemple en partant de l'article "HttpLib: Extraction de page Web avec Python"
Pour rappel, cet exemple chargeait cette page du site Amazon.
Malheureusement, BeautifulSoup n'a pas réussi à charger le document de 193 Kb à cause d'une erreur de parsing.
Après vérification, je dois avouer que moi aussi je m'y emmelerais les pinceaux.
Le nombre de surcharge de quotes dans le script est assez important et manque cruellement d'élégance et de clareté!
Une preuve vivante des préceptes de BeautifulSoup: "sur le WEB, peu de développeurs respectent les standards... alors BeautifulSoup fait au mieu".
Je me suis d'ailleurs permis de reprende la section en erreur (en raccourcissant un peu les URLs).
Je vais donc opter pour un autre site, par exemple un blog de Blogspot.
Exemple 1: Décortiquer du Html
le but de cet exemple est de naviguer dans le document pour y retrouver toutes les balises h3 (qui contiennent les titres des différents articles).
Exemple 2: des recherches avancées
Suivant la structure de la page, il est aussi possible de trouver les libellés des titres en localisant les balises <a> ayant une référence vers "http://domeu.blogspot.com".
BeautifulSoup permet de faire ce genre de recherche grâce à une recherche de lien stricte (l'url doit être complète et donc inefficace dans notre cas) ou grâce a une recherche basée sur une expression régulière (ce qui conviendra).
NB: les valeurs numériques sont une fois identifiés à l'aide de \d et l'autre fois de [0-9]. {4} et {2} étant le nombre d'itérations respectivement attendu.
Cela retourne 65 liens, il faut donc affiner la recherche sur les balise <a> n'ayant pas de class.
Dans le cas présent, l'on recherche tous les tags ayant un attribut href correspondant au critère précédement défini ET un attribut class NON DEFINI (NB: pour un attribut class de valeur quelconque on aurait utilisé True au lieu de None)
Modification de code html
Beautiful Soup ne permet pas seulement de naviguer et extraire des informations depuis un document html, il permet aussi de modifier des attributs, d'ajouter et de retirer des tag d'un document existant.
Je vais donc enlever tous le liens que nous avons trouvés (tag <a>)
UnicodeEncodeError - l'erreur d'encodage
Dans l'exemple ci-dessois, l'on remarque clairement l'usage de encode('utf-8') lors de l'extraction (effacement) des noeuds.
Cela peu sembler assez anormal comme utilisation pourtant comme les instructions sont exécutées depuis la console Python, l'exécution de
La console ayant reçue une référence, elle va donc essaye d'afficher le contenu de l'objet.
Comme la console est un périphérique ascii, que le noeud contient de l'unicode et probablement des caractères n'ayant pas d'équivalent ASCII, cela se termine généralement par une erreur d'encode et une interruption d'exécution !
Exemple de message d'erreur:
"UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 125: ordinal not in range(128)"
En demandant explicitement l'encodage en 'utf-8', l'object devient affichable à la console... et par conséquent l'exécution peut se poursuivre sans heurt.
UnicodeDammit: charger et convertir facilement n'importe quel document vers unicode
Si BeautifulSoup est clairement axé sur la manipulation des documents HTML, il contient aussi quelques classes qui peuvent se montrer fort utile dans de nombreux domaines.
C'est le clas de la classe UnicodeDammit qui essaye de détecter l'encodage d'un document et qui le converti en Unicode (classe qui est utilisée par Beautiful Soup lui même).
Il est donc possible d'utiliser directement UnicodeDammit sans BeautifulSoup pour pouvoir charger, soit même, des documents dont on veut inspecter le contenu.
UnicodeDammit permet de s'affranchir de la phase de détection du type d'encodage et de la conversion du contenu.
N'oubliez cependant pas d'utiliser encode('utf-8') lorsque vous voulez inspecter le contenu dans une console.
Pour plus d'information, voir la section "Beautiful Soup Gives You Unicode, Dammit" de la documentation de Beautiful Soup
Dans la vie d'un programmeur, il peut être un jour nécessaire d'extraire des informations depuis une page web.
Mais tout le monde n'a pas envie de se prendre la tête avec le format HTML ni envie de savoir exactement comment cela fonctionne.
Si vous avez seulement besoin d'extraire des informations depuis le Web, Beautiful Soup est le module qu'il vous faut.
Beautiful Soup est un parser HTML/XML pour Python qui permet de créer un arbre à partir d'un document HTML même si ce dernier contient des incohérences dans les balises.
Beautiful Soup offre des possibilités de navigation idéomatique simple, il est également possible de faire des recherches et des modifications de document HTML.
Beautiful Soup fait partie de cette catégorie d'outil qui permet de d'épargner de nombreuses et laborieuses heures/journées de travail.
Beautiful Soap stocke uniquement des chaines de caractère Unicode.
Une méthode de détection heuristique est utilisé par beautiful soup pour déterminé le type d'encodage du document, ce qui permet son décodage et stockage en unicode en mémoire. Il n'est donc pas nécessaire de se prendre la tête avec la problématique de conversion lorsque l'on veut extraire des informations depuis un site japonais :-)
Beautiful Soup et XML
Jusqu'en février 2011, Beautiful Soup n'était pas vraiment un outil approprié pour traité des document XML... de l'aveu même du concepteur, Beautiful Soup ne fonctionnait pas très bien avec XML. Il était alors conseillé d'utiliser la classe BeautifulStoneSoup.Cependant, depuis Beautiful Soup 4, l'auteur du package à fait le nécessaire pour utiliser invariablement BeautifulSoup pour l'HTML et XML. Pour obtenir une instance de BeautifulSoup spécialisé dans le traitement XML, il suffit alors de coder BeautifulSoup(markup, "xml"). Sinon, par défaut, BeautifulSoup considerera qu'il s'agit d'un document HTML. Il est aussi possible d'utiliser la notation explicite BeautifulSoup(markup, "html" )
Documentation
La documentation de Beautiful Soup est concise et regorge d'exemples.
Une large variété de cas y sont abordés.
http://www.crummy.com/software/BeautifulSoup/documentation.html
Installation
sudo apt-get install python-beautifulsoup
Note 22/03/2011: la version actuelle de Beautiful Soup installée sur Ubuntu 10.10 est la 3.1.0.1.
Il est possible de consulter la version à l'aide de BeautifulSoup.__version__
Les limites de BeautifulSoup
Dans un premier temps, j'ai voulu rédiger cet exemple en partant de l'article "HttpLib: Extraction de page Web avec Python"
Pour rappel, cet exemple chargeait cette page du site Amazon.
Malheureusement, BeautifulSoup n'a pas réussi à charger le document de 193 Kb à cause d'une erreur de parsing.
HTMLParser.HTMLParseError: malformed start tag, at line 4439, column 757
Après vérification, je dois avouer que moi aussi je m'y emmelerais les pinceaux.
Le nombre de surcharge de quotes dans le script est assez important et manque cruellement d'élégance et de clareté!
Une preuve vivante des préceptes de BeautifulSoup: "sur le WEB, peu de développeurs respectent les standards... alors BeautifulSoup fait au mieu".
Je me suis d'ailleurs permis de reprende la section en erreur (en raccourcissant un peu les URLs).
<script> registerImage("original_image", "http://XXXXXXSL500_AA240_.jpg", "<a href="+'"'+"http://www.amazon.fr/gp/ref=dp_image_0?ie=UTF8&n=301061&s=books"+'"'+ " target="+'"'+"AmazonHelp"+'"'+" onclick="+'"'+ "return amz_js_PopWin(this.href,'AmazonHelp','width=700,height=600');"+ '"'+" ><img onload="+'"'+"if (typeof uet == 'function') { uet('af'); }"+'"'+ " src="+'"'+"http://XXXXX_SL500_AA240_.jpg"+'"'+" id="+'"'+"prodImage"+'"'+ " width="+'"'+"240"+'"'+" height="+'"'+"240"+'"'+" border="+'"'+"0"+'"'+ " alt="+'"'+"Le Secret de l'enclos du Temple"+'"'+" onmouseover="+'"'+""+'"'+ " /></a>", "<br /><a href="+'"'+ "http://www.amazon.fr/gp/XXXXXref=dp_image_text_0?ie=UTF8&n=301061&s=books"+'"'+ " target="+'"'+"AmazonHelp"+'"'+" onclick="+'"'+ "return amz_js_PopWin(this.href,'AmazonHelp','width=700,height=600');"+'"'+ " >Agrandissez cette image</a>", ""); var ivStrings = new Object(); </script>Pas des plus lisibles, n'est ce pas!
Je vais donc opter pour un autre site, par exemple un blog de Blogspot.
Exemple 1: Décortiquer du Html
le but de cet exemple est de naviguer dans le document pour y retrouver toutes les balises h3 (qui contiennent les titres des différents articles).
>>> import httplib >>> # Lecture du contenu HTML >>> domainName = "domeu.blogspot.com" >>> uri = "/" >>> conn = httplib.HTTPConnection( domainName ) >>> conn.request( "GET", uri ) >>> r1 = conn.getresponse() >>> print( "%s - %s" % (r1.status, r1.reason) ) 200 - OK >>> htmlData = r1.read() >>> # parsing Html >>> import BeautifulSoup >>> soup = BeautifulSoup.BeautifulSoup( htmlData ) >>> # Parcours des titres >>> for title in soup.findAll( 'h3' ): ... print( title ) ... <h3 class="post-title entry-title"> <a href="http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html">ELF - Executable And Linking Format</a> </h3> >>> # Décortiquer le contenu >>> firstTitle = soup.findAll( 'h3' )[0] >>> firstTitle.contents [u'\n', <a href="http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html">ELF - Executable And Linking Format</a>, u'\n'] >>> firstTitleLink = firstTitle.find( "a" ) >>> firstTitleLink <a href="http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html">ELF - Executable And Linking Format</a> >>> firstTitleLink.get( "href" ) u'http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html' >>> firstTitleLink.contents [u'ELF - Executable And Linking Format'] >>> # autre facon de lire les attributs ... >>> firstTitleLink["href"]u'http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html'
Exemple 2: des recherches avancées
Suivant la structure de la page, il est aussi possible de trouver les libellés des titres en localisant les balises <a> ayant une référence vers "http://domeu.blogspot.com".
BeautifulSoup permet de faire ce genre de recherche grâce à une recherche de lien stricte (l'url doit être complète et donc inefficace dans notre cas) ou grâce a une recherche basée sur une expression régulière (ce qui conviendra).
Lecture par lien stricte
>>> liens = soup.findAll( href = "http://domeu.blogspot.com" ) >>> for lien in liens: ... print( "%s (url: %s )" % ( lien.contents, lien["href"] ) )
Lecture par expression régulière
Retrouver tous les liens commençant par "http://domeu.blogspot.com/", suivit de 4 chiffres, suivit de "/" et finalement suivit de 2 chiffres.NB: les valeurs numériques sont une fois identifiés à l'aide de \d et l'autre fois de [0-9]. {4} et {2} étant le nombre d'itérations respectivement attendu.
>>> liens = soup.findAll( href = re.compile( "^http://domeu.blogspot.com/\d{4}/[0-9]{2}" )) >>> len( liens ) 65
Cela retourne 65 liens, il faut donc affiner la recherche sur les balise <a> n'ayant pas de class.
Lecture via les attributs
S'il est nécessaire de contrôler plusieurs attributs durant la recherche, il est possible comparer les attributs avec un dictionnaire de valeurs.Dans le cas présent, l'on recherche tous les tags ayant un attribut href correspondant au critère précédement défini ET un attribut class NON DEFINI (NB: pour un attribut class de valeur quelconque on aurait utilisé True au lieu de None)
>>> liens = soup.findAll( attrs = { 'href' : re.compile("^http://domeu.blogspot.com/\d{4}/[0-9]{2}"), 'class' : None } ) >>> len(liens) 58 >>> ''.join( [ str(lien.contents) for lien in liens ] ) # using comprehension list "[u'ELF - Executable And Linking Format'][u'Installer Excel sur Ubuntu'][u'Ubuntu: Compatibilit\\xe9 des imprimantes'][u'HttpLib: Extraction de page Web avec Python'][u'Monitorer les processus sous Ubuntu'][u'Aide m\\xe9moire des raccourcis clavie...
Autres exemples
La documentation de Beautiful Soup (http://www.crummy.com/software/BeautifulSoup/documentation.html) regorge d'exemple.Modification de code html
Beautiful Soup ne permet pas seulement de naviguer et extraire des informations depuis un document html, il permet aussi de modifier des attributs, d'ajouter et de retirer des tag d'un document existant.
Modification d'attribut
En repartant des exemples précédents, il est par exemple possible d'ajouter un style à tous les liens en ajoutant une CSS Class aux liens.>>> for lien in liens: ... lien["class"]="yellowLink"
Effacement de noeud
Le terme employé dans Beautiful Soup est une extraction.Je vais donc enlever tous le liens que nous avons trouvés (tag <a>)
>>> for lien in liens: ... lien.extract().encode('utf-8') # voir note sur erreur d'encodage >>> # vérification de l'effacement des liens >>> # NB: un précédent exemple avait ajouté la classe CSS yellowLink >>> liens2 = soup.findAll( attrs = { 'href' : re.compile("^http://domeu.blogspot.com/\d{4}/[0-9]{2}") , 'class' : 'yellowLink' } ) >>> len( liens2 ) 0
Création et manipulation de noeuds
Toujours en repartant des précédents exemples, je vais récupérer les liens et modifier la structure du troisième lien qui me tombe sous la main.>>> soup = BeautifulSoup.BeautifulSoup( htmlData )
>>> liens = soup.findAll( "a" )
>>> len( liens )
242
>>> liens[3]
<a href="http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html">ELF - Executable And Linking Format</a>
>>> lien = liens[3]
>>> lien
<a href="http://domeu.blogspot.com/2011/03/elf-executable-and-linking-format.html">ELF - Executable And Linking Format</a>
>>> # Create a new Tag
>>> tag = BeautifulSoup.Tag( soup, "span", [("class","linkySpan"),("id","testSpan001")] )
>>> tag
<span class="linkySpan" id="testSpan001"></span>
>>> tag.contents = lien.contents
>>> tag
<span class="linkySpan" id="testSpan001">ELF - Executable And Linking Format</span>
>>> lien.replaceWith(tag)
>>> len( soup.findAll( "a" ) )
3
>>> #Oups!!! mais ou sont donc passés tous mes liens !
Après l'opération lien.replaceWith, je remarque qu'il ne reste presque plus de lien dans le document!
J'imagine que j'ai fais une mauvaise opération ayant eu des répercusion sur le document...
UnicodeEncodeError - l'erreur d'encodage
Dans l'exemple ci-dessois, l'on remarque clairement l'usage de encode('utf-8') lors de l'extraction (effacement) des noeuds.
for lien in liens:
lien.extract().encode('utf-8')
Cela peu sembler assez anormal comme utilisation pourtant comme les instructions sont exécutées depuis la console Python, l'exécution de
lien.extract()
extrait le noeud et retourne une référence vers l'objet à l'interpréteur de la console.La console ayant reçue une référence, elle va donc essaye d'afficher le contenu de l'objet.
Comme la console est un périphérique ascii, que le noeud contient de l'unicode et probablement des caractères n'ayant pas d'équivalent ASCII, cela se termine généralement par une erreur d'encode et une interruption d'exécution !
Exemple de message d'erreur:
"UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 125: ordinal not in range(128)"
En demandant explicitement l'encodage en 'utf-8', l'object devient affichable à la console... et par conséquent l'exécution peut se poursuivre sans heurt.
UnicodeDammit: charger et convertir facilement n'importe quel document vers unicode
Si BeautifulSoup est clairement axé sur la manipulation des documents HTML, il contient aussi quelques classes qui peuvent se montrer fort utile dans de nombreux domaines.
C'est le clas de la classe UnicodeDammit qui essaye de détecter l'encodage d'un document et qui le converti en Unicode (classe qui est utilisée par Beautiful Soup lui même).
Il est donc possible d'utiliser directement UnicodeDammit sans BeautifulSoup pour pouvoir charger, soit même, des documents dont on veut inspecter le contenu.
UnicodeDammit permet de s'affranchir de la phase de détection du type d'encodage et de la conversion du contenu.
N'oubliez cependant pas d'utiliser encode('utf-8') lorsque vous voulez inspecter le contenu dans une console.
Pour plus d'information, voir la section "Beautiful Soup Gives You Unicode, Dammit" de la documentation de Beautiful Soup
mardi 22 mars 2011
ELF - Executable And Linking Format
Voila un article difficilement classable car il s'agit avant tout d'une curiosité personnelle concernant Linux. Bonne lecture :-)
ELF (Executable And Linking Format) est le format de fichier utilisé depuis ~1995 pour le stockage des exécutables et des librairies partagées sous Linux.
Le format ELF fut justement mis en place pour supporter plus facilement la mise en place des shared library mais aussi pour pouvoir autoriser le chargement dynamique de ces librairies.
Il était pourtant possible de bricoler des chargements dynamiques avec l'ancien format a.out, ce que fit d'ailleurs Sun, mais ce fut au prix de nombreuses complications obscurcissant le fonctionnement des exécutables.
Avec l'apparition d'ELF déjà adopté par de nombreux systèmes Unix, le monde Linux s'était doté d'une technologie essentielle nécessaire à son expansion.
Pour les curieux, je vous invite à consulter les articles introductifs
C'est une excellent article de fond qui présente les différences entre l'ancien et le nouveau format, abordant la compilation pour librairie statique et dynamique, les principes de relocation, GOT (Global Offset Table) et PLT (Procedure Linkage Table).
ELF (Executable And Linking Format) est le format de fichier utilisé depuis ~1995 pour le stockage des exécutables et des librairies partagées sous Linux.
Le format ELF fut justement mis en place pour supporter plus facilement la mise en place des shared library mais aussi pour pouvoir autoriser le chargement dynamique de ces librairies.
Il était pourtant possible de bricoler des chargements dynamiques avec l'ancien format a.out, ce que fit d'ailleurs Sun, mais ce fut au prix de nombreuses complications obscurcissant le fonctionnement des exécutables.
Avec l'apparition d'ELF déjà adopté par de nombreux systèmes Unix, le monde Linux s'était doté d'une technologie essentielle nécessaire à son expansion.
Pour les curieux, je vous invite à consulter les articles introductifs
- Executable and Linking Format (description Wikipedia)
- ELF (sur le guide du ROOTard)
C'est une excellent article de fond qui présente les différences entre l'ancien et le nouveau format, abordant la compilation pour librairie statique et dynamique, les principes de relocation, GOT (Global Offset Table) et PLT (Procedure Linkage Table).
Installer Excel sur Ubuntu
Introduction - Un plaidoyer pour Ubuntu
Il y a un an j'ai décidé d'installer un PC connecté à Internet dans le salon. Ainsi, les enfants pouvaient naviguer sur la toile sans être livrés à eux-mêmes.
Pour éviter de nombreux problèmes, j'ai re-formaté le PC en installer Ubuntu en lieu et place de Windows 7.
Même si cela a fait grincer les dents au début à cause des petits changements d'habitudes que cela imposait, Ubuntu a largement démontré son efficacité et sa stabilité.
Mon beau-fils ayant aussi ras-le-bol des plantages à répétitions et des instabilités de Windows 7 à même fini par suivre le mouvement (l'essayer c'est l'adopter). Un grand pas du haut de ses 13 ans.
Et les accros de la suite Microsoft Office?
C'est maintenant au tour de ma femme de considérer le changement vers Ubuntu.
Son PC personnel, qu'elle avait avant de faire ma connaissance, devient de plus en plus lent. Son anti-virus consomme presque toutes les ressources CPU et disques. Il faut 7 minutes pour démarrer un PC, 3 autres pour ouvrir une session et encore 5 pour ouvrir une feuille Excel... trop c'est trop, même elle perd sa patience pourtant légendaire.
Bien entendu, il est toujours possible de le réinstaller une Nième fois l'ensemble du système. Cependant, Ubuntu a déjà démontré sa stabilité dans la famille.
L'installation dans le salon, sans anti-virus car Ubuntu reste encore insensible aux virus du net, démarre en un clien d'oeil (14 secondes!!!).
En tant que comptable, elle utilise Excel et ses nombreuses fonctionnalités jour après jour.
Et il faut bien l'admettre, si Microsoft développe des OS qui laissent franchement à désirer, la société est nettement plus efficace sur le plan de sa suite Microsoft Office (tant pis si la vérité fait grincer des dents).
Dans le cas de mon épouse, il est impensable d'adapter ses réflexes en fonction du PC sur lequel elle se trouve, parce que justement, ce sont des réflexes.
Ce qui serait super, dit-elle, c'est de pouvoir faire fonctionner "son Excel" sur Ubuntu.
Si c'était possible, alors elle aussi ferait le saut vers le monde du libre.
Beaucoup d'options s'ouvrent à nous car nous disposons d'une licence de la suite Office.
Différentes options
Parmi les différentes options nous avons:
Je dispose déjà de quelques expériences dans ce domaine, et je trouve totalement déplacé de sortir un canon pour si peu de chose.
Une machine virtuelle reste ce qu'elle est, une machine. Je trouve absurde d'installer un OS Windows, d'utiliser mon temps machine (et ressources physiques) et mon espace disque pour faire fonctionner cet OS dans le simple but de pouvoir faire fonctionner Excel.
Tout cela, c'est encore sans parler du partage des ressources (disques, imprimantes, etc) pour faire passer les fichiers d'un OS à l'autre.
Laissons donc la débauche de moyen de côté.
PlayOnLinux
L'option PlayOnLinux semble la plus intéressante, surtout si l'on se fie à l'article "Office 2007 sur Ubuntu".
Par contre, dans mon cas, ce fut un échec total.
Je n'ai jamais dépassé les premières étapes de l'installation Windows de Microsoft Office (le programme d'installation plantant systématiquement avec un admirable, mais obscur, code d'erreur).
Mes notes d'essai sont disponibles plus loin dans cet article.
Le 07 avril 2011:
Génération Nouvelles Technologies publie d'ailleurs un article dédié à PlayOnLinux.
Voir "PlayOnLinux-PlayOnMac : Utiliser des logiciels Windows sous Linux et MAC !"
Une version version à l'essai (Trial) étant disponible, je me suis dit que cela valait au moins la peine d'essayer.
Pour le moment, peu importe donc que cela soit payant (40$), regardons au moins ce que cela vaut vraiment.
Là les résultats sont immédiats!
Cela a beau être payant, ca fonctionne du tonnerre.
Mes notes d'essai sont disponibles ci-dessous.
CrossOver
A défaut de pouvoir utiliser PlayOnLinux, une petite recherche sur le net me conduit à l'article "faite du Windows avec du Linux". Et d'après ce témoignage, cela semble fonctionner correctement.
Une recherche dans la logithèque Ubuntu m'apprends qu'il existe une version à l'essai de CrossOver Standard et version Pro.
Il est donc possible de tester le logiciel sans pour autant prendre de risque financier.
Une autre recherche sur le site officiel de CrossOver nous offre cette petite vidéo de quelques minutes.
Une fois l'installation terminée, Excel apparaît dans le menu "Applications | Windows Applications | Excel".
Ce dernier fonctionne correctement, tout comme Word.
Les fichiers xls sont stockés dans le répertoire utilisateur d'Ubuntu. Ils sont donc facilement accessible. Un double clique sur le fichier Exel démarre... Excel bien entendu (là, ça devient bleffant)
Mon avis sur CrossOver
Si payer 40$ pour l'utilisation de CrossOver peut être discutable pour les uns ou les autres, je trouve que cet investissement (le seul depuis mon passage à Ubuntu) vaut largement le confort qu'il apporte.
Ma femme va enfin pouvoir envisager de profiter de la puissance de sa machine qui n'a jamais cessé de ralentir jusqu'au jour d'aujourd'hui. Fini le chargement de Windows, l'activation de Norton Anti-Virus, etc, etc
Même moi j'ai renoncé à démarrer cette machine.
Qu'est-ce donc que 40 Euro pour répondre aux critères de convivialités offerts par la suite Microsoft Office sans s'imposer la lourdeur de Windows???
Play On Linux
Note du 14 février 2011:
Malgré toutes mes tentatives, je ne suis pas arrivé à installer Office 2000 et Office 2002 (XP) sur mon PC Ubuntu.
J'arrête les frais pour le moment mais je conserve néanmoins les informations accumulées.
Installer PlayOnLinux
PlayOnLinux (site officiel)
PlayOnLinux est basé sur WineHq, paquet qui est automatiquement installé durant l'installation de PlayOnLinux.
Info: WinHq Wine Download Page (paquet Debian)
Pour Installer PlayOnLinux sur ma version d'Ubuntu 10.10 (Maverick), j'ai suivi les instructions du site PlayOnLinux.
A savoir:
Après installation, le Logiciel Wine et Microsoft Notepad sont disponibles dans le menu "Applications | Autres".
Notepad fonctionne parfaitement!
Par contre, l'application PlayOnLinux est disponible dans le menu "Application | Jeux"
Démarrer l'application "PlayOnLinux" et procéder aux mise-à-jours.
Sélectionner "Installer"
Dans la liste des applications de bureautique, sélectionner la suite bonne suite "Microsoft Office".
Dans mon cas, il s'agit d'une suite "Microsoft Office 2000 Pro" et cliquer sur Appliquer.
PlayOnLinux prépare l'installation de Wine puis demande d'insérer le CD d'installation de la suite office et de sélectionner le lecteur dans lequel se trouve le CD.
Dans mon cas, le disque se nommant "Nouveau" mon lecteur se nommait aussi "Nouveau" c'est un peu déroutant!
Durant l'installation, PlayOnLinux propose d'installer les polices de caractères Microsoft.
Suivre le processus assidument car il réclame plusieurs confirmations.
J'ai donc entamé l'installation de la suite office et introduit la clé d'enregistrement.
Après quelques secondes, j'ai eu une erreur d'installation.
Il n'empêche que PlayOnLinux a par la suite installé plein de composants Windows (jet engine, MDac, etc).
J'ai demandé a PlayOnLinux de me mettre un raccouris dans le menu de démarrage.
Visiblement, il me manque différents programmes.
Je reçois le message d'erreur "glxinfo, paquet mesa-utils"
Pour verifier l'installation de mesa-utils, taper les lignes de commandes suivantes:
Tentative 2 pour installer la suite Office
Je redemarre PlayOnLinux.
J'essaye de reinstaller la suite office avec PlayOnLinux... mais cela ne fonctionne toujours pas.
Installer les tricks suivants un par un:
J'arrête les frais là pour le moment.
Références
Il y a un an j'ai décidé d'installer un PC connecté à Internet dans le salon. Ainsi, les enfants pouvaient naviguer sur la toile sans être livrés à eux-mêmes.
Pour éviter de nombreux problèmes, j'ai re-formaté le PC en installer Ubuntu en lieu et place de Windows 7.
Même si cela a fait grincer les dents au début à cause des petits changements d'habitudes que cela imposait, Ubuntu a largement démontré son efficacité et sa stabilité.
Mon beau-fils ayant aussi ras-le-bol des plantages à répétitions et des instabilités de Windows 7 à même fini par suivre le mouvement (l'essayer c'est l'adopter). Un grand pas du haut de ses 13 ans.
Et les accros de la suite Microsoft Office?
C'est maintenant au tour de ma femme de considérer le changement vers Ubuntu.
Son PC personnel, qu'elle avait avant de faire ma connaissance, devient de plus en plus lent. Son anti-virus consomme presque toutes les ressources CPU et disques. Il faut 7 minutes pour démarrer un PC, 3 autres pour ouvrir une session et encore 5 pour ouvrir une feuille Excel... trop c'est trop, même elle perd sa patience pourtant légendaire.
Bien entendu, il est toujours possible de le réinstaller une Nième fois l'ensemble du système. Cependant, Ubuntu a déjà démontré sa stabilité dans la famille.
L'installation dans le salon, sans anti-virus car Ubuntu reste encore insensible aux virus du net, démarre en un clien d'oeil (14 secondes!!!).
Et Excel dans tout cela?
Si je me suis adapté facilement à l'application Calc d'OpenOffice, ce n'est pas le cas de mon épouse qui est, elle, comptable.En tant que comptable, elle utilise Excel et ses nombreuses fonctionnalités jour après jour.
Et il faut bien l'admettre, si Microsoft développe des OS qui laissent franchement à désirer, la société est nettement plus efficace sur le plan de sa suite Microsoft Office (tant pis si la vérité fait grincer des dents).
Dans le cas de mon épouse, il est impensable d'adapter ses réflexes en fonction du PC sur lequel elle se trouve, parce que justement, ce sont des réflexes.
Ce qui serait super, dit-elle, c'est de pouvoir faire fonctionner "son Excel" sur Ubuntu.
Si c'était possible, alors elle aussi ferait le saut vers le monde du libre.
Beaucoup d'options s'ouvrent à nous car nous disposons d'une licence de la suite Office.
Différentes options
Parmi les différentes options nous avons:
- Installation d'une machine virtuelle Windows avec la suite office (via VirtualBox ou vmware). Voir liens en annexe.
- Utilisation de Crossover Office (basé sur wine mais payant)
- Utiliser Wine, projet permettant l'installation et l'exécution d'exécutable Win32 mais réputé pour être difficile à configurer.
- Utiliser PlayOnLinux, projet populaire dérivé de Wine et qui semble bien plus facile à l'utilisation.
Machine Virtuelle
Si jouer avec des machines virtuelles est assez dans le vent pour le moment, c'est une piste que j'ai écarté d'emblé.Je dispose déjà de quelques expériences dans ce domaine, et je trouve totalement déplacé de sortir un canon pour si peu de chose.
Une machine virtuelle reste ce qu'elle est, une machine. Je trouve absurde d'installer un OS Windows, d'utiliser mon temps machine (et ressources physiques) et mon espace disque pour faire fonctionner cet OS dans le simple but de pouvoir faire fonctionner Excel.
Tout cela, c'est encore sans parler du partage des ressources (disques, imprimantes, etc) pour faire passer les fichiers d'un OS à l'autre.
Laissons donc la débauche de moyen de côté.
PlayOnLinux
L'option PlayOnLinux semble la plus intéressante, surtout si l'on se fie à l'article "Office 2007 sur Ubuntu".
Par contre, dans mon cas, ce fut un échec total.
Je n'ai jamais dépassé les premières étapes de l'installation Windows de Microsoft Office (le programme d'installation plantant systématiquement avec un admirable, mais obscur, code d'erreur).
Mes notes d'essai sont disponibles plus loin dans cet article.
Le 07 avril 2011:
Génération Nouvelles Technologies publie d'ailleurs un article dédié à PlayOnLinux.
Voir "PlayOnLinux-PlayOnMac : Utiliser des logiciels Windows sous Linux et MAC !"
CrossOver
Après mes déboires avec PlayOnLinux, je me suis alors tourné vers CrossOver.Une version version à l'essai (Trial) étant disponible, je me suis dit que cela valait au moins la peine d'essayer.
Pour le moment, peu importe donc que cela soit payant (40$), regardons au moins ce que cela vaut vraiment.
Là les résultats sont immédiats!
Cela a beau être payant, ca fonctionne du tonnerre.
Mes notes d'essai sont disponibles ci-dessous.
CrossOver
A défaut de pouvoir utiliser PlayOnLinux, une petite recherche sur le net me conduit à l'article "faite du Windows avec du Linux". Et d'après ce témoignage, cela semble fonctionner correctement.
Une recherche dans la logithèque Ubuntu m'apprends qu'il existe une version à l'essai de CrossOver Standard et version Pro.
Il est donc possible de tester le logiciel sans pour autant prendre de risque financier.
Une autre recherche sur le site officiel de CrossOver nous offre cette petite vidéo de quelques minutes.
Tester l'installation d'Excel avec CrossOver
Armé de mon CD d'installation de la suite office 2002 XP, je me lance dans le test version CrossOver. - Penser à ouvrir un compte Ubuntu One qui sera nécessaire par la suite.
Au passage, je dispose maintenant, et gratuitement, d'une espace de 2Go pour faire du partage/synchronisation de fichier (merci Ubuntu One). - J'installe donc CrossOver Standart Trial depuis la logithèque Ubuntu.
NB: Impose l'usage d'un compte Ubuntu One pour le paiement de 0.0$ - Démarrage de CrossOver via le menu "Applications | CrossOver | Install Windows Software"
- Sélection de la suite "Microsoft Office XP (2002)" puisque j'ai le CD d'installation.
- Laisser CrossOver installer les dépendances Windows nécessaires.
- Lorsque c'est le moment de sélectionner le programme d'installation de Microsoft Office, Insérer le CD, attendre le rafraichissement de la liste et sélectionner le programme d'installation du CD Microsoft Office.
- Suivre les instructions d'installation de la suite Microsoft Office (sans oublier d'introduire la clé d'activation).
- Attendre la fin de l'installation.
Une fois l'installation terminée, Excel apparaît dans le menu "Applications | Windows Applications | Excel".
Ce dernier fonctionne correctement, tout comme Word.
Les fichiers xls sont stockés dans le répertoire utilisateur d'Ubuntu. Ils sont donc facilement accessible. Un double clique sur le fichier Exel démarre... Excel bien entendu (là, ça devient bleffant)
Mon avis sur CrossOver
Si payer 40$ pour l'utilisation de CrossOver peut être discutable pour les uns ou les autres, je trouve que cet investissement (le seul depuis mon passage à Ubuntu) vaut largement le confort qu'il apporte.
Ma femme va enfin pouvoir envisager de profiter de la puissance de sa machine qui n'a jamais cessé de ralentir jusqu'au jour d'aujourd'hui. Fini le chargement de Windows, l'activation de Norton Anti-Virus, etc, etc
Même moi j'ai renoncé à démarrer cette machine.
Qu'est-ce donc que 40 Euro pour répondre aux critères de convivialités offerts par la suite Microsoft Office sans s'imposer la lourdeur de Windows???
Play On Linux
Note du 14 février 2011:
Malgré toutes mes tentatives, je ne suis pas arrivé à installer Office 2000 et Office 2002 (XP) sur mon PC Ubuntu.
J'arrête les frais pour le moment mais je conserve néanmoins les informations accumulées.
Installer PlayOnLinux
PlayOnLinux (site officiel)
PlayOnLinux est basé sur WineHq, paquet qui est automatiquement installé durant l'installation de PlayOnLinux.
Info: WinHq Wine Download Page (paquet Debian)
Pour Installer PlayOnLinux sur ma version d'Ubuntu 10.10 (Maverick), j'ai suivi les instructions du site PlayOnLinux.
A savoir:
wget -q "http://deb.playonlinux.com/public.gpg" -O - | sudo apt-key add - sudo wget http://deb.playonlinux.com/playonlinux_maverick.list -O /etc/apt/sources.list.d/playonlinux.list sudo apt-get update sudo apt-get install playonlinux
Après installation, le Logiciel Wine et Microsoft Notepad sont disponibles dans le menu "Applications | Autres".
Notepad fonctionne parfaitement!
Par contre, l'application PlayOnLinux est disponible dans le menu "Application | Jeux"
Démarrer l'application "PlayOnLinux" et procéder aux mise-à-jours.
Installer Office
Après les mises à jours de PlayOnLinux, la fenêtre principale est assez rudimentaire.Sélectionner "Installer"
Dans la liste des applications de bureautique, sélectionner la suite bonne suite "Microsoft Office".
Dans mon cas, il s'agit d'une suite "Microsoft Office 2000 Pro" et cliquer sur Appliquer.
PlayOnLinux prépare l'installation de Wine puis demande d'insérer le CD d'installation de la suite office et de sélectionner le lecteur dans lequel se trouve le CD.
Dans mon cas, le disque se nommant "Nouveau" mon lecteur se nommait aussi "Nouveau" c'est un peu déroutant!
Durant l'installation, PlayOnLinux propose d'installer les polices de caractères Microsoft.
Suivre le processus assidument car il réclame plusieurs confirmations.
J'ai donc entamé l'installation de la suite office et introduit la clé d'enregistrement.
Après quelques secondes, j'ai eu une erreur d'installation.
Il n'empêche que PlayOnLinux a par la suite installé plein de composants Windows (jet engine, MDac, etc).
J'ai demandé a PlayOnLinux de me mettre un raccouris dans le menu de démarrage.
Visiblement, il me manque différents programmes.
Je reçois le message d'erreur "glxinfo, paquet mesa-utils"
Installer Mesa Utils
sudo apt-get install mesa-utils
Pour verifier l'installation de mesa-utils, taper les lignes de commandes suivantes:
- lspci | grep VGA
M'informe que je dispose d'un controlleur compatible VGA (VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller) - glxinfo | grep rendering
m'informe que Direct Rendering est actif et donc que mesa-utils est correctement installé.
Tentative 2 pour installer la suite Office
Je redemarre PlayOnLinux.
J'essaye de reinstaller la suite office avec PlayOnLinux... mais cela ne fonctionne toujours pas.
Installation de WineTricks
Documentation de WineTricks sur Ubuntu.Fr wget http://www.kegel.com/wine/winetricks chmod +x winetricks sudo mv winetricks /usr/binDémarrer WineTricks en ligne de commande avec wintricks
Installer les tricks suivants un par un:
- allfonts
- jet40
- mdac25
- mfc40 [This contains dll's in the registry which are not in the Wine package]
- tahoma
- vcrun6 [For Access and Excel]
- wsh56 [needed because of Problem 1]
- win2k
- riched20
Tentative 3 pour installer la Suite Office
Toujours pas possible d'installer l'office 2000.J'arrête les frais là pour le moment.
Références
- Article "Microsoft_Office" de la Documentation Communautaire d'Ubuntu (en anglais)
- Installer VirtualBox - La solution
- VirtualBox - Documentation Ubuntu francophone
- vmware - documentation Ubuntu Francophone
- CrossOver (site officiel)
lundi 21 mars 2011
Ubuntu: Compatibilité des imprimantes
D'une façon générale, il faut savoir que les imprimantes Dell et Epson sont assez bien supportées.
Par contre, il vaut mieux éviter le fabricant Lexmark comme la peste, ce dernier se concentre uniquement sur Windows et n'offre pas de support pour Linux. Ainsi, seulement une petite partie de ces imprimantes sont supportées.
Avant d'acheter une nouvelle imprimante, il est donc préférable de consulter la base de donnée de compatibilité des imprimantes disponible sur OpenPrinting group.
Par contre, il vaut mieux éviter le fabricant Lexmark comme la peste, ce dernier se concentre uniquement sur Windows et n'offre pas de support pour Linux. Ainsi, seulement une petite partie de ces imprimantes sont supportées.
Avant d'acheter une nouvelle imprimante, il est donc préférable de consulter la base de donnée de compatibilité des imprimantes disponible sur OpenPrinting group.
HttpLib: Extraction de page Web avec Python
Description
Le module httplib permet de faire des requêtes http et de récupérer la réponse.
Très pratique pour faire récupérer automatiquement des informations sur le net, httplib sera le compagnon idéal de Beautiful Soup (article à venir).
Installer HttpLib
Le module httplib est disponible par défaut avec Python, il n'est donc pas nécessaire de l'installer.
Exemple
A titre d'exemple, voici un exemple récupérant et affichant le contenu d'une page web du site Amazon (une recherche précise).
Ressources
Plus d'exemples d'utilisation sont disponibles docs.python.org/library/httplib.html
Le module httplib permet de faire des requêtes http et de récupérer la réponse.
Très pratique pour faire récupérer automatiquement des informations sur le net, httplib sera le compagnon idéal de Beautiful Soup (article à venir).
Installer HttpLib
Le module httplib est disponible par défaut avec Python, il n'est donc pas nécessaire de l'installer.
Exemple
A titre d'exemple, voici un exemple récupérant et affichant le contenu d'une page web du site Amazon (une recherche précise).
>>> import httplib >>> domainName = "www.amazon.fr" >>> # this uri contains the result of a search >>> uri = "/gp/product/2081251663/ref=s9_newr_gw_ir02?pf_rd_m=A1X6FK5RDHNB96&pf_rd_s=center-1&pf_rd_r=008J6N5KCCH0Q3YAXZR5&pf_rd_t=101&pf_rd_p=463375513&pf_rd_i=405320" >>> conn = httplib.HTTPConnection( domainName ) >>> conn.request( "GET", uri ) >>> r1 = conn.getresponse() >>> print r1.status, r1.reason 200 OK >>> data1 = r1.read() >>> # Data1 string is tooooooo long, take a subset of data >>> data1Preview = data1[:200] # 200 first chars >>> data1Preview '\n\n \n \n\n \n \n \n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n \n \n\n\n\n<html>\n<head>\n\n\n\n\n\n\n\n\n\n<style type="text/css"><!--\n\nbody { background-color: #FFFFFF; } \n* htm'
Ressources
Plus d'exemples d'utilisation sont disponibles docs.python.org/library/httplib.html
jeudi 17 mars 2011
Monitorer les processus sous Ubuntu
Introduction
Sous windows, il existe le "task manager" et sous Ubuntu le "Moniteur Système" propose un environnement graphique pour visualiser les processus et l'utilisation des ressources (gnome-system-monitor, accessible depuis le menu "Système | Administration | Moniteur Système").
Tout comme sous Windows, il est possible de consulter les tâches en cours d'exécution, la consommation des ressources processeurs, de mémoire mais également le trafic réseau.
Tout comme sous Windows, il est également possible de terminer un processus (ou bien de le "tuer" en utilisant le menu contextuel).
A l'avantage de gnome-systeme-monitor, il est également possible de consulter les fichiers ouverts (et donc aussi les connexions réseaux) ainsi qu'une "table d'allocation mémoire".
Si la plupart des utilisateurs seront satisfait avec cette option graphique, d'autres voudront aller un peu plus loin et cette exploration avancée passe par la ligne de commande.
Dans ce domaine, surveiller les processus d'Ubuntu se fait de la même façon que sur n'importe quelle autre machine Linux/Unix.
Processus ID (pid)
Pour commencer, il faut savoir que tout processus Unix (programme, deamon, etc) est identifier par un identifiant unique, il s'appelle "pid".
Cet identifiant est également affiché dans le volet "Processus" du Moniteur Système.
Il est également possible d'obtenir la liste des processus (et pid correspondant) par différentes lignes de commande.
Ce qu'il faut savoir, c'est que le "pid" est une pierre angulaire de la gestion des processus.
free: La mémoire disponible
La commande free permet d'afficher l'état de la mémoire (utiliser-g ou -m pour afficher les résultats en giga ou megaoctects).
Buffers - la mémoire allouée au systèmes d'entrée/sortie.
Cached - la mémoire actuellement utilisé pour faire du cache.
+/- buffers/cache - indique la quantité de mémoire réellement utilisée pour les buffers et caches.
Juste une note pour signaler que [-/+ buffers/cache].free = mem.free + mem.shared + mem.buffer + mem.cached.
Top: Liste des processus
La commande top affiche quelques informations utiles ainsi qu'une liste des processus trié par ordre de consommation cpu.
Si top permet de garder un oeil sur les processus les plus gourmants et permet l'identification des processus qui freine le bon fonctionnement du système, le rafraichissement constant de top (toutes les 3 à 5 sec) le rend aussi peu utilise lorsque l'on désire espionner un processus particulier.
En effet, la position d'un processus dans la liste varie constamment avec fonction de sa consommation cpu. C'est assez agacant.
Voici le résultat d'une commande top.
Attention: Il est cependant possible d'indiquer précisément le ou les processes à suivre (top -p pid1,pid2,...)
L'entête mentionne:
pid - identification du processus
pr - la priorité attribuée par l'OS. Cette valeur dépend de la valeur de "nice" et d'autres paramètres. plus le chiffre est grand et moins le processus est prioritaire.
ni - la priorité donnée par l'utilisateur (-20 la plus haute, 20 la plus basse).
virt - la mémoire vituelle utilisée par le processus (mem processus + data processus + bibliothèques partagées utilisées + swap)
res - la quantité de ressource utilisé par le processus (mem processus + data processus)
shr - la mémoire partagée utilisée par le processus.
%cpu - évident
%mem - pourcentage de la mémoire physique utilisée par le processus.
time - temps cumulé durant lequel le processus a été actif.
command - la commande qui à lancé le processus
ps: Liste des processus
Une autre commande bien utile est ps, cette dernière permet de tirer une liste des procesus en cours d'exécution.
Les variantes les plus connues sont:
La commande ps accepte de nombreux arguments bien documenté dans les pages du manuel.
(voir "man ps")
ps -ef
Permet de tirer une liste des processus en cours d'exécution.
Dans son utilisation la plus courante, ps -ef sert a trouver le pid d'un processus, voire même s'il fonctionne.
A titre d'exemple, pour savoir sur firefox est en cours de fonctionnement (et quel pid) on utilisera la commande suivante:
voici un extrait de l'outpup affiché par ps -ef
pid - identification du processus
ppid - processus parent.
c - valeur entière indiquant le %cpu utilisé.
stime - Start Time, date et heure du lancement du processus
tty - terminal ayant lancé la commande (pas relevant dans un environnement graphique).
time - Cumul des temps d'exécutions du processus
cmd - la commande ayant lancé le processus.
ps -efL
Affiche le même contenu que la commande ps -ef mais ajoute des informations concernant les threads.
NLWP - Nombre de thread du processus.
Avec ps aux, il sera possible de connaître le %cpu et %mem mais aussi les consommations en ressource.
RSS - Resident Set Size, mémoire utilisée par le processus et ses données. Correspond à la colonne res de la commande top.
kill: terminer un processus
La commande kill permet d'envoyer le signal SIGTERM (fin de processus) à un processus particulier identifié par son pid.
Si le processus ne semble pas répondre, il est possible d'utiliser l'option -9 (KILL) dans la commande kill, cela terminera le processus de façon expéditive.
Voici un exemple terminant/expédiant le processus 253.
Dans les entrailles des processus
Dans le monde Unix, tout est représenté sous forme de fichier.
Ainsi, les processus en cours d'exécution se conforme à cette règle et font également partie du système de fichier.
Ainsi, en explorant le répertoire /proc, l'on se retrouve a explorer les processus en court d'éxécution.
La commande
Vous pouvez obtenir plus d'information sur /proc dans les manuels à l'aide de la commande.
/proc/cpuinfo
Fournit des informations relatives à la configuration cpu de la machine.
cat /proc/cpuinfo
/proc/meminfo
Fournit des informations relatives à la mémoire du système.
Si toutes informations ne sont pas utiles, certaines peuvent se montrer pertinente.
/proc/PID
Un répertoire processus (identifier par la pid) contient une foule d'information.
En voici un exemple:
Inutile de présenter PID, PPID, Name et State.
VmSize - mémoire totale utilisée. VmLib + VmExe + VmData + VmStk.
VmLock - mémoire vérouillée (évite qu'elle passe en swap).
VmRss - mémoire Resident Set Size (mem processus + mem data + mem stack).
VmData - mémoire virtuelle utilisée par la heap (stockage des données)
VmStk - mémoire utilisé pour la stack
VmExe - mémoire utilisée par l'executable et le librairie liées statiquement.
VmLib - Mémoire virtuelle utilisée par les librairies chargées en cours d'exécution.
VmData - mémoire allouée aux données
VmSwap - mémoire en swap
Sous windows, il existe le "task manager" et sous Ubuntu le "Moniteur Système" propose un environnement graphique pour visualiser les processus et l'utilisation des ressources (gnome-system-monitor, accessible depuis le menu "Système | Administration | Moniteur Système").
Tout comme sous Windows, il est possible de consulter les tâches en cours d'exécution, la consommation des ressources processeurs, de mémoire mais également le trafic réseau.
Tout comme sous Windows, il est également possible de terminer un processus (ou bien de le "tuer" en utilisant le menu contextuel).
A l'avantage de gnome-systeme-monitor, il est également possible de consulter les fichiers ouverts (et donc aussi les connexions réseaux) ainsi qu'une "table d'allocation mémoire".
Si la plupart des utilisateurs seront satisfait avec cette option graphique, d'autres voudront aller un peu plus loin et cette exploration avancée passe par la ligne de commande.
Dans ce domaine, surveiller les processus d'Ubuntu se fait de la même façon que sur n'importe quelle autre machine Linux/Unix.
Processus ID (pid)
Pour commencer, il faut savoir que tout processus Unix (programme, deamon, etc) est identifier par un identifiant unique, il s'appelle "pid".
Cet identifiant est également affiché dans le volet "Processus" du Moniteur Système.
Il est également possible d'obtenir la liste des processus (et pid correspondant) par différentes lignes de commande.
Ce qu'il faut savoir, c'est que le "pid" est une pierre angulaire de la gestion des processus.
free: La mémoire disponible
La commande free permet d'afficher l'état de la mémoire (utiliser-g ou -m pour afficher les résultats en giga ou megaoctects).
xxx@yyy:~$ free -m total used free shared buffers cached Mem: 2508 1392 1116 0 153 710 -/+ buffers/cache: 528 1980 Swap: 11998 0 11998Shared - indique la mémoire partagée entre processus.
Buffers - la mémoire allouée au systèmes d'entrée/sortie.
Cached - la mémoire actuellement utilisé pour faire du cache.
+/- buffers/cache - indique la quantité de mémoire réellement utilisée pour les buffers et caches.
Juste une note pour signaler que [-/+ buffers/cache].free = mem.free + mem.shared + mem.buffer + mem.cached.
Top: Liste des processus
La commande top affiche quelques informations utiles ainsi qu'une liste des processus trié par ordre de consommation cpu.
Si top permet de garder un oeil sur les processus les plus gourmants et permet l'identification des processus qui freine le bon fonctionnement du système, le rafraichissement constant de top (toutes les 3 à 5 sec) le rend aussi peu utilise lorsque l'on désire espionner un processus particulier.
En effet, la position d'un processus dans la liste varie constamment avec fonction de sa consommation cpu. C'est assez agacant.
Voici le résultat d'une commande top.
Attention: Il est cependant possible d'indiquer précisément le ou les processes à suivre (top -p pid1,pid2,...)
top - 11:37:01 up 3 days, 21:11, 2 users, load average: 0.34, 0.24, 0.23 Tasks: 182 total, 3 running, 179 sleeping, 0 stopped, 0 zombie Cpu(s): 12.6%us, 1.1%sy, 0.0%ni, 86.2%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 2569208k total, 1451288k used, 1117920k free, 157804k buffers Swap: 12286972k total, 0k used, 12286972k free, 729628k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9980 domeu 20 0 400m 115m 28m S 27 4.6 9:05.54 firefox-bin 1309 root 20 0 94356 74m 18m R 24 3.0 37:01.50 Xorg 1706 domeu 20 0 69148 46m 14m S 3 1.9 7:47.29 compiz 9997 domeu 20 0 134m 31m 14m S 3 1.2 1:42.08 plugin-containe 10079 domeu 20 0 93140 13m 10m S 3 0.6 0:00.84 gnome-terminal 1160 root 20 0 19292 4356 3572 S 0 0.2 0:06.87 NetworkManager 9498 root 20 0 0 0 0 R 0 0.0 0:00.92 kondemand/2 10322 domeu 20 0 2620 1156 840 R 0 0.0 0:00.02 top 1 root 20 0 2864 1700 1224 S 0 0.1 0:00.86 init 2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0 0.0 0:04.54 ksoftirqd/0 4 root RT 0 0 0 0 S 0 0.0 0:00.65 migration/0 5 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0 15 root 20 0 0 0 0 S 0 0.0 0:05.05 events/0 19 root 20 0 0 0 0 S 0 0.0 0:00.00 cpuset
L'entête mentionne:
- La date et l'heure mais aussi "uptime" (cfr: up)
- La charge moyenne (average load)
- L'usage de la mémoire (y compris swap)
- L'usage CPU détaillé
- us : User
- sy : system
- ni : nice
- id : idle
- wa : iowait
- hi : H/w interrupt requests
- si : S/w interrupt requests
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9980 domeu 20 0 400m 115m 28m S 27 4.6 9:05.54 firefox-bin
pid - identification du processus
pr - la priorité attribuée par l'OS. Cette valeur dépend de la valeur de "nice" et d'autres paramètres. plus le chiffre est grand et moins le processus est prioritaire.
ni - la priorité donnée par l'utilisateur (-20 la plus haute, 20 la plus basse).
virt - la mémoire vituelle utilisée par le processus (mem processus + data processus + bibliothèques partagées utilisées + swap)
res - la quantité de ressource utilisé par le processus (mem processus + data processus)
shr - la mémoire partagée utilisée par le processus.
%cpu - évident
%mem - pourcentage de la mémoire physique utilisée par le processus.
time - temps cumulé durant lequel le processus a été actif.
command - la commande qui à lancé le processus
ps: Liste des processus
Une autre commande bien utile est ps, cette dernière permet de tirer une liste des procesus en cours d'exécution.
Les variantes les plus connues sont:
- ps -ef
- ps -efl
- ps aux
La commande ps accepte de nombreux arguments bien documenté dans les pages du manuel.
(voir "man ps")
ps -ef
Permet de tirer une liste des processus en cours d'exécution.
Dans son utilisation la plus courante, ps -ef sert a trouver le pid d'un processus, voire même s'il fonctionne.
A titre d'exemple, pour savoir sur firefox est en cours de fonctionnement (et quel pid) on utilisera la commande suivante:
ps -ef | grep firefox
voici un extrait de l'outpup affiché par ps -ef
UID PID PPID C STIME TTY TIME CMD root 1 0 0 Mar10 ? 00:00:00 /sbin/init root 2 0 0 Mar10 ? 00:00:00 [kthreadd] root 3 2 0 Mar10 ? 00:00:06 [ksoftirqd/0]uid - utilisateur ayant lancé le processus
pid - identification du processus
ppid - processus parent.
c - valeur entière indiquant le %cpu utilisé.
stime - Start Time, date et heure du lancement du processus
tty - terminal ayant lancé la commande (pas relevant dans un environnement graphique).
time - Cumul des temps d'exécutions du processus
cmd - la commande ayant lancé le processus.
ps -efL
Affiche le même contenu que la commande ps -ef mais ajoute des informations concernant les threads.
UID PID PPID LWP C NLWP STIME TTY TIME CMD root 1 0 1 0 1 Mar10 ? 00:00:00 /sbin/init root 2 0 2 0 1 Mar10 ? 00:00:00 [kthreadd] root 3 2 3 0 1 Mar10 ? 00:00:11 [ksoftirqd/0] root 4 2 4 0 1 Mar10 ? 00:00:01 [migration/0] root 5 2 5 0 1 Mar10 ? 00:00:00 [watchdog/0] root 15 2 15 0 1 Mar10 ? 00:00:11 [events/0]LWP - Identification du thread.
NLWP - Nombre de thread du processus.
ps aux
Cette commande permet d'obtenir un affichage beaucoup plus proche de la commande top.Avec ps aux, il sera possible de connaître le %cpu et %mem mais aussi les consommations en ressource.
xxx@yyy:~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2864 1700 ? Ss Mar10 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S Mar10 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Mar10 0:11 [ksoftirqd/0]VSZ - Virtual memory size, correspond a la colonne virt de la commande top. (mem processus + data processus + bibliothèques partagées utilisées + swap)
RSS - Resident Set Size, mémoire utilisée par le processus et ses données. Correspond à la colonne res de la commande top.
kill: terminer un processus
La commande kill permet d'envoyer le signal SIGTERM (fin de processus) à un processus particulier identifié par son pid.
Si le processus ne semble pas répondre, il est possible d'utiliser l'option -9 (KILL) dans la commande kill, cela terminera le processus de façon expéditive.
Voici un exemple terminant/expédiant le processus 253.
kill -9 253
Cet autre exemple demandant la fin d'exécution (gracefully) des processus 457 et 1099kill 457 1099
Dans les entrailles des processus
Dans le monde Unix, tout est représenté sous forme de fichier.
Ainsi, les processus en cours d'exécution se conforme à cette règle et font également partie du système de fichier.
Ainsi, en explorant le répertoire /proc, l'on se retrouve a explorer les processus en court d'éxécution.
La commande
ls -l /proc
affichera un répertoire par processus actif, le nom du répertoire étant le pid du processus (que l'on peu identifier à l'aide de ps -ef) et quelques autres fichiers et répertoires aux noms plus explicites.Vous pouvez obtenir plus d'information sur /proc dans les manuels à l'aide de la commande.
man 5 proc
/proc/cpuinfo
Fournit des informations relatives à la configuration cpu de la machine.
cat /proc/cpuinfo
/proc/meminfo
Fournit des informations relatives à la mémoire du système.
Si toutes informations ne sont pas utiles, certaines peuvent se montrer pertinente.
xxx@yyy:~$ cat /proc/meminfo MemTotal: 2569208 kB MemFree: 1090812 kB Buffers: 162756 kB Cached: 740640 kB SwapCached: 0 kB ...
/proc/PID
Un répertoire processus (identifier par la pid) contient une foule d'information.
En voici un exemple:
xxx@yyy:~$ ps -ef | grep firefox domeu 9972 1 0 11:00 ? 00:00:00 /bin/sh /usr/lib/firefox-3.6.15/firefox xxx@yyy:~$ ls -l /proc/9972 dr-xr-xr-x 2 domeu domeu 0 2011-03-14 11:08 attr -r-------- 1 domeu domeu 0 2011-03-14 13:53 auxv -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 cgroup --w------- 1 domeu domeu 0 2011-03-14 13:53 clear_refs -r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 cmdline -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 comm -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 coredump_filter -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 cpuset lrwxrwxrwx 1 domeu domeu 0 2011-03-14 13:53 cwd -> /home/domeu -r-------- 1 domeu domeu 0 2011-03-14 13:53 environ lrwxrwxrwx 1 domeu domeu 0 2011-03-14 11:22 exe -> /bin/dash dr-x------ 2 domeu domeu 0 2011-03-14 11:00 fd dr-x------ 2 domeu domeu 0 2011-03-14 13:53 fdinfo -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 io -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 latency -r-------- 1 domeu domeu 0 2011-03-14 13:53 limits -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 loginuid -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 maps -rw------- 1 domeu domeu 0 2011-03-14 13:53 mem -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 mountinfo -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 mounts -r-------- 1 domeu domeu 0 2011-03-14 13:53 mountstats dr-xr-xr-x 5 domeu domeu 0 2011-03-14 13:53 net -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 oom_adj -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 oom_score -r-------- 1 domeu domeu 0 2011-03-14 13:53 pagemap -r-------- 1 domeu domeu 0 2011-03-14 13:53 personality lrwxrwxrwx 1 domeu domeu 0 2011-03-14 13:53 root -> / -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 sched -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 schedstat -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 sessionid -r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 smaps -r-------- 1 domeu domeu 0 2011-03-14 13:53 stack -r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 stat -r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 statm -r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 status -r-------- 1 domeu domeu 0 2011-03-14 13:53 syscall dr-xr-xr-x 3 domeu domeu 0 2011-03-14 13:53 task -r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 wchaOn y retrouve les informations suivantes:
- cmdline - fichier contenant la ligne de commande.
- cwd - lien symbolique vers le répertoire courant du processus.
- environ - fichier contenant une copie des variables d'envrionnements liées au processus.
- exe - lien symbolique vers l'exécutable
- fd - file directory, répertoire contenant un liste des fichiers et sockets ouverts par le processus
xxx@yyy:/proc/9972$ ls -l fd total 0 lr-x------ 1 domeu domeu 64 2011-03-14 11:00 0 -> /dev/null lrwx------ 1 domeu domeu 64 2011-03-14 11:00 1 -> /home/domeu/.xsession-errors lrwx------ 1 domeu domeu 64 2011-03-14 11:00 10 -> /usr/lib/firefox-3.6.15/firefox lrwx------ 1 domeu domeu 64 2011-03-14 11:00 2 -> /home/domeu/.xsession-errors
- root - lien vers le répertoire root du processus (habituellement /).
Il faut savoir qu'il est possible d'utiliser un root customisé en utilisant chroot. Cela permet de restreindre l'accès au système de fichier ou d'utiliser un sous répertoire pour recréer le système de fichier, c'est très utile pour recréer un système minimaliste sans toucher au système de fichier, cette option est fort utilisée pour tester la compilation et l'installation de package sans risque pour le système.
Pour les curieux, voir le liens http://doc.fedora-fr.org/wiki/Utilisation_de_chroot
- Status - ce fichier affiche différentes informations relatif au fonctionnement du processus, y compris l'usage de la mémoire.
xxx@yyy:/proc/9972$ more status Name: firefox State: S (sleeping) Tgid: 9972 Pid: 9972 PPid: 1 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 1000 1000 1000 1000 FDSize: 256 Groups: 4 20 24 46 111 119 122 1000 VmPeak: 1896 kB VmSize: 1896 kB VmLck: 0 kB VmHWM: 508 kB VmRSS: 508 kB VmData: 168 kB VmStk: 136 kB VmExe: 80 kB VmLib: 1484 kB VmPTE: 28 kB VmSwap: 0 kB Threads: 1 SigQ: 0/16382 SigPnd: 0000000000000000 ...
Inutile de présenter PID, PPID, Name et State.
VmSize - mémoire totale utilisée. VmLib + VmExe + VmData + VmStk.
VmLock - mémoire vérouillée (évite qu'elle passe en swap).
VmRss - mémoire Resident Set Size (mem processus + mem data + mem stack).
VmData - mémoire virtuelle utilisée par la heap (stockage des données)
VmStk - mémoire utilisé pour la stack
VmExe - mémoire utilisée par l'executable et le librairie liées statiquement.
VmLib - Mémoire virtuelle utilisée par les librairies chargées en cours d'exécution.
VmData - mémoire allouée aux données
VmSwap - mémoire en swap
- Stat - version condensée de Status utilisé par la commande ps. le format produit par une instruction C printf est décrit dans le manuel d'utilisation (man 5 proc).
mercredi 16 mars 2011
Aide mémoire des raccourcis clavier de Eclipse
Eclipse est un environnement de développement libre mais surtout très populaire (à raison, je vous assure).
Après avoir passé mes premières curiosités sur Android avec Eclipse, j'ai récemment utilisé cet environnement pour faire quelques développements Python (avec pyDev).
C'est une environnement confortable et efficace.
Après de nombreuses années de développement sous Delphi et Visual Studio, je suis devenu un inconditionnel des raccourcis claviers. Ces combinaisons de touches qui vous simplifient la vie.
C'est ainsi que je suis parti à la recherche des raccourcis clavier en usage pour Eclipse... avec pour résultat un magnifique petit aide mémoire de deux pages disponible dans le fichier PDF ci-dessous.
Eclipse_Keyboard_shortcuts_3.pdf
mardi 15 mars 2011
Aide mémoire des commande Linux
Juste un tout petit article pour mentionner l'existence d'un excellent aide mémoire des commandes Linux très synthétique.
S'il passe en revue les commandes les plus utilisées (cp, mv, mkdir, ln), cet aide-mémoire aborde également des commandes que l'on utilise beaucoup moins dans le monde DOS mais qui peuvent néanmoins se montrer fort ultimes.
Par exemple paste, nl (number lines), head, ...
Je trouve d'ailleurs cet aide-mémoire suffisamment utile et concis pour le placer dans mes liens favoris (sur la gauche).
S'il passe en revue les commandes les plus utilisées (cp, mv, mkdir, ln), cet aide-mémoire aborde également des commandes que l'on utilise beaucoup moins dans le monde DOS mais qui peuvent néanmoins se montrer fort ultimes.
Par exemple paste, nl (number lines), head, ...
Je trouve d'ailleurs cet aide-mémoire suffisamment utile et concis pour le placer dans mes liens favoris (sur la gauche).
lundi 14 mars 2011
Une HP48 sur Ubuntu
Introduction
J'ai utilisé une calculatrice HP48 pendant de nombreuses années.
J'ai toujours eu du mal à revenir aux bonnes vieilles calculettes traditionnelles.
Comme ceux qui ont un jour vraiment essayé une HP, je trouve la logique polonaise inverse (RPL) plus naturelle et d'une utilisation à la fois simple et puissante.
Ainsi, j'ai utilisé mon HP48 pendant des années dans mon environnement professionnel et ma meilleure découverte fut certainement Emu48, un émulateur Windows pour HP48.
Mais voila, j'ai aussi laissé Windows de côté sur mon portable personnel et mon émulateur Emu48 fait défaut sous Ubuntu.
Après quelques recherches, j'ai découvert qu'il existait une version pour système Linux :-)
Je suis donc parti en quête et j'ai maintenant ma petite HP48 également disponible sur mon PC Ubuntu (voir procédure d'installation ci-dessous).
Si elle fonctionne très bien, il faut admettre qu'il y a néanmoins un petit bémol.
Dans l'état actuel des choses, il n'est pas possible d'utiliser un fichier KML.
En soi, il n'y a rien de bien grave mais personnellement, j'aurais apprécié de pouvoir bénéficier d'un skin plus minimaliste (et surtout une calculette moins grande à l'écran), ce que m'aurais permit l'utilisation d'un fichier kml.
Information générale
La version Linux de l'émulateur HP48 est prit en charge par BerliOS.
Les sources sont disponibles sur developer.berlios.de/projects/x48/
Le site hpcalc.org regorge également d'information concernant les calculatrices hp.
Procédure d'installation pour Ubuntu
Pour connaître la dernière version disponible (actuellement 0.6.3), rendez-vous dans la section "files" du site de développement de x48 (developer.berlios.de/projects/x48/)
Ce dernier accueillera la ROM de l'HP48G qu'il faut encore télécharger.
4) Télécharger une rom de HP48
Télécharger, décompresser et créer le lien symbolique vers la ROM.
La ligne de commande comporte d'ailleurs de nombreuses options qu'il est possible de visualiser à l'aide de x48 -help
Dans le gestionnaire de menu:
Changer la façade
J'ai cherché pendant un bon moment pour savoir comment il était possible d'utiliser une façade différente (skin) avec x48.
Divers facades sont téléchargeables depuis www.hpcalc.org/hp48/pc/emulators/
La facade "Bernal's Touchscreen GX" affiche d'ailleurs une HP48 avec un clavier à l'horizontal, ce qui pourrait être très utile dans mon cas.
Mais après de nombreuses investigations, j'ai fini par comprendre que cela n'était malheureusement pas possible avec x48.
J'ai utilisé une calculatrice HP48 pendant de nombreuses années.
J'ai toujours eu du mal à revenir aux bonnes vieilles calculettes traditionnelles.
Comme ceux qui ont un jour vraiment essayé une HP, je trouve la logique polonaise inverse (RPL) plus naturelle et d'une utilisation à la fois simple et puissante.
Ainsi, j'ai utilisé mon HP48 pendant des années dans mon environnement professionnel et ma meilleure découverte fut certainement Emu48, un émulateur Windows pour HP48.
Mais voila, j'ai aussi laissé Windows de côté sur mon portable personnel et mon émulateur Emu48 fait défaut sous Ubuntu.
Après quelques recherches, j'ai découvert qu'il existait une version pour système Linux :-)
Je suis donc parti en quête et j'ai maintenant ma petite HP48 également disponible sur mon PC Ubuntu (voir procédure d'installation ci-dessous).
Si elle fonctionne très bien, il faut admettre qu'il y a néanmoins un petit bémol.
Dans l'état actuel des choses, il n'est pas possible d'utiliser un fichier KML.
En soi, il n'y a rien de bien grave mais personnellement, j'aurais apprécié de pouvoir bénéficier d'un skin plus minimaliste (et surtout une calculette moins grande à l'écran), ce que m'aurais permit l'utilisation d'un fichier kml.
Information générale
La version Linux de l'émulateur HP48 est prit en charge par BerliOS.
Les sources sont disponibles sur developer.berlios.de/projects/x48/
Le site hpcalc.org regorge également d'information concernant les calculatrices hp.
Procédure d'installation pour Ubuntu
1) télécharger le logiciel
La commande suivante télécharge la version Debian de l'émulateur hp48 (x48).Pour connaître la dernière version disponible (actuellement 0.6.3), rendez-vous dans la section "files" du site de développement de x48 (developer.berlios.de/projects/x48/)
cd ~
wget http://download2.berlios.de/x48/x48_0.6.3_i386.deb
2) Installer le package debian
sudo dpkg -i x48_0.6.3_i386.deb
3) Créer le répertoire .hp48
Créer le répertoire caché hp48 dans le répertoire utilisateur.Ce dernier accueillera la ROM de l'HP48G qu'il faut encore télécharger.
cd ~
mkdir .hp48
4) Télécharger une rom de HP48
Télécharger, décompresser et créer le lien symbolique vers la ROM.
cd ~/.hp48
wget http://download2.berlios.de/x48/gxrom-r.bz2
file-roller gxrom-r.bz2 --extract-here
sudo ln -s gxrom-r rom.dump
5) Demarrage
Démarrer un terminal et taper:x48
La ligne de commande comporte d'ailleurs de nombreuses options qu'il est possible de visualiser à l'aide de x48 -help
6) Ajouter un point de menu
Démarrer le gestionnaire de menu (Système | préférence | menu principal).Dans le gestionnaire de menu:
- Sélectionner le menu "accessoires"
- Ajouter un nouvel élément avec les caractéristiques suivantes:
- type: application
- nom: HP48
- commande: x48
7) Un peu de nettoyage
Les fichiers x48_0.6.3_i386.deb et gxrom-r.bz2 ne sont plus nécessaires, n'oubliez pas d'aller les effacer.Changer la façade
J'ai cherché pendant un bon moment pour savoir comment il était possible d'utiliser une façade différente (skin) avec x48.
Divers facades sont téléchargeables depuis www.hpcalc.org/hp48/pc/emulators/
La facade "Bernal's Touchscreen GX" affiche d'ailleurs une HP48 avec un clavier à l'horizontal, ce qui pourrait être très utile dans mon cas.
Mais après de nombreuses investigations, j'ai fini par comprendre que cela n'était malheureusement pas possible avec x48.
vendredi 11 mars 2011
Monitorer des processus à l'aide de Python
Introduction
Faisant suite à l'article sur psutil (psutil: la bibliothèque Python pour monitorer les processus), voici les sources du code ProcessStat permettant de faire le suivit graphique de différentes caractéristiques de processus.
Ce projet est développé en s'inspirant de l'article "Charge et Processus: Gardez votre système à l'oeil!" de Frederic Le Roy paru dans Gnu Linux Magazine No 134.
Description
ProcessStat.py permet de faire le suivit graphique de différentes caractéristiques d'un ou plusieurs processus telles que cpu_percent, memory_percent, memory_rss(resident size set), memory_vms (virtual memory) ainsi que l'évolution de la mémoire global (total_physical_memory).
ProcessStat.py prend un ou plusieurs PID en argument de ligne de commande (sans préfixe) et génère ensuite des graphiques d'utilisation toute les 10 secondes dans le répertoire /tmp/.
Voici un exemple d'output du script.
Located pid 3996 having process name gnome-terminal
file saved: 16:08:59 - /tmp/chart-3996-memory_vms.png
file saved: 16:08:59 - /tmp/chart-3996-memory_percent.png
file saved: 16:08:59 - /tmp/chart-3996-memory_rss.png
file saved: 16:08:59 - /tmp/chart-3996-total_physical_memory.png
file saved: 16:08:59 - /tmp/chart-3996-cpu_percent.png
file saved: 16:09:10 - /tmp/chart-3996-memory_vms.png
file saved: 16:09:10 - /tmp/chart-3996-memory_percent.png
Et voici les différents fichiers générés (capture des fichiers visibles dans le répertoire /tmp à l'aide de l'explorateur de fichiers).
Installation
Pour fonctionner correctement, il faut installer les modules python psutil et mapplotlib.
MatPlotLib require de nombreuses dépendances, sa compilation et son installation ne sont franchement pas évidents. Il est préférable d'opter pour le package python-matplotlib déjà tout prêt.
sudo pip install psutil
sudo apt-get install python-matplotlib
Exécution directe
Il est possible de rendre ProcessStat exécutable en ligne de commande en utilisant la commande
chmod +x ProcessStat.py
Il est ensuite possible de suivre les processus à l'aide d'une commande telle que "./ProcessStat.py 1897 1706" où 1897 et 1706 sont des PID de processus que j'ai localisé à l'aide de la commande "ps -ef" (par exemple).
Cependant, le processus de capture ne s'arrête pas toujours.
En effet, dans la version actuelle du logiciel, la demande d'arrêt du processus n'est pas interceptée et il n'est donc pas possible d'arrêter les threads de captures d'information (thread sur ProcessInfo) par conséquent, le processus ProcessStat ne prend pas fin.
Par contre, les threads ProcessInfo prennent fin automatiquement lorsque les processus monitorés sont eux terminés. Seulement alors, le processus principal pourra prendre fin "gracefully".
Code source
Source: ProcessStat.zip
L'archive contient les fichiers suivants:
Main.py
Fichier inutile en temps normal, je l'ai utilisé pour tester ProcessInfo et ProcessStat durant leurs développements sous Eclipse.
Par défaut, Main.py essaye de monitorer un terminal gnome.
ProcessInfo.py
Classe qui collecte les informations de statistique pour un processus donnée. ProcessInfo rappelle une fonction de callback à intervale régulier avec un dictionnaire de valeurs en paramètre.
Ce fichier contient également quelques fonctions utilitaires tel que get_pid_from_ExactName, get_ProcessInfo_from_ExactName, get_ProcessInfo_from_PartialName.
ProcessStat.py
Lance un thread par ProcessID pour la collecte d'information (sur ProcessInfo.start), enmagasine les informations fournies par le callback de ProcessInfo et dessine différents graphiques à interval régulier dans le répertoire temporaire.
ProcessStat est capable de suivre plusieurs ProcessID.
Ressources
Faisant suite à l'article sur psutil (psutil: la bibliothèque Python pour monitorer les processus), voici les sources du code ProcessStat permettant de faire le suivit graphique de différentes caractéristiques de processus.
Ce projet est développé en s'inspirant de l'article "Charge et Processus: Gardez votre système à l'oeil!" de Frederic Le Roy paru dans Gnu Linux Magazine No 134.
Description
ProcessStat.py permet de faire le suivit graphique de différentes caractéristiques d'un ou plusieurs processus telles que cpu_percent, memory_percent, memory_rss(resident size set), memory_vms (virtual memory) ainsi que l'évolution de la mémoire global (total_physical_memory).
ProcessStat.py prend un ou plusieurs PID en argument de ligne de commande (sans préfixe) et génère ensuite des graphiques d'utilisation toute les 10 secondes dans le répertoire /tmp/.
Voici un exemple d'output du script.
Located pid 3996 having process name gnome-terminal
file saved: 16:08:59 - /tmp/chart-3996-memory_vms.png
file saved: 16:08:59 - /tmp/chart-3996-memory_percent.png
file saved: 16:08:59 - /tmp/chart-3996-memory_rss.png
file saved: 16:08:59 - /tmp/chart-3996-total_physical_memory.png
file saved: 16:08:59 - /tmp/chart-3996-cpu_percent.png
file saved: 16:09:10 - /tmp/chart-3996-memory_vms.png
file saved: 16:09:10 - /tmp/chart-3996-memory_percent.png
Et voici les différents fichiers générés (capture des fichiers visibles dans le répertoire /tmp à l'aide de l'explorateur de fichiers).
Liste des fichiers générés par ProcessStat.py |
Installation
Pour fonctionner correctement, il faut installer les modules python psutil et mapplotlib.
MatPlotLib require de nombreuses dépendances, sa compilation et son installation ne sont franchement pas évidents. Il est préférable d'opter pour le package python-matplotlib déjà tout prêt.
sudo pip install psutil
sudo apt-get install python-matplotlib
Exécution directe
Il est possible de rendre ProcessStat exécutable en ligne de commande en utilisant la commande
chmod +x ProcessStat.py
Il est ensuite possible de suivre les processus à l'aide d'une commande telle que "./ProcessStat.py 1897 1706" où 1897 et 1706 sont des PID de processus que j'ai localisé à l'aide de la commande "ps -ef" (par exemple).
./ProcessStat.py 1897 1706L'exécution directe est rendue possible à l'aide de deux petits bouts de code se trouvant de ProcessStat.py
#!/usr/bin/python # -*- coding: utf-8 -*- ... if __name__ == "__main__": myStats = ProcessStat( sys.argv[1:], 5)
Bogue connue
Le processus de ProcessStat peut être interrompu à l'aide de la combinaison de touche ctrl+c.Cependant, le processus de capture ne s'arrête pas toujours.
En effet, dans la version actuelle du logiciel, la demande d'arrêt du processus n'est pas interceptée et il n'est donc pas possible d'arrêter les threads de captures d'information (thread sur ProcessInfo) par conséquent, le processus ProcessStat ne prend pas fin.
Par contre, les threads ProcessInfo prennent fin automatiquement lorsque les processus monitorés sont eux terminés. Seulement alors, le processus principal pourra prendre fin "gracefully".
Code source
Source: ProcessStat.zip
L'archive contient les fichiers suivants:
Main.py
Fichier inutile en temps normal, je l'ai utilisé pour tester ProcessInfo et ProcessStat durant leurs développements sous Eclipse.
Par défaut, Main.py essaye de monitorer un terminal gnome.
ProcessInfo.py
Classe qui collecte les informations de statistique pour un processus donnée. ProcessInfo rappelle une fonction de callback à intervale régulier avec un dictionnaire de valeurs en paramètre.
Ce fichier contient également quelques fonctions utilitaires tel que get_pid_from_ExactName, get_ProcessInfo_from_ExactName, get_ProcessInfo_from_PartialName.
ProcessStat.py
Lance un thread par ProcessID pour la collecte d'information (sur ProcessInfo.start), enmagasine les informations fournies par le callback de ProcessInfo et dessine différents graphiques à interval régulier dans le répertoire temporaire.
ProcessStat est capable de suivre plusieurs ProcessID.
Ressources
- Précédent article concernant psutil
- Homepage du module psutil sur Google Code(et documentation)
- Homepage de matplotlib sur sourceforge
jeudi 3 mars 2011
Un gestionnaire de presse-papier pour Ubuntu
A quoi cela sert un gestionnaire de presse-papier?
Tout le monde utilise le copier-coller, la plupart d'entre-vous connaissent même probablement les combinaisons de touche associées (ctrl+c, ctrl+v).La seule chose qui manque encore sur un clavier c'est des touches copier/coller.
Bref, trêve de plaisanterie douteuse.
Dans la vie, il arrive assez souvent qu'il y ait plusieurs informations a copier-coller entre deux programmes, soit que l'on ai de nouveau besoin d'une information copiée quelques minutes avant.
C'est là qu'intervient un gestionnaire de presse-papier.
Sa tâche est de mémoriser toutes vos opérations "copier" au cas ou vous en auriez besoin plus tard.
Par la suite, il suffira de sélectionner le texte désiré pour pouvoir le réutiliser dans une opération "coller".
A part cela, le gestionnaire n'interfère en rien avec le fonctionnement normal du presse papier mais il rend de nombreux service.
Par exemple, cet article contient 3 séries de mots sur fonds jaune. Si vous désirez en faire une copie dans un autre article, il vous faudrait ouvrir deux sessions et copier-coller chaque partie de texte séparément... c'est fastidieux.
Avec un gestionnaire de presse papier, il suffit simplement de sélectionner tous les textes et de les copier. Il restent stockés dans le gestionnaire. A vous par la suite de les "coller" dans leur document de destination au moment ou cela sera opportun.
Voici comment se présente le contenu d'un gestionnaire de presse-papier.
Contenu du gestionnaire de presse papier Parcellite. |
Parcellite
Parcellite est un gestionnaire de presse papier pour Ubuntu.Parcellite a l'avantage de fonctionner et tenir une copie des éléments "copier" même si son interface graphique n'est pas démarrée (visible dans la capture d'écran ci-dessous).
Installation:
Pour installer Parcellite, exécutez la commande suivante dans un terminal.
sudo apt-get install parcellite
Truc et astuce:
- Il est possible d'invoquer le l'historique à l'aide de ctrl+alt+h
- Il est possible de définir des actions à exécuter. Les actions sont invocable à l'aide du raccourcis ctrl+alt+a
Voir le site officiel de Parcellite sur sourceforge.
mardi 1 mars 2011
Sql AntiPatterns: comment éviter les pièges de la programmation de base de données
Voici une suggestion de lecture pour tous les développeurs devant travailler avec un moteur SQL.
"SQL Antipatterns: Avoiding the Pitfalls of Database Programming" est un livre plutôt amusant dans le sens ou il n'essaye pas de vous dire ce qu'il faut faire de bien mais présente les conséquences des erreurs que d'autres ont déjà eu l'occasion de faire avant vous.
Traduction de la description de l'auteur:
La plupart des développeurs ne sont pas des experts en SQL, et la plupart des requêtes SQL utilisées ne sont pas efficaces, difficile à maintenir, et quelque-fois totalement erronées. Ce livre vous présente toutes les erreurs courantes, et vous guide ensuite vers les meilleurs solutions. De plus, ce livre vous présente ce qui est caché derrière ces solutions, ainsi, vous apprenez beaucoup au sujet des bases de données relationnelle tout au cours de ce livre.
"SQL Antipatterns: Avoiding the Pitfalls of Database Programming" est un livre plutôt amusant dans le sens ou il n'essaye pas de vous dire ce qu'il faut faire de bien mais présente les conséquences des erreurs que d'autres ont déjà eu l'occasion de faire avant vous.
Traduction de la description de l'auteur:
La plupart des développeurs ne sont pas des experts en SQL, et la plupart des requêtes SQL utilisées ne sont pas efficaces, difficile à maintenir, et quelque-fois totalement erronées. Ce livre vous présente toutes les erreurs courantes, et vous guide ensuite vers les meilleurs solutions. De plus, ce livre vous présente ce qui est caché derrière ces solutions, ainsi, vous apprenez beaucoup au sujet des bases de données relationnelle tout au cours de ce livre.
Inscription à :
Articles (Atom)