samedi 31 décembre 2011

Livres lus en 2011


L'enfant Allemand de Camilla Lackberg du 13 décembre au 30 décembre 2011
L'oiseau de mauvaise augure de Camilla Lackberg du 08 novembre au 12 décembre 2011
Harry Potter à l'école des sorciers (volume 1) de JK Rowling du 04 octobre au 07 novembre 2011
Les cathédrales du vide de Henri Loevenbruck du 10 septembre au 03 octobre 2011
Cessez d'être gentil, soyez vrai (communication non violente) 1è partie de Thomas d'Ansembourg du 21 Août au 09 septembre 2011
Le Burn Out - Comprendre et vaincre l'épuisement professionnel de Suzanne Peters et Dr Patrick Mesters du 17 Août au 20 Août 2011
Le pourquoi du comment de Daniel Lacotte du 11 Août au 16 Août 2011
Le tailleur de Pierre de Camilla Läckberg du 13 juillet au 10 Août 2011
Seras-tu là de Guillaume Musso du 03 juillet au 12 juillet 2011
Fragments d'une femme perdue de Patrick Poivre d'Arvor du 21 juin au 02 juillet 2011
Freedom de Daniel Suarez du 13 juin au 20 juin 2011
Le musée perdu de Steve Berry du 05 juin au 13 juin 2011
Napoléon - vol 4 - L'immortel de Sainte-Hélène de Max Gallo du 03 mai au 04 juin 2011
Napoléon - vol 3 - L'empereur des Rois de Max Gallo du 16 mars au 02 mai 2011
Daemon de Daniel Suarez du 01 mars au 15 mars 2011
Le concours de Millénaire vol 1-2 & 3 de Roger Zelasny du 20 décembre au 28 février 2011

mercredi 21 décembre 2011

Imprimer avec Python

Cela fait un moment que je travaille avec PowerShell.
Si c'est un environnement de scripting efficace, je suis quand même tombé sur un OS.
Pas facile de générer et d'imprimer des documents complexes (Texte et graphique, code barre, etc) à partir de PowerShell.

Dans ma déveine, je me demandais si Python pouvait faire mieux pour voir ?
J'ai trouvé deux références prometteuses:
Qui sait, peut-être que je devrais un jour laisser tomber PowerShell pour utiliser Python?
Mais sur une machine Windows, ce n'est pas certain que c'est gagné d'avance (j'utilise énormément d'automation Excel et Word) :-/

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 19 décembre 2011

Excel 2010 - Formatage conditionel sur une colonne

Le formatage conditionnel c'est bien mais par défaut il ne s'applique qu'a une seule cellule !
Lorsque l'on veut généraliser le formatage sur une colonne entière, les choses deviennent vite frustrantes.
C'est que rien dans l'interface ne vient vous aider pour trouver la bonne réponse.

C'est entre autre ce qui m'est arrivé lorsque je voulais mettre en lumière les différences entre le stock enregistré (dans le logiciel) et celui d'un inventaire.
Sur plus de 600 lignes, dupliquer le formatage conditionel n'était pas une option mais une nécessite.

Le principe
En fin de compte, c'est assez simple. Il suffit d'utiliser une formule dans le formatage conditionnelle pour comparer les cellules.
En dupliquant le formatage conditionnel, on duplique aussi la formule qu'il utilise. Si on a une formule utilisant une comparaison relative, cela devient alors très simple.
 Seulement voila, il faut le savoir pour le faire.

Marche à suivre
1) Sélectionner la cellule sur laquelle s'applique le formattage conditionnel.
2) Activer le formatage conditionnel

3) Encoder la formule type pour comparer les valeurs entre cellule
Mais attention, il est important de retirer les signes "$" pour permettre le déférencement relatif lorsque l'on copiera la formule sur toutes les cellules. (Sinon la comparaison se fera toujours entre $F$2 et $E$2 même après copie de la formule).
3) Copier la formule et le formatage conditionnel sur toutes les cellule de la colonne

Petite amélioration
La comparaison d'une valeur par rapport a #N/A est toujours fausse.
Dans mon cas, le #N/A indique que l'inventaire n'a pas répertorié la référence de l'article.
Donc, un Stock de 6 par rapport à #N/A devrait déclencher le formatage conditionnel mais il ne le fait par car 6 <> #N/A est faux.

Pour résoudre ce problème, il suffit de tester le contenu de la cellule pour savoir si elle contient #N/A.
Le test suivant permet de tester ce la valeur #N/A de la cellule F2 (elle retourne 0 si F2 est #N/A sinon retourne la valeur F2)
=SI(ESTNA(F2)=VRAI;0;F2)

Le formatage conditionnel devient donc
=(SI(ESTNA(F2)=VRAI;0;F2)=E2)

lundi 12 décembre 2011

Font pour Code Barre

Si vous avez besoin d'imprimer des codes barres, vous pouvez toujours jeter un oeil sur le site Free Linear Barcode Image Online Generator (IDAutomation).
Outre la mise a disposition d'un outil en ligne, le site de IDAutomation propose également un zone de téléchargement permettant de se procurer les fonts nécessaire.

J'ai aussi noté la mise à disposition de la font UPC, EAN & GTIN qui devrait permettre de générer des codes barres EAN (13 positions). Cependant, je ne suis pas arrivé à produire de code barre lisible par un scanner.

Par contre, The Code Project publie l'article "Creating EAN-13 BarCode" sur la génération des codes barres en C#.
Malheureusement rien d'utilisable directement en PowerShell (snif)

Ressources:

mercredi 7 décembre 2011

Ripper ses CD sous Ubuntu

Le réponse c'est "Sound_juicer" disponible dans la logithèque.
Source: WikiMedia

Bien que le monde Open-Source offre des format Open-Source de qualité, j'ai tendance à préférer le format propriétaire MP3... simplement parce que je l'utilise depuis des années (en autre sous Windows avec l'encodeur lame).

Par défaut, "Sound_Juicer" ne supporte pas le format MP3 mais ce n'est pas pour autant sans solution.
La document Ubuntu-FR propose cet article qui offre un très bon point de départ pour télécharger et configurer le codeur MP3

jeudi 1 décembre 2011

Manipulation XML en PowerShell

Manipuler XML en PowerShell
PowerShell est capable de lire et de manipuler facilement du contenu XML.
J'ai d'ailleurs trouvé deux excellentes références sur le sujet.
Ou encore:

Comment sauver un HashTable en XML
Il est possible de sauver le contenu d'un HashTable en une seule ligne de code... c'est assez bleufant.
Dans l'exemple suivant,  $list est un HashTable contenant des autres HashTables... voici le contenu de la liste
>>> $__list
Name                           Value                                                                                                                                                                                 
----                           -----                                                                                                                                                                                   
5410439120722                  {ArtCode, EAN, NoteRef, Descr...}                                                                                                                                                       
5410439350358                  {ArtCode, EAN, NoteRef, Descr...}                                                                                                                                                       
5410439354202                  {ArtCode, EAN, NoteRef, Descr...}  

>>> $__list["5410439120722"]
Name                           Value                                                                                                                                                                                   
----                           -----                                                                                                                                                                                   
ArtCode                        BZ1933060080                                                                                                                                                                            
EAN                            5410439120722                                                                                                                                                                           
NoteRef                                                                                                                                                                                                                
Descr                          Vis à tête hex. 8.8 Din 933/934 M 6x 80 zingué                                                                                                                                          
TotalReceiptQty                12 

La sauvegarde se fait à l'aide de la commande suivante:
($__List.Values | convertTo-Xml).Save( "c:\test.xml" )

Et cela produit le résultat suivant:
<?xml version="1.0"?>
<Objects>
  <Object Type="System.Collections.Hashtable">
    <Property Name="Key" Type="System.String">ArtCode</Property>
    <Property Name="Value" Type="System.String">BZ1933060080</Property>
    <Property Name="Key" Type="System.String">EAN</Property>
    <Property Name="Value" Type="System.String">5410439120722</Property>
    <Property Name="Key" Type="System.String">NoteRef</Property>
    <Property Name="Value" Type="System.String" />
    <Property Name="Key" Type="System.String">Descr</Property>
    <Property Name="Value" Type="System.String">Vis à tête hex. 8.8 Din 933/934 M 6x 80 zingué  </Property>
    <Property Name="Key" Type="System.String">TotalReceiptQty</Property>
    <Property Name="Value" Type="System.Int32">12</Property>
  </Object>
  <Object Type="System.Collections.Hashtable">
    <Property Name="Key" Type="System.String">ArtCode</Property>
    <Property Name="Value" Type="System.String">BZ1094050063</Property>
    <Property Name="Key" Type="System.String">EAN</Property>
    <Property Name="Value" Type="System.String">5410439350358</Property>
    <Property Name="Key" Type="System.String">NoteRef</Property>
    <Property Name="Value" Type="System.String" />
    <Property Name="Key" Type="System.String">Descr</Property>
    <Property Name="Value" Type="System.String">Goupille fendue Din 94 * 5,0x 63 zingué  </Property>
    <Property Name="Key" Type="System.String">TotalReceiptQty</Property>
    <Property Name="Value" Type="System.Int32">12</Property>
  </Object>
  <Object Type="System.Collections.Hashtable">
    <Property Name="Key" Type="System.String">ArtCode</Property>
    <Property Name="Value" Type="System.String">BZ1021050015</Property>
    <Property Name="Key" Type="System.String">EAN</Property>
    <Property Name="Value" Type="System.String">5410439354202</Property>
    <Property Name="Key" Type="System.String">NoteRef</Property>
    <Property Name="Value" Type="System.String" />
    <Property Name="Key" Type="System.String">Descr</Property>
    <Property Name="Value" Type="System.String">Rondelle Din 9021 M  5 zingué (5,3/15/1,2)</Property>
    <Property Name="Key" Type="System.String">TotalReceiptQty</Property>
    <Property Name="Value" Type="System.Int32">12</Property>
  </Object>
</Objects>

Le rechargement de la HashTable
Par contre, de toute évidence, le rechargement sera une autre paire de manche.
Ainsi, les données sont rechargées à l'aide de
$xmldata = [xml](Get-Content c:\test.xml) 
Et tous les élement de la la première HashTable visible à l'aide de
$xmlData.Objects.Object[0].Property
Ce qui produit le résultat:
Name                                                                    Type                                                                    #text                                                                  
----                                                                    ----                                                                    -----                                                                  
Key                                                                     System.String                                                           ArtCode                                                                
Value                                                                   System.String                                                           BZ1933060080                                                           
Key                                                                     System.String                                                           EAN                                                                    
Value                                                                   System.String                                                           5410439120722                                                          
Key                                                                     System.String                                                           NoteRef                                                                
Value                                                                   System.String                                                                                                                                  
Key                                                                     System.String                                                           Descr                                                                  
Value                                                                   System.String                                                           Vis à tête hex. 8.8 Din 933/934 M 6x 80 zingué                      
Key                                                                     System.String                                                           TotalReceiptQty                                                        
Value                                                                   System.Int32                                                            12   

Recomposer les paires Clé-Valeur
Pour accéder le contenu des paire clé-valeur de la première HashTable, il faut exécute le code
$xmlData.Objects.Object[0].Property | foreach-object{ if( $_.Name -eq "Key" ){ $KeyName = $_."#Text" } else { $value = $_."#Text"; "$KeyName=$value" }  }

Ce qui produit le résultat:
ArtCode=BZ1933060080
EAN=5410439120722
NoteRef=
Descr=Vis à tête hex. 8.8 Din 933/934 M 6x 80 zingué  
TotalReceiptQty=12

Recomposer une HashTable devient alors assez élémentaire
$ht = @{}
$xmlData.Objects.Object[0].Property | foreach-object{ if( $_.Name -eq "Key" ){ $KeyName = $_."#Text" } else { $value = $_."#Text"; $ht.Add( $KeyName, $value) }  }

L'affichage de la HashTable à l'aide de la commande
$ht
produit le résultat suivant:
Name                           Value                                                                                                                                                                                   
----                           -----                                                                                                                                                                                   
ArtCode                        BZ1933060080                                                                                                                                                                            
EAN                            5410439120722                                                                                                                                                                           
NoteRef                                                                                                                                                                                                                
Descr                          Vis à tête hex. 8.8 Din 933/934 M 6x 80 zingué                                                                                                                                       
TotalReceiptQty                12     

Rechargement de ma liste de HashTable
Sur base du code présenté juste avant, une liste de HashTable telle que présentée en début d'article (une HashTable de HashTable) se recharge comme suit:
$__list = @{}       
       
foreach( $hashTableNode in $xmlData.Objects.Object ) {
  $ht = @{}

   $hashTableNode.Property | foreach-object{ if( $_.Name -eq "Key" ){ $KeyName = $_."#Text" } else { $value = $_."#Text"; $ht.Add( $KeyName, $value) }  }
           
$__list.Add( $ht.EAN.Clone(), $ht.Clone() )

Conversion text vers entier sécurisée (String to Int)

Conversion non sécurisée
La méthode la plus simple de convertir un texte vers sa valeur entière est de faire un casting à la dure.
Bien qu'il existe d'autres méthodes, je vous propose celle-ci en guise d'exemple

$b = [int]"123"
$b
Affiche:
123

Par contre, s'il y a des caractères alphanumérique dans la chaine source, cela se termine en plantage.
Par exemple:
$b = [int]"123a"
Affiche
Impossible de convertir la valeur « 123a » en type « System.Int32 ». Erreur : « Le format de la chaîne d'entrée est incorrect. »
Au niveau de ligne : 1 Caractère : 11
+ $b = [int] <<<< "123a"
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException


Une conversion sécurisée
La conversion sécurisée est obtenue avec l'opérateur "-as". Si la conversion est impossible, le résultat sera simplement Null.
Voici les deux exemples précédents:
$b = "123" -as [int]
$b -eq $null
Affiche
False

La valeur de $b peut-être utilisée directement
$b
Affiche
123

Et maintenant, s'il y a un problème dans la chaine source:

$b = "123a" -as [int]
$b -eq $null
Affiche... notez que la conversion ne génère pas d'erreur :-)
True

Formattage de string en Power-shell

Avec ses nombreux exemple, l'article "Formatting with PowerShell" est vraiment une excellent référence dans le domaine.

Bonne lecture

mercredi 30 novembre 2011

Enumérer les propriétés den PowerShell

Il y a peu, j'ai eu besoin d'obtenir l'énumération des propriétés d'un objet.
En mode interactif, il suffit de faire:
$myObject | Get-Member

Seulement voila, j'en avait besoin en runtime parce que je voulais énumérer les champs d'un DataRow.
Maintenant que je n'en ai plus besoin, j'ai trouvé une magnifique référence sur le net.

Voici l'article "Create A PowerShell Hash Table From A PowerShell Object" qui extrait les propriétés d'un objet et ses valeurs.
Une perle :-)

$myobject | Get-Member -MemberType Properties |
    ForEach {$hash=@{}} {
        $hash.($_.Name) = $myobject.($_.Name)
    } {$hash} 

A noter que l'opération inverse se code comme ceci:
$peeps = @{
  'Lead'='asmith';
  'Enterprise'='bjones';
  'Edge'='chumperdink';
  'Backend'='dwilford';
  'SED'='fhanns'
}            

$obj = New-Object -Type PSObject -Property $peeps

Source:

lundi 21 novembre 2011

Powershell - Interaction Word Excel Access SqlServer

Voici un chouette article de Code Project d'introduction qui indique comment manipuler des sources telles que Excel, Word, ou encore Access ou SqlServeur.

A Quick Guideline for Microsoft Windows PowerShell: Part 3

jeudi 17 novembre 2011

Accéder à une base de donnée DBase / FoxPro (dbf)

Introduction
Les bases de donnée DBBase sont principalement constituées de fichiers dbf stocké dans un répertoire du disque dur.
Ayant connu ses jours de gloires, aujourd'hui DBase n'est plus que l'ombre de lui même.

Mais qui donc pourrait bien avoir besoin de travailler avec une base de donnée de l'age de pierre?

Et bien, de nombreux logiciels utilisent encore des fichiers DBase.
C'est entre autre le cas dans ma société où l'on utilise encore un vieux logiciel Clipper pour gérer le stock et les commandes.
Ce logiciel DOS, certes vieux, est de loin nettement plus efficace que ses équivalents Windows car il fonctionne entièrement au clavier et est totalement prévisible.

Donc dans l'attente d'une solution satisfaisante, nous maintenons ce logiciel en production.
Mais pour valoriser ces données, il est venu le temps d'accéder à cette base de donnée avec autre chose que Clipper.
C'est la raison même de l'existence de cet article :-)

xBaseView
Avant d'extraire les informations du coeur de la base de données, j'ai besoin d'en connaître la structure pour me familiariser avec elle.
Pour me faciliter la vie, je suis parti à la recherche de soft sur le net.

Si je n'ai pas trouvé d'alternative gratuite, j'ai trouvé xBaseView disponible en version d'essai.
Et dans un premier temps, je trouve ce logiciel suffisamment efficace pour faire mes premières explorations.
Source: xBaseView.com

Il semble même disposer d'une section "SQL" pour permettre de faire des jointures en SQL.
Bien que je ne l'ai pas encore essayé, il semble aussi possible de faire des exportations Excel.

Pour plus d'information:
Accéder à la base de donnée
En vérifiant les pilotes utilisés par xBaseView (cfr menu Aide | Pilotes DB), j'ai remarqué que xBaseView utilisait le pilote ODBC odbcj32.dll made in Microsoft.
De là à penser qu'il est possible d'y accéder en PowerShell, il n'y a qu'un pas.
Je vais donc m'y atteler... mais ce sera l'objet de l'article "Accéder à une base de donnée DBase / FoxPro (dbf) en PowerShell".

Accéder à une base de donnée DBase / FoxPro (dbf) en PowerShell


La connection string
Avant tout, il faut une "Connection String" permettant de mentionner la DB et le Driver à utiliser.
Une visite sur www.connectionstrings.com est bien utile pour nous aider dans cette tâche.
J'ai retenu l'option suivante (voir cette page)
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath;
Après quelques péripéties, j'en suis arrivé à utilisé un OleDB provider avec la ConnectionString suivante:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\stock;Extended Properties= dBASE IV

PowerShell et Accès DB
Je vous propose les lectures suivantes pour vous familiariser avec l'écriture de code d'accès DB en PowerShell.
Installation des drivers ODBC ou Equivalent
Par defaut, mon Win7 64 bit ne dispose que des drivers ODBC pour Sql Serveur.
Voir  l'outil de configuration "Administration des sources de données ODBC"

J'ai donc besoin d'installer un driver ODBC pour attaquer DBase ou tout équivalent.
Après de longue recherche et m'être éclaté plusieurs fois la tête au mur, j'ai opté pour l'installation du Microsoft Jet Engine disponible sur le net.
Selon certaines sources, l'ACE Engine de Microsoft fonctionnerait très bien aussi.
Dans les faits, je sais qu'il est possible d'attaquer un fichier DBase avec un OleProvider Microsoft.Jet.OLEDB.4.0

Windows 64 bits, PowerShell et OleDB ou ODBC
Nous utilisons Windows Seven 64 bits et Powershell pour attaquer la DB.
Tous mes premiers essais terminait inlassablement par le message " Le fournisseur 'Microsoft.Access.OLEDB.10.0' n'est pas inscrit sur l'ordinateur local " (Arghhh!!! pffff!)
C'est a se taper la tête au mur! Si je regarde dans la base de registre, mon provider OLEDB est bien là!

Mais pourquoi ai-je donc ce message d'erreur?
Et bien mon problème réside dans le fait que j'utilise un OS 64 Bits!
D'un côté, Microsoft à bien produit un provider 64 bits pour SqlServeur mais pas de version 64 bits de Jet Engine (moteur DB d'access).
Office 2010 est toujours un logiciel 32 bit, cela inclus aussi Access et le Jet Engine (et Dieu seul sait quoi d'autre).

D'un autre côté, mon PowerShell fonctionne en 64 bits... et accède uniquement les OleDB Provider 64 bits.
En gros, je suis limité à SqlServeur!

La solution: Utiliser PowerShell 32 bits
Heureusement, ce n'est pas sans solution, en effet, il suffit de se rabattre sur une version 32 bits de PowerShell pour pouvoir accéder librement au OleDB Provider 32 comme Jet Engine.
Et ça marche :-)
Gregory Stike aborde assez clairement ce sujet dans son article "How to Tell if PowerShell is 32-bit or 64-bit"
Pour résumer, il faut:
  • Démarrer un "command prompt" en mode Administrateur
  • Exécuter
    C:\Users\Stock>C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Ne pas oublier de modifier l'exécution policy dans PowerShell si vous voulez exécuter un script
    Set-ExecutionPolicy Unrestricted
Lister les Provider OleDB
L'article "List of OLEDB providers on local or remote computer" présente un petit bout de code qui extrait la liste des OleDB provider enregistré dans la base de registre.
Si j'ai un jour du temps, j'en ferai un script PowerShell.
Un exemple concret
  # On 64 Bits OS, this must be executed with the PowerShell 32 bits
  #   C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  
  # DB est stockée dans le répertoire c:\temp\Stock
  $ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\stock;Extended Properties= dBASE IV"
  $conn = new-object System.Data.OleDb.OleDbConnection($ConnString)

  $conn.open()

  $cmd = new-object System.Data.OleDb.OleDbCommand("select * from FILE0030",$Conn)
  $da  = new-object System.Data.OleDb.OleDbDataAdapter($cmd)
  $dt  = new-object System.Data.DataTable

  $da.fill($dt)
    Write-Host "Contenu du DataTable"
  $dt 

  $conn.close() 


mardi 15 novembre 2011

Information Windows en Powershell

Voici un petit script qui en dit long sur la version de Windows exécutant le script PowerShell.
Selon les cas, cela peut-être vraiment très intéressant.

   $regset = get-item "HKLM:Software/Microsoft/Windows NT/CurrentVersion"
   foreach( $i in $regset.GetValueNames() ){ 
      Write-Host $i " = " $regset.GetValue($i) 
   }
Ce qui produit le résultat suivant (dont j'ai masqué une partie des valeurs):
CurrentVersion  =  6.1
CurrentBuild  =  7600
SoftwareType  =  System
CurrentType  =  Multiprocessor Free
InstallDate  =  1294140650
RegisteredOrganization  =  
RegisteredOwner  =  UTILISATEUR
SystemRoot  =  C:\Windows
InstallationType  =  Client
EditionID  =  Professional
ProductName  =  Windows 7 Professional
ProductId  =  00371-OEM-8992671-00007
DigitalProductId  =  164 0 0 0 3 0 0 0 48 48 51 55 49 45 79 69 77 45 56 57 57 50 54 55 49 45 48 48 ...
0 0 0 0 0 0 0 0 0 0 138 54 94 179
DigitalProductId4  =  248 4 0 0 4 0 0 0 48 0 48 0 51 0 55 0 49 0 45 0 48 0 48 0 49 0 55 0 56 0 45 0 57 0 50 0 54 0 45 0 55 0 48 0 48 0 48 0 48 0 55 0 45 0 48 0 50 0 45 0 49 0 48 0 51 0 51 0 45 0 55 0 ...
0 0 0 79 0 69 0 77 0 58 0 83 0 76 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
CurrentBuildNumber  =  7600
BuildLab  =  7600.win7_ldr.110622-1505
BuildLabEx  =  7600.20994.amd64fre.win7_ldr.110622-1505
BuildGUID  =  0d6bd58e-3df7-4453-87c2-093e51a17572
CSDBuildNumber  =  1
PathName  =  C:\Windows

lundi 14 novembre 2011

TkInter: Interface graphique pour Python

Python est un langage vraiment puissant.
Si je ne l'utilise plus pour le moment, je constate à merveille qu'il reste attrayant et que la lecture de quelques lignes de code éveille toujours autant mon intérêt.

Comme précisé dans l'article "PrimalForms: Interfaces graphiques en PowerShell", le principal désavantage des langages de scripting, c'est qu'ils rebutent justement l'utilisateur Lambda par une lacune importante.
Cette lacune, c'est le manque d'interface graphique pour interagir avec l'utilisateur.

TkInter - Interface Graphique pour Python
Au détour d'une lecture de Full-Circle Magazine, je suis tombé sur TkInter à comprendre comme "Tk Interface".
TkInter est presqu'un langage en lui même. Il permet de décrire une interface graphique à l'aide de script en Python.
TkInter est très bien adapté à la programmation Python et la librairie pensée de façon à requérir un minimum de connaissances spécifiques.
Cerise sur la gâteau, en ce qui concerne mon système Ubuntu, TkInter est déjà installé avec l'environnement Python :-)

Mes deux premiers essais étaient littéralement bluffant et brillant par leur efficacité.
Certes, rien à voir avec un développement C# Forms, mais déjà tellement efficace. 
Si vous êtes intéressé, je vous propose de prendre connaissance des deux articles en Français concernant TkInter dans:
  • Full Circle Mag, No 51, Développement Ubuntu (pdf)
  • Full Circle Mag, No 52, Zone Minder CCTV - partie 1 (pdf)
Ressources:



dimanche 13 novembre 2011

Rotation des images dans Open-Office.org

Les habitués de Word seront certainement très déstabilisé.
Contrairement à ce que l'on pourrait penser, il ne suffit d'insérer l'image dans le document et d'afficher les propriété de cette dernière et de demander une rotation.
Que né-ni, ce n'est pas comme cela que ça fonctionne.
Et si vous ne savez pas comment faire, cela peut vous prendre un certain temps.

Merci aux forums parce qu'il y a moyen de chercher pendant des heures.
Voici donc la marche à suivre car si vous copiez ou insérez une image dans OpenOffice Writer, vous ne pourrez pas la pivoter.

  • Il faut la copier ou l'insérer dans OpenOffice Draw
  • Puis faire une rotation à l'aide du volet "Rotation" de la fenêtre "Position et Taille".
    La fenêtre "position et taille" peut être affichée à l'aide du menu contextuel "Position et taille..." disponible sur l'image.
  • Puis copier / coller l'image de OpenOffice Draw dans OpenOffice Writer
Aussi très intéressant à savoir:
Si l'image est ouverte dans "OpenOffice Draw" et qu'ensuite elle est copié/collé immédiatement dans "OpenOffice Writer"
Alors il est possible de modifier l'orientation dans "OpenOffice Writer" à l'aide du menu contextuel "Position et Taille..." (Onglet "Orientation").


Franchement, il faut le savoir!

samedi 12 novembre 2011

PrimalForms: Interfaces graphiques en PowerShell

Les langages de scripting rendent de nombreux services dans le monde Unix depuis des lustres.
Dans un monde dominé par Windows, il était fort regrettable de ne pas disposer d'un outil puissant.
Heureusement, Microsoft à fini par combler cette lacune avec PowerShell... et il faut bien avouer que même arrivé tardivement PowerShell est une réussite aussi aboutie de Bash ou Python.

L'utilisateur Lamba et les scripts
PowerShell c'est beau mais c'est du scripting.
Si cela parle aux administrateurs et développeurs, l'utilisateur final n'y entend absolument rien.
Une interface graphique pour contrôler un script, c'est quand même mieux pour le commun des mortels.
Mais comment faire?

Une solution pour PowerShell
Python dispose de TkInter et quelques essais révèle déjà sa toute puissance.
Il est simple et efficace, visiblement bien adapté aux langages de scripting.
Malheureusement, TkInter ne semble pas exister pour PowerShell (sniff).
Je suis donc parti à la recherche d'un équivalent sur le net et j'ai trouvé la liste d'article suivant:
L'un des articles fait référence à PrimalForms Community Edition, un outil disponible gratuitement (à confirmer), permettant de faire des interfaces graphiques pour PowerShell.

NB:
Cet autre article jette aussi quelques mots sur PrimalForms dans un article.
Selon l'auteur, le résultat serait assez "bluffant".

 

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" 

mardi 1 novembre 2011

DnsStuff - Comment obtenir les informations DNS facilement

Qui aura passé par DNS.BE saura qu'il est contraignant d'obtenir des informations de type DNS.

A côté de cela, il existe le site www.dnsstuff.com qui permet de faire une recherche WhoIs, un Trace Route ou de retrouver des informations à partir de l'adresse IP en toute simplicité depuis une interface Web.

Franchement, pourquoi se casser la tête ?

mardi 25 octobre 2011

Internet explorer, CSS et affichage des hyperliens

La manipulation de l'affichage des hyperliens avec une feuille de style et Firefox est assez facile.
Le net regorge de documentation et il est facile d'obtenir le résultat voulu (en l’occurrence des liens avec ,par défaut, un format visuel particulier) .

Par contre, comme c'est souvent le cas, les choses se corsent lorsqu'il s'agit d' Internet Explorer.
En effet, ce dernier est beaucoup plus pointilleux et l'on arrive vite à s'arracher les cheveux.

Dans pareille circonstance, trouver un lien et des exemple utiles et pratique sont toujours les bienvenus.
Je vous propose donc de jeter un oeil sur l'article www.echoecho.com/csslinks.htm

Ce qui produit la déclaration de style suivant:
    A.gglink:link {color: #11119E; text-decoration: underline}
    A.gglink:visited {color: #11119E; text-decoration: underline}
    A.gglink:active {color: #11119E; text-decoration: none}
    A.gglink:hover {color: #11119E; font-weight:bold; }  

jeudi 13 octobre 2011

Leadership ou Les bonnes pratiques d'un management efficace

Le management est avant tout une question de leadership.
Le manager est un leader, il est celui qui se retrouve à la tête de son équipe et la guide.
Pour s'aider, il aura le choix du bâton ou de la carotte... quoiqu'il existe une race de manager plus respectueux de ses collaborateurs et plus investit dans sa mission de guide.
De celui-là, on dira qu'il a du leadership.
Ce manager sera un leader.
Quand il fera face aux difficultés et montera au front, il ne sera pas seul.
Ce leader sera suivi de ses collaborateurs non pas par obligation mais parce que ses collaborateurs et lui auront établit une relation de confiance et respect mutuel... ils seront solidaires.

Le leadership c'est...
Le leadership est la capacité de gérer et de développer une équipe. Il repose sur le savoir-faire qui pourrait se décliner de la sorte:
  • conviction que l'apprentissage permanent est préférable à une attitude fondée sur l'idée que tout est sous contrôle ;
  • capacité de développer l'estime de soi chez les autres ;
  • volonté de poser des questions, d'accepter ses faiblesses, et d'écouter les réponses ;
  • capacité d'apprécier les autres et de cultiver,une sensibilité orienté vers autrui ;
  • capacité et désir de développer le leadership chez ses collaborateurs ;
  • capacité de gérer la critique et d'écouter les problèmes des autres ;
  • capacité de développer une vision pour le futur ;
  • privilégier une approche ancrée sur des valeurs qui nourrissent l'innovation et les initiatives ;
  • capacité de communiquer à tout niveau ;
  • être à même d'assurer l'accompagnement, le conseil et le coaching de ses collaborateurs.
De tels manager existent, j'en ai déjà rencontré deux durant ma carrière.

Sources:
  1. Le burn out, comprendre et vaincre l'épuisement professionnel de Suzanne Peters et Dr Patrick Mesters, pg 87, Edt Marabout, mai 2009, ISBN 978-2-501-05643-4.
    Disponible ici sur Amazon.fr.
  2. Chatteryee, D., "Reaaly leading: leadership that is authentic, conscious, and effectivee by", Business. The Ultimate Resource, New York, Perseus Books Group, 2002, p. 220-223.

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

lundi 29 août 2011

Le format WinMail et WinMail opener

A l'ère des WebMail, il arrive régulièrement que l'on se retrouve avec un fichier dat en attachement.
Ce fichier dat étant supposé contenir un autre e-mail... avec pièce jointe qui vous a été forwardé.

Essayer de sauver le fichier sur le disque pour ensuite l'ouvrir avec un double-click ne mène nulle part... Arrggg, il y contient une facture pdf dont j'ai absolument besoin.

Le format WinMail
Le problème réside dans le fait que le format employé est WinMail, et que ce dernier n'est pas reconnu par l'explorer de Windows.
Si vous ouvrez votre fichier avec notepad (attention à ne pas le modifier), vous pouvez alors apercevoir la chaîne de caractère suivante:
IPM.Microsoft Mail.Note 1

La solution - WinMail opener
Sauver le fichier sur votre disque et utiliser l’astucieux programme WinMail Opener de EOLSoft (logiciel libre) pour allez récupérer le contenu du fichier dat.
Source: WinMail opener
 Le logiciel est également disponible en téléchargement depuis cette page.


jeudi 25 août 2011

Affichage des PNG sous IE5.5 et WinXP

Mais qui utilise encore IE5.5? Et bien toutes les personnes ayant encore une vieille installation de Windows XP.
Forcement, vieille machine, vieille OS... donc vieille version d'Internet explorer.

Il se fait que sur une machine aussi vieille, il est possible d'utiliser des requêtes de type XmlHttpRequest à partir de javascript (via jQuery)... par contre, il n'est pas possible de voir des document pdf en ligne parce que Google Doc Viewer utilise le format PNG.

Seule solution, faire en sorte que Windows XP affiche les PNG.
Il semblerait que toutes les versions de WinXP ne soient pas touchées par le phénomène.
Pour ceux qui on en quand même des difficultés, j'ai trouver un article intéressant ici...

samedi 20 août 2011

Le coût des improductifs

Qu'est ce qu'un improductif?
Le terme "improductif" est souvent utilisé par les employeurs pour désigner ces personnes qui ne rapportent pas directement de l'argent.
Il ne s'agit pas ici de personnes qui font du tire au flan ou font tout leur possible pour en faire le moins possible.
Les improductifs dont-il est question sont plutôt ces secrétaires, ces comptables ou ces gestionnaires (de stock, de clients, etc) qui ne produissent pas à proprement parler.
Ces improductifs n'ont pas l'air aussi affairé que les ouvriers de production qui assemblent, construisent, montent ces machines, appareils et marchandises que l'on retrouvent tôt ou tard dans les rayonnages de magasins. Ces improductifs n'ont pas l'air non plus de ramener de l'argent à la société comme le font les services de ventes (vendeurs, représentants, etc).

Pourquoi cet article sur le cout des improductifs?
Et bien, c'est parce que ce cout des improductifs est souvent utilisé par les employeurs pour mettre en lumière le fait que ces dits "improductifs" coutent chère à la société... et laisse malheureusement le sous entendu "qu'ils ne font pas grand chose pour rapporter de l'argent".
Dans le même ordre d'idée, c'est aussi cet argument des "improductifs" qui est utilisé pour geler les engagements dans certains services alors que l'on se retrouve en pleine période de reprise économique.
Les patrons regardent avant tout à dégager du bénéfice... et donc à limiter les coûts.
L'excuse invoquée de geler les engagements des improductifs tombe a point avec pour conséquence d'augmenter la pression sur ces "services d'improductifs". Et en pleine reprise économique, Dieu sait que la quantité de travail augmente rapidement mais surtout fortement.
Quelle pression sur ces improductifs qui dans certains cas font des Burn-out...

Cet article a aussi faillit s'appeler "la part des improductifs" car il démontrera que les dits "improductif" ne sont pas si improductifs que cela.

Critique de cas pratiques
Cas 1: le service comptabilité
Mon épouse travaille dans le service comptabilité d'une société d'approximativement 600 personnes.
Suite à la petite récession économique de ces quelques dernières années (jsqu'en 2011), la société à décidé de geler les engagements plutôt que d'opter pour une série de licenciement sec.
Maintenant que l'activité économique redémarre, les engagements sont tolérés sous conditions. L'une d'entre elles est, en autre, que cela concerne directement les productifs.
Il est donc possible d'engager (sous conditions) du personnel pour les chaînes de productions, les opérateurs d'approvisionnements, etc.
Par contre, pas question d'engager secrétaire ou personnel dans les autres services tels qu'informatique, service des achats et... la comptabilité.
La société fait fonctionner son service financier avec 8 personnes et un intérimaire (récent) hors management... pour une société de 600 personnes.
La production augmente, donc les achats, les mouvements de stocks, les factures, les documents de douanes, la pression des clients et des fournisseurs. En gros, le processus s'accélère, s'emballe MAIS pas question d'engager un improductif de plus dans le service financier pour supporter l'effort.

L'erreur de jugement:
Contrairement à ce que l'on pourrait penser, un comptable (ou toute personne d'un service financier) n'est pas un improductif.
Et pour cause, il est un des rouages essentiel de la société.
S'il ne traite ni les factures, ni les paiements suffisament prestement c'est toute la production qui va gripper à un moment ou a un autre.
Si le rythme de production augmente, les documents a traiter augmentent aussi.
Difficile donc de réduire le fonctionnement financier à une charge "improductive".

La conséquence:
Elle est simple, les employés seront de plus en plus débordés... la société accumulera du retard de traitement sur le plan financier... ce qui entrainera des heurts de production voire des situation d'urgence à répétition.
Une fois dans cette situation, les problèmes de santé ne tarderons plus à faire leur apparition.

Pour une plus grande équité:
Pour rendre la situation plus équitable, il ne faudrait pas considérer que le seul service de production représentre 100% de la production.
Il faudrait ventiler le pourcentage de la production sur les divers services dont dépend la bonne marche productive.
Ainsi, a titre d'exemple, l'on pourrait répartir les 100% de la production comme suit:
* 60% pour la chaine de production directe
* 20% pour les services d'envoi/réception
* 7% services informatiques (qui supportent la production)
* 7% services financier (qui supportent aussi la bonne marche)
* 6% pour le restant des services dit "improductif" (comme les secrétaria, HR, etc).

Ainsi donc, il serait possible de considérer des engagements en rapport avec la vraie valeur productive des différents services.

Cas 2: Le gestionnaire de stock
J'ai récemment changé d'orientation professionnelle et suis passé de la programmation informatique à gestionnaire de stock, support informatique et tâches administratives diverses dans le futur.
A ce titre, j'ai eu l'occasion de me rendre compte que mon nouvel emploi était considéré comme une charge brute, de type "improductif" que la société devra absorber.
En effet, il est difficile de voir un quelconque rapport productif dans mon emploi si on le met en balance avec les représentants qui eux démarchent les clients et semblent, eux, rapporter l'argent au bercail.
Si les propos étaient dit sans aucune animosité ni aucune intention de blesser, j'en ai conçu une certaine gêne.
Et pour cause, je pense qu'ici aussi il y a une erreur de jugement notoire.

L'erreur de jugement:
A titre d'exemple, il arrive fréquement que les représentants appellent directement la société pour consulter la disponibilité du stock ou bien encore faire envoyer un fax de commande.
Derrière le fax et le téléphone se trouve donc un employer administratif qui s'efforce de transformer l'information en commmande concrête dans un système informatisé et par la suite à préparer la dite commande pour qu'elle soit envoyée par colis, voire même être préparée pour un dépôt par le représentant.
Dans ce cadre productif, le représentant est-il le seul maillon de la chaîne à produire de l'argent? A votre avis, que se passerait-il s'il n'y avait pas les salariés dit "improductif" derrière les démarches commerciales des représentants? Même l'acte de facturation est essentiel à la survie de la société.
Mais encore, que pourrait bien vendre le représentant si le stock n'est pas correctement achalandé? Quel délai de livraison pourrait-il assurer?
A l'inverse, sans représentant, le carnet de commande resterait probablement bien vide... et la société en préparation d'un futur dépôt de bilan.

Une plus grande équité:
Encore une fois, et comme c'tait le cas avec le comptable, il faudrait envisager une ventilation de l'aspect productif.
Encore une fois, le représentant n'est pas le seul élément productif produisant une plus value dans la société. S'il est le seul à travailler (à produire), l'argent ne rentrera pas dans les caisses.
Ici aussi, il faudrait envisager une ventilation des 100% de la production financière de la société en rapport avec l'importance des différents postes de la chaîne logistique.
* 60% pour le démarchage clientelle
* 20% pour les services d'envoi/réception/tenue de stock.
* 10% Le support de commande et aide techniques (informatique)
* 10% Restant des services dit "improductif" comme la facturation, suivit clientelle, etc. Des services pourtant essentiels.

Conclusion
Contrairement à ce que l'on pourrait penser, il existe des possibilités de valoriser le travail des improductifs.
C'est aussi une façon de reconnaître leur place dans les rouages de la chaîne productive et donc leur réelle nécessité.
Valoriser le travail de l'improductif c'est aussi valoriser l'employer qui s'investit dans son travail.
En effet, réduire un employé au simple rang d'improductif c'est le destituer du résultat de ses efforts mais plus important encore, c'est aussi négliger sa valeur sur le plan humain.
Les hommes ne sont pas des machines, les traiter comme des machines, c'est s'exposer à des problèmes de grippage.

Livres lus en 2010

Le concours de Millénaire vol 1-2 & 3 de Roger Zelasny du 20 décembre au 28 février 2011
Le syndrôme Copernic de Henri Loevenbruck du 06 décembre au 19 décembre 2010
Alice au pays des merveilles de Lewis Caroll du 24 novembre au 05 décembre 2010
La variété Andromède de Michael Crichton du 12 novembre au 22 novembre 2010
Autre Monde - vol 3 - Le coeur de la terre de Maxime Chattam du 27 octobre au 11 novembre 2010
Les sciences racontées a ma petite fille de Henriette & Gérard Walter du 11 octobre au 26 octobre 2010
L'univers de la Science  - Chapitre 4 "La terre" de Isaac Asimov du 01 octobre au 10 octobre 2010
Napoléon - vol 2 - Le soleil d'Austerlitz de Max Gallo du 23 Août au 30 septembre 2010
Sauve-moi de Guillaume Musso du 18 Août au 22 Août 2010
Napoléon - vol 1 - Le chant du départ de Max Gallo du 22 juillet au 17 Août 2010
La prophétie Charlemagne de Steve Berry du 10 juin au 22 juillet 2010
Et après de Guillaume Mossu du 06 juin au 09 juin 2010
Sanctionner sans punir (partie 1) de Elisabeth Maheu du 07 mai au 05 juin 2010
Parce que je t'Aime de Guillaume Musso du 02 mai au 06 mai 2010
Oscar Wilde et le meurtre aux chandelles de Gylas Brandreth du 02 avril au 30 avril 2010
L'univers de la Science  - Chapitre 3 "Le système solaire" de Isaac Asimov du 14 mars au 01 avril 2010
Oscar et la dame en Rose de Eric Emmanuel Schmitt du 13 mars au 14 mars 2010
Prisonnier du temps de Michael Crichton du 26 janvier au 13 mars 2010
L'enfance muselée de Catherine Bonnet du 19 janvier au 25 janvier 2010
L'univers de la Science  - Chapitre 1 "Qu'est-ce que la Science"  - et Chapitre 2 "L'Univers" de Isaac Asimov du 08 janvier au 18 janvier 2010
Autre Monde - vol 2 - Malronce de Maxime Chattam du 02 janvier au 07 janvier 2010

mercredi 10 août 2011

Open Source Web Design

Il n'y a pas que des programmes qui peuvent être open-source.
Il existe aussi des design de Site Web, très pratique si l'on désire monter un petit site Web pas cher.

Allez donc jeter un oeil sur OSWD alias Open Source Web Design.

A la recherche d'un Design approprié pour ma société, j'ai retenu la liste suivante pour la construction d'un site statique:

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 21 juin 2011

Que faisait t'on de mieux en 1984 en matière d'ordinateur?

Voila, depuis que j'ai découvert Arduino (voir arduino.domeu.net), je passe beaucoup de temps avec mon fer à souder et un compilateur C que dans le monde PC.
Vous l'aurez remarqué, ce blog est un peu au ralenti :-)

Quoi qu'il en soit, au détour d'une nouvelle, j'ai découvert cette magnifique petite vidéo qui démontre bien qu'en 1984, les acteurs du monde informatique étaient capable de concevoir des foudres de guerre !!!
Microsoft devrait peut-être en prendre de la graine.

Ce n'est pas mon genre de diffuser une vidéo comparative mais je crois que cela mérite quand même réflexion.

Bonne séance cinéma :-)

jeudi 19 mai 2011

Arduino Notepad est né

Dans l'article "Arduino - une plateforme de prototypage Open-Source", je m'intéressai à une plateforme de développement électronique.

Si je n'ai pas écrit beaucoup d'article ces deux dernières semaines, c'est justement parce que je me suis intéressé un peu plus à Arduino.
En fait, je m'y suis tellement intéressé que je replonge un peu dans l'électronique, la programmation de micro-contrôleur et que j'ai aussi fait l'achat d'un kit de développement "Arduino Inventor" pour la modique somme de 77eur htva.
 
J'accumule déjà quelques informations et il serait utile de les partager.
Par contre Developer Notepad n'est pas le meilleur endroit pour le faire, je crois que ce blog aborde déjà suffisamment de sujets différents.

J'ai donc décidé de créer un nouveau blog nommé "Arduino Notepad" dans lequel je traiterai les sujets relatifs à l'environnement Arduino.
De son côté, "Developer Notepad" continuera son petit bonhomme de chemin mais certainement à un rythme moins soutenu.

Vous pouvez retrouver le blog "Arduino Notepad" aux adresses suivantes:
Mise à jour du 22/07/2011
Un projet dérivé complémentaire est également né:

lundi 16 mai 2011

Un équivalent PSPAD pour Ubuntu

Quel développeur n'a jamais croisé la route de PSPad sous Windows?
C'est un incontournable... pourtant, il n'existe pas sous Ubuntu et c'est bien regrettable.

Ayant besoin d'un bon éditeur pour faire quelques tests en Python, je me suis mis à la recherche d'équivalents pour Ubuntu.
Si GEdit est simple, il est loin de rivaliser avec PSPad quand à Eclipse, c'est un canon pour tuer une mouche (je veux juste faire quelques scripts).

Octobre 2012 - Mise à jour
TEA - orienté édition de test
Ca y est, j'ai trouvé! 
TEA est un logiciel incroyable riche qui offre bien plus que ce que l'on peut attendre d'un éditeur de texte.

Références:

Geany - orienté développement
Hourra, encore mieux!
C'est en documentant TEA que j'ai également découvert Geany, plus orienté "développeur".
Geany est un puissant et convivial éditeur de texte GTK (idéal sous Gnome). Pour le développement, il est certainement le plus proche de PSPAD.
Il est remplit d'option et derrière les fonction d'édition de texte habituel, l'on retrouve également différents supports tels que: support de projets, terminal intégré, auto-indentation, support highlighting, retour à la ligne, intégration des outils MAKE, plugins et divers options de configuration.

Geany est une excellent recommandation pour ceux qui cherche un excellent environnement d'édition/programmation sous Gnome.

JED
Une mention toute spéciale pour JED.
JED est un éditeur de texte en mode terminal ULTRA complet et certainement le plus aboutit. Il épaulera vos besoins là où une interface graphique est trop gourmand en ressource.


Truc & astuce: 
JED est prévu pour fonctionner en mode terminal.
L'ouverture du menu se fait donc à l'aide de F10.
Si vous exécutez JED dans un émulateur de terminal, F10 active le menu de l'émulateur! Pour activer le menu de JED il faut alors utiliser la combinaison de touche Echap+M

Ressource
L'article "20 Text Editor for Linux [overview & screenshoot]" est une excellente source d'information

Mai 2011 - Résultat de mes premières recherches

BlueFish
BlueFish est à la base un éditeur pour faire du développement Web mais supporte d'autre langages de programmation (comme Python).
Il peut s'avérer un être un excellent éditeur de texte (nettement plus évolué que gEdit).
Par contre il est très/trop orienté WEB en ce sens que les toolbars disponibles n'offrent que des options en relations avec l'édition de page web. Dommage!
Plus d'information sur le site officiel.
 
sudo apt-get install bluefish

EMacs
Je ne l'ai pas encore essayé mais emacs revient souvent dans les différentes fils de discussion.

Komodo
Komodo Edit est un environnement de développement professionnel et payant.
Le site Komodo propose également un éditeur de texte Komodo Edit qu'il est possible d'installer gratuitement.
Plus d'information sur le site officiel de Komodo Edit.
J'ai personnellement écarté cette solution parce que:
1) Elle n'est pas accessible via la logitèque Ubuntu
2) L'éditeur sert de support pour un produit commercial payant.