tag:blogger.com,1999:blog-57507831218711525752024-03-13T00:32:50.445+01:00Developer NotepadThe notes of a developer exploring platforms, languages and technologies.Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.comBlogger551125tag:blogger.com,1999:blog-5750783121871152575.post-14144220829189095402020-01-19T01:36:00.002+01:002020-01-19T01:36:56.398+01:00Imprimante Zebra USB en réseau avec CUPS sur Raspberry-PiCe n'est pas le premier article du blog que nous écrivons sur les imprimantes Zebra utilisée en ZPL. Il y a même <a href="https://github.com/mchobby/PythonPcl" target="_blank">une bibliothèque PythonPcl</a> publiée sur GitHub.<br />
<br />
<b><span style="font-size: large;">Avant propos</span></b><br />
Nous avons quelques imprimantes Zebra exploitées quotidiennement pour notre étiquetage. Le hic, c'est qu'elles sont toutes branchées en USB sur un PC... du coup pas facile à utiliser en réseau :-/<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCI3c-Y6t3ClDYNNqBDU_ic10ddMX6l-2q2I4OWZGSGThR44jh5nWg8BkJOO_qJPAYi9vxVv_T1c2cJZMb-1YjC2RiC7Nwarkz9oUNjRZ6SRFURvxsVxRnwNGdQjvL0PLe4V35HpVceXIg/s1600/zebra-zd420.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="293" data-original-width="329" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCI3c-Y6t3ClDYNNqBDU_ic10ddMX6l-2q2I4OWZGSGThR44jh5nWg8BkJOO_qJPAYi9vxVv_T1c2cJZMb-1YjC2RiC7Nwarkz9oUNjRZ6SRFURvxsVxRnwNGdQjvL0PLe4V35HpVceXIg/s320/zebra-zd420.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Zebra ZD420</td></tr>
</tbody></table>
<br />
<b><span style="font-size: large;">Cups et Raspberry-Pi à la rescousse</span></b><br />
Les carte Raspberry-Pi sont devenue tellement puissantes qu'elles peuvent facilement être utilisées en serveur d'impression.<br />
<div style="-moz-border-radius: 2px; -webkit-border-radius: 2px; background: rgba(0 , 192 , 240 , 0.3); border-radius: 2px; border: 1px solid #ccc; display: block; margin: 15px 0; padding: 15px 15px 15px 15px;">
François Mocq à publié son article "<a href="https://www.framboise314.fr/transformer-une-imprimante-usb-en-imprimante-wifi/" target="_blank">Transformer une imprimante USB en imprimante WiFi</a>" à l'aide de CUPS et d'un Raspberry-Pi.</div>
<br />
Nous avons utilisé son tutoriel à la différence que nous avons exploité une connexion Ethernet filaire et une adresse IP fixe.<br />
<br />
Ensuite, nous avons raccordé notre (nos) imprimante(s) Zebra USB sur le Raspberry-Pi et suivi la procédure suivante.<br />
<br />
<b><span style="font-size: large;">Rappel PythonPcl</span></b><br />
PythonPcl utilise les imprimantes en <b>mode RAW</b> (voir article <i><a href="http://domeu.blogspot.com/2015/02/imprimante-zebra-usb-zpl-et-cups-damned.html" target="_blank">Imprimante Zebra USB, ZPL et CUPS - Damned CUPS!!!</a></i>) afin de pouvoir <a href="http://domeu.blogspot.com/search?q=pythonpcl" target="_blank">envoyer directement du ZPL sur l'imprimante</a>.<br />
<br />
<b><span style="font-size: large;">Configurer l'imprimante sur le serveur CUPS</span></b><br />
Pour mettre l'imprimante en réseau, il faut d'abord configurer cette imprimante sur le serveur CUPS (fonctionnant sur le Raspberry-Pi).<br />
Cela se fait par l'intermédiaire de l'interface d'administration CUPS et d'un navigateur internet.<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">http://adresse-ip:631/</span><br />
<br />
Ajouter une imprimante<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNFfrX0Or2SOFNk0NGAMlWUSBxUuM2jxzyNKC2i6FPFES0KHCQjZTB1xINF8br6nH725ounRJhI9RZEtrxrooKXFhYdAvEyf4sExYqMn1q-agGK37RUp0jLvg1QPwqxsginQwOyogloWiS/s1600/cups_admin_00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="1001" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNFfrX0Or2SOFNk0NGAMlWUSBxUuM2jxzyNKC2i6FPFES0KHCQjZTB1xINF8br6nH725ounRJhI9RZEtrxrooKXFhYdAvEyf4sExYqMn1q-agGK37RUp0jLvg1QPwqxsginQwOyogloWiS/s640/cups_admin_00.png" width="640" /></a></div>
<br />
Sélectionner l'imprimante à configurer : imprimante locale ZD420 (locale puisqu'elle est branchée en USB)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5i_SN6KZtf0JqDFwM759CxVh1URrnVDfj91gPKqYSsMffCVC5FqFvNk7bjmxYQ6cx5hpv_0xrvABsv0wsH5cQFWCK-cSowqMmSiWM5N5Kv2IV7nY1K_v3TfV5dkfQpYPAPlmxaU8tryVT/s1600/cups_admin_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="589" data-original-width="985" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5i_SN6KZtf0JqDFwM759CxVh1URrnVDfj91gPKqYSsMffCVC5FqFvNk7bjmxYQ6cx5hpv_0xrvABsv0wsH5cQFWCK-cSowqMmSiWM5N5Kv2IV7nY1K_v3TfV5dkfQpYPAPlmxaU8tryVT/s640/cups_admin_01.png" width="640" /></a></div>
<br />
Viens ensuite le moment de définir le nom de l'imprimante (celui qui sera exposé sur le réseau). <b><span style="color: red;">Ne surtout pas oublier de partager l'imprimante</span></b>!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL2zX-8VciOIHrB2jXc6bHXzMCFb1s_SiVa4tzeFxC6rSHrPfhbXyoFOe_N6ruCt28QO-zEKtepnEFJ86IHl5Umu09uF-OK-DP0rDXDRpOb_AkyW0bW7vNG7s3Jk2qNPl0lIpunV_sHb-s/s1600/cups_admin_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="937" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL2zX-8VciOIHrB2jXc6bHXzMCFb1s_SiVa4tzeFxC6rSHrPfhbXyoFOe_N6ruCt28QO-zEKtepnEFJ86IHl5Umu09uF-OK-DP0rDXDRpOb_AkyW0bW7vNG7s3Jk2qNPl0lIpunV_sHb-s/s640/cups_admin_02.png" width="640" /></a></div>
C'est le moment d'indiquer le type de pilote... il faut sélectionner une imprimante de marque <b>Raw</b> (terme anglais signifiant "<i>brute</i>")... car notre intention est d'envoyer du ZPL brute directement sur l'imprimante... un pilote Zebra essayerait d'interpréter le contenu et imprimerait le ZPL comme si cela était du texte.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP2wKMCMQQ0d0pRuPVVAitt2Be3EbNKpox1_BZ_-tmeBUQ3ghoYf_eQLsKV8uJ4m4CAJYa8JZtAtAgPrkVW2AvS8WfpJZijlITHDWY96LTEwUe-nwubRgqemA6gdwN0Dl8cj2euyNS07Xj/s1600/cups_admin_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="597" data-original-width="609" height="625" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP2wKMCMQQ0d0pRuPVVAitt2Be3EbNKpox1_BZ_-tmeBUQ3ghoYf_eQLsKV8uJ4m4CAJYa8JZtAtAgPrkVW2AvS8WfpJZijlITHDWY96LTEwUe-nwubRgqemA6gdwN0Dl8cj2euyNS07Xj/s640/cups_admin_03.png" width="640" /></a></div>
Et comme c'est une imprimante Raw, le modèle d'imprimante sera inévitablement <b>Raw Queue</b> (<i>queue d'impression brute</i>).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9EC1maxf30E1b2fRIrST5S-rUMF2RgYUkBxcS4mR8-v9qDeKrwVM5ic1yEoiljw02N_LO3ZfaIN0J9_eyeqw_hAwcgvrHpaGVqIRIeWvO4F_xRobmaGQhPsxzXRyj1C9cR_EMPYGESaHK/s1600/cups_admin_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="555" data-original-width="871" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9EC1maxf30E1b2fRIrST5S-rUMF2RgYUkBxcS4mR8-v9qDeKrwVM5ic1yEoiljw02N_LO3ZfaIN0J9_eyeqw_hAwcgvrHpaGVqIRIeWvO4F_xRobmaGQhPsxzXRyj1C9cR_EMPYGESaHK/s640/cups_admin_04.png" width="640" /></a></div>
<br />
La dernière option permet de sélectionner les bannières d'impressions... laissés à None (<i>rien</i>).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7unRzVIJAfV7Tz89EVwOaUhaw5xB1Lj9EZOxAAg-yjP83lcyD-JvqcAXykZh19AcIHvoQzOa4Rip70KdlY_235UKO8cFgnWrokfxJQsq3YRgd9jox6mfIAJtrC1QHX7VGyEoj-0k_AXDI/s1600/cups_admin_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="674" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7unRzVIJAfV7Tz89EVwOaUhaw5xB1Lj9EZOxAAg-yjP83lcyD-JvqcAXykZh19AcIHvoQzOa4Rip70KdlY_235UKO8cFgnWrokfxJQsq3YRgd9jox6mfIAJtrC1QHX7VGyEoj-0k_AXDI/s400/cups_admin_05.png" width="400" /></a></div>
<br />
Voila, notre imprimante est configurée sur le serveur CUPS et partagée sur le réseau.<br />
<b><span style="font-size: large;"><br /></span></b>
<b><span style="font-size: large;">Installer l'imprimante réseau sur Linux</span></b><br />
Nous utilisons Linux Mint (dérivé d'Ubuntu, dérivé de Debian), installer l'imprimante Zebra-ticket se fait par l'intermédiaire du gestionnaire d'imprimante du système d'exploitation.<br />
<br />
Dans le gestionnaire d'imprimante, cliquer sur le bouton "Ajouter".<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBhFJGErvJq2uSBYF6Tv7REJ249JKwrPtaG61SfT1HBVhtOQ_qCuWgWVlggW7raOyZvSgzEsyVEetETdeiv7Q_lr8MlJY2kyYc4mfMR2aR1vzY75Xx9O0Y5zVzHvd4AMPQLOrQ2q3OQ6tS/s1600/cups_client_00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="387" data-original-width="474" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBhFJGErvJq2uSBYF6Tv7REJ249JKwrPtaG61SfT1HBVhtOQ_qCuWgWVlggW7raOyZvSgzEsyVEetETdeiv7Q_lr8MlJY2kyYc4mfMR2aR1vzY75Xx9O0Y5zVzHvd4AMPQLOrQ2q3OQ6tS/s400/cups_client_00.png" width="400" /></a></div>
Cela affiche la liste des imprimantes disponibles, on y retrouve l'imprimante Zebra (ZD420) partagée sur le serveur CUPS.<br />
Ne reste plus qu'a sélectionner l'imprimante et presser sur le nouton "Suivant".<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtqLVaSh_P0XiFKNo375dU4rEcgcZlvhzbf0ebBjLtpk0cDcGDksh9lZjSuBeW_QAs4iEjXPLiAa7VjM6xCTXiPJMBMD6PmWhgu12YdSxOo9k2TDXI2IoNKcSwDmRcxFTQFxkxBIbOqN3m/s1600/cups_client_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="585" data-original-width="663" height="563" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtqLVaSh_P0XiFKNo375dU4rEcgcZlvhzbf0ebBjLtpk0cDcGDksh9lZjSuBeW_QAs4iEjXPLiAa7VjM6xCTXiPJMBMD6PmWhgu12YdSxOo9k2TDXI2IoNKcSwDmRcxFTQFxkxBIbOqN3m/s640/cups_client_01.png" width="640" /></a></div>
<br />
Tous comme sur le serveur CUPS, il nous faut une imprimante qui n'interprète pas le contenu imprimé... donc qui fait un transfert brute.<br />
Il faut donc choisir la catégorie <b>Generic</b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq1u51dm2xXAwpnvsNz7ktqSSvYpArIV0x_73y6C9UJg_PlgM8k6k7_K13oydraTcXe4NeDGTnZmoKPIQjBWBDRrAEkJEhCpOQWaZnb4xeJ9jHT8HeKXYlNJUb0dT7yrX7jGiHWuMifSHq/s1600/cups_client_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="584" data-original-width="660" height="566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq1u51dm2xXAwpnvsNz7ktqSSvYpArIV0x_73y6C9UJg_PlgM8k6k7_K13oydraTcXe4NeDGTnZmoKPIQjBWBDRrAEkJEhCpOQWaZnb4xeJ9jHT8HeKXYlNJUb0dT7yrX7jGiHWuMifSHq/s640/cups_client_02.png" width="640" /></a></div>
<br />
Puis sélectionner le pilote Raw Queue (exactement comme sur le serveur cups.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK9KZOxhweb-R9x52wWgADQc9KOsTQQGsZPWrWLM3U_iJzw0tx-nhBa8chlYkPZc8Nf2CG38mnGCkSEp-mBghqHy5JP7fdy2O3JHF6sDrlX-3rQehWS5HbhgJXnY8JGgwTSF6dwlI4enZO/s1600/cups_client_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="581" data-original-width="660" height="561" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK9KZOxhweb-R9x52wWgADQc9KOsTQQGsZPWrWLM3U_iJzw0tx-nhBa8chlYkPZc8Nf2CG38mnGCkSEp-mBghqHy5JP7fdy2O3JHF6sDrlX-3rQehWS5HbhgJXnY8JGgwTSF6dwlI4enZO/s640/cups_client_03.png" width="640" /></a></div>
Voila, l'imprimante est ajoutée dans le gestionnaire...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu_dhXCO8nnaCvbh44eGXEkv7D-QuGxkxq78pl-HeLIJScWkDArmSny9S0iQXPAnkLniRmKJ6cMohqIwCw1iIbkTQ0nuNzEIgw8JJrV3f9nUqVMys7mDUOLSmnQGofH-RjFwXveSESFpqV/s1600/cups_client_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="728" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu_dhXCO8nnaCvbh44eGXEkv7D-QuGxkxq78pl-HeLIJScWkDArmSny9S0iQXPAnkLniRmKJ6cMohqIwCw1iIbkTQ0nuNzEIgw8JJrV3f9nUqVMys7mDUOLSmnQGofH-RjFwXveSESFpqV/s640/cups_client_04.png" width="640" /></a></div>
<br />
il ne reste plus qu'à la renommer pour pouvoir l'utiliser plus facilement en ligne de commande (menu contextuel, option "renommer"). Le nom <span style="font-family: "Courier New", Courier, monospace;">Zebra_Ticket</span> sera plus simple aussi bien pour Python ou en ligne de commande.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrzZ7vGj-0zma2nNiJR4AEKA7HErqvTR3DpIKkPlUljTgsAHhWFHVOS87KYAV4leojgt3NfPjtWK6GDTSnP6lbgYHoB0AfZ8YE8GaOjhLUWokhqqaZC5Dr3IEvVoQbQbCpyGtgaQI1AEow/s1600/cups_client_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="722" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrzZ7vGj-0zma2nNiJR4AEKA7HErqvTR3DpIKkPlUljTgsAHhWFHVOS87KYAV4leojgt3NfPjtWK6GDTSnP6lbgYHoB0AfZ8YE8GaOjhLUWokhqqaZC5Dr3IEvVoQbQbCpyGtgaQI1AEow/s640/cups_client_05.png" width="640" /></a></div>
<br />
<b><span style="font-size: large;">Utiliser l'imprimante</span></b><br />
<br />
Il suffit de suivre les instructions de l'article "<a href="http://domeu.blogspot.com/2015/02/imprimante-zebra-usb-zpl-et-cups-damned.html" target="_blank">Imprimante Zebra USB, ZPL et CUPS - Damned CUPS!!!</a>" en utilisant le nom d'imprimante <span style="font-family: "Courier New", Courier, monospace;">Zebra_Ticket</span> permet de vérifier le bon fonctionnement de l'ensemble.<br />
<br />
Cette configuration CUPS avec Raspberry-Pi fonctionne parfaitement. Elle est utilisée avec <a href="https://github.com/mchobby/PythonPcl" target="_blank">la bibliothèque PythonPcl</a>.<br />
<br />
x<br />
x<br />
x<br />
x<br />
xx<br />
<br />Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-39399025098703632692018-06-17T12:41:00.003+02:002018-06-17T12:41:56.618+02:00Quels outils pour contrôler ce que fait votre ado sur son smartphone?Bonjour,<br />
De plus en plus d'ADO et Pré-ADO dispose d'un SmartPhone. Difficile de ne pas faire plaisir à nos enfants en accédant à leur demande d'autant que ne pas y accéder à cette technologie c'est aussi les isoler des nouveaux groupes sociaux qui se forme dans les cours d'école et après les cours. <br />A chacun son avis sur le sujet, protéger nos enfant ou isoler nos enfants.<br />
<br />
A côté de cela, nous pouvons essayer de faire autant de prévention que souhaité... nos enfants sont exposés aux nombreuses tentations sur smartphone, tentations qui sont omniprésentes, les cadeaux <i>empoisonnés </i>des opérateurs n(en vue de fidéliser nos loulou)... sans compter que <b><a href="https://fr.wikipedia.org/wiki/Syst%C3%A8me_de_r%C3%A9compense" target="_blank">le système hédonique de notre cerveau</a> est un véritable piège</b> lorsqu'il est confronté aux plateformes de jeux (très avancés sur Smartphone).<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizvgT9hL_g7kvxolnSrFN0Fh_IgvXKQ3I2nmvXP5iaeL6YEFwTpqPk7ydE14XGOVSDNEluAO2VqGD3AzeB0P5161opwuiCzly97WmFmSZdSXM7RD_YSpE4OXjx6L-d9rHHAbUYwFRS1_jg/s1600/S%25C3%25A9lection_455.png" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizvgT9hL_g7kvxolnSrFN0Fh_IgvXKQ3I2nmvXP5iaeL6YEFwTpqPk7ydE14XGOVSDNEluAO2VqGD3AzeB0P5161opwuiCzly97WmFmSZdSXM7RD_YSpE4OXjx6L-d9rHHAbUYwFRS1_jg/s1600/S%25C3%25A9lection_455.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Interface de contrôle parental de Xooloo</td></tr>
</tbody></table>
D'où l'intérêt de mettre en place un contrôle parentale... parce que la prévention ne sera pas forcement suffisante (<i>vous le comprendrez, il s'est fait piègé... et nous aussi</i>) sur le long terme.<br />A vous, en tant que parent, de fixer vis propres limites intrusives.<br />
<br />
Saviez-vous que l'<a href="https://www.actioninnocence.org/" target="_blank">organisation Action Innocence</a> avait fait une évaluation de logiciels de contrôle parental pour SmartPhone?<br />
Il semblerait que les meilleurs logiciels étaient: <br />
<ul>
<li><a href="http://www.witigo.eu/produits/" target="_blank">Witigo</a></li>
<li><a href="https://www.xooloo.com/fr/" target="_blank">Xooloo</a></li>
<li><a href="https://www.f-secure.com/fr_FR/web/home_fr/safe" target="_blank">F-Secure Safe</a></li>
</ul>
<b><span style="font-size: large;">Ressources</span></b><br />
<ul>
<li>L'article "<a href="https://lexpansion.lexpress.fr/high-tech/quels-outils-pour-controler-ce-que-fait-votre-ado-sur-son-smartphone_1629594.html" target="_blank">Quels outils pour contrôler ce que fait votre ado sur son smartphone?</a>
" paru sur l'Express Expansion.</li>
<li>L'article "<a href="https://www.francoischarron.com/xooloo:-logiciel-de-controle-parental-en-francais/-/8qowogRTst/" target="_blank">Xooloo: logiciel de contrôle parental en Français</a>" (<i>francoischarron.com</i>) </li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-13869055352531081792018-04-15T17:36:00.003+02:002018-04-15T17:36:31.311+02:00Python threads synchronization: Locks, RLocks, Semaphores, Conditions, Events and QueuesUn excellent article concernant les outils de synchronisation sous Python.<br />
<br />
Aborde également les principes de producer/consumer... à lire !!<br />
<ul>
<li><a href="https://www.laurentluce.com/posts/python-threads-synchronization-locks-rlocks-semaphores-conditions-events-and-queues/" target="_blank">Python threads synchronization: Locks, RLocks, Semaphores, Conditions, Events and Queues</a></li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-11599959614350548332017-08-05T18:57:00.001+02:002017-08-05T18:57:25.443+02:00wxPython pour réaliser des interfaces graphique sous PythonIl n'y a pas si longtemps, je suis tombé sur cet article qui à retenu toute mon attention<br />
<br />
<ul>
<li><a href="https://vcansimplify.wordpress.com/2013/04/08/ultra-quick-guis-with-wxformbuilderpython/" target="_blank">Ultra Quick GUIs with wxFormBuilder/Python</a></li>
<li><a href="https://www.wxpython.org/pages/screenshots/" target="_blank">Des captures d'écran d'exemple de wxPython</a> </li>
</ul>
<br />
Pour en revenir à l'article, il propose de réaliser:<br />
<ol>
<li>Une interface graphique à l'aide de wxFormBuilder</li>
<li>Exporter l'interface dans un fichier python (directement depuis wxFormBuilder)</li>
<li>Créer le code (vraiment très rudimentaire) pour coder l'exemple en python</li>
</ol>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjxQofoj-dEZOA_ggxa7KNfmJPNoHpXNsEGitHl0IbdVc3she9_WvV9Eq89FA1ZCa1tN-xTooEzLH9RMFh6e1UYlzS4CdWq7Md724T-nVHTSm_243oq7Gre31XJceQA0lQ43Vqf97ICgko/s1600/S%25C3%25A9lection_003.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjxQofoj-dEZOA_ggxa7KNfmJPNoHpXNsEGitHl0IbdVc3she9_WvV9Eq89FA1ZCa1tN-xTooEzLH9RMFh6e1UYlzS4CdWq7Md724T-nVHTSm_243oq7Gre31XJceQA0lQ43Vqf97ICgko/s320/S%25C3%25A9lection_003.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Exemple wxFormBuilder et Python</td></tr>
</tbody></table>
<br />
Je me suis donc lancé dans l'expérimentation en installant wxFormBuilder sur mon Linux Mint (Ubuntu).<br />
<br />
<b><span style="font-size: large;">Petite surprise</span></b><br />
En suivant les instructions mentionnées dans l'article pour l'installation de wxFormBuilder, j'ai vite remarqué que le code Python généré par wxFormBuilder (compilé depuis GitHub) n'était pas compatible avec wxPython (installé depuis les packages pythons avec <span style="font-family: "courier new" , "courier" , monospace;">"pip install -U wxPython</span>").<br />
<br />
Ce n'est pas grand chose... juste un appel de fonction à modifier dans le fichier Python généré par wxFormBuilder.<br />
Ce n'est quand même pas très "propre", sans savoir ce que cela cache comme autre surprise.<br />
<br />
<span style="color: purple;"><u><b>Cause et solution</b></u></span><br />
Je me doutais que la version de wxPython (des dépots Python) n'était pas en concordance avec la version wxFormBuilder disponible sur GitHub.<br />
La solution:<br />
<ul>
<li>re-compiler wxPython </li>
<li>compiler wxFormBuilder</li>
</ul>
<b><span style="font-size: large;">Recette pour recompiler wxPython et wxFormBuilder</span></b><br />
Recompiler wxPython ne fut pas de tout repos et il n'aura fallut pas loin d'une journée pour y arriver.<br />
Voici donc la recette magique:<br />
<br />
<pre class="escaped"># === Installer les essentiels ===
# essentiels de compilation
sudo apt-get install build-essential g++
# Installer GTK 2.0
sudo apt-get install gtk2.0
# === Install wxPython ===
# comme mentionné sur https://www.wxpython.org/pages/downloads/
# l intruction suivante ne compatible pas bien:
#
# pip install -U wxPython
# Comme indiqué dans l'article, l'instruction suivante
# ne fournit pas une compatibilité optimale entre le code
# Python généré par wxFormBuilder et le package Python
#
# sudo apt-get install python-wxgtk3.0
# === Compilation de wxPython ===
# Installer GStreamer requis pour compiler wxPython
sudo apt-get install libgstreamer0.10
sudo apt-get install libgstreamer0.10-dev
sudo apt-get install libgstreamer-plugins-base0.10
sudo apt-get install libgstreamer-plugins-base0.10-dev
sudo apt-get install gir1.2-gst-plugins-base-0.10
sudo apt-get install gir1.2-gstreamer-0.10
# Installer WebKit requis pour compiler wxPython
# NB: identifier les module WebKit avec "sudo apt-cache search libwebkit"
# NB: pas suffisant "sudo apt-get install libwebkit2gtk-3.0-dev"
sudo apt-get install libwebkitgtk-3.0-0 libwebkitgtk-dev
# Installer python3-dev, requis pour avoir python3-config.
# python3-config utilisé par la compilation de wxPython
sudo apt-get install python3-dev
# Installer wxPython 4.0 pour python3
# La compilation peut prendre plus d'une heure
sudo pip3 install -U \
-f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04 \
wxPython
# === Compilation de wxFormBuilder ===
# Conformément au projet GitHub
# https://github.com/wxFormBuilder/wxFormBuilder
sudo apt-get install libwxgtk3.0-dev libwxgtk-media3.0-dev libboost-dev
cd /tmp
git clone --recursive --depth=1 https://github.com/wxFormBuilder/wxFormBuilder
cd wxFormBuilder
./create_build_files4.sh
cd build/3.0/gmake
make config=release
=== Exécuter la version compilée ===
cd ../../../output/bin/
./wxformbuilder
== Installer wxFormBuilder (Ubuntu/Mint) ==
# copy software to /usr/bin/
sudo mkdir /usr/share/wxformbuilder
# COPIER TOUS les fichiers de
# /tmp/wxFormBuilder/output/
# vers
# /usr/share/wxformbuilder
# Reconstruire le lien symbolique de share/wxformbuilder
# vers le répertoire "share" de notre installatin
sudo rm /usr/share/wxformbuilder/share/wxformbuilder
cd /usr/share/wxformbuilder/share
sudo ln -s /usr/share/wxformbuilder wxformbuilder
# Créer un lien symbolique dans /usr/bin
# pour pouvoir appeler wxformbuilder depuis la ligne
# de commande
cd /usr/bin
ln -s /usr/share/wxformbuilder/bin/wxformbuilder wxformbuilder
</pre>
<br />
<b><span style="font-size: large;">Ressources</span></b><br />
<ul>
<li><a href="https://vcansimplify.wordpress.com/2013/04/08/ultra-quick-guis-with-wxformbuilderpython/">Ultra Quick GUIs with wxFormBuilder/Python</a></li>
<li><a href="https://www.wxpython.org/">wxPython </a></li>
<li><a href="https://www.wxpython.org/pages/downloads/">wxPython - Téléchargement</a></li>
<li><a href="https://www.wxpython.org/pages/screenshots/">wxPython - Captures d'écran</a> </li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-56374849598586381712017-06-07T20:30:00.000+02:002017-06-07T20:30:34.305+02:00Comment désactive IPV6 sur Linux MintConnaissant différents ralentissement sur certaines connexions internet, j'en suis venu à me demander si switching IPV6 et IPV4 ne posait pas quelques problème de résolution.<br />
<br />
Je me suis donc demandé comment désactiver proprement IPV6 sur mon Linux Mint.<br />
<br />
<pre class="escaped">sudo nano /etc/sysctl.conf</pre>
<br />
Ajouter les lignes suivantes à la fin du fichier de configuration<br />
<br />
<br />
<pre class="escaped"># IPv6 disabled
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1</pre>
<br />
Puis redémarrer sysctl<br />
<br />
<pre class="escaped">sudo sysctl -p</pre>
<br />
Et HOP, plus d'IP V6. Vous pouvez facilement vérifier en consultant le résultat de la commande <span style="font-family: "Courier New",Courier,monospace;">ifconfig</span> :-) Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-77424856752363714642016-11-02T13:18:00.000+01:002016-11-02T13:18:04.711+01:00Histoire de Flash player, HTML5 et YouTube Player ApiJe lis actuellement l'excellent article "<a href="http://linuxfr.org/news/flash-d-adobe-a-l-agonie#l%C3%A2ge-dor-sombre--1996--2006">Flash d'Adobe à l'agonie</a>" sur LinuxFR.<br />
En plus de revenir sur l'historique de flash (et sa déchéance qui n'en fini pas), l'article fait également une part belle à <a href="http://linuxfr.org/news/flash-d-adobe-a-l-agonie#la-rel%C3%A8ve">la relève (HTML5, le format SVG, les outils)</a><br />
<br />
En article connexe, j'ai trouvé la présentation "<a href="https://developers.google.com/youtube/iframe_api_reference">YouTube Player API Reference</a>" très intéressante. Car oui, Google est passé au support HTML5 dès 2010-2011.<br />
<br />
Bonne lecture :-)Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-61051769524741456002016-10-18T14:18:00.001+02:002016-10-18T14:18:56.886+02:00Gandi: config SPK et DKIM / dig - l'outil linux pour intérroger les serveurs DNS.Il n'y a pas longtemps, j'ai modifié les enregistrements DNS de notre société pour autoriser la société mailjet à devenir notre point relay (pour l'envoi d'émail).<br />
<br />
Chez Gandi, cela se fait en mode expert en ajoutant la ligne suivante:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">@ 10800 IN TXT "v=spf1 include:spf.mailjet.com ?all"</span><br />
<br />
<br />
<br />
Et vous pouvez également ajouter une clé DKIM... (<i>format de l'enregistrement conseillé par gandi, clé fournit par MailJet)</i><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">mailjet._domainkey 10800 IN TXT "k=rsa; p=MI........QAB"</span><br />
<br />
Après la propagation DNS (environ 3H), vient le moment où il serait intéressant de savoir si l'enregistrement TXT est correctement publié sur le DNS. <br />
<i>Note: l'interface d'administration de MailJet pense obstinément que ce n'est pas en ordre</i><br />
<br />
Prenez une machine Linux et saisissez la commande:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">dig TXT mondomaine.be +short</span><br />
<br />
Et l'on obtient la réponse suivante:<br />
<br />
<pre class="escaped">; <<>> DiG 9.9.5-3ubuntu0.9-Ubuntu <<>> TXT mondomaine.be
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28806
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;mondomaine.be. IN TXT
;; ANSWER SECTION:
mondomaine.be. 10800 IN TXT "v=spf1 include:spf.mailjet.com ?all"
;; Query time: 48 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Oct 18 13:48:03 CEST 2016
;; MSG SIZE rcvd: 89
</pre>
<br />
Ou nous pouvons contacter que l'enregistrement TXT pour spf1 est bien présent.<br />
<br />
Chouette alors ;-)
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-78042765096418747032016-09-16T09:45:00.000+02:002016-09-16T09:45:07.795+02:00Python: Découverte des possibilités vidéo de GStreamer et FFmpeg grâce à FWomajEn consultant les news de Linuxfr.org, je tombe sur l'article "<a href="http://linuxfr.org/news/fwomaj-0-3-videos-a-la-coupe-au-rayon-frais">Fwomaj 0.3 : Vidéos à la coupe au rayon frais</a>".<br />
Bien que je ne m'intéresse pas spécialement à la vidéo, le fait de Fwomaj utilise Python 3 m'incite à faire une petite lecture... fructueuse puisque je découvre de nouveaux outils pour mon environnement favoris.<br />
Si l'article décrit le travail de l'auteur dans son projet, il énumère surtout certaines dépendances et donne des liens vraiment utiles. <br />
<b>Couteaux Suisse de la vidéo</b>, je découvre donc les possibilités de GStreamer et FFmpeg qu'il est possible commander depuis Python et d'inclure dans une application GTK.<br />
<b><span style="font-size: large;"><br /></span></b>
<b><span style="font-size: large;">FFmpeg - codage/décodage/transcodage</span></b><br />
FFmpeg est un Framework Multimedia très populaire capable de décoder, encoder, transcoder mixer (mux), démixer (demux), streamer, filtrer et jouer (play) presque tout ce que l'homme et la machine ont créés. Il support la plupart des anciens formats obscur jusqu'au tout dernier standard hi-tech. <br />
Très portable, FFmpeg compile, s'exécute et passe avec succès l'infrastructure de test <a href="http://fate.ffmpeg.org/">FATE </a>sous Linux, Mac OS X, Microsoft Windows, les BSDs, Solaris, etc. Sous une large variété d'environnement de compilation, architecture logiciel et configuration. <br />
<ul>
<li>Documentation - <a href="https://ffmpeg.org/documentation.html">https://ffmpeg.org/documentation.html</a> </li>
</ul>
<b><span style="font-size: large;">GStreamer - rendu vidéo</span></b><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKcYxelaDdi2lCTn-9WNTGjUfmngGR2gwczAkrclMiB3TX4r8L8-Doo-d3C0OrUNprC4hvgiV0b-auHcCoFYE52AyxHCw2e-J66H_EJ3BSy7XdCvOb-EkP4dtNd2IeBfs29XrhafUVccur/s1600/gStreamer-Sample.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKcYxelaDdi2lCTn-9WNTGjUfmngGR2gwczAkrclMiB3TX4r8L8-Doo-d3C0OrUNprC4hvgiV0b-auHcCoFYE52AyxHCw2e-J66H_EJ3BSy7XdCvOb-EkP4dtNd2IeBfs29XrhafUVccur/s400/gStreamer-Sample.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Source: <a href="http://linuxfr.org/news/fwomaj-0-3-videos-a-la-coupe-au-rayon-frais">Fwomaj 0.3 : Vidéos à la coupe au rayon frais</a> </td></tr>
</tbody></table>
<br />
Pour reprendre la note de l'article d'origine:<br />
<blockquote class="tr_bq">
<i>On peut faire <a href="http://wiki.oz9aec.net/index.php/Gstreamer_cheat_sheet">plein de choses avec GStreamer</a>. C'est un langage de pipes vidéo assez fascinant, qu'on prototype à l'aide de l'utilitaire <a href="https://packages.debian.org/sid/gstreamer1.0-tools">gst-launch</a>, pour construire des "tuyaux" d'images qui bougent:</i></blockquote>
<br />
<pre class="escaped">gst-launch-1.0 videotestsrc pattern=1 ! video/x-raw,format=AYUV,framerate=\(fraction\)10/1,width=100,height=100 ! videobox border-alpha=0 top=-70 bottom=-70 right=-220 ! videomixer name=mix sink_0::alpha=0.7 sink_1::alpha=0.5 ! videoconvert ! xvimagesink videotestsrc ! video/x-raw,format=AYUV,framerate=\(fraction\)5/1,width=320,height=240 ! mix.</pre>
<br />
Comme rien ne vaut un beau dessin pour comprendre rapidement<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ6l42EBkJmecbTtzL9I6mvwGI7pPveZUflN7C84xTXOJtRdi4shJPwyyBclzGfebJzmMqnktxjQkU1Pbif4M09V32YFn06ZinhGSu67c9H7yAiMKZqbFwnaoHzWw2ybWEeTSykHeYlAmZ/s1600/gStreamer-GstVideoWallDia.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ6l42EBkJmecbTtzL9I6mvwGI7pPveZUflN7C84xTXOJtRdi4shJPwyyBclzGfebJzmMqnktxjQkU1Pbif4M09V32YFn06ZinhGSu67c9H7yAiMKZqbFwnaoHzWw2ybWEeTSykHeYlAmZ/s640/gStreamer-GstVideoWallDia.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Source: <a href="http://wiki.oz9aec.net/index.php/Gstreamer_cheat_sheet">GStreamer Cheat Sheet</a></td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8gHjowA6oIVwQBw6e5RpmOSVldhAsky3W5VZVxH-OYj45pT1WnWqUFZ9DhYnUQ2dh19S560ye1EVv06apb1krxtqkTWp6dBAencOKn9WDtxQA_O5Au-Y749c3rdjKzY1qkTdTBoIYMJxE/s1600/gStreamer-GstPipExample.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8gHjowA6oIVwQBw6e5RpmOSVldhAsky3W5VZVxH-OYj45pT1WnWqUFZ9DhYnUQ2dh19S560ye1EVv06apb1krxtqkTWp6dBAencOKn9WDtxQA_O5Au-Y749c3rdjKzY1qkTdTBoIYMJxE/s640/gStreamer-GstPipExample.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Source: <a href="http://wiki.oz9aec.net/index.php/Gstreamer_cheat_sheet">GStreamer Cheat Sheet</a></td></tr>
</tbody></table>
<br />
<u><b>Ressources:</b></u><br />
<ul>
<li><a href="http://wiki.oz9aec.net/index.php/Gstreamer_cheat_sheet">GStreamer Cheat Sheet</a><br />Une <u><b>excellente </b></u>ressource à propos de GStreamer incluant de nombreux exemples (capture webcam, network stream, generator, etc)</li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-41942479927489202502016-08-12T14:52:00.000+02:002016-08-12T14:52:00.771+02:00Python Logging & Logger - CE QU'IL NE FAUT PAS RATERPetit détour sur les méthodes de logging Python et une erreur assez répandue (je pense).<br />
<br />
Dans le <a href="http://victorlin.me/posts/2012/08/26/good-logging-practice-in-python">blog victorlin</a>, j'ai trouvé l'exemple suivant à propos du logging, exemple qui recèle une erreur dans la façon d'utiliser le logger :<br />
<br />
<pre class="escaped">import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('Start reading database')
# read database here
records = {'john': 55, 'tom': 66}
logger.debug('Records: %s', records)
logger.info('Updating records ...')
# update records here
logger.info('Finish updating records')</pre>
<br />
<b><span style="font-size: large;">Il y a comme un bug!</span></b> <br />
Si ce code est parfaitement fonctionnel, il y a quelque-chose qui me choque.<br />
<ol>
<li>Il faut créer un "logger" pour pouvoir logger</li>
<li>Ou passer le logger d'objet en objet si on ne veut pas en créer à tour de bras.</li>
</ol>
Si vous avez une grosse application, vous allez vous retrouver avec des logger dans tous les coins (classe, fichier, etc) pour enregistrer des messages... alors que tout ce qui vous intéresse c'est faire du logging d'information (info ou degug) pour les utiliser quand cela sera utile.<br />
<br />
<b><span style="font-size: large;">Découpler logging et logger</span></b><br />
Le plus approprié, il me semble, est <b>de faire du logging agnostique</b>, sans se préoccuper de la question "si cela intéresse un logger ou non"! En gros, découpler le logger et les opérations de logging dans le code.<br />
Cela se fait très simplement en écrivant les traces directement sur "logging".<br />
<br />
<pre class="pre">import logging
logging.debug(' %r _fire_select(): %r ' % (self, selection) )
logging.debug('%r _fire_cancel()' % self )
</pre>
<span style="font-size: large;">Utiliser un logger pour garder une trace</span><br />
Ensuite, au besoin, il suffit de créer un logger pour garder une trace des messages qui passent comme ceci:<br />
<br />
<pre class="escaped">logger = logging.getLogger()
handler = logging.StreamHandler() # Logging vers console
formatter = logging.Formatter(
'%(asctime)s [%(levelname)s] -> %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO) # ou DEBUG </pre>
<br />
Et toutes les opérations loggin.info, logging.debug, etc tomberons dans logger :-)<br />
Cela va singulièrement simplifier la codage des opérations de logging dans vis classes :-)Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com1tag:blogger.com,1999:blog-5750783121871152575.post-16738891565514179722016-08-12T09:52:00.001+02:002016-08-12T09:52:16.977+02:00PythonMegaWidget (Pmw) - Ressources utilesVoici une liste de ressources collectées durant mes recherches et apprentissage sur TkInter et PythonMegaWidget.<br />Cette liste est destinée à être régulièrement agrémentée. <br />
<ul>
<li><a href="http://pmw.sourceforge.net/doc/howtobuild.html">Comment construire des Pmw MegaWidget</a> (pmw.sourceforge.net, anglais)<br /><i>Détaille et commente la création d'un MegaWidget. Incontournable dès que l'on veut spécialiser un composant.</i></li>
<li><a href="http://www.mypythonadventure.com/2014/03/18/a-quest-begins/">Origine de la MultiListBox, une sorte de TableView</a> (mypythonadventure.com, anglais)</li>
<li><a href="http://stackoverflow.com/questions/11047803/creating-a-table-look-a-like-tkinter">SimpleTable </a>(stackoverflow.com, anglais)<br /><i>Créer une table avec des libellés et un Grid geometry manager. Une approche simple qui peut se révéler utile.</i></li>
<li><a href="http://stackoverflow.com/questions/2922295/calculating-the-pixel-size-of-a-string-with-python">Calculating the pixel size of a string with Python</a> (stackoverflow.com, anglais)<br /><i>Ressource très intéressante pour estimer la hauteur d'un texte dans un Widget</i></li>
<li><a href="http://stackoverflow.com/questions/15705745/how-to-fit-tkinter-listbox-to-contents">Listbox.Autowidth</a> (http://stackoverflow.com, anglais)<br /><i>Permet d'évaluer la largeur en Pixel des entrées d'une Listbox et d'ajuster la largeur du composant en conséquence. Font et taille de texte. <b>Excellente ressource!</b></i></li>
<li>x</li>
<li><a href="https://github.com/pythonadventurer/DataQ/blob/master/DataTools.py">DataQ/DataTools.py</a> (github.com/pythonadventurer, anglais)<br /><i>Un ensemble d'outils pour ouvrir et manipuler les données d'un fichier csv</i></li>
<li>x</li>
<li><a href="http://effbot.org/tkinterbook/tkinter-dialog-windows.htm">Creating a simple Dialog</a> (effbot.org, anglais)<br /><i>Quelques lignes de code... mais également l'utilité de destroy() et root.wait_window().<br /><span style="color: #38761d;"><b>Simple et très pertinent</b></span>.</i></li>
<li><a href="http://wiki.tcl.tk/37701">Tk Named Color</a> (wiki.tcl.tk)<br /><i><span style="color: red;"><b>Toutes les couleurs dispo dans Tk (et TkInter). Un Must!.</b></span></i></li>
<li>xxx</li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-65143190493090107562016-08-05T14:38:00.000+02:002016-08-05T14:38:50.294+02:00PyhtonMegaWidget (Pmw) StrictComboBox Dans l'article "<a href="http://domeu.blogspot.be/2016/08/pythonmegawidget-pmw-combobox-restreind.html">PythonMegaWidget (Pmw) ComboBox restreind à une liste de valeur</a>" j'expliquais comment avoir configuré une combobox pour n'accepter qu'une liste finie de valeur.<br />
<br />
Ce hack est maintenant transformé en classe <span style="font-family: "courier new" , "courier" , monospace;">StrictComboBox</span> .<br />
<br />
In the previous article "<a href="http://domeu.blogspot.be/2016/08/pythonmegawidget-pmw-combobox-restreind.html">PythonMegaWidget (Pmw) ComboBox restreind à une liste de valeur</a>" I did explain how to restrict the selected value to a given list of values.<br />
That hack has been converted to the <span style="font-family: "courier new" , "courier" , monospace;">StrictComboBox</span> class.<br />
<br />
<pre class="escaped">class StrictComboBox( Pmw.ComboBox ):
""" Pmw.ComboBox that strictly restrict the selection to the list of items stored in the "items" keyword
Thank to RL_ScrolledText class for their wonderfull example
http://www.reportlab.com/examples/frml/old/rlextra/src/rlextra/graphics/guiedit/guidialogs.py
"""
_items = None # List of combobox items
def __init__( self, *args, **kw ):
# Take a local copy of some property
for a in ['items']:
print( a )
if a in list(kw.keys()):
print( ' --removed')
v=kw[a]
del kw[a]
else:
v=None
setattr(self,a,v)
# add the items to combobox + validator
kw['scrolledlist_items'] = self.items
kw['entryfield_extravalidators'] = { 'strictselect' : (self.strictselect_validate, self.strictselect_stringtovalue) }
kw['entryfield_validate'] = { 'validator' : 'strictselect' }
Pmw.ComboBox.__init__( *(self,)+args, **kw )
w = self._entryfield = self.component('entryfield')
self.initialiseoptions(StrictComboBox)
def destroy(self):
Pmw.ComboBox.destroy( self )
def strictselect_validate(self, avalue):
""" called by ComboBox entry field to validate the keyIn value """
print( 'validate: %s' % avalue )
if avalue in self.items:
return Pmw.OK
elif any( [avalue in v for v in self.items] ):
return Pmw.PARTIAL
else:
return Pmw.ERROR
def strictselect_stringtovalue(self, avalue):
""" Not called since we did not defined min and max values """
return None
</pre>
<br />
Qui s'utilise comme ceci:<br />
And you can use it like that:<br />
<br />
<pre class="escaped"> # StrictComboBox
f = Frame( fbody )
l = Label( f, text="Prefered Parent", anchor=W, width=15 ).pack( side=LEFT, expand=N )
combobox4 = StrictComboBox( f, items=['Dady','Mom','Sister','Grandpa'],
labelpos='wn', listbox_width=24, dropdown=1, # selectioncommand=choseEntry,
entry_state = 'disabled', entry_bg='white', entry_fg='black' )
combobox4.pack( side=LEFT, expand=N )
fields.append( (combobox4, None) ) # the Field and the string variable
f.pack( side=TOP, expand=N, fill=X )</pre>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-9097901862821317632016-08-05T11:10:00.002+02:002016-08-05T11:10:48.979+02:00PythonMegaWidget (Pmw) ComboBox restreind à une liste de valeurBonjour a tous, j'essaye de restreindre la sélection de valeur d'un <span style="font-family: "courier new" , "courier" , monospace;">Pmw.ComboBox </span>aux seules valeurs disponibles dans la liste. Voici comment j'ai utilisé <span style="font-family: "courier new" , "courier" , monospace;">extravalidators</span> pour y arriver.<br />
Code en beta mais fonctionnant correctement<br />
<br />
Hello there, I'm trying to restrict the selected value of a Pmw.Combox to the only possible values in the list. Here how I did use the <span style="font-family: "courier new" , "courier" , monospace;">extravalidators</span><span style="font-family: "courier new" , "courier" , monospace;"></span> to reach that goal.<br />
Roughly beta code but worked fine<br />
<br />
<pre class="escaped">from tkinter import *
import Pmw
root = Tk()
root.option_readfile('optionDB')
...
...
combovalues = ['v1','v2','v3']
f = Frame( root )
l = Label( f, text="Combo", anchor=W, width=15 ).pack( side=LEFT, expand=N )
def strictselect_validate(avalue):
print( 'validate: %s' % avalue )
if avalue in combovalues:
return Pmw.OK
elif any( [avalue in v for v in combovalues] ):
return Pmw.PARTIAL
else:
return Pmw.ERROR
def strictselect_stringtovalue(avalue): # Not used in this case
print( 'stringtovalue: %s' % avalue )
return None
combobox2 = Pmw.ComboBox( f, labelpos='wn', listbox_width=24, dropdown=1,
entry_bg='white', entry_fg='black',
scrolledlist_items=combovalues,
entryfield_extravalidators = { 'strictselect' : (strictselect_validate, strictselect_stringtovalue) },
entryfield_validate = { 'validator' : 'strictselect' } )
combobox2.pack( side=LEFT, expand=N )
fields.append( (combobox2, None) ) # the Field and the string variable
f.pack( side=TOP, expand=N, fill=X )
</pre>
<br />
<br />
<u>Le truc:</u> le Pmw.ComboBox utilise un Pmw.EntryField, il est donc possible d'utiliser les fonctionnalités de Pmw.EntryField<br />
<br />
<u>The Tip</u>: the Pmw.ComboBox use a Pmw.EntryField, it is then possible to use the features of Pmw.EntryField<br />
<br />Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-19535233230407188742016-08-04T11:22:00.001+02:002016-08-04T11:22:20.248+02:00Python: faire un breakpoint en mode interactif pour faire du débogageDans les IDE évolués nous disposons généralement d'une fonctionnalité "Breakpoint" pour arrêter le programme et pouvoir inspecter le contenu des variables locales.<br />
Il est possible de réaliser quelque-chose de similaire en mode console (python interactif) qui fonctionne aussi bien sous Windows que sous Linux. Très utile si l'on se trouve sur un environnement sans facilité.<br />
<br />
Je bosse sur un projet TkInter et j'aurais trouvé intéressant de pouvoir inspecter le contenu d'un événement en mode interactif... bref, sauter dans un débogueur mais "sans débogueur" à disposition.<br />
<br />
J'ai trouvé ce petit bout de code qui fonctionne à merveille et qui lance un python interactif là où j'en ai besoin.<br />
La réponse se trouve dans <span style="font-family: "courier new" , "courier" , monospace;">code.interact()
</span><br />
<pre class="escaped">
>>> import code
>>> def foo():
... a = 10
... code.interact(local=locals())
... return a
...
>>> foo()
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> a
10</pre>
<br />
<ul>
<li>Presser <span style="font-family: "courier new" , "courier" , monospace;">Ctrl+Z</span> pour terminer la session interactive. </li>
<li>Il n'est pas possible de modifier les variables locales (cela n'a pas d'implication sur le code appelant). </li>
<li>Vous pouvez lister inspecter les variables locales en utilisant <span style="font-family: "courier new" , "courier" , monospace;">dir()</span> </li>
</ul>
Voici un autre exemple tel qu'utilisé depuis un code tkInter.<br />
N'oubliez pas <b>de démarrez votre programme avec python.exe</b> et non pythonw.exe pour disposer d'une console ;-) <br />
<br />
<pre class="escaped">import code
...
...
def focus_next_window(event):
""" Move focus to next item, Bind it for <return> """
print( type(event.widget) )
code.interact(local=locals())
event.widget.tk_focusNext().focus()
return("break")</return></pre>
<br />
Souce: <a href="http://stackoverflow.com/questions/13432717/enter-interactive-mode-in-python">http://stackoverflow.com/questions/13432717/enter-interactive-mode-in-python </a>Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-32952014723833974582016-07-26T17:40:00.003+02:002016-07-28T17:15:31.127+02:00Utiliser Curses avec Python sous Windows<b><span style="font-size: large;">Curse pour créer une interface console</span></b> <br />
J'ai déjà touché un peu à Curse avec python sous Linux.<br />
Je trouvais cette bibliothèque d'interface rudimentaire mais suffisante pour réaliser des applications en mode console (ce que nous avons déjà avec de vielle applications clipper qu'il faudra un jour ré-écrire).<br />
Le Hic c'est qu'il <u>n'existait pas</u> de portage Python's curses sous Windows... jusqu'à assez récemment.<br />
<br />
Donc, curses sous Python était uniquement cantonné au machine Linux... mais maintenant accessible sous Windows<br />
<br />
<span style="font-size: large;"><b>Des binaires non-officiel pour Python sous Windows</b></span><br />
En grattant une nouvelle fois sur le Net, j'ai trouvé<br />
<ul>
<li><a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/">Unofficial Windows Binaries for Python Extension Packages</a></li>
</ul>
Où il propose justement des packages curses pour Windows.<br />
<br />
<b><a href="http://bugs.python.org/issue2889">Curses</a></b>, an extension based on the <a href="http://pdcurses.sourceforge.net/">PDCurses</a> library.<br />
Unicode characters are not supported.
<br />
<ul>
<li><a href="https://draft.blogger.com/null" title="[64 KB] [Jan 04, 2015]">curses-2.2-cp27-none-win32.whl</a></li>
<li><a href="https://draft.blogger.com/null" title="[79 KB] [Jan 04, 2015]">curses-2.2-cp27-none-win_amd64.whl</a></li>
<li><a href="https://draft.blogger.com/null" title="[67 KB] [Jan 04, 2015]">curses-2.2-cp34-none-win32.whl</a></li>
<li><a href="https://draft.blogger.com/null" title="[81 KB] [Jan 04, 2015]">curses-2.2-cp34-none-win_amd64.whl</a></li>
<li><a href="https://draft.blogger.com/null" title="[54 KB] [Sep 11, 2015]">curses-2.2-cp35-none-win32.whl</a></li>
<li><a href="https://draft.blogger.com/null" title="[67 KB] [Sep 11, 2015]">curses-2.2-cp35-none-win_amd64.whl</a></li>
<li><a href="https://draft.blogger.com/null" title="[141 KB] [Jun 02, 2012]">curses-2.2-source.zip</a></li>
</ul>
Comme j'utilise Python 3.4 sous Windows 7, j'ai opté pour le téléchargement du fichier "<a href="https://draft.blogger.com/null" title="[67 KB] [Jan 04, 2015]">curses-2.2-cp34-none-win32.whl" (cp34 signifie CPython 3.4... donc le compilateur officiel de la fondation).</a><br />
<br />
<b>whl </b>est un fichier wheel (<a href="http://pythonwheels.com/">pythonwheels.com</a>) est le nouveau standard de distribution des bibliothèque python qui remplacera à terme les fichiers .egg<br />
<br />
Vous pouvez installer un fichier whl avec votre utilitaire pip.<br />
Dans mon cas, j'ai utilisé la signe de commande suivante sous Windows:<br />
<pre class="escaped">c:\Users\Stock\Downloads>pip3 install curses-2.2-cp34-none-win32.whl
Processing c:\users\stock\downloads\curses-2.2-cp34-none-win32.whl
Installing collected packages: curses
Successfully installed curses-2.2</pre>
<br />
Et j'ai pu utiliser du code curses suivant sous Windows<br />
<br />
<pre class="escaped">from curses import wrapper
def main(stdscr):
# Clear screen
stdscr.clear()
for i in range(0, 10):
v = i-10
stdscr.addstr(i, 0, '10 divided by {} is {}'.format(v, 10/v))
stdscr.refresh()
stdscr.getkey()
wrapper(main)</pre>
<br />
<br />
Une chouette avancée pour le portage des applications d'une plateforme à l'autre... à voir si cela tient vraiment ses promesses.<br />
<br />
<b><span style="font-size: large;">Basé sur PDCurses</span></b><br />
Le bibliothèque curse installée (celle mentionnée ci-avant) est basé sur PDCurses.<br />
<a href="http://www.projectpluto.com/win32a.htm">http://www.projectpluto.com/win32a.htm</a><br />
<br />
<br />
<b><span style="font-size: large;">Support des accentués sous Windows</span></b><br />
Je me suis littéralement cassé les dents dès l'impression du premier texte contenant des accentués.<br />
Voyez ce billet sur IndexError (<a href="http://indexerror.net/4170/python-3-4-curses-sous-windows-7-erreur-dencodage">http://indexerror.net/4170/python-3-4-curses-sous-windows-7-erreur-dencodage</a>).<br />
L'utilisation de différents code pages dans le système d'exploitation (voir le billet) ne simplifie rien... et même en passant ma console en cp1252 (comme supporté par curse puisque la doc mentionne qu'il utilise du local.preferredencoding() - soit cp1252 - pour l'encodage des chaine unicode)... curse détruit toujours l'affichage de mes accentués.<br />
<br />
<br />
<br />
Au détour de différentes lectures (a confirmer), j'ai appris que cette bibliothèque curses utilise PDCurses s'appuie elle-même sur la SDL. La SDL qui, elle, n'intègre le support Unicode que depuis peu. C'est peut être normal que cela cafouille un peu.... et c'est franchement regrettable.<br />
<br />Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-8091292924404630332016-07-10T16:32:00.002+02:002016-07-10T16:32:18.890+02:00Faire une mise-à-jour de Linux Mint en ligne de commandeBonjour à tous,<br />
<br />
J'ai trouvé un chouette article (en Français) pour faire une mise-à-jour (distribution upgrade) d'un Linux Mint.<br />
<br />
<a href="http://www.linuxtricks.fr/wiki/mettre-a-niveau-linux-mint-vers-une-nouvelle-version">http://www.linuxtricks.fr/wiki/mettre-a-niveau-linux-mint-vers-une-nouvelle-version</a><br />
<br />
Très utile<br />
<ul>
<li>http://www.linuxtricks.fr/wiki/mettre-a-niveau-linux-mint-vers-une-nouvelle-version</li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-9978912104067685142016-06-08T10:26:00.001+02:002016-06-08T10:43:04.798+02:00Monter un lecteur reseau sous Linux - Samba shareSi vous cherchez à monter une "lecteur réseau" sous Linux (Linux Mint dans mon cas, donc Ubuntu), il va falloir redescendre dans les montage Samba CIFS.<br />
Mon dieux que cela faisait longtemps.... terriblement longtemps<br />
<br />
Voici une référence d'article qui vous aidera indéniablement:<br />
<ul>
<li><a href="https://wiki.samba.org/index.php/Mounting_samba_shares_from_a_unix_client">Mounting samba shares from a unix client</a> sur samba.org</li>
</ul>
Pour le moment, j'en suis à faire un montage avec la commande mount avant de le rendre permanent dans /etc/fstab<br />
<br />
Pour commencer, il faut créer un point de montage, dans /mnt puisqu'il s'agit d'un lecteur présent en permanence (pas comme une carte sd qui, elle, doit être montée dans /media .<br />
<br />
<pre class="escaped">sudo mkdir /mnt/netstock</pre>
<br />
En ligne de commande, cela ressemble à ceci<br />
<br />
<pre class="escaped">sudo mount -t cifs -o user=share_username,uid=local_user_owning_files //192.168.1.2xx/netstock /mnt/netstock</pre>
<br />
Une fois la commande saisie, il vous sera demandé le mot de passe du lecteur réseau (celui correspondant à user=) pour faire le montage<br />
<br />
<b>Les paramètres:</b><br />
<ul>
<li>share_username : c'est le nom d'utilisateur windows a utiliser pour connecter le lecteur réseau</li>
<li>local_user_owning_files : si ce paramètre est omis, les fichiers du share seront vu comme appartenant à root. Perso, je préfère qu'il soient détenu par l'utilisateur courant (utilisez votre login Linux pour ce paramètre)</li>
</ul>
Selon la doc, il est possible d'ajouter un paramètre "password=" mais je n'ai encore aboutit a rien avec celui-ci... la raison voudrais qu'il ne soit pas possible de saisir un mot de passe en clair dans un script ;-)<br />
<br />
<b><span style="font-size: large;">FSTAB - montage automatiquement</span></b><br />
il est aussi possible d'ajouter le montage dans le fichier nano /etc/fstab<br />
Et pour une raison qu'il m'échappe, la le paramètre password fonctionne comme un charme!!<br />
<br />
<pre class="escaped"># NetStock share
//192.168.1.xxx/netstock /mnt/netstock cifs user=share_username,_netdev,uid=local_user_owning_files,password=XXXXX 0 0</pre>
<br />
Le paramètre <span style="font-family: "Courier New",Courier,monospace;">_netdev</span> informe fstab qu'il faut attendre que le périphérique réseau soit disponible avant de procéder au montage.<br />
<br />
Pour recharger le fichier fstab, il suffit de faire un <span style="font-family: "Courier New",Courier,monospace;">mount -a</span> Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-88753653192555065322016-05-16T22:31:00.000+02:002016-05-16T22:31:07.252+02:00Thunderbird - Modifier l'entête et pied de page de façon définitiveDans Thunderbird, vous avez la possibilité de modifier l'information imprimée dans l'entête et le pied de page lors de l'impression de vos messages.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXe9Xbj73qoi1kuvgdcpAqzdTDR3-Hle9MJnRLVt552BocmGD3hIDGjD-uwUy4fllCd9fkOE5GpobYUWl_EWacctRIQY4Z1WTyOpyyAmfunJlt13Mqcd464XZomX6zrDCCD76vdqOLVk6D/s1600/S%25C3%25A9lection_190.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXe9Xbj73qoi1kuvgdcpAqzdTDR3-Hle9MJnRLVt552BocmGD3hIDGjD-uwUy4fllCd9fkOE5GpobYUWl_EWacctRIQY4Z1WTyOpyyAmfunJlt13Mqcd464XZomX6zrDCCD76vdqOLVk6D/s400/S%25C3%25A9lection_190.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Options d'impression de Thunderbird</td></tr>
</tbody></table>
C'est cool... mais c'est aussi ce qui, ce soir, énerve plus particulièrement Françoise (Thunderbird sous Linux Mint).<br />
<br />
Si, comme Françoise, <u>vous ne désirez pas voir ces informations imprimés</u> sur avec vos mails... vous aurez la mauvaise surprise de devoir les modifier pour chaque nouvelle impression... heure après heure, jour après jour.<br />
Cela en énerverais plus d'un!<br />
<br />
Voici la marche à suivre pour modifier définitivement ce paramètrage:<br />
<br />
1) Ouvrir les préférences de Thunderbird<br />
2) Vous rendre dans les paramètres "Avancés"<br />
3) Sélectionner le voler "Général"<br />
4) Cliquer sur l "éditeur de configuration"<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgv3SlWuFH6NNe9lN7KW7Khme6Ls8fOJuPP6Gcy5jMKx9EZhvzM8bz9kY78ntgqreu22LVfWKdqOv7bk5jSolfyxnLhwNnsVXE51b3xvKDOG0ohBr7WVCmxjM_buzNkE6zaLq2Y-ak05Hc/s1600/S%25C3%25A9lection_191.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="443" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgv3SlWuFH6NNe9lN7KW7Khme6Ls8fOJuPP6Gcy5jMKx9EZhvzM8bz9kY78ntgqreu22LVfWKdqOv7bk5jSolfyxnLhwNnsVXE51b3xvKDOG0ohBr7WVCmxjM_buzNkE6zaLq2Y-ak05Hc/s640/S%25C3%25A9lection_191.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ouvrir l'éditeur de configuration</td></tr>
</tbody></table>
Faites une recherche sur les paramètres relatif à l'impression.<br />Saisissez "print" dans la zone de recherche.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3lSgN4ny2YdgBJKOFYwr0JoP7gRJhB5uefc1T-Dh0owiJzP6RlXbQ_B32U1qwsOIF8FpCFmoSVjasTr9oFg_vde8IZ83f12E0XGpnvXziUGYUrKDC_kYV0vHjjMDyJBP-Gyq3HV_B1Jv0/s1600/S%25C3%25A9lection_192.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="441" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3lSgN4ny2YdgBJKOFYwr0JoP7gRJhB5uefc1T-Dh0owiJzP6RlXbQ_B32U1qwsOIF8FpCFmoSVjasTr9oFg_vde8IZ83f12E0XGpnvXziUGYUrKDC_kYV0vHjjMDyJBP-Gyq3HV_B1Jv0/s640/S%25C3%25A9lection_192.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Editer les paramètres d'entête et de pied de page</td></tr>
</tbody></table>
Cherchez ensuite "<span style="font-family: "Courier New",Courier,monospace;">print.print_footerleft</span>" et compagnie.<br />
Il ne vous reste plus qu'a modifier les différents paramètres (pour ce qui nous concerne, nous avons effacé le contenu pour ne plus avoir de pied de page et d'entête). <br />
<br />
<br />
<br />
<br />
x<br />
x<br />
<br />Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-59432045817572121942016-03-31T14:56:00.001+02:002016-03-31T14:56:52.024+02:00CoreUtils: si la commande LS vous manque trop sous Windows...Je passe souvent d'une machine Linux à Windows et vice-versa.<br />
Le plus dure, c'est de se passer des commandes ls, cp, mv et nano sous Windows... Arf<br />
<br />
Il existe bien CygWin mais ce dernier n'a pas la meilleure réputation (surtout pour son côté usine à gaz). Voici donc une alternative.<br />
<br />
<b><span style="font-size: large;">CoreUtils</span></b><br />
Je vous propose de jeter un coup d'oeil sur le projet "<a href="http://www.gnu.org/software/coreutils/coreutils.html">CoreUtils : GNU Core Utils</a>" qui permet de retrouver cet outils et de nombreux autres sur votre machine Windows.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtlyVqYmUcc-fJIHmzp67aEGCmQjlGFZ2luNWwKk_-hj-8SsP8auEg3vSPEYt-G6Q5TDhY0dfuFntZjMgrWJ1ww9nCpFjSHQmlydJzok8d_vwPH1R7hDF_28ULlqi6UpSjGgW4rohWcIKd/s1600/GNU-CoreUtils.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="87" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtlyVqYmUcc-fJIHmzp67aEGCmQjlGFZ2luNWwKk_-hj-8SsP8auEg3vSPEYt-G6Q5TDhY0dfuFntZjMgrWJ1ww9nCpFjSHQmlydJzok8d_vwPH1R7hDF_28ULlqi6UpSjGgW4rohWcIKd/s400/GNU-CoreUtils.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.gnu.org/software/coreutils/coreutils.html">CoreUtils : GNU Core Utils</a></td></tr>
</tbody></table>
CoreUtils propose un programme d'installation sous Windows :-) <br />
Il vous suffira d'ajouter le répertoire "C:\Program Files (x86)\GnuWin32\bin" dans la variable PATH de votre système Windows.<br />CoreUtils dispose également d'une excellente documentation (176 pages) au format pdf et chm accessible via le menu Windows.<br />
<br />
<b><span style="font-size: large;">Nano</span></b><br />
Nano est un éditeur en mode console. Barbare de prime abord, c'est un outil que l'on manipule régulièrement dès que l'on utilise une connexion SSH, soit un Raspberry Pi où il est incontournable.<br />
Une fois habitué, il est très commode d'usage et surtout accessible en ligne de commande.<br />
Nano est téléchargeable depuis <a href="http://www.nano-editor.org/">http://www.nano-editor.org/</a><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXPsPYAITvrBZr6rcvB9n03GfKJ8bT9GP9sTcDfg4JP-Ar8B5OFSyEgbVbozJfLf8Cs8iULf2TOyz6OYTtHQTrOBNF57n4EoeOKySzwNG1Uqx0lhcslbv-eu_2A5o87A_Uw6wVfpbbXXgU/s1600/colorsyntax.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXPsPYAITvrBZr6rcvB9n03GfKJ8bT9GP9sTcDfg4JP-Ar8B5OFSyEgbVbozJfLf8Cs8iULf2TOyz6OYTtHQTrOBNF57n4EoeOKySzwNG1Uqx0lhcslbv-eu_2A5o87A_Uw6wVfpbbXXgU/s1600/colorsyntax.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Editeur Nano - <a href="http://www.nano-editor.org/">www.nano-editor.org</a></td></tr>
</tbody></table>
Pour installer nano:<br />
<ul>
<li>Placez <b>nano.exe</b> et <b>les dll de nano</b> dans<span style="font-family: "Courier New",Courier,monospace;"> c:\windows\sysWOW64\</span> (pour un système Win7)</li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-68103627079064825572016-02-20T12:10:00.001+01:002016-02-20T12:12:16.628+01:00Python : Lecture de carte eID Belge avec Python<span style="font-size: x-small;"><i>Bien que cet article concerne la lecture de eID Belge sur Raspberry-Pi, la bibliothèque et le code doivent pouvoir être utilisé avec d'autres systèmes.</i></span><br />
<span style="font-size: x-small;"><i>Bonne lecture</i></span><br />
<span style="font-size: x-small;"><i>Dominique</i></span><br />
<i> </i> <br />
En Belgique, les carte d'identités sont équipées de puce Smart Card. Cela permet d'emporter:<br />
<ul>
<li>Un certificat CitizenBE utilisé pour la signature et authentification numérique du citoyen (protégé par une mot de passe).</li>
<li>D'autres informations librement accessible comme le nom, prénom, ....</li>
</ul>
Toutes ces informations étant décrites dans des spécifications
ouvertes publiées sur le Net par l'eGouvernement Belge il y a une
décennie.<br />
<br />
Des spécifications ouvertes... c'est génial,
du coup, nous avons une connaissance qui s'est lancé dans le projet fou de
faire lire des cartes d'identités beid (carte d'identité Belge) par un
Raspberry-Pi sous Jessie et en Python 3 s'il vous plaît! C'est trop de
la balle. <br />
<br />
<pre class="escaped">from beid.beid import scan_readers, read_infos, triggered_decorator
from pprint import pprint
from time import sleep
# retrieve a list of available readers
r = scan_readers()[0]
# declare a function that will be executed automatically when a card is removed/insterted
# funcion arguments should be :
# - action : which will be "inserted" or "removed" when the function will be called
# - card : which will be the card if inserted
# - reader : which will hold the name of the reader to use
@triggered_decorator
def basic_read(action, card, reader=r.name):
if action=="inserted":
i = read_infos(card)
pprint(i)
sleep(5)
infos = read_infos(r, read_photo=True)
with open("photo.jpg", "wb") as f:
f.write(infos['photo'])</pre>
<br />
<b>Vous trouverez <a href="https://github.com/Lapin-Blanc/pythonbeid">pythonbeid sur le GitHub de Lapin Blanc</a></b>.<br />
<br />
Un grand merci pour ce partage avec la communauté.<br />
Dominique Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-52399749690829233732015-12-20T12:30:00.000+01:002015-12-20T12:30:16.665+01:00Python: PrettyTable pour afficher une table en mode textePetit outil à se garder sous le coude pour se simplifier l'écriture d'outil en mode texte (dans la console).<br />
Il n'est pas toujours utile de se prendre la tête...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhluu_G_CgmoB6bNsmm5Kqm2ilQMmruWbqyF_OZG-tQr0eFqIGFfEnAC-z2dNDw6mJuZtd9FzX33F5vqXokLNigJsc9siuilMWrD_RljyBIfWfT_dNnEX8_5DeTeRt2oTCl_-G7s4n2Cuvj/s1600/PrettyTable.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhluu_G_CgmoB6bNsmm5Kqm2ilQMmruWbqyF_OZG-tQr0eFqIGFfEnAC-z2dNDw6mJuZtd9FzX33F5vqXokLNigJsc9siuilMWrD_RljyBIfWfT_dNnEX8_5DeTeRt2oTCl_-G7s4n2Cuvj/s400/PrettyTable.jpg" width="400" /></a></div>
<br />
<br />
<pre class="escaped">from prettytable import PrettyTable
x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.align["City name"] = "l" # Left align city names
x.padding_width = 1 # One space between column edges and contents (default)
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print x</pre>
<br />
<b><span style="font-size: large;">Ressources</span></b><br />
<ul>
<li><a href="https://pypi.python.org/pypi/PrettyTable">PrettyTable sur Python Package Index</a> </li>
<li><a href="https://code.google.com/p/prettytable/wiki/Tutorial">PrettyTable </a>(sur </li>
<li><a href="http://www.luke.maurits.id.au/software/prettytable/">PrettyTable sur la page de Luke Maurits</a> (page de l'auteur) </li>
<li>Google Code)</li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-20043348528140340192015-12-14T14:05:00.001+01:002015-12-14T14:06:12.185+01:00RpnCalc: Install failure + Doc failure = projet d'exception qui tombe dans l'oubli<u>Pré-préambule:</u> <br />
Coup de gueule! Il faut développer les idées jusqu'au bout! Installation (ou doc d'installation) comprise!<br />
<br />
<b><span style="font-size: large;">Préambule</span></b><br />
Une calculatrice RPN en Python, est-ce possible?<br />
<br />
J'ai une calculatrice HP48 que j'utilise énormément, et de façon plus ou moins avancé, au jour le jour. Ce qui m'ennuie, c'est de passer mon temps à la sortie et la rentrer dans mon tiroir (je manque cruellement de place sur mon bureau).<br />
<br />
Du coup, je me suis dit: mais pourquoi ne pas garder une calculatrice sur ton bureau Linux Mint? J'ai deux moniteurs... ce serait certainement très pratique.<br />
<br />
Je fouille donc sur les dépôts et trouve un outil offrant des fonctionnalités plutôt avancé sous la forme de <a href="http://calcrpnpy.sourceforge.net/">CalcRpnPy</a> et d'un dépôt Python <a href="https://pypi.python.org/pypi/rpncalc">rpncalc 2.7</a>.<br />
<br />
<a href="http://calcrpnpy.sourceforge.net/">La doc est détaillée</a>, cela fonctionne depuis un interpréteur Python. bref, de la balle pour qui préfère utiliser un clavier pour des questions de performance humaine!<br />
Faut dire que je suis addict à Linux Mint (donc de la chaîne de parenté Mint - Ubuntu - Debian). <br />
<br />
Mon premier reflexe est: Génial, je vais pouvoir l'installer avec un <span style="font-family: "courier new" , "courier" , monospace;">pip install</span> ;-)<br />
<br />
<b><span style="font-size: large;">Sauf que...</span></b><br />
rpncalc s'appuie sur clnum (CLN ou encore Class Library for Number) et que l'installation part totalement en couille.<br />
L'installation de clnum en python 2.7 (<span style="font-family: "courier new" , "courier" , monospace;">pip install clnum</span>) inclus un problème d'encoding ASCII!!!<br />
<br />
Et en python3, je me retrouve avec une belle erreur de compilation GCC.<br />
<br />
En fouillant, j'arrive jusqu'au support et night-build des paquet Debian. <br />
<br />
<b><span style="font-size: large;">Conclusion</span></b><br />
Je voulais gagner du temps avec un outil sympa et je me retrouve à zoner dans de la doc, des problème d'install & compilation et même des paquets Debian!<br />
<br />
Comme je suis à la bourre, je vais ressortir ma calculette Hp48 et rpncalc à toutes les chances de tomber dans l'oubli. <br />
<br />
Vous ne trouvez pas cela dommage? Il manque presque rien pour l'exploiter... mais ce "presque rien" est le frein final qui va stopper net la découverte du projet rpncalc.<br />
<br />
<b><span style="font-size: large;">Moralité</span></b><br />
Ne vous arrêtez pas à un mètre de l'arrivé.<br />
C'est trop bête de ne pas faire profiter les autres de votre victoire!<br />
<br />Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com1tag:blogger.com,1999:blog-5750783121871152575.post-53512771815069558272015-12-14T12:17:00.000+01:002015-12-14T12:17:47.003+01:00fwbackups - le programme de backup equivalent à "Cobian Backup" pour Linux Cela fait maintenant des années que j'utilise Cobian Backups sous Windows (Windows, c'est pour travail).<br />
<br />
Mais je suis plutôt addict Linux à la maison. Cela faisait longtemps que je cherchais un système de backup plutôt proche des fonctionnalités de "Cobian Backup", simple et efficace.<br />
Je l'ai trouvé, il s'appelle fwbackups et fonctionne en python (léger et très largement supporté par les plateforme Linux).<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh2PyItNDx2QUgadh_mfNq7FN5nYogZkOSdnAfwVsOcYdzIdUsyuKydVW2ogaRs-U8g_OZyz20bpChOQF9sRxc40p5JKj3YF_sEJIxGKAFp3d6sjITPVLngeSPJUnbPBUYSMhJKnIdSa4c/s1600/S%25C3%25A9lection_002.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" height="341" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh2PyItNDx2QUgadh_mfNq7FN5nYogZkOSdnAfwVsOcYdzIdUsyuKydVW2ogaRs-U8g_OZyz20bpChOQF9sRxc40p5JKj3YF_sEJIxGKAFp3d6sjITPVLngeSPJUnbPBUYSMhJKnIdSa4c/s400/S%25C3%25A9lection_002.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.diffingo.com/oss/fwbackups">fwbackups de Diffingo</a></td></tr>
</tbody></table>
<br />
Utilisée depuis plusieurs mois maintenant, je me prépare à en faire le déploiement. Pourquoi ne pas faire la publicité d'une bonne solution.<br />
<br />
<br />
Pour démarrer le programme de backup, il suffit de saisir la commande suivante sur une ligne de commande:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">fwbackups</span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh2PyItNDx2QUgadh_mfNq7FN5nYogZkOSdnAfwVsOcYdzIdUsyuKydVW2ogaRs-U8g_OZyz20bpChOQF9sRxc40p5JKj3YF_sEJIxGKAFp3d6sjITPVLngeSPJUnbPBUYSMhJKnIdSa4c/s1600/S%25C3%25A9lection_002.jpg" imageanchor="1"></a> <br />
Téléchargement:<br />
<ul>
<li><a href="http://www.diffingo.com/oss/fwbackups/download">téléchargement depuis la page Diffingo</a> </li>
</ul>
Installation:<br />
<ul>
<li><a href="http://www.diffingo.com/oss/fwbackups/documentation/installation">Instruction d'installation depuis la page de Diffingo</a></li>
</ul>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh2PyItNDx2QUgadh_mfNq7FN5nYogZkOSdnAfwVsOcYdzIdUsyuKydVW2ogaRs-U8g_OZyz20bpChOQF9sRxc40p5JKj3YF_sEJIxGKAFp3d6sjITPVLngeSPJUnbPBUYSMhJKnIdSa4c/s1600/S%25C3%25A9lection_002.jpg" imageanchor="1"></a> <br />
<u>Note:</u> <br />
Par le passé, j'avais trouvé "<a href="http://www.areca-backup.org/">Areca Backup</a>" vraiment génial mais ce dernier nécessitait l'installation de Java... pas trop a mon goût pour être tout à fait honnête. Entre Java et Python mon coeur balance franchement vers Python.<br />
Cela ne signifie pas qu'une solution Java ne soit pas une bonne solution, loin de là, c'est juste une question de préférence personnel.<br />
<br />
<br />
Voir aussi:<br />
<ul>
<li><a href="http://www.diffingo.com/oss/fwbackups">fwbackups</a> (<i>Diffingo Solution, anglais</i>)</li>
<li><a href="http://www.cyberciti.biz/open-source/awesome-backup-software-for-linux-unix-osx-windows-systems/">5 awesome Open Source Backup Software for Linux system</a> (<i>nixCraft, anglais</i>)</li>
<li><a href="http://www.areca-backup.org/">Areca backup</a> (<i>areca-backup.org, anglais</i>) </li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-27873375763041905842015-11-11T16:38:00.002+01:002015-11-11T17:43:39.829+01:00Electrabel - Une démarche spontanée par e-mail potentiellement dangereuse pour l'identité du clientBonjour à tous et toutes,<br />
<br />
Un blog n'est généralement pas le meilleur endroit pour se laisser aller à des réactions sur le vif... mais ce jour je suis choqué car j'ai vu des informations sensible être communiqué par e-mail (certes qui m'est adressée) par la société Electrabel elle-même.<br />
<br />
Nous le savons tous, malgré de nombreux efforts de la part des prestataires, les boîtes e-mails sont régulièrement l'objet de tentative de piratage... ainsi il est préférable de ne pas y laisser trainer d'information trop personnelle. Mon beau-père s'est déjà fait avoir une fois où deux (je l'ai su car j'ai reçu des é-mails bizarres de sa part)... nous avons tous connu cela... cela pourrait aussi nous arriver.<br />
<br />
Perso, je ne laisse pas d'information sensible, il serait bien que mes prestataires de service --dont Electrabel fait l'objet-- ne se permette pas d'en publier à ma place sur mon propre e-mail!<br />
<br />
La quantité d'information que j'y ai trouvé dans deux e-mails est suffisant pour élaborer une tentative d'usurpation d'identité (j'y reviens plus loin). Eventuellement se faire envoyer une copie de facture (voire même savoir où l'on peut la récuperer, l'info est dans l'émail!) pour ensuite l'utiliser afin de s'ouvrir l'accès à d'autres services chez d'autres prestataires et facturé chez vous (bien entendu, sinon ce ne serait pas marrant).<br />
PS: Il n'est pas rare qu'il soit demandé une copie de facture d'électricité et/ou de gaz pour prouver votre identité et le lieu de résidence. Ce qui rend encore plus grave la récente démarche e-mail opéré par Electrabel.<br />
<br />
Heureusement il n'y a ni mon numero national, ni ma date de naissance (ouf!)... sinon tout le reste se trouve dans deux e-mail envoyé en moins de 30 jours.<br />
<br />
<b><span style="font-size: large;">L'adresse pub</span></b><br />
Il faut savoir que nous avons plusieurs adresses e-mail... dont une qui se termine par ".pub@gmail.com".<br />
Cette adresse est destinée aux sites avec un faible niveau de confiance ou à toute société se montrant un peu entreprenante en vue d'obtenir une adresse e-mail.<br />
Inutile de dire que cette boite est remplie de spam et messages non désirés.<br />
Seul les prestataires de confiance (n'envoyant pas d'émail non sollicité) reçoivent notre vraie adresse e-mail au terme d'une période de validation relativement longue.<br />
<br />
Electrabel dispose de notre adresse ".pub@gmail.com". Electrabel était encore en période de validation et que l'email à été communiquée suite à démarche de type "commerciale". Ont ne sais jamais avec qui l'adresse pourrait être partagée et ce qu'il pourraient en faire. Cela doit remonter à un temps certains... nous ne nous en souvenions plus.<br />
<br />
<b><span style="font-size: large;">Un premier email d'Electrabel</span></b><br />
Il y a un moment, nous avons reçu un e-mail réputé d'Electrabel mentionnant "Important - vos prochaines factures via e-mail". Cet e-mail nous demande de nous connecter sur le compte en ligne pour confirmer nos informations en vue de facturation électronique.<br />
Ce mail contient un numéro de client et un code d'activation.<br />
N'AYANT:<br />
1) RIEN DEMANDé auprès d'Electrabel et <br />
2) le lien proposé RENVOYANT VERS LE SITE P5TRC.EMV2.COM <br />
<br />
Notre premier réflexe est de penser à une tentative d’hameçonnage (phishing) en vue d'une collecte d'information pour usurpation d'identité.<br />
Il ne s'agissait visiblement pas "POUR SURE" d'Electrabel... le mail est casé dans les SPAM et déclaré comme tel. En cas de SPAM, la première chose à faire est "de ne rien faire" et ne surtout pas signaler notre intérêt/existence au spammeur.<br />
<br />
Il y a au moins 1 belge sur 2 raccordé chez Electrabel. Une tentative de Physhing/Hameçonnage à donc toutes les chance d'aboutir avec un certain succès.<br />
<br />
<b><span style="font-size: large;">Un deuxième E-Mail d'Electrabel</span></b><br />
Ce jour, nous recevons un deuxième e-mail "Votre facture intermédiaire du 10 Novembre 2015".<br />
Les liens pointes toujours vers P5TRC.EMV2.COM (donc toujours pas vers Electrabel.be!!! ni de connexion sécurisé via https).<br />
Ni une, ni deux nous déclarons egalement ce nouvel émail comme SPAM!<br />
Par contre nous restons interpellé par la présence de l'adresse de notre demeure dans l'émail.<br />
<br />
Cette fois, nous trouvons:<br />
* Notre numéro client<br />
* Le montant d'une facture<br />
* Une date d émission de facture<br />
* notre adresse complète (reste plus qu'a faire appel à un annuaire pour connaitre le nom correspondant à l'adresse ou être perspicace avec l'adresse e-mail nom.prenom@blabla.com!)<br />
<br />
Après vérification, nous avons constaté que toutes les informations communiquées sont "correctes" et communiquées par l'intermédiaire d'un média très discutable.<br />
Les liens ne redirige pas vers le nom de domaine d'Electrabel (cela pourrait aussi bien être un site Chinois, vous n'imaginez pas le nombre d'email de ce genre reçu chaque jour) et les liens ne sont toujours pas sous HTTPS.<br />
Il n'y a là aucun des indices permettant d'augmenter le niveau de confiance.<br />
<br />
<b><span style="font-size: large;">Electrabel - transmission non sécurisée de mes informations</span></b><br />
Je ne doute pas un seul instant que des informaticiens consciencieux de chez Electrabel aient posés les bonnes questions concernant la communication d'informations sensibles via e-mail.<br />
D'autant que tous les intermédiaires informatiques peuvent en prendre librement connaissance a notre insu (super pour les campagnes marketing, ou le réseau échelon).<br />
<br />
Cher Electrabel:<br />
<ul>
<li>Il faut être fou d'avoir communiqué un numéro de client et le code d'activation dans un seul e-mail!<br />Quiconque peuvant accéder à cet information pourrait avoir des informations utiles pour usurper votre identité et/ou pour manipuler le helpdesk d'Electrabel! Se faire craquer sa boite e-mail n'est pas exceptionnel, les personnes plus agées restant les plus influencables/manipulables.</li>
<li>Vous demandez de vous connecter sur des liens pour y traiter des informations "à caractère financier" (mes factures) sans passer par le nom de domaine "Electrabel.be"!!!</li>
<li>Ont ne propose JAMAIS DE LIEN à suivre s'il y a un enjeux financier!!!! Faites comme les banques les gars!!!</li>
<li><span style="color: red;"><b>Ne jamais inclure d'information sensible dans un e-mail!!!</b></span><br /><b>Mon numéro de client, mon code d'activation, mon adresse, mon montant facturé, la date d'émission de facture (et la communication qui va avec) par e-mail</b>!!!<br /><i>Faut arrêter de rigoler les gars</i>.</li>
<li>Sans compter que tout cette procédure est entamée sans mon consentement explicite... je suis sous le coup d'un accord par défaut d'opposition sur un premier e-mail ne présentant AUCUN indice de confiance! </li>
<li>Vous m'excuserez mais P5TRC.EMV2.COM ce n'est pas Electrabel... sur ce plan c'est vraiment de l’amateurisme (je suis du métier).<br />Si un email vous envoyait un lien pour vous connecter sur P5XCC.INV3.COM au lieu de GMAIL.com, vous n'iriez probablement pas faire une telle bêtise.... et bien, cela devrait être pareil pour Electrabel. </li>
</ul>
<br />
<b><span style="font-size: large;">C'est quoi le danger?</span></b> <br />
Les chevaux de Troie sont légion! Avec eux, personne ne peut savoir si quelqu'un d'autre à pris connaissance de ces mêmes infos sur votre e-mail (ou votre smartphone) à votre insu.<br />
Au moins, avec une facture papier cette dernière est "soit ouverte, soit disparue"... il y a une trace palpable du délit!<br />
<br />
Dans le cas de ce billet, et si la sécurité de votre email est compromise, il y a suffisamment d'informations pouvant aider un tiers à se faire passer pour vous... et probablement de pouvoir permettre d'abuser le Helpdesk Electrabel (je laisse ce jeu là a des journalistes, mais reste convaincu par le bien fondé de mon propos).<br />
Avec Internet, une identité est devenue précieuse et fragile. Une fois utilisée par quelqu'un de malveillant, cela peut vous causer énormément de tords et de tracas (souvent financier).<br />
Vous devez rester vigilent et ne pas autoriser qui que ce soit à communiquer par moyen électronique (l'email n'étant pas le plus sécurisé) des informations à votre propos que vous ne communiqueriez pas vous même!<br />
<br />
<b><span style="font-size: large;">Réagissez</span></b><br />
Je reste atterré par un tel égarement alors qu'il suffit de "juste un peu de bon sens" pour voir ce qui saute littéralement aux yeux.<br />
<br />
Moi je réagis et je marque ces e-mail comme "SPAM" auprès de GMail.<br />
Rien ne me permet de savoir, pour sur, que l'émail que je recevrais demain sera effectivement émanant d' Electrabel ou quelqu'un qui voulant se fait passer pour cette société.<br />
<br />
Soyez prudent et protégez le Net en marquant activement toute communication qui pourrait conduire à une imprudence future! (comme le cas présent)<br />
<br />
Chers Electrabel, j'espère que vous ferez rapidement le nécessaire pour redresser la barre. <br />
Vous me faites peur là!Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-42668336227784212015-10-29T14:50:00.002+01:002015-10-29T14:50:47.731+01:00Liste des processus - commande psla commande <b><span style="font-family: "Courier New",Courier,monospace;">ps -ef</span></b> permet de lister facilement les processus.... mais ce qui serait parfois utile de savoir, c'est l'état du processus.<br />
Pour cela, nous avons la commande <b><span style="font-family: "Courier New",Courier,monospace;">ps -aux</span></b> qui fourni un résultat similaire à ceci.<br />
<br />
<pre class="escaped">USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4464 2512 ? Ss sep17 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S sep17 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S sep17 4:49 [ksoftirqd/0]
</pre>
<br />
yyy<br />
La colonne STAT nous indique le statut du processus dont voici les principaux<br />
<ul>
<li><b>D</b> - Uninterruptible sleep - En sommeil et ne pouvant pas être arrêté (généralement en attente d' IO)</li>
<li><b>R</b> - Running - Exécuté ou processus exécutable (dans la queue d'exécution)</li>
<li><b>S</b> - Sleep - en sommeil et pouvant être interrompu (en attente d'événement)</li>
<li><b>T</b> - Arrêté, soit suite à u signal de contrôle de job/processus ou parce qu'il est en cours de débogage (traced).</li>
<li><b>X</b> - processus mort (dead). Nous ne devrions jamais voir ce statut</li>
<li><b>Z</b> - Zombie, processus terminé et non repris en charge (collecté/libéré) par son processus parent.</li>
</ul>
Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0tag:blogger.com,1999:blog-5750783121871152575.post-6834284714030935062015-10-11T11:31:00.001+02:002015-10-11T11:31:16.889+02:00Activer Google comme moteur de recherche par Defaut dans FirefoxNous sommes quand même nombreux à vouloir utiliser Google comme moteur de recherche dans Firefox.<br />
Comme c'est un moteur commercial, il n'est pas installé par défaut... et la recherche sur le net est un peu fastidieuse.<br />
<br />
Voici donc comment faire:<br />
1) Télécharger le greffons/plug-in "Google Search" sur le site de mozilla.<br />
<br />
Cliquer sur le lien suivant et installer le plug-in<br />
<br />
<a href="https://addons.mozilla.org/en-US/firefox/addon/google-default/" rel="nofollow">https://addons.mozilla.org/en-US/firefox/addon/google-default/</a><br />
<br />
2) Ensuite, allez cliquer sur l'icone en forme de loupe dans la barre de recherche.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpwlRfN7wOGsYq29GDx3exO2FtCdffQhAgYhMeyAduXwneCkHUn2eYm0n5SwRCuVEm-doZtzRVGrUUrd9GoO9Oq_tfA-R9pgeEWO0uBOO6Jb5iFABuAMGRi1X7HFshdkANOFS6eI5lhi7/s1600/Outil-de-recherche.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzpwlRfN7wOGsYq29GDx3exO2FtCdffQhAgYhMeyAduXwneCkHUn2eYm0n5SwRCuVEm-doZtzRVGrUUrd9GoO9Oq_tfA-R9pgeEWO0uBOO6Jb5iFABuAMGRi1X7HFshdkANOFS6eI5lhi7/s640/Outil-de-recherche.png" width="640" /></a></div>
<br />
Cela affiche un menu et tout en bas, vous pouvez voir "paramètres de recherche".<br />
Cliquez sur le point de menu "Paramètres de recherche"<br />
<br />
3) Dans la fenêtre des paramètres de recherche, sélectionnez simplement le moteur de votre choix.... dans notre cas "Google"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcgpR4d5cM8Qq-U9zAFcqeHD7XLBFhe1T9xpTX2_UMJV892ZPO_kyNXS2AwFVfUsEKt31Q7_eePnxY5bvISE0b-DvJ5aFY8xYdXl9ypB1xlfxivOjThzDhEzCLu0cAtnZ8cNsiIRgHQ1cT/s1600/Outil-de-recherche-Google.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcgpR4d5cM8Qq-U9zAFcqeHD7XLBFhe1T9xpTX2_UMJV892ZPO_kyNXS2AwFVfUsEKt31Q7_eePnxY5bvISE0b-DvJ5aFY8xYdXl9ypB1xlfxivOjThzDhEzCLu0cAtnZ8cNsiIRgHQ1cT/s400/Outil-de-recherche-Google.png" width="336" /></a></div>
<br />
Voili, voilou,Dominique Meurisse (MCHobby)http://www.blogger.com/profile/06164245246501802221noreply@blogger.com0