Affichage des articles dont le libellé est Utilitaire. Afficher tous les articles
Affichage des articles dont le libellé est Utilitaire. Afficher tous les articles

mercredi 7 juin 2017

Comment désactive IPV6 sur Linux Mint

Connaissant 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.

Je me suis donc demandé comment désactiver proprement IPV6 sur mon Linux Mint.

sudo nano /etc/sysctl.conf

Ajouter les lignes suivantes à la fin du fichier de configuration


# IPv6 disabled
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Puis redémarrer sysctl

sudo sysctl -p

Et HOP, plus d'IP V6. Vous pouvez facilement vérifier en consultant le résultat de la commande ifconfig :-)

mardi 18 octobre 2016

Gandi: 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).

Chez Gandi, cela se fait en mode expert en ajoutant la ligne suivante:

@ 10800 IN TXT "v=spf1 include:spf.mailjet.com ?all"



Et vous pouvez également ajouter une clé DKIM... (format de l'enregistrement conseillé par gandi, clé fournit par MailJet)

mailjet._domainkey 10800 IN TXT "k=rsa; p=MI........QAB"

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.
Note: l'interface d'administration de MailJet pense obstinément que ce n'est pas en ordre

Prenez une machine Linux et saisissez la commande:

dig TXT mondomaine.be +short

Et l'on obtient la réponse suivante:

; <<>> 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

Ou nous pouvons contacter que l'enregistrement TXT pour spf1 est bien présent.

Chouette alors ;-) 

mercredi 8 juin 2016

Monter un lecteur reseau sous Linux - Samba share

Si 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.
Mon dieux que cela faisait longtemps.... terriblement longtemps

Voici une référence d'article qui vous aidera indéniablement:
Pour le moment, j'en suis à faire un montage avec la commande mount avant de le rendre permanent dans /etc/fstab

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 .

sudo mkdir /mnt/netstock

En ligne de commande, cela ressemble à ceci

sudo mount -t cifs -o user=share_username,uid=local_user_owning_files  //192.168.1.2xx/netstock /mnt/netstock

Une fois la commande saisie, il vous sera demandé le mot de passe du lecteur réseau (celui correspondant à user=) pour faire le montage

Les paramètres:
  • share_username : c'est le nom d'utilisateur windows a utiliser pour connecter le lecteur réseau
  • 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)
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 ;-)

FSTAB - montage automatiquement
il est aussi possible d'ajouter le montage dans le fichier nano /etc/fstab
Et pour une raison qu'il m'échappe, la le paramètre password fonctionne comme un charme!!

# NetStock share
//192.168.1.xxx/netstock /mnt/netstock            cifs    user=share_username,_netdev,uid=local_user_owning_files,password=XXXXX              0       0

Le paramètre _netdev informe fstab qu'il faut attendre que le périphérique réseau soit disponible avant de procéder au montage.

Pour recharger le fichier fstab, il suffit de faire un mount -a

jeudi 31 mars 2016

CoreUtils: si la commande LS vous manque trop sous Windows...

Je passe souvent d'une machine Linux à Windows et vice-versa.
Le plus dure, c'est de se passer des commandes ls, cp, mv et nano sous Windows... Arf

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.

CoreUtils
Je vous propose de jeter un coup d'oeil sur le projet "CoreUtils : GNU Core Utils" qui permet de retrouver cet outils et de nombreux autres sur votre machine Windows.
CoreUtils : GNU Core Utils
CoreUtils propose un programme d'installation sous Windows :-)
Il vous suffira d'ajouter le répertoire "C:\Program Files (x86)\GnuWin32\bin" dans la variable PATH de votre système Windows.
CoreUtils dispose également d'une excellente documentation (176 pages) au format pdf et chm accessible via le menu Windows.

Nano
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.
Une fois habitué, il est très commode d'usage et surtout accessible en ligne de commande.
Nano est téléchargeable depuis http://www.nano-editor.org/
Editeur Nano - www.nano-editor.org
Pour installer nano:
  • Placez nano.exe et les dll de nano dans c:\windows\sysWOW64\  (pour un système Win7)

lundi 14 décembre 2015

fwbackups - 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).

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.
Je l'ai trouvé, il s'appelle fwbackups et fonctionne en python (léger et très largement supporté par les plateforme Linux).

fwbackups de Diffingo

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.


Pour démarrer le programme de backup, il suffit de saisir la commande suivante sur une ligne de commande:

fwbackups

Téléchargement:
Installation:

Note:
Par le passé, j'avais trouvé "Areca Backup" 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.
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.


Voir aussi:

jeudi 29 octobre 2015

Liste des processus - commande ps

la commande ps -ef permet de lister facilement les processus.... mais ce qui serait parfois utile de savoir, c'est l'état du processus.
Pour cela, nous avons la commande ps -aux  qui fourni un résultat similaire à ceci.

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]

yyy
La colonne STAT nous indique le statut du processus dont voici les principaux
  • D - Uninterruptible sleep - En sommeil et ne pouvant pas être arrêté (généralement en attente d' IO)
  • R - Running - Exécuté ou processus exécutable (dans la queue d'exécution)
  • S - Sleep - en sommeil et pouvant être interrompu (en attente d'événement)
  • T - Arrêté, soit suite à u signal de contrôle de job/processus ou parce qu'il est en cours de débogage (traced).
  • X - processus mort (dead). Nous ne devrions jamais voir ce statut
  • Z - Zombie, processus terminé et non repris en charge (collecté/libéré) par son processus parent.

dimanche 11 octobre 2015

Activer Google comme moteur de recherche par Defaut dans Firefox

Nous sommes quand même nombreux à vouloir utiliser Google comme moteur de recherche dans Firefox.
Comme c'est un moteur commercial, il n'est pas installé par défaut... et la recherche sur le net est un peu fastidieuse.

Voici donc comment faire:
1) Télécharger le greffons/plug-in "Google Search" sur le site de mozilla.

Cliquer sur le lien suivant et installer le plug-in

https://addons.mozilla.org/en-US/firefox/addon/google-default/

2) Ensuite, allez cliquer sur l'icone en forme de loupe dans la barre de recherche.

Cela affiche un menu et tout en bas, vous pouvez voir "paramètres de recherche".
Cliquez sur le point de menu "Paramètres de recherche"

3) Dans la fenêtre des paramètres de recherche, sélectionnez simplement le moteur de votre choix.... dans notre cas "Google"


Voili, voilou,

vendredi 18 septembre 2015

Recharger un module Python à la volée

Il y a peu, je vous parlais d'IEP dans ce billet "IEP: un éditeur Python interactif convivial (Windows, Mac, Linux)".

Environnement bien pratique pour faire des tests et je découvre justement SqlAlchemy.
J'étais justement entrain de coder un petit module de test model.py lorsque je me suis demandé comment recharger mon module!
IEP - édition d'un module "model.py"

J'avais déjà fait un import model ... mais ayant modifié le code, je voulais savoir comment le recharger.
Voici donc comment faire...

Option 1 - à la dure
import sys
del( sys.modules['model'] ) # virer le module "model.py"
from model import *         # ré-importer le module "model.py"

Option 2 - importlib.reload()
import importlib
import sys
a = sys.modules['model'] # Référence vers le module
importlib.reload( a )    # Demander à Python de recharge le module

vendredi 4 septembre 2015

IEP: un éditeur Python interactif convivial (Windows, Mac, Linux)

IEP est un outil vraiment très pratique et agréable permettant de faire du prototypage en Python dans un milieu ergonomique.
Nous ne parlons pas de développement (qui est un autre domaine) mais de Python Interactif (et même IPython).
IEP - Un python interactif vraiment convivial.
J'aime employer Python en mode interactif... c'est vraiment pratique pour faire du prototypage ou essayer des nouvelles fonctions. Il y a aussi son grand frère IPython que je ne connais pas encore très bien.

Limite de Python Interactif en mode console
Par contre, si ces environnements consoles sont plus que pratique du fait de leur mode console, ils deviennent également pénibles lorsqu'il faut faire un "fix" dans une fonction mal définie.
Il faut recommencer la saisie ligne a ligne... ce n'est pas gênant si c'est une fois mais autrement plus ennuyant en usage intensif.

Je voulais charger dynamiquement le contenu d'une table postgresql dans un objet SqlAlchemy (via l'ORM)... puis sauver les objets dans un fichier JSON. Le but est d'exporter les données sur un serveur FTP pour rechargement dans une DB en ligne. Alors oui, vu le nombre de manipulation, j'étais un peu à l'étroit dans la version console.

IEP... KASEKO?!?

J'ai donc cherché un environnement Python Interactif plus convivial - aussi sous Windows - et je suis tombé sur Interactive Editor for Python (IEP)

C'est toujours un Python interactif (IPython) auquel est associé une gestion de fichier, quelques outils, un logger et des fonctionnalités vraiment efficaces.
Une combinaison idéale pour une utilisation en mode Interactif:
  • Exécution du texte sélectionné à la volée (dans l'interpréteur)
  • Exécution du script ou du contenu du fichier
  • Explorateur de fichier
  • Explorateur de classe
  • Auto complétion
  • Python Interactif fonctionnant dans un thread séparé
    Autorise donc la poursuite du coding pendant une phase d'éxécution.
  • Excellent support de raccourcis clavier!
    Capital pour allez vite.
  • etc
L'installer Windows ne fait que 10Mb... tout à fait raisonnable pour les services rendus.

Ressources

mercredi 26 août 2015

Bibliothèque & outils pour Python

Python-Editor
En m'intéressant à Alembic et SqlAlchemy, je suis tombé sur un Package portant le nom de Pyhton-Editor.

Et bien, que voila un petit outil intéressant... Python-Editor ouvre un éditeur (par programmation) et se débrouille pour capturer le résultat.
Outil simple mais efficace, il permet surtout de s'affranchir des problèmes liée à la plateforme utilisée (Windows, Mac, Linux) :-)

https://pypi.python.org/pypi/python-editor/0.3

jeudi 9 juillet 2015

Imprimante Zebra USB, ZPL et Spooler Windows - Sacré Windows!!!

Introduction
Par le passé, j'avais déjà écrit l'article "Imprimante Zebra USB, ZPL et CUPS - Damned CUPS!!!" déjà source de nombreuses informations.
Cette fois, je reprends le savoir acquis, ma petite Zebra LP 2824 plus en USB et j'essaye d'imprimer le fichier demo.zpl depuis ma machine Windows 7 et sur la Zebra qui y est branché via USB.

Mr Gates, je voudrais envoyer un fichier Raw à ma petite printer zébrée... mais pourquoi est-ce si tortueux?

Comme d'habitude avec W!nd0w$ il faut gratter un peu car rien n'est plus compliqué que de vouloir faire simple! C'est que derrière, je dois faire fonctionner le tout avec un bon vieux soft Clipper compilé en Win32 (vive HarbourProject).

NB: Moi qui me plaignait de CUPS la dernière fois, j'en était presque arrivé à considérer l'usage d'un Raspberry-Pi pour mettre ma Zebra sur le réseau!

Le but rechercher 
Envoyer le contenu du fichier demo.zpl (contenant du code ZPL) directement à l'imprimante Zebra

Installer l'imprimante Zebra
Hé bien, pour commencer, nous allons simplement utiliser les pilotes Windows livrés avec l'imprimante (sur un CD) et installer l'imprimante Zebra "LP 2824 Plus".
Sélectionnez le pilote d'imprimante avec le support ZPL (pas celle avec l'EPL).
Il faut être patient, Windows n'est pas forcement très rapide... cela m'aura pris pas moins de 15 minutes et l'imprimante installée deux fois ?!?!.

Faites bien attention durant l'installation, dans la configuration des ports, vous verrez l'utilisation d'un port du type USB00x (dans mon cas, ce fut USB001)

Faites une impression de "page de test", cela doit marcher, j'ai un morceau de logo Windows sur une étiquette.

Installer une imprimante Text / Generic
Ensuite, nous allons installation d'une imprimante générique de type texte et nous allons utiliser le port USB00x attribué à notre Zebra à l'étape précédente.
Durant l'installation, nous allons:
  • Donner un nom simple à cette imprimante (ex: ZEBRA_RAW) pour pouvoir y accéder facilement.
  • Partager cette imprimante afin qu'elle soit disponible sur le réseau (c'est vraiment essentiel pour imprimer un fichier depuis un ligne de commande!)
Au final, nous nous retrouvons avec une imprimante ZEBRA-RAW permettant l'envoi de commandes ZPL directement à l'imprimante.

Vous trouverez également plus d'information sur ce sujet dans l'article "Setting up a Raw Printer in Windows" (qz.io, anglais)

Préparer notre fichier demo.zpl

Ouvrez un notepad puis collez le code suivant;
^XA
^FO100,50^ADN,36,20^FDxxx^FS
^XZ

En sauvegardant votre fichier, faite bien attention à utiliser l'encodage UTF8 (je ne sais pas trop comment serait digéré de l'ANSI)

Envoyer le fichier demo.zpl à la Zebra
Comme le dit si bien Mitch dans son article "Send PRN File to Printer", il n'y a plus grand monde qui dispose d'une imprimante série.
Du coup les commandes COPY /B C:\FILENAME.PRN LPT1: ne sont plus d'actualité car elles ne fonctionne pas avec USB001 :-/

Par contre, notre monde over-connecté-sur-le-net permet d'utiliser une telle commande si lpt1: est remplacé par le nom d'une imprimante partagée sur le réseau (avec la structure \\nom_pc\nom_partage_imprimante )
Du coup, si l'on a partagé son imprimante Zebra sur le réseau (ce que j'avais chaudement conseillé au point précédent), il sera possible d'utiliser une commande comme celle-ci:

c:\temp> copy /B demo.zpl \\127.0.0.1\ZEBRA_RAW\
        1 fichier(s) copié(s).

Résultat:

Note: le /B indique une copie binaire tandis que 127.0.0.1 est l'adresse réseaux loopback (celle qui renvoi vers mon PC).
C'est un peu alambiqué mais cela fonctionne sans devoir installer Visual Studio ou n'importe quel autre soft.

Vous voila prêt à faire quelques essais en ZPL, il est très facile de trouver de l'information sur le NET. Le plus dure, a savoir un envoi RAW clean, vient d'être réaliser :-)

Happy coding :-)

mercredi 1 juillet 2015

Des outils de backup en Python

Je suis assez fan de Cobian Backup... logiciel librement accessible mais uniquement le soft et sous Windows.

C'est en me faisant cette réflexion, et aussi parce que je suis mordu de Python, que je me suis demandé s'il existait des solutions à bases de Python.
Je ne suis pas déçu de ma petite recherche, j'ai trouvé des choses très intéressantes.
Mes résultats se séparent en deux groupes:
  • Recettes - du code, simple et efficace. Il est toujours intéressant de savoir comment les choses fonctionnent... cela peut vous servir dans vos propres logiciels.
  • La grosse artillerie - J'ai été franchement bluffé de trouver des logiciel très avancés qui font de l'encryption, copie distante (sur Amazon S3 Glacier), backup différentiel, etc.
Ce qu'il y a de vraiment bien, c'est que ces solutions sont -- pour la plupart du temps -- intégrable dans vos propres projets Python.
Allez, assez parlé, faisons un petit tour des découvertes


Backup your files (Python recipe)
Recette Python - probablement la meilleure source pour une mise en oeuvre rapide.
Sans se prendre la tête, ce code permet de faire une duplication de fichier en maintenant un nombre maximum de copies. Il accepte également le backup de plusieurs répertoires.

100 lignes de code d'une très-très-très grande utilité avec un minimum de dépendance.

Disponible sur code.activestate.com/recipes/191017-backup-your-files

Python-S3-Backup
Recette Python - déniché sur GitHub.
Ce script permet de copier des répertoires et des dumps MySql sur Amazon S3. Vous pouvez d'ailleurs configurer une tâche cron (renseigné par l'auteur) pour démarrer le backup automatiquement.

Le code fait 108 lignes et les dépendances sont réduites à boto qu'il faudra installer avec un pip.

Disponible sur github.com/psugand/Python-S3-Backup

Attic 
Artillerie lourde - ma préférence pour le moment car il est ni trop simpliste, ni trop complexe. Ce logiciel est disponible en standard sur Debian, Ubuntu, Arch Linux et Slackware.

Attic est un programme de duplication écrit en Python. L'objectif principal de Attic est d'offrir un approche efficace et fiable pour la copie de données. Cette technique de duplication de fichier fait de Attic un bon candidat  pour les backups journaliers puisqu'il ne stocke que les fichiers modifiés.

Disponible sur attic-backup.org

Cedar Backup
Artillerie lourde - Ce logiciel sort clairement du jouet. S'il n'est pas destiné à gérer les backups d'envergure, il conviendra (selon l'auteur) à de petites entreprises.
Cedar backup est développer sous forme d'une bibliothèque de backup + Interface logicielle de backup. Hormis la copie sur support physique (CD-ROM), Cedar backup offre également des possibilités de stockages sur Amazon S3

Ce projet, hébergé sur source forge, propose une documentation fournie, ce qui permet de vraiment envisager l'utilisation de Cedar Backup comme solution d'entreprise.

Disponible sur cedar-backup.sourceforge.net

BakThat - Python backup framework and command line
Artillerie lourde - là nous sortons clairement de la zone logiciel pour mettre le pied dans un Framework.
Bakthat est un framework de backup écrit en Python et sous licence MIT. Il est composé d'un outil en ligne de commande et d'un module Python qui peut vous aider à gérer vos backups sur Amazon S3/Glacier et OpenStack Swift. Il compresse et encrypte automatiquement vos données (encryption symétrique) et téléverse vos fichiers vers l'espace de stockage.
BalThat héberge son propre serveur Python, cela signifie qu'il est possible de configurer plusieurs clients BakThat qui se synchronisent avec le serveur.
Pour finir, vous pouvez accéder directement à vos backup sur l'espace de stockage, seul le logiciel de décryptage BeeFish et untar seront nécessaire pour accéder à vos fichiers. 

La documentation est fournie mais il y a pas mal de dépendance, BakThat est a considérer que si vous avez des besoins importants.

Plus d'information ici.

lundi 4 mai 2015

Git - faire des undo, des corrections ou enlever des commit

Un petit aide mémoire vraiment pas mal sur Git

Pour la petite histoire, j'avais fait une modification par erreur sur une copie locale et du coup, je ne pouvais plus faire de mise-à-jour du code depuis Git.

La réponse est simple (mais expéditive)

git reset --hard


Par la suite, je pouvais faire une mise-à-jour du code depuis git (bien pratique lorsque l'on prend une copie avec un git clone).

git fecth
git pull


lundi 2 mars 2015

Transformer une image en BMP 2 couleurs pour une impression PCL

Dans le cadre du projet PythonPcl (GitHub), je me suis mis en tête d'imprimer un logo sur une page... en PCL bien entendu!

Les premiers travaux de  hp-ip-raster-unencoded-v2.py m'ont déjà permit d'envoyer une "image" dite Raster contrôlée point-par-point.  Pour le moment, l'image Raster envoyée en PCL n'est pas compressée (mode appelé "unencoded" dans le manuel HP).

Voyez les petits graphiques juste au dessus du texte "End of test".

Le but final n'est pas de coder une image en point-par-point dans le code Python... mais c'est déjà un début.
Il faudrait maintenant pouvoir envoyer une image noir et blanc (he oui! notre HP 3015 n'est pas en couleur!).

Mais un problème se pose:
comment obtenir une image noir et blanc sans que celle-ci soit immonde une fois imprimée?

La réponse:
Il faut faire du dithering au moment de la transformation noir et blanc.
Il est certainement possible de réaliser cette opération en Python... pour ma part, je vais opter pour une préparation avec Gimp.

Réaliser une bitmap 2 couleurs + dithering avec Gimp.

Le but de ce tutoriel - The aim of this tutorial
Le but de ce mini-tutoriel n'est pas de dégrader le logo "open source initiative" mais de montrer comment transformer une image pour qu'elle soit imprimée en PCL (Printer Command Langage) tout en préservant un aspect visuel agréable.

The aim of this tutorial is not to degrade the "open source initiative" logo but to explain how to transform one picture to be printed with PCL (Printer Command Langage) while preserving a nice printed visual aspect.

Commençons par charger notre image d'origine.
J'ai opté pour le logo open-source suivant que vous trouverez ici sur opensource.org
Source: opensource.org
Passer en deux couleurs
Une fois chargée dans Gimp, passez par le menu Image > Mode > Indexed... pour passer en couleur indexée.
Nous allons:
  • Limiter le nombre de couleur à 2 et 
  • Utiliser  de sélectionner "Floyd-Steinberg" comme "Color Dithering"
   
Cela produira une image deux couleurs mais pas forcement en noir et blanc!
image en 2 couleurs avec dithering
Mais nous allons corriger cela.

Passer en noir et blanc
Pour ce faire, nous allons rechanger le mode le l'image en niveau de gris.
Menu Image > Mode > Grayscale

Ce qui nous permettra ensuite d'appeler l'outil de seuil :-)
Menu Colors > Threshold  (ou Couleurs > Seuil)

En travaillant sur les paramètres (si cela est seulement nécessaire), vous tomberez vite sur une image en noir et blanc.

Repasser en 2 couleurs + sauver en Bitmap
maintenant que nous avons notre image en noir et blanc, nous allons la sauver en tant que bitmap deux couleurs (noir et blanc).

Menu Image > Mode > Indexed...

Fixez:
  • le nombre de couleur à deux couleurs
  • Retirer l'option de dithering (plus nécessaire cette fois)
  • convertissez une fois de plus 


Voila, il ne reste plus qu'a exporter notre belle image en BMP via le menu "File > Export..." (ou "Fichier > Exporter...").

Le but étant de recharger l'image en Python, il est important de faire attention aux paramètres d'exportation Bitmap.
  • Run-Length Encoded doit être décoché
  • Do not write color space information doit être coché

Nous avons maintenant une image prête pour nos impressions en PCL (Printer Command Langage)

Petite information complémentaire
Voulant imprimer une image sur ma Zebra ZPL2824, j'ai voulu réutiliser ce tutoriel pour produire une image 2 bits assez facile à lire. Le Hic, c'est que Gimp 2.8 pour Windows ne propose pas de modifier les options Run-Length Encoded... etc.
C'est franchement Agaçant!!!

Il est possible d'exporter au format SUNRAS avec l'extension IM1 (je suspecte ce format d'encoder 1 bit par pixel). Utilisez le format standard.
Une fois sauvez, nous pouvons ouvrir le fichier avec un editeur Hexa décimal.
Nous pouvons clairement constater une similitude entre les données et le graphique (voyez l'antenne de la voiture)

Il faudra juste sauter les premiers octets de l'entête du fichier (contenant une signature).


Une inspection attentive couplée à un unique point placé dans le coin supérieur de l'image (donc valeur binaire 1000000 correspondant à la valeur hexadécimale 80 révèle


qu'il faut enlever les 32 premiers octets :-)

J'ai également remarqué que chaque ligne (le 16ieme octet) se termine par un 00. Mon image ne faisant que 120px de large, il me faut uniquement 120/8 = 15 octets/bytes pour coder une ligne de mon image. Le format travaille certainement par multiple de 8 octets (à vérifier dans la spec)

Tadaa.

dimanche 7 décembre 2014

F3: tester des périphériques de stockage (SD ou USB) sous Linux

Lumière sur le projet F3 (oss.digirati.com.br/f3), ce dernier permet de tester des cartes SD/USB stick.
Le programme est relativement simple et se compose de deux utilitaires f3write (pour écrire des fichiers de tests) et f3read pour effectuer les tests de lecture.

Petite présentation par l'auteur

F3 - une alternative à h2testw
Ce projet à commencé lorsque Michel Machado de F3 à acheté une carte de 32GB microSDHC pour son Android (c'était en 2010). Il a remarqué que la carte présentait toujours des défaillances lorsqu'elle était remplie. En faisant quelques recherches sur Google, il est arrivé sur les blogs Fight Flash Fraud et SOSFakeFlash qui recommande tout deux l'usage du logiciel H2testw (voir ici ou ici) pour tester les mémoires flashs.
Michel à téléchargé H2testw et à été immédiatement confronté a deux problèmes:
  1. H2testw est logiciel Windows uniquement
  2. H2testw n'est pas un logiciel open-source.
Cependant, Harald Bögeholz (l'auteur de H2testw), est assez sympa pour inclure un fichier texte décrivant comment fonctionne son programme (ainsi que le générateur de nombre aléatoire).

Ainsi naquis F3 et sa page oss.digirati.com.br/f3 qui est l'implémentation GPLv3 de H2testw réalisé par Michel Machado. Version qui fonctionne sous Linux, Macs, Windows/Cygwin et FreeBSD.
Cette implémentation s'appelle F3, qui est le raccourci de "Fight Flash Fraud" ou "Fight Fake Flash".

Comment installer F3 sous Linux
Si vous diposez d'Ubuntu ou un de ses dérivé (ex: Linux Mint), un simple apt-get fera l'affaire :-)

sudo apt-get install f3

Utiliser f3
F3 se compose de deux programme f3write et f3read.
F3write est destiné à remplir votre périphérique avec des fichiers de données (attention, il rempli l'espace disponible). f3write remplit le système de fichier avec des fichiers de 1GB nommés N.h2w, où N est un numér.
F3read relit les fichiers et fait une validation du contenu, c'est ainsi que l'on détecte les corruptions.

Voici un exemple pratique (par l'auteur)
$ ./f3write /media/5EBD-5C80/
Free space: 28.83 GB
Creating file 1.h2w ... OK!
Creating file 2.h2w ... OK!
Creating file 3.h2w ... OK!
Creating file 4.h2w ... OK!
Creating file 5.h2w ... OK!
Creating file 6.h2w ... OK!
Creating file 7.h2w ... OK!
Creating file 8.h2w ... OK!
Creating file 9.h2w ... OK!
Creating file 10.h2w ... OK!
Creating file 11.h2w ... OK!
Creating file 12.h2w ... OK!
Creating file 13.h2w ... OK!
Creating file 14.h2w ... OK!
Creating file 15.h2w ... OK!
Creating file 16.h2w ... OK!
Creating file 17.h2w ... OK!
Creating file 18.h2w ... OK!
Creating file 19.h2w ... OK!
Creating file 20.h2w ... OK!
Creating file 21.h2w ... OK!
Creating file 22.h2w ... OK!
Creating file 23.h2w ... OK!
Creating file 24.h2w ... OK!
Creating file 25.h2w ... OK!
Creating file 26.h2w ... OK!
Creating file 27.h2w ... OK!
Creating file 28.h2w ... OK!
Creating file 29.h2w ... OK!
Free space: 0.00 Byte
Average Writing speed: 2.60 MB/s

$ ./f3read /media/5EBD-5C80/
                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.h2w ...       0/  2097152/      0/      0
Validating file 2.h2w ...       0/  2097152/      0/      0
Validating file 3.h2w ...       0/  2097152/      0/      0
Validating file 4.h2w ...       0/  2097152/      0/      0
Validating file 5.h2w ...       0/  2097152/      0/      0
Validating file 6.h2w ...       0/  2097152/      0/      0
Validating file 7.h2w ...       0/  2097152/      0/      0
Validating file 8.h2w ...       0/  2097152/      0/      0
Validating file 9.h2w ...       0/  2097152/      0/      0
Validating file 10.h2w ...       0/  2097152/      0/      0
Validating file 11.h2w ...       0/  2097152/      0/      0
Validating file 12.h2w ...       0/  2097152/      0/      0
Validating file 13.h2w ...       0/  2097152/      0/      0
Validating file 14.h2w ...       0/  2097152/      0/      0
Validating file 15.h2w ...       0/  2097152/      0/      0
Validating file 16.h2w ...       0/  2097152/      0/      0
Validating file 17.h2w ...       0/  2097152/      0/      0
Validating file 18.h2w ...       0/  2097152/      0/      0
Validating file 19.h2w ...       0/  2097152/      0/      0
Validating file 20.h2w ...       0/  2097152/      0/      0
Validating file 21.h2w ...       0/  2097152/      0/      0
Validating file 22.h2w ...       0/  2097152/      0/      0
Validating file 23.h2w ...       0/  2097152/      0/      0
Validating file 24.h2w ... 1916384/   180768/      0/      0
Validating file 25.h2w ...  186816/  1910336/      0/      0
Validating file 26.h2w ...       0/  2097152/      0/      0
Validating file 27.h2w ...       0/  2097152/      0/      0
Validating file 28.h2w ...       0/  2097152/      0/      0
Validating file 29.h2w ...   28224/  1705280/      0/      0

  Data OK: 1.02 GB (2131424 sectors)
Data LOST: 27.81 GB (58322336 sectors)
        Corrupted: 27.81 GB (58322336 sectors)
 Slightly changed: 0.00 Byte (0 sectors)
      Overwritten: 0.00 Byte (0 sectors)
Average Reading speed: 9.54 MB/s

L'exemple ci-dessus indique que la carte Flash est sacrément corrompue. Plus de 27Go de données sont corrompu.

Localiser le /media
Comme vous pouvez le constater dans l'exemple, la carte SD est montée dans le répertoire /media. Le périphérique est directement accessible via /media/5EBD-5C80/
La valeur 5EBD-5C80 change d'un périphérique Flash à l'autre....

Chez MCHobby, nous sommes plutôt accros à Linux Mint. Dans ce cas, la carte SD n'est pas montée dans /media/5EBD-5C80 mais dans /media/votre_login_utilisateur/5EBD-5C80

lundi 13 janvier 2014

Petit Rappel sur l'archivage Linux tar.gz

Source: http://www.linux-kheops.com/doc/dupoux/compress/

Introduction
Nous allons voir comment compresser et décompresser des fichiers sous Linux (comme avec Winzip sous Windows). Nous n'étudierons que les outils en ligne de commande, car ils sont standards, fonctionneront sur toutes les distributions de Linux, et il n'est pas nécessaire de disposer de XWindow.
La compression est un élément indispensable. Dès qu'on récupère un programme sur Internet, il est compressé. La plupart du temps, le format utilisé est le format .TAR.GZ (tar.gzip), qui est standard, et que tout le monde peut décompacter sans problème. Mais il existe aussi un format plus récent: le BZ2 (bzip2) qui est moins répandu, mais plus efficace. Il faut avoir l'utilitaire Bzip2 pour pouvoir utiliser les données. Ce dernier format est d'ailleurs utilisé pour compresser le noyau 2.2 de Linux: avec ce format (BZ2), il n'occupe que 10 Mo, contre 13 Mo en .TAR.GZ.

Le format .tar.gz
L'extension .TAR.GZ (ou parfois TGZ) indique que le fichier est avant tout une archive TAR, qui a été ensuite compressée avec Gzip (GZ). Le rôle de l'utilitaire TAR est de créer une archive, donc de regrouper plusieurs fichiers, comme par exemple tout un dossier, en un unique fichier d'extension .TAR. Et ensuite, gzip compresse cette archive. La compression et la décompression s'effectuent donc en deux étapes. Mais on peut demander à TAR de faire appel à Gzip avec l'option z, donc dans ce cas, une seule opération suffit à créer ou utiliser un fichier .TAR.GZ. 

Compression d'une Archive

Syntaxe:
tar <options> <fichier .tar.gz à créer> <fichiers à ajouter>

Dans les options, on doit mettre c pour créer une archive et non la décompresser, f pour indiquer qu'il s'agit d'un fichier, on peut mettre z pour compresser avec Gzip, et v si on désire avoir la liste des fichiers compressés qui défile.

Exemple:
tar cfvz kfilecoder.tar.gz /root/projects/kfilecoder

Dans cet exemple, on crée un fichier kfilecoder.tar.gz compressé avec Gzip, dans lequel on met tous les fichiers contenus dans le dossier /root/projects/kfilecoder



Extraction d'une archive .TAR.GZ

Syntaxe: 

tar <options> <fichier .tar.gz à extraire>

Dans les options, on doit mettre x pour extraire l'archive indiquée, f pour indiquer qu'il s'agit d'un fichier, on peut mettre z pour décompresser avec Gzip, et v si on désire avoir la liste des fichiers compressés qui défile.

Exemple: 
tar xfvz kfilecoder.tar.gz

Dans cet exemple, on extrait l'archive kfilecoder.tar.gz, en la décompressant avec Gzip, tous les fichiers sont copiés dans le dossier courant.
Remarque: attention à la casse. Par exemple l'option z (minuscule) pour compresser au format Gzip ne doit pas être confondue avec l'option Z (majuscule) qui compresse au format Compress, qui est totalement différent.
 

mardi 23 juillet 2013

Faire du SSH depuis Windows

Faire du SSH avec un système Unix est vraiment naturel... ça l'est franchement moins avec Windows qui ne sait pas trop ce que c'est que cette bête là.

La solution réside dans le Tunnelier, un logiciel SSH pour Windows

http://www.bitvise.com/tunnelier

mardi 2 octobre 2012

MountVol et lecteur USB plus reconnu

Si vous essayez la commande

mountvol z: /D
ou
mountvol z: /P

vous constaterez vite que le volume n'est plus reconnu (gloups!).
Le périphérique USB est bien visible dans "périphérique et imprimante" mais il n'y a plus de lecteur pour accéder aux fichiers.

Cela arrive parce qu'il n'y a plus de lettre assignée au volume.
Le plus simple est de réassigner manuellement une lettre par l'intermédiaire du gestionnaire de disque (clique droit sur la partition puis "ajouter lettre")

Le plus gros problème c'est de trouver le gestionnaire de disque dans les méandres de Windows Seven.
Le raccourcis c'est:
(touche <Windows> + <R>, tape diskmgmt.msc puis <Entrer>)

RemoveDrive
Pour pouvoir éjecter un lecteur USB en toute sécurité, il faut utiliser un utilitaire disponible sur le NET.
Il s'appelle RemoveDrive et fonctionne parfaitement sans heurt.

RemoveDrive V2.3.3 - Safe removal of drives

Disponible http://www.uwe-sieber.de/drivetools_e.html

Cobian Backup et Multiple disque USB

Cobian Backup est un excellent logiciel de backup open-source... l'un des meilleurs sans être une usine à gaz!
Même après des années d'utilisation j'en reste pleinement satisfait.

Il y a cependant une ombre au tableau.
Si l'on peu utiliser plusieurs disques USB pour faire des backups (disons 1 disque différent par jour), il est impossible d'avoir une lettre de volume unique pour tous ces lecteurs.
On a pas non plus la certitude que l'on aura toujours la même lettre pour un lecteur lorsuq'il est rebranché plus tard.

C'est ennuyant parce que Cobian Backup est intimement lié à la lettre d'identification du volume.

Il reste alors deux solutions possibles:
  1. Créer une tâche Cobian Backup par disque de backup (en assignant une lettre différente à chaque lecteur)... une approche pas vraiment "pro"
  2. Utilise un batch qui essaye de re-mapper le lecteur sur une lettre choisie arbitrairement (par exemple Z:)... nettement plus pro
MapDrive.bat
Dans le billet "Usb drivers / Subst solution", j'ai trouvé un batch qui teste l'existence d'un fichier pour détecter le lecteur backup.
Une fois le lecteur détecté, il utilise l'instruction MountVol pour remonter le lecteur sur une lettre arbitrairement choisie.

Hé bien... chapeau bas! Voici une méthode simple et élégante.

@echo off
rem ********************************************************
rem changes disk drive letter based off file test

rem     File/dir To Test For
rem     ex   E:\backup.tag   = backup.tag
rem     ex2  E:\iPod_Control = iPod_Control

SET TEST=backup.tag


rem    Drive to Move To

SET DEST=Z:

rem    Media Name
rem    ex Backup or "USB STICK"

SET NAME=GGBackup

rem ********************************************************

echo Testing Destination %DEST%
if exist %DEST%\%TEST% goto good
if exist %DEST% goto fail_inuse
echo Finding %NAME%

set DRV=E:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=F:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=G:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=H:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=I:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=J:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=K:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=L:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

goto fail


:found
echo Found  %NAME% At %DRV%
echo Moving %NAME% To %DEST%

FOR /F "delims=" %%x IN ('MOUNTVOL %DRV% /L') DO SET DF=%%x

IF "%DF%"=="The system cannot find the file specified." GOTO failmap

echo.
echo Unmapping Drive %DRV%
MOUNTVOL %DRV% /D
echo Remapping Drive %DEST%
MOUNTVOL %DEST% %DF%

echo.
Echo Testing %DEST%
if exist %DEST%\%TEST% goto good
echo Faild Test
echo %NAME% Status Unknown
goto end

:good
echo.
echo %NAME% Is Properly Located At %DEST%
goto end

:failmap
echo Failed To Reassign Found Drive
goto end

:fail_inuse
echo %DEST% Is Inuse And Not Target Drive
echo Remap Failed
goto end

:fail
echo %NAME% Not Found
goto end


:end

Ce qu'il y a de vraiment bien avec ce batch, c'est que "Cobian Backup" peut l'exécuter juste avant la tâche de backup :-)))

RemoveDrive
N'essayez pas de démonter votre clé USB avec mountvol, vous allez avoir une sacré surpris!!!
MountVol est un peu trop radical et le périphérique n'est plus remonté lorsqu'il est rebranché (voir l'autre article publié ce jour).

Pour démonter un Volume en toute sécurité, il faut utiliser le programme RemoveDrive qui fonctionne à merveille.
RemoveDrive peut être trouvé ici http://www.uwe-sieber.de/drivetools_e.html

UnMapDrive
Sur base du premier script, ce dernier à été modifié pour appeler la commande RemoveDrive.exe au lieu de MountVol.
Il teste l'existence d'un fichier (backup.tag) et démonte ensuite le volume.

C'est une version vite fait... mais un bon début ;-)
@echo off
rem ********************************************************
rem changes disk drive letter based off file test

rem     File/dir To Test For
rem     ex   E:\backup.tag   = backup.tag
rem     ex2  E:\iPod_Control = iPod_Control

SET TEST=backup.tag


rem    Drive to Move To

SET DEST=Z:

rem    Media Name
rem    ex Backup or "USB STICK"

SET NAME=GGBackup

rem ********************************************************

echo Testing Destination %DEST%
if exist %DEST%\%TEST% goto good
if exist %DEST% goto found
echo Finding %NAME%

set DRV=E:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=F:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=G:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=H:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=I:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=J:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=K:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=L:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

goto fail


:found
echo Found  %NAME% At %DRV%
echo Moving %NAME% To %DEST%

rem FOR /F "delims=" %%x IN ('MOUNTVOL %DRV% /L') DO SET DF=%%x

rem IF "%DF%"=="The system cannot find the file specified." GOTO failmap

echo.
echo Unmapping Drive %DRV%
removedrive.exe %DRV%
goto end

:good
echo.
echo %NAME% Is Properly Located At %DEST%
echo Unmapping Drive %DEST%
c:\dev\removedrive.exe %DEST%
goto end

rem :failmap
rem echo Failed To Reassign Found Drive
rem goto end

:fail
echo %NAME% Not Found
goto end


:end

lundi 7 mai 2012

QL-570: utilitaires pour imprimer facilement des étiquettes

Dans mon long processus de migration de Clipper vers Harbour, je suis face à un problème en apparence épineux... en effet, il me faut imprimer des étiquettes Code Barre sur notre QL-570 en réseaux.

P-Touch Template & ESC/P
Au cours de mes recherches, je me suis aperçu que la méthode ci-dessous n'est pas compatible avec les QL-570. Il existe cependant une alternative (voir autre point plus bas)

Au cours de mes recherches, j'ai trouvé le logiciel P-Touch (visiblement de Brother) accompagné de PTouch Template et PTouch ESC/P (permettant de piloter l'imprimante avec des séquences d'échappement).

Vous trouverez plus d'informations depuis la section développement du site de brother.

Je me suis personnellement penché plus attentivement sur la vidéo suivante:


C'est de bon présage :-)

P-Touch Editor et b-pac SDK
L'option ESC/P n'est visiblement pas applicable pour une QL-570. C'est bien dommage car cela semblait pourtant parfait.
Visiblement, cela serait causé par le fait qu'une QL-570 fonctionne uniquement en mode raster (comprenez par envoi de données point-à-point/sous forme d'image). Dans ce cas, il est bien évidement difficile de commander l'imprimante avec des séquences d'échappement.

Par contre, il est possible de contourner le problème à l'aide d'une interface COM.
Brother propose P-Touch Editor, un éditeur d'étiquette qui permet de préparer ses étiquettes et de nommer les différentes zones. Une fois sauvée, cette étiquette peut devenir un modèle (template pour les initiés).

Il est possible de se procurer séparément b-pac SDK. Ce dernier est une interface COM permettant de piloter l'impression de P-Touch editor (recharger le modèle, modifier le contenu des zones nommées, lancer l'impression).

Des exemples fournis avec le SDK, j'ai tiré  NamePrn.vbs, exemple qu'il m' fallut modifié pour le faire fonctionner.
Pour cause, le répertoire mentionné par sDataFolder n'était pas correct (le (x86) pour un Windows 64 bits). et j'ai également précisé le nom de l'imprimante dans StartPrint (le nom tel que connu par Windows dans le volet Configuration|imprimante).
Sinon cela fonctionne :-)

' b-PAC 3.0 Component Sample (Instant Name Plate)
' (C)Copyright Brother Industries, Ltd. 2009
'
'<SCRIPT LANGUAGE="VBScript">
 ' Data Folder
 Const sDataFolder = "C:\Program Files (x86)\Brother bPAC3 SDK\Templates\"
 DoPrint(sDataFolder & "NamePlate1.lbx")

 '*******************************************************************
 ' Print Module
 '*******************************************************************
 Sub DoPrint(strFilePath)
  Set ObjDoc = CreateObject("bpac.Document")
  MsgBox( strFilePath )
  bRet = ObjDoc.Open(strFilePath)
  If (bRet <> False) Then
    MsgBox("OPEN :-) ")
   ObjDoc.GetObject("objCompany").Text = "Brother Industries, Ltd."
   ObjDoc.GetObject("objName").Text = "John Smith"
   ObjDoc.SetMediaByName ObjDoc.Printer.GetMediaName(), True
   ObjDoc.StartPrint "Brother QL-570", 0
   ObjDoc.PrintOut 1, 0
   ObjDoc.EndPrint
   ObjDoc.Close
  End If
  
    MsgBox("Hello world")
  Set ObjDoc = Nothing
 End Sub


Ressources utiles