Recherche sur le blog

jeudi 31 mai 2012

[Divers] Les joies du code

Aujourd'hui, on m'a fait découvrir un site humoristique sur les joies du coding: le site, présenté sous forme de blog, illustre des situations vécues, durant nos études ou nos différents boulots, par des images animées tirées de la toile, parfois en les exagérant, malgré le fait que l'on se reconnaisse dans certaines d'entre elles. Par exemple, voici le genre de tête que nous faisons quand nous trouvons le morceau de code qui causait l'erreur ailleurs que dans celui où nous étions. L'auteur, Nicolas Lecointre, nous expose plusieurs autres situations : comment se sent-on quand on poste une réponse sur Stackoverflow ? Comment prend-on le fait de devoir remplir une base de données pour effectuer des tests ? Toutes ces situations sont toujours introduites par un "quand" pour bien insister ! Si vous êtes un développeur, vous devriez comprendre. Si vous n'en êtes pas un, vous comprendrez la majeure partie sauf en cas de termes compliqués.


Pour en voir plus, rendez-vous sur "Les joies du code".

mardi 15 mai 2012

[Java] Utiliser ZXing en Java pour générer un QR Code simple

Nous avions vu il y a très longtemps qu'il existait une librairie spécifique appelée Zebra Crossing, ou encore ZXing, en open-source.  Elle permet de gérer (lire ou générer) différents formats de codes-barres en 2D : code 128, EAN8/13, Data Matrix, UPC-A/E, et même des QR Code ("Quick Response Code"). Il fait partie de la dernière génération, même s'il n'est pas nouveau, car il peut contenir bien plus de données qu'un simple code au standard UPC par exemple. Selon sa version, sa gestion de la correction d'erreur et le type de données, il peut stocker entre 1.817 (Kanji/Kana) et 7.089 caractères (numérique seulement). Pour de l'alphanumérique, on ne peut dépasser 4.296 caractères.

Pour générer un simple code avec des données reçues par un programme externe ou que l'on stocke dans une chaine, voici comment il faut procéder. On va générer un simple QR Code de 300x300 pixels, sur base d'une chaine qu'on ré-encode dans un character set ISO-8859-1. Si vous avez une solution plus fiable, plus complète ou plus performante, même avec d'autres librairies, n'hésitez pas à partager.
         
Comment faire ?

1) Utilisez au minimum les packages suivants. L'un d'eux, "MatrixToImageWriter", nous servira à convertir le code en image (par exemple, dans le format PNG). "QRCodeWriter" nous permet d'écrire et de stocker les données dans notre code. Vous devriez trouver la documentation nécessaire sur la page officielle de ce projet.


2) Stocker les données dans une chaine classique (String). Dans mon exemple, j'ai ouvert un fichier avec un BufferedReader (qui demande un objet de type FileReader à sa création), et j'ai lu ligne par ligne grâce à la fonction readLine().

3) Une fois votre chaine complète, il va falloir en récupérer le contenu. Pour cela, on récupère les caractères sous forme d'un tableau de bytes (getBytes () sur la chaine créée). Ensuite, on crée une nouvelle chaine de données, qu'on appellera ici "data", en lui passant en paramètres le tableau de bytes, ainsi que le character set.

        
4) Nous allons déclarer un nouvel objet de la classe BitMatrix, qu'on appellera "matrix", ainsi qu'initialiser un objet QRCodeWriter en une variable "qr". On appelle ensuite la fonction "encode()" d'objet "qr", qui nous retournera un objet de type BitMatrix. Elle requiert 4 paramètres : la chaîne qui contient les données, le format du code-barres (constante), et la taille en pixels (largeur/hauteur). Il faudra ensuite l'exporter, car il n'est pas encore vraiment "exploitable" en l'état.


5) Pour exporter, nous devons utiliser une fonction de la classe MatrixToImageWriter, qui est writeToStream(). Elle nécessite trois paramètres : le code-barres à convertir (objet BitMatrix), le format d'image (chaine de caractères, qui contiendra par exemple "png"), et enfin le fichier destination (sous forme d'objet FileOutputStream).


6) N'oubliez pas de fermer votre fichier grâce à la fonction close(). Tout objet doit être correctement libéré ou fermé, c'est fondamental.

7) Ne prenez pas à la légère les traitements d'exception : ils ont une place importante dans votre code, donc utilisez-les ! Les erreurs doivent toujours être gérées pour afficher un message adéquat aux utilisateurs de votre logiciel.

Vous obtenez alors un code QR : pour le vérifier, il vous faudra un scanner qui permet de lire ce type d'image, ou même un smartphone récent, disposant d'une bonne caméra, et fonctionnant sous Windows Phone, Android ou iOS. En effet, on trouve pour ces systèmes, une pléthore d'applications qui permet la lecture du contenu. A vos téléphones !

mercredi 9 mai 2012

[WD17] Forcer le thème XP/Vista dans la fenêtre

Dans WinDev 17, l'option "Forcer le thème actif des champs" n'est pas présente dans l'onglet "Style" de la fenêtre lorsque l'option est désactivée. Pour la faire apparaitre pour une fenêtre spécifique, il faut afficher le "Modifieur" et basculer une option bien particulière. Rendez-vous tout d'abord dans le menu Affichage, puis ensuite Barre d'outils, Volets, et cochez "Modifieur". Il permet, comme l'indique l'aide, de changer directement des caractéristiques d'un champ sans passer par sa fenêtre de propriétés.


Une fois celui-ci affiché, sélectionnez la fenêtre concernée puis localisez l'option "Thème XP" dans la catégorie "Style". Double-cliquez pour la faire basculer à "Oui". Tous les champs de la fenêtre adopteront alors le style XP/Vista, et l'option sera de nouveau apparente dans la fenêtre de propriétés, afin de pouvoir la désactiver, au cas où. Cette astuce est tirée de l'aide officielle.