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

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)

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

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

mardi 17 mars 2015

Windows tue mon disque! Impossible de bosser tellement c'est lent

Difficile de rester vraiment Zen quand la machine devient lente au point de devoir attendre l'affichage des fenêtres... c'est un cauchemar... même la frappe clavier devient lente (plusieurs secondes).
Ce n'est plus un OS mais un paquebot!
La cause, un disque qui n'arrête pas de faire des lectures... à qui la cause?

Virus?
Le PC est sous protection Kaspersky. Léger mais efficace. Il est peut probable que cela soit un Virus.

Un petit nettoyage
Après un sérieux nettoyage des logiciel et services, rien de superflu n'est gardé sur la machine.
Exit Flash, Java, Python, etc.

Pourtant, le problème persiste... si ça continue comme cela, mon PC passe par la fenêtre!

Process Explorer
Le très bel outil "Process Explorer" m'annonce qu'il n'y a presque pas d'activité disque!?!?... pourtant, au vu des LEDs sur mon PC, c'est plutôt le contraire... c'est "le manque d'activité" qui fait défaut!
Conclusion, c'est plutôt la faute à Windows (un truc qu'il nous cache) plutôt qu'un soft Lambda qui ne pourrait pas cacher ses accès disques.

Moniteur des Ressources
He bien, de façon surprenante, c'est encore une fonctionnalité Windows qui va nous aider... le moniteur de ressource système.
Accessible via le Gestionnaire des tâches | Volet "Performance" | Bouton "Ressource Monitor"
Ce qui nous intéresse est bien entendu les accès disque... nous sautons donc dans le volet "Disk" du "Ressource Monitor"

Surprise dite donc, dans les plus gros consommateurs, il y a le PageFile.sys (donc un processus trop gourmand en mémoire) dans le processus "System"!?!?
Mais aussi "SvcHost.exe" (voir image ci-dessous). SvcHost est utilisé pour exécuter d'autres processus sous son aile... qui est donc ce processus qui me rend la vie si difficile!
En sélectionnant "svchost.exe", nous découvrons de nombreux échanges autour de "DataStore.edb"


A qui appartient DataStore.edb?
Et bien en fouillant un peu sur le Net, on tombe assez rapidement sur.... "Windows Update"!
Ce serait donc lui qui transforme ma vie en cauchemar depuis plusieurs semaine?
La question qui se pause... vaut-il mieux une "machine à jour inexploitable" ou une "machine pas à jour exploitable".
Pour moi, le choix est vite fait, je vais arrêter Windows Update et vérifier si je retrouve des performances descentes.

Arrêter Windows Update

1) Arrêter les mise-à-jours automatiques
Voyez cet article "Turn Automatic Update On / Off" de Microsoft.

2) Arrêter le service Windows Update
Il serait opportun de faire en sorte que SvcHost ne fasse plus son tralala avec le fichier DataStore.edb.
Il faut donc arrêtre le service "Windows Update" dans le gestionnaire de service (j'ai aussi mis "Windows Defender" sur la paille pendant un petit moment).
Pour arrêter le service définitivement... il faut

  1. Arrêter le service
  2. Passer le service en "démarrage manuel" pour qu'il ne redémarre pas au prochain reboot.

Pour la petite histoire, j'ai un plantage losque j'essayer d'arrêter le service "Windows Update" (il boude et ne répond plus au gestionnaire de service! pas étonnant vu l'état lamentable de mon système).

Il va donc falloir que je reboote mon PC et, par conséquent, quitter cet article.

Addendum: Think twice before doing!
Voila, je viens de rebooter ma machine... et je suis au Paradis. Je vais enfin pouvoir bosser!
Si vous avez un doute pour votre propre machine, ne foncez pas tête baissée dans l'arrêt du service "Windows Update", c'est une action lourde de sens et il vaut mieux le faire pour une bonne raison.
Je vous propose donc de lire l'article et vérifier vos constatations avec les propos que j'y partage.

mardi 27 janvier 2015

Python, imprimer en PCL directement sur une HP 3015 en réseau

Introduction
Nous avons plusieurs imprimantes HP dans notre société, dont une HP 3015 en réseau.
Le bonheur avec une HP3015, c'est qu'il est possible d'ouvrir un socket sur le port 9100 et commencer à envoyer un flux texte à imprimer.
Il est également possible d'inclure des séquence d'échappement pour modifier la font, la taille, ect. C'est ce que qu'offre PCL, qui utilise des séquences de "caractères" particulier pour opérer ces changement.

L'avantage de cette approche est d'être totalement indépendante de la plateforme, du langage de programmation et de l'OS. Si vous le vouliez, vous pourriez imprimer depuis un Arduino + Ethernet, Raspberry, etc! Si cela à l'avantage de ne pas surcharger l'OS avec des composants logiciel (pilotes et soft annexés qui font parfois 100Mb+), votre code sera plus long et plus complexe (il devra injecter les séquence d'échappement dans le texte à imprimer, faire gaffe à ne pas déborder de la page, etc).

Pour ceux qui doute du bien fondé de cette approche un peu extrême, je leur propose de prendre un bon vieux soft Clipper en production (20 ans d'ages) et de le recompiler sous Win32.
C'est là que l'on apprécie les bonne vielles casseroles et le gain de temps en R&D.  Une bonne vielle poule au pot... humm que c'est bon!

HP 3015 + PCL + Python
Voulant introduire du graphique dans le documents imprimés (hé oui, PCL le supporte), je me suis dit "pourquoi ne pas faire un prototype en Python".
Simple et facile à mettre en oeuvre, c'est un langage idéal pour faire quelques tests.

Seulement voila, j'ai chié des boulons (Metric 60 les gars!). Pas a cause du l'imprimante IP, pas à cause du socket, par a cause de Python mais à cause de l'encoding!
Entre explosion pour erreur d'encodage, affichage de mes accentués à la va te faire f...., j'en ai vu de toutes les couleurs.

En suivant les recommandations sur l'article "L’encoding en Python, une bonne fois pour toute" de Sam & Max, j'ai fait très attention à mon encoding (UTF8 pour les sources), utilisé des chaines de caractère Unicode (Python 2.7) et réencoder vers le bon code page pour l'envoi des chaines de caractères vers l'imprimante (cp850, il a aussi fallut le trouver celui-là).

Par contre, il m'a fallut un temps considérable pour remarquer que les séquences d'échappement devaient être envoyéez en UTF-8 (sinon "encoding error") et le texte avec accentués en cp850!!!
J'en ai mangé mon clavier (j'en ai encore la barre d'espacement en travers de la gorge!).

Un bout de code qui marche
Voici finalement un petit bout de code simplissime en état de fonctionnement. Les séquences d'échappement modifies seulement la taille du texte. Le but étant d'avoir un résultat cohérent sur l'imprimante sans explosion Python!

#!/usr/bin/env python
# -*- coding: utf8 -*-

import socket
import sys
import encodings

PRINTER_IP = '192.168.1.206'
PRINTER_PORT = 9100
PRINTER_ENCODING = 'cp850'

s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
s.connect( (PRINTER_IP, PRINTER_PORT) )
  
s.sendall( bytes( (u"Chère Mère à la peau tanée.\r\n").encode( PRINTER_ENCODING )) )
s.sendall( bytes( (u""+chr(27)+"(s5H").encode( 'UTF-8' ) ))
s.sendall( bytes( (u"Cet énorme titre\r\n").encode( PRINTER_ENCODING ) ))
s.sendall( bytes( (u""+chr(27)+"(s11H").encode( 'UTF-8' ) ))
s.sendall( bytes( (u"a t'il attiré ton regard\r\n").encode( PRINTER_ENCODING ) ))
s.sendall( bytes( (u""+chr(27)+"(s17H").encode( 'UTF-8' ) ))
s.sendall( bytes( (u"à moins que cela ne soit impossible?").encode( PRINTER_ENCODING ) ))

s.close()


Il y a certainement moyen de rendre ce code plus lisible (le blinder ou faire en sorte qu'il soit "safe" sous Python 3) mais au moins, il fonctionne!

Quel encoding sur mon imprimante
Dans l'exemple précédent, j'utilise 'cp850' comme encoding sur l'imprimante HP.
J'ai eu beaucoup de mal a trouver le bon encodage car malheureusement, Google et le Net ne sont pas très bavard à ce propos!

Encore un fois, c'est un petit script Python qui à testé TOUTES les possibilités en imprimant une phrase contenant un 'é' et le codepage utilisé pour cette impression.
Il ne reste plus qu'a relever les lignes ou le "é" est imprimé correctement.

#!/usr/bin/env python
# -*- coding: utf8 -*-

import socket
import sys
import encodings

PRINTER_IP = '192.168.1.206'
PRINTER_PORT = 9100

s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
s.connect( (PRINTER_IP, PRINTER_PORT) )

for e in encodings.aliases.aliases.values():
  try:
    s.sendall( bytes( (u"Encode ecute é with %s\r\n" % e).encode( e ) ) )
  except:
    s.sendall( bytes( (u"Fails ecute encoding with %s\r\n" % e).encode( "UTF-8" ) ) )
    
s.sendall( bytes( (u"TIME 600\r\n").encode( "UTF-8")) )     # Pas d'accent -> pas de problème
s.sendall( bytes( (u""+chr(27)+"(s5H"+"Big Title").encode( "UTF-8" ) )) # Pas d'accent -> pas de problème

s.close()

Plusieurs options  valides
"é" est un caractère assez répandu dans les alphabets. Il y a donc plusieurs codes pages pouvant convenir.
J'ai finalement choisi 'cp850' car en Belgique, c'est le codepage 850 qui est également utilisé "sous DOS". Les imprimantes vendue dans le même pays sont forcement configuré avec un codepage similaire à celui utilisé par les OS locaux.
Python peut encore une fois vous aider à déterminer le code page de votre système d'exploitation (la console).
C:\temp\python-hp>python
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print( sys.stdout.encoding )
cp850
>>>

Le mot de la fin
Je ne voudrais pas jouer mon stroumpf grognon mais...
"J'aime pas l'encoding!"

Bonne amusement

vendredi 7 novembre 2014

Retrouver un environnement Linux sur Windows (console bash, GIT)

Si vous travaillez souvent avec Unix, vous savez à quel point l'interface en ligne commande (cmd.exe) de Windows peut être furstant!!!

A côté de cela, installer le package logiciel de Cygwin de 100Mb pour disposer de la commande "ls" revient à utiliser un canon pour tuer une mouche.

Au cours de quelques recherches, j'ai trouvé le très intéressant article
Où il semblerait bien que l'installation de msysgit offre l'environnement Git Bash à la fois léger et efficace pour l'utilisation de commandes Linux (avec le support Git en plus).
Interface de Git Bash où il est possible d'utiliser les commandes Linux


Sans se contenter de cet outil, l'auteur s'est penché sur le projet Console2 pour offrir une interface console encore plus en phase avec le standard visuel Linux.
Interface visuelle de Console2


Bref, une lecture fort intéressante... d'autant que l'auteur explique l'installation de façon assez détaillée (un plaisir).

A notez aussi qu'il existe une alternative GOW (Gnu On Window) qui est vénéré par certain et jugé de façon plus critique par d'autres.

jeudi 12 décembre 2013

Connexion DHCP... c'est quoi tout ces messages DHCPINFORM, DHCPACK, etc sur mon routeur

Si vous avez un routeur Belgacom et des problème de stabilité Wifi, vous avez certainement été jeter un oeil sur la page de configuration pour découvrir des messages comme...

Thu, 12 Dec 2013 12:00:34 GMT DHCP SERVER: DHCPINFORM from 192.168.1.9
Thu, 12 Dec 2013 12:00:31 GMT DHCP SERVER: DHCPACK on 192.168.1.9 to 94:39:e5:12:6f:0b via br0
Thu, 12 Dec 2013 12:00:31 GMT DHCP SERVER: DHCPREQUEST for 192.168.1.9 from 94:39:e5:12:6f:0b via br0
Thu, 12 Dec 2013 12:00:09 GMT DHCP SERVER: DHCPACK on 192.168.1.12 to 04:54:53:29:95:e5 via br0
Thu, 12 Dec 2013 12:00:09 GMT DHCP SERVER: DHCPREQUEST for 192.168.1.12 from 04:54:53:29:95:e5 via br0
Thu, 12 Dec 2013 11:59:23 GMT DHCP SERVER: DHCPINFORM from 192.168.1.10
 
Il faut avouer qu'ils ne sont pas éloquant.
Pour vous aider, vous pouvez consulter l'article "Le Dynamic Host Configuration Protocol (DHCP) - RFC 2131" rédigé en Français et excellent article de vulgarisation.

Source: l'article mentionné
 
De quoi satisfaire votre curiosité.

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

lundi 29 avril 2013

Windows 8 rebute aussi les ados

Bon nombre d'utilisateurs n'ont pas eu d'autre choix que d'acheter un PC avec Windows 8.
Windows 8 est loin de faire l'unanimité dans le monde PC où la tentative de convergence des environnements Bureau et Tablettes PC n'est pas accueillit à bras ouvert par tous (surtout les utilisateurs).
Si un environnement adapté aux tablettes est plein de bon sens, l'imposer dans un environnement des PC desktop (donc de production comme les secrétariats, programmeurs, réceptionnistes, etc) n'est pas une idée que je qualifierais de lumineuse.

Il est normal de voir une certaine forme de résistance au changement... car le changement n'est pas une situation confortable, il est normal d'y réagir. Les changements radicaux créent des situations où l'adaptation est difficile ou impossible. Le résultat est un rejet en bloc plutôt qu'une adoption progressive.

Parmi les plus réactif, je suis certain qu'il y a le front "des anciens" qui a du mal de trouver ses repères dans cet environnement en perpétuel évolution... voire en pleine mutation... parlons de "MUTANT" c'est plus réaliste.

Par contre, ce qui est nouveau, c'est que les apports de Windows 8 sur environnement de Bureau (les PC) rebutent aussi les adolescents!
Pourtant, il n'y a pas plus souple qu'un Ado pour absorber ou s’enthousiasmer pour une nouvelle technologie.
Si Windows 8 n'emporte pas leur adhésion... c'est qu'il y a un "vrai problème" de fond.

Mon beau fils, comme certains de ses amis, n'apprécie ("n'aime pas" pour reprendre ses mots) pas ce nouvel environnement. Lui qui a testé les multiples versions de Windows... d'Ubuntu... d'Android... Et bien il n'aime pas Win 8! Il est pourtant très à l'aise dans ce domaine!

Microsoft aura réussit à réaliser avec son système d'exploitation la même prouesse qu'avec sa suite Office: Tellement perturber l'environnement que cela provoque de l’urticaire viscéral chez ses utilisateurs!

Ceux qui ont connu les versions d'offices avant la version 2007 et qui doivent encore se battre avec la version 2010 comprennent fort bien de quoi il est question.

lundi 8 avril 2013

Activer Telnet Client sous Windows 7

Telnet client n'est pas installé par défaut... mais il est très simple de l'activer

La solution se trouve ici http://www.libellules.ch/seven_activer_telnet.php

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

mercredi 21 mars 2012

Gestionnaire de Version sous Windows

Aujourd'hui, je cherchais un gestionnaire de version sous Windows, libre de préférence.
Je n'ai pas de grands besoins, juste celui de pouvoir revenir en arrière sur un développement en Clipper sous Win7 64 bit.

Je n'ai donc pas besoin d'un canon pour tuer une mouche.


Bien malheureusement, il m'a fallut presque une demi-journée pour trouver un produit approprié à mes besoins tout en restant simple d'emploi (et mise en œuvre facile).

C'est qu'en fin de compte, entre produit inutilisable, usine à gaz et soft devenu payant, il ne reste plus grand chose de praticable (facile à prendre en mains et prêt à l'emploi en quelques minutes).

J'ai fini par trouver mon bonheur dans le couple Tortoise + SubVersion (pour Windows).
Avec un excellent manuel de mise en place disponible sur Developpez.Com (merci Eric Reboisson!)

Besoin d'une solution de gestion de version pour vos codes sources, commencez par cette option.

mercredi 21 décembre 2011

Programme par défaut sous Windows 7 - quand il est impossible de le changer

Changer une association de fichier
Sous Win7 Pour changer le programme par défaut associé à une extension de fichier, il existe le programme "Programme par défaut" fournit disponible dans le menu démarré.
En choisissant l'option "", il est possible d'associer un programme particulier à un extension de fichier (ou un protocole).
Programme a démarrer

Option à choisir

Comment changer de programme


Quand il n'est pas possible de changer l'association
Cependant, il existe des cas où cette option ne fonctionne pas.
En effet, l'option "Toujours utiliser le programme sélectionner pour ouvrir ce type de fichier" reste désespérément grisé/incessible !

Dans ce cas, voici une méthode beaucoup plus directe trouvé dans une conversation sur Clubic (ici).
Au moins celle là fonctionne parfaitement. Merci Clubic :-)

Ouvre l'Editeur du registre (clic-droit + Exécuter en tant qu'administrateur dans Vista ou 7):

C:Windows\regedit.exe

Sous la ruche HKEY_CLASSES_ROOT sont toutes les extensions de fichiers enregistrées. Je te donnerai un exemple pour changer le programme d'ouverture et l'icône par défaut pour les fichiers audio .mp3.

Double-clique sur la clé HKEY_CLASSES_ROOT\.mp3, et cherche une valeur sans nom (Par défaut) disant le type de fichier associé à l'extension .mp3 Par exemple: (par défaut) REG_SZ mp3file

Ceci te dit que l'extension .mp3 est associée à mp3file. Maintenant double-clique sur la clé HKEY_CLASSES_ROOT\mp3file

Dans la sous-clé DefaultIcon il y a une valeur REG_SZ avec le répertoire du fichier contenant l'icône utilisée par ce type de fichier.

Tu peux double-cliquer sur cette valeur et changer ses données. Par exemple "C:\Program files\Winamp\winamp.exe", 3

Pour changer le programme qui ouvre ce type de fichier par défaut, double-clique sur la clé HKEY_CLASSES_ROOT\mp3file\shell\open\command puis sur la valeur REG_SZ dedans et change les données pour le répertoire du programme désiré suivi de "%1". Par exemple "C:\Program files\Winamp\winamp.exe" "%1"

lundi 7 novembre 2011

PowerShell - Excel - Combien de Rows dans la feuille

J'utilise beaucoup PowerShell pour automatiser des scripts de transformation de données Excel.
Il m'arrive régulièrement de ne pas connaître exactement le contenu des feuilles.
Ainsi, j'ai besoin de savoir combien de Rows et Columns sont utilisés dans une feuille Excel.

C'est une question à laquelle il n'est pas facile d'obtenir une réponse.
Maintenant que j'ai enfin trouvé la réponse, je la publie :-)
param([string]$file = $(throw "file parameter required.") )

# Ensure existence of the file
trap [Exception] {
      write-error $("TRAPPED: " + $_.Exception.GetType().FullName);
      write-error $("TRAPPED: " + $_.Exception.Message); 
   write-host "Missing source file: " $file -ForegroundColor Red
   Exit
}

$fullname = resolve-path $file
if( -not( Test-Path $fullname ) ){
 write-host "Missing source file: " $fullname -ForegroundColor Red
 Exit 
}

# Open the Excel file
Write-Host "Ouverture du fichier" -BackgroundColor Yellow
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.Workbooks.Open( $fullname ) 


Write-Host "Extraction des données..." -BackgroundColor Yellow

$sheet = $excel.Sheets.Item(1)
Write-Host $sheet.UsedRange.Rows.count 
# Affiche "4147"
Write-Host $sheet.UsedRange.Columns.count
#Affiche "7" 

jeudi 22 septembre 2011

Un gestionnaire de presse papier pour Windows

Introduction
Dans l'article "Un gestionnaire de presse-papier pour Ubuntu", je présentais les multiples avantages d'un tel outil.
Avantages qui deviennent vraiment très pertinent si le gestionnaire de presse papier utilise également des raccourcis claviers.
Jusque maintenant, je n'avais pas encore trouvé un tel équivalent pour la plateforme Windows (un équivalent sérieux bien entendu).

Au détour d'un article de Thomas Goubin j'ai découvert ClipX.

Site de ClipX

Simple et efficace, ClipX est exactement l'outil que je cherchais et l'équivalent tant espéré de celui que j'utilise sous Ubuntu :-)

ClipX et Windows 7
Si l'outil date un peu, il fonctionne toujours à merveille.
J'ai néanmoins constaté que pour fonctionner correctement sous Windows 7, il faut démarrer le programme en mode Administrateur.

Les raccourcis de ClipX
La définition de ses raccourcis clavier comme le SHIFT+CTRL+V pour invoquer l'historique sont très utiles.
Ces raccourcis sont accessible via le menu contextuel du programme (menu activable depuis l'icone ClipX accessible dans le Tray).

mardi 6 septembre 2011

PowerShell - Un outil d'automatisation pas cher

Qu'est ce que PowerShell
Windows PowerShell, anciennement Microsoft Command Shell (MSH), nom de code Monad, est une interface en ligne de commande et un langage de script développé par Microsoft. Il est inclus dans Windows 7 (y compris la version grand public) et fondé sur la programmation orientée objet (et le framework Microsoft .NET).

À l'origine, il était prévu que PowerShell soit inclus dans Windows Vista, mais finalement les deux logiciels ont été disjoints. Microsoft a publié une version beta le 11 septembre 2005, une Release Candidate 1 le 25 avril 2006 et une Release Candidate 2 le 26 septembre 2006. La version finale a été publiée le 14 novembre 2006. Powershell est également inclus dans Microsoft Exchange Server 2007, sorti au quatrième trimestre 2006, ainsi que la plupart des produits Microsoft sortis depuis.

PowerShell est compatible avec toutes les versions de Windows qui supportent la version 2.0 de .NET.

Depuis le 24 mars 2009, PowerShell 1.0 pour Windows XP et Vista est distribué comme une mise à jour logicielle facultative par le service Windows Update de Microsoft. Il est intégré nativement dans Windows 7 en version 2.01.
Source: Wikipedia

PowerShell un outil d'automatisation
Tout développeur et utilisateur Unix sait fort bien qu'un bon langage de scripting est essentiel, sinon vital, en ce qui concerne l'administration au jour le jour.
Ma société ne disposant pas de gros moyens pour ses investissements informatique (y compris en programmation), je me suis penché sur le PowerShell de Microsoft.
Maintenant disponible en standard avec Windows, sa mise en place et exploitation devient vraiment aisé.

Derrière des concepts orienté objet dans lequel il est nécessaire de faire des investissement, PowerShell se révèle être un outil prodigieux.
Que les Unixiens ne se froissent pas, le shell Unix à enfin son équivalent sous Windows.

A l'heure ou j'écris ces lignes, j'utilise PowerShell pour faire:
  • De la manipulation de fichier (en masse)
  • De la lecture et traitement de fichier XML (sur base du contenu)
  • De la transformation XSL
  • Des lignes de commandes (cmdlet PowerShell).
Je n'en reviens toujours pas des résultats obtenu et l'investissement ne fut vraiment pas si terrible que cela.
PowerShell est donc un outil plus que recommandable.
Voila enfin un outil à la hauteur des administrateurs et des développeurs !

PowerShell GUI
Il faut reconnaître que si PowerShell dispose d'une interface interactive, faire du développement notepad et test en ligne de commande peut vite se révéler pesant.
Il existe un formidable outil appelé PowerGUI (powergui.org) disponible en freeware.
S'il est un peu massif, il rend l'utilisation et le développement des scripts PowerShell beaucoup plus agréable.

Source: blog de Ravikanth Chaganti




Ressources

dimanche 17 juillet 2011

Clé USB en lecture seule sur Ubuntu

J'utilise une clé USB de 4Go depuis plus de deux ans avec différents OS Linux.
J'ai récemment eu le malheur de l'insérer dans un système Win 7 Pro et depuis Ubuntu ne me laisse plus accéder à la clé qu'en "lecture seule"... Argh!

Il est vrai qu'il y a de quoi rester interdit devant le message "Impossible d'écrire dans un dossier en lecture seule.", à plus forte raison s'il n'y a pas de bouton read-only. 

C'est visiblement l'utilisation conjointe de Windows et Linux sur un système en FAT32 qui est la cause de ce petit problèmes.

Heureusement, Ubuntu-fr publie le petit tutoriel "Comment « réparer » une clé USB bloquée en lecture seule ?"

Tentative de réparation (dosfsck)
Pour connaître le point du lecteur USB dans /dev, il faut utiliser fdisk pour lire la table de partition
sudo fdisk -l

Pour faire une image byte-par-byte, on utile l'utilitaire dd
sudo dd if=/dev/sdb1 of=/home/dominique/Bureau/KeyCopy/UsbImage.img

Aussi faire une copie des fichiers de la clé USB

Démonter la clé avant d'essayer de la réparer
sudo umount /dev/sdb1

Tenter une réparation (avec paramètre forçant la réparation)
sudo dosfsck -yfv /dev/sdb1

Si le message "Unable to create unique name" apparait, faire une tentative avec l'option -r
sudo dosfsck -yfvr /dev/sdb1

Si a ce stade l'utilitaire persiste à ne pas pouvoir trouver de nom unique, vous pouvez vous tourner vers l'utilitaire testdisk comme le mentionne certains forums (voir ici).
Pour ma part, je suis passé à l'étape du reformattage :-/ .

Finalement, si la clé reste encore en read-only après rebranchement, il faudra la reformatter.

Reformatage de la clé
Si vous arrivez à cette étape, il faut au minimum avoir fait une copie des fichiers importants.
Vous pouvez installer l'utilitaire gparted avec la ligne de commande
sudo apt-get install gparted
Le restant de la procédure provient directement de Ubuntu-fr.org.
  1. Ouvrez l'éditeur de partition, Système → Administration. Pour cela vous devez avoir installé le paquet gparted.
  2. Dans le menu Gparted>Périphérique choisissez votre clé USB (/dev/sdb dans mon cas).
  3. Ensuite, si elle ne l'est pas, démontez votre clé : allez dans Partition>Démonter.
  4. Créez maintenant une nouvelle table de partitions : Périphérique → Créer une table de partitions
  5. Résélectionnez la partition nouvellement créé (marquée comme "non alloué"). 
    Puis créez une nouvelle partition et formatez la en FAT32 Partition → Nouveau
  6. Attention: Appliquez toutes les opérations dans le menu « Édition ».
Normalement à ce stade votre clé est à nouveau fonctionnelle. Débranchez et rebranchez puis copiez vos données en sécurité.


Renommer la clé USB
Après formatage de la clé, vous pourriez avoir envie de lui donner un nom plus explicite que "64fa-4a03".
Pour cela, il faut:
  1. démonter la clé
    sudo umount /dev/sdb1
  2. Renommer une clé vfat
    sudo mlabel -i /dev/sdb1 ::NouveauNom 
Pour plus d'information sur le renommage de périphériques(et autres systèmes de fichiers), je vous invite à lire l'article "Comment renommer un disque ou attribuer un « label » à un système de fichier ?"

mardi 18 mai 2010

ComOCom un émulateur NullModem et une solution de redirection de port COM sur Tcp/Ip

Le projet sourceforge Null-modem emulator
Le projet Null-modem emulator (com0com) est un driver windows (en kernel-mode) qui permet de créer et connecter des ports séries virtuels. Il est ainsi possible de créer un nombre illimité de paires de périphériques COM et de les connecter ensemble... permettant ainsi à des applications de communiquer ensembles (ex: un logiciel et un émulateur de robot).



ComOCom et COM port to TCP redirector
Cette page sur SourceForge  offre une description plus générale et référence également un lien vers COM port to TCP redirector, une solution s'appuyant sur ComOCom pour partager des port série à travers une connexion TCP/IP.