Le retour aux affaires :)

Oulala, que de temps passé depuis mes derniers écrits. A peu de choses près, deux mois se sont écoulés depuis mon dernier billet.

La raison de cette absence est toute simple et tient en trois mots : Game of Thrones. J’ai littéralement dévoré les 5 saisons de cette série TV. Vu que mon épouse n’a pas du tout accroché, j’ai regardé la plupart des épisodes dans le TER, empiétant donc sur mon temps d’écriture car comme vous le savez, j’écris principalement durant mes trajets maison <-> boulot.

Donc non, ce blog n’est pas encore mort ! Le rythme a simplement ralenti. Et oui, entre la famille et le boulot, pas facile d’y investir du temps.

Niveau pro, ces dernières semaines ont été relativement intenses. Nous avons mis en prod une nouvelle version de l’appli web que nous développons et tout ne s’est pas vraiment passé comme prévu. Là aussi, ça n’a pas facilité un quelconque investissement dans le blog.

Niveau perso, que du bonheur. Fêtes de fin d’années en famille, puis entre amis, pour finir à nouveau en famille. Bref, comme dit : que du bonheur.

Voilà, il ne me reste plus qu’à vous souhaiter une bonne et heureuse année 2016.

Portez-vous bien. 😛

SQL Server : Générer un hash MD5 en Transact-SQL identique au hash MD5 MySQL

Comme indiqué dans mon billet précédent, je travaille actuellement sur une migration de base de données de MySQL vers SQL Server. Ce billet est un mémo personnel (donc, un peu rédigé à la va-vite) mais qui sait… il pourrait vous être utile. ^^

SQL Server et MySQL ne retournent pas le même résultat lors d’un hash MD5 :

Différence entre hash MD5 SQL Server et MySQL
SQL Server MySQL
 HASHBYTES('MD5', 'Test')   MD5('Test') 
 0x0CBC6611F5540BD0809A388DC95A615B   0cbc6611f5540bd0809a388dc95a615b 

 

Comme vous pouvez le constater, les résultats ne sont pas tout à fait identiques. Si vous souhaitez obtenir un hash MD5 en Transact-SQL rigoureusement identique à un hash MySQL, la commande à saisir est :

CONVERT(NVARCHAR(32),HASHBYTES('MD5', cast('Test' as varchar)),2)

 

Pour les versions antérieures à SQL Server 2008, la fonction CONVERT() est inopérante. Préférez :

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',cast('Test' as varchar))),3,32)

 

Et le tour est joué ^^

PS : j’avoue ne pas avoir le temps de détailler la commande. Si vous souhaitez de plus amples explications, n’hésitez pas à me contacter. 🙂

Php – SQL Server : SQLSTATE[IMSSP]: An error occurred translating string for input param 1 to UCS-2

Actuellement, je travaille sur une migration de SGBD. En effet, je vais passer d’un environnement MySQL à un environnement Microsoft SQL Server. D’un point de vue PHP, si la surcouche PDO (pour info, j’utilise l’ORM idiorm) facilite grandement la migration, je tombe parfois sur des erreurs qui me laissent pantois.

Pas plus tard qu’aujourd’hui, en testant l’insertion d’un enregistrement contenant des caractères spéciaux (ex. Raphaël) via formulaire, je me suis retrouvé face à cette erreur :

Erreur : SQLSTATE[IMSSP]: An error occurred translating string for input param 1 to UCS-2: Il n’y a pas de caractère correspondant au caractère Unicode dans la page de codes multi-octet cible.

 

Le problème semble provenir de l’encodage UTF-8 qui est mal pris en compte par le driver sqlsrv. Après de longues heures à parcourir les forums, wikis et autres joyeusetés, j’ai enfin trouvé la solution.

En fait, il suffit simplement d’ajouter (avant le script de connexion au serveur SQL Server) :

mb_internal_encoding( 'UTF-8' );

 

Et le tour est joué ! ^^

Netbeans : masquer les TODOs des composants externes

Je travaille actuellement sur un projet dans lequel j’utilise pas mal de composants externes (ex. Twig, Idiorm, datatables, TWB, etc.). Comme tout développeur, je parsème mon code de diverses annotations, dont les fameux TODO.

Malheureusement, lorsque je souhaite afficher la liste des TODOs de mon projet, je retrouve les miens noyés au milieu des TODOs des composants externes. Et autant vous dire qu’il y en a un paquet !

Netbeans todo list

 

Plutôt gênant, n’est ce pas ?

 

Après quelques recherches, j’ai enfin trouvé le moyen de créer un filtre pour n’afficher que mes TODOs. Pour ce faire :

Netbeans Action Items Menu

 

Netbeans Action Items Filter

 

Et le tour est joué ^^

Si vous avez d’autres astuces sympathiques pour Netbeans, n’hésitez pas à m’en faire part. 🙂

Ma logithèque : les indispensables

Comme énoncé dans un de mes précédents billets, j’ai procédé il y a peu à la réinstallation de Windows sur mon Yoga. Je vous propose aujourd’hui un petit tour d’horizon des logiciels composants ma logithèque de base.

Le premier logiciel que j’installe est bien entendu LE navigateur : Firefox !

Ensuite, je passe à l’installation des divers outils composants mon environnement de développement.

Type Sous Windows Sous GNU/Linux
Environnement de développement
  Serveur local Apache (MySQL Php) WampServer LAMP
  Emulateur de Terminal Cmder Yakuake (si KDE)
  Git MySysGit git
  Git dans explorateur de fichiers TortoiseGit RabbitVCS
  Dépendances PHP composer
  IDE Netbeans
  Outil MySQL MySQL Workbench
  Client FTP Filezilla
  BDD sécurisée de mots de passe Keepass

 

Développer, c’est bien, mais il me faut également divers logiciels nécessaires aux travaux « bureautiques ».

Type Sous Windows Sous GNU/Linux
Bureautique
  Suite bureautique Microsoft Office LibreOffice
  Prise de notes OneNote
  Finances personnelles BankPerfect
  Gestion des archives 7zip
  Captures d’écran GreenShot Shutter
  Traitement d’images Gimp (+ Paint.net sous Windows)
  Lecteur audio (travail en musique ^^) Clementine

 

Tous ces outils me sont indispensables que ce soit d’un point de vue professionnel ou personnel. Bien entendu, il s’agit là d’une base. Ma logithèque s’étoffe ensuite au fur et à mesure de mes besoins mais globalement, ce sont là les logiciels que j’utilise le plus au quotidien.

Mes extensions Firefox #5 : Empty Cache Button

Suite de la série de billets dédiées aux extensions Firefox que j’utilise quotidiennement. Après µBlock, Ghostery, Close All Tabs et Colorzilla, je vous propose aujourd’hui de découvrir l’extension Empty Cache Button : simple, pratique et efficace !

Lorsqu’on travaille sur le design d’une page web, la mise en cache des contenus (Images, photos et/ou icônes) peut s’avérer rapidement pénible. Chaque fois que l’on modifie une image, une icône, une photo ou autre, il faut « vider le cache » pour rafraîchir la page et voir le résultat à l’écran.

Pour vider le cache, 3 possibilités :

– la solution contraignante : Menu > Options > Avancé > Réseau > Vider maintenant :

Firefox menu vider cache

 

– la solution semi-contraignante car il faut à chaque fois décocher les cases pour ne garder que « Cache » de coché : Ctrl + Shift + Suppr :

Firefox Ctrl + Shift + Suppr

 

Et puis il y a Empty Cache Button. Un clic sur la petite icône IMG ou un appuie sur la touche F9 : Bouton Empty Cache Button

Empty Cache Button Success

 

Et le tour est joué ^^

Que disais-je ? Ah oui : simple, pratique et efficace. ^^

Septembre : un mois compliqué

Billet rédigé le 30 septembre dernier. Je n’ai malheureusement pas eu le temps de le publier plus tôt.

Illustration automne

Comme je vous le disais dans mon billet précédent, ce mois de septembre fut très intense. Ma femme et moi avons dû nous habituer à un nouveau rythme car l’un de nos petits bonshommes va maintenant à l’école. Nous avons de la chance, tout se passe très bien : il aime l’école. Bon, en même temps, la première année de maternelle n’est pas non plus la plus compliquée. Pourvu que ça dure…

Comme si s’adapter à un nouveau rythme ne suffisait pas, je me suis également payé le luxe de perdre le chargeur de mon ultraportable. Les boules ! Bref, après des jours et des jours de recherches incessantes, je me suis rendu à l’évidence : il a été absorbé dans un trou noir et est maintenant dans une autre dimension. Du coup, j’en ai commandé un neuf sur Amazon. Je ne sais pas ce que ça vaut vu le prix. Mais bon, notes et commentaires sont plutôt pas mal donc… Wait and see…

Bien entendu, si je vous parle de cette perte, c’est qu’elle a également eut un impact sur mes publications. Il est vrai que j’aurais très bien pu rédiger mes billets depuis un autre PC. D’ailleurs, en ce moment même, je rédige ce billet depuis mon netbook. Malheureusement, son clavier est une bouse sans nom. A vrai dire, depuis que j’utilise le clavier du Lenovo, j’ai vraiment du mal à taper avec les autres claviers (exception faite de mon clavier TypeMatrix avec lequel je galère mais pour une toute autre raison 😉 ). Je ne me suis donc pas fait violence (hormis aujourd’hui) et n’ai donc pas écrit de billet ces derniers jours.

Cependant, rassurez-vous, le nouveau chargeur arrive demain, tout comme le mois d’Octobre. Normalement, je devrais pouvoir reprendre un rythme plus soutenu (au moins un billet par semaine). Car comme je l’ai déjà dit, ce ne sont pas les idées et brouillons qui me manquent… non, simplement cette denrée si rare qu’est le temps.

A très vite pour de nouveaux billets ^^

Quelques nouvelles

Comme vous l’avez constaté, je n’ai rien publié depuis une vingtaine de jours. Je vous rassure, rien de grave. Simplement la vie IRL qui a largement pris le dessus en cette rentrée. Ne vous inquiétez pas, je ne compte pas abandonner ce blog. D’ici peu, tout devrait rentrer dans l’ordre et j’ai déjà pas mal de brouillons de billets à relire et à peaufiner.

Durant ces deux dernières semaines, j’ai réinstallé mon ultraportable (Lenovo Yoga 13). Comme vous le savez, j’ai quelques temps fait partie du programme Windows 10 Insider. J’ai décidé de couper court à cette expérience car je n’ai plus vraiment le temps de tester et de faire des retours à Microsoft (et pour être honnête, plus vraiment l’envie). Bref, plutôt que downgrader ma version de Windows 10, j’ai décidé de repartir sur une installation propre.

 

Windows 10 Logo

 

Pour ce faire, je suis passé par la restauration dite « d’usine » de mon laptop. Je me suis ensuite coltiné la palanquée de mises à jour nécessaires à chaque upgrade de version (8 > 8.1 > 10).

N’ayant pas fait les mises à jour d’une traite, j’ai passé quelques heures sous Windows 8, puis quelques heures sous Windows 8.1, pour enfin me retrouver sous un Windows 10 « tout beau tout propre ».

Le plus difficile a été la phase sous Windows 8. En effet, certains de mes raccourcis clavier préférés y sont totalement inopérants (ex. Ctrl + s). Sans parler du peu de fonctionnalités de Windows 8. En migrant vers la version 8.1, on se rend alors compte du boulot abattu par les développeurs de Microsoft entre ces deux versions. La version 8.1 apporte un nombre considérable d’améliorations fonctionnelles et ergonomiques. Je dirais même que l’interface Métro/Modern UI est à la limite de l’utilisable en version 8 alors qu’avec la version 8.1, c’est un régal (pour peu que l’on dispose d’un écran tactile, bien entendu).

Sans surprise, Windows 10 reste cependant beaucoup plus abouti et beaucoup plus agréable à utiliser que toutes les versions précédentes de l’OS. C’est un véritable plaisir que de s’en servir au quotidien. J’espère que Windows 10 Mobile sera tout aussi agréable et bien fini. Ce qui serait vraiment génial, c’est que Microsoft implémente une sorte d’Airdroid qui nous permette de profiter des fonctionnalités de notre Windows Phone depuis notre PC. Je rêve du jour où je pourrai enfin consulter et répondre à mes SMS depuis mon PC, sans avoir à dégainer mon Lumia.

Mes extensions Firefox #4 : ColorZilla

Aujourd’hui, je vous propose de continuer ma série de billets dédiée aux extensions Firefox que j’utilise au quotidien. Dans la catégorie des extensions simples, pratiques et efficaces, je vous présente Colorzilla. Il s’agit d’un outil permettant de relever, à l’aide d’une « pipette », les couleurs des éléments de page directement dans le navigateur.

Colorzilla : relevé de code couleur

Son fonctionnement est simplissime. Il suffit de cliquer sur l’icône « pipette », puis de se positionner sur l’élément dont vous souhaitez relever le code couleur. Par défaut, le code hexadécimal de l’élément « pické » est automatiquement ajouté au presse-papier. Il est toutefois possible, via le panneau de configuration de Colorzilla, d’opter pour le code RGB.

Colorzilla : options

 

Comme vous pouvez le constater sur la capture ci-dessus, cette extension propose quelques fonctionnalités bien pratiques, comme un générateur de dégradé (via le site officiel de Colorzilla). Personnellement, j’avoue n’utiliser que sa fonctionnalité première.

Bref, une extension très simple mais des plus pratiques.

Retour d’expérience : le SAV de Targus

Il y a quelques mois, suite à la casse de mon fidèle sac à dos Port Designs Port Stuttgart après plus de quatre années de bons et loyaux services, j’investissais dans un sac à dos de marque Targus : le Transit TBB45402.

Sac à dos Targus

 

J’étais très satisfait de mon choix. Le sac à dos est confortable, d’une contenance satisfaisante et surtout, il est équipé d’une « capuche » de protection pour les jours de pluie. Pour moi qui roule à scooter, je peux vous dire que c’est vraiment très pratique. Bref, jusqu’il y a deux semaines : bonheur total. Mais voilà qu’après seulement quatre mois d’utilisation, la brettelle gauche commence à s’effilocher.

Targus TDD45402 : bretelle défectueuse

Premier réflexe : faire jouer la garantie. Armé de ma souris et de mon clavier, je me rends donc sur le site marchand sur lequel je l’ai acheté. Après moultes recherches, je trouve enfin le numéro de téléphone du SAV de Targus.

Lâchant frénétiquement souris et clavier, je me jette sur mon Smartphone et compose fébrilement le numéro, prêt à en découdre. Je tombe directement sur un serveur vocal. Premier bon point : il est d’une courté réjouissante. Je suis rapidement mis en ligne avec une dame très sympathique. Cette dernière, d’une voix douce, souriante et polie m’indique qu’elle va m’accompagner dans la création de mon dossier de prise en charge. Après quelques vérifications d’usage et quelques questions sur le problème qui me préoccupe, elle m’indique qu’elle va m’envoyer, dans les prochaines minutes, un email qui stipulera la marche à suivre pour la suite de la procédure. Je raccroche ravi car il faut bien le dire, un SAV téléphonique où l’interlocuteur-trice est poli(e), courtois(e), rapide et efficace… ça ne court pas les rues !

Quelques minutes plus tard, je reçois effectivement le fameux email. On me demande donc mes coordonnées postales et téléphoniques, des photos de la bretelle effilochée ainsi que le numéro de série du sac. Normal ! Qu’à cela ne tienne : 5 minutes plus tard ma réponse est expédiée.

 

Deux heures plus tard, la réponse du SAV arrive dans ma boite de réception. Morceaux choisis :

  1. Nous tenons à vous informer que nous avons passé la commande pour votre sac de remplacement et il devrait vous être livré sous 12 jours ouvrables.
  2. Concernant votre sac défectueux, sachez que nous ne demandons pas que vous le renvoyiez. Vous pouvez donc le garder et en disposer à votre convenance.
  3. Afin de nous permettre de contrôler la qualité de nos produits, nous vous saurions gré de bien vouloir nous envoyer l’étiquette avec le numéro de produit (…)

 

Que dire sinon que je suis extrêmement satisfait du SAV de Targus. Non seulement, un nouveau sac va m’être livré mais en plus, Targus se soucie vraiment de la qualité de ses produits !

Généralement, on gueule facilement quand on tombe sur des SAV foireux. Il me paraissait donc normal (et honnête) de partager cette bonne expérience avec vous. Bref, un grand merci à Targus pour ce service et surtout : BRAVO.