Category: Astuces

slideshow S5, S6, S9

Posted by – March 17, 2009

Avec mon camarade de jeu de geekitude, nous avons officié lors d’un groupe de travail afin de faire une présentation sur les différentes techniques de mutualisation et de partage de l’information, d’un point de vue technique (syndication, API / REST, services Web SOAP, …).

Pour cette présentation de 45 mn, dans un premier temps, j’avais pensé à … Powerpoint…et puis non :

  • je ne l’utilise jamais, donc le temps d’apprentissage aurait été catastrophique,
  • la présentation devra comporter des iframe avec, donc, des accès en direct à des sites, Office 2003 ne paraît pas adapté à cette utilisation,
  • je suis un peu geek, et fallait du fun, enfin, de mon point de vue en tout cas

More

Synology 207+ (linux) et rsync

Posted by – July 7, 2008

Objectif : sauver les bases, les répertoires /etc, /var/www et autres fichiers.

More

Réinstallation de la station de travail, loi de Murphy et logiciels utilisés

Posted by – June 27, 2008

Selon la loi de Murphy

Si quelque chose peut mal tourner, alors ça tournera mal.

J’ai dû réinstaller ma station de travail. Je suis plutôt du genre prévoyant, et comme je le présentais, cela s’est mal passé, forcément, c’est la loi de Murphy qui le dit.

Aussi, comme toute gestion du risque, j’ai passé, avant la réinstallation, ma station (Windows 2003 serveur) en machine virtuelle afin :

  • d’avoir une copie des fichiers, des logiciels installés, et autres configurations (configuration IIS, PuTTY, …),
  • de pouvoir continuer à travailler si cela se passait mal

Pour faire cela, il existe un magnifique outil gratuit fourni par VMWare : VMWare Converter, il vous permettra de transformer votre machine en machine virtuel que vous utiliserez ensuite sous VMWare Server ou VMWare Player. Avant d’effectuer la conversion, il est conseillé de changer l’IP, ainsi que le nom de machine si elle se trouve sur un domaine, cela évitera les doublons lors de son exécution en même temps que votre machine physique.

Installation effectuée de Windows 2003 R2 Std. Ed. avec succès, les windows update compris. En plus de mes outils de travail (VStudio 2005 & 2008, VSS, SQL Manager, Firefox & extensions, …), j’utilise pleins d’autres outils qui nous facilitent la vie, une petite liste :

  • notepad++ : l’éditeur de texte ultime, ne pas oublier d’installer l’éditeur Hexa,
  • AxCrypt : un utilitaire comme j’aime : il permet de crypter vos fichiers que vous souhaitez protéger : fichiers de configurations (de putty , de vos clés privées), de mots de passe, ou vos fichiers personnels pour les curieux,
  • Xobni : un add-in à Outlook assez efficace pour la recherche, et vous donnera également tout un tas de statistiques sur vos mails et leur maillage entre vos contacts,
  • SQLPrompt : un outil pour le Query analyser de SQL Server, très utile pour la complétion lors de l’écriture de requêtes SQL,
  • Trillian : pour MSN, ICQ & co,
  • Firefox 3 et mes extensions favorites,
  • Screenshot captor : un utilitaire de captures d’écran, avec la possibilité de les annoter
  • Freemind : logiciel Opensource (en Java) pour créer des mindmap
  • FDM : logiciel de gestion de téléchargements
  • Filezilla : client FTP
  • ZipGenius : utilitaire de compression
  • Safari : le navigateur made in Apple

S’il y a des oublis, je compléterai la liste.

8…olivier duval

Posted by – June 11, 2008

Sur les statistiques (via MyBlogLog ou Google Analytics), je vois souvent des recherches sur olivier duval, et quand je googleise, j’arrive à trouver…8 homonymes sur google…sic

Avec l’armée je savais qu’il en existait au moins un (de la même année, ils s’étaient presque trompés les bougres), mais être au moins huit sur Google !

Du plus sympa au plus …dangereux apparemment…

  • votre serviteur
  • un pro du marketing (souvent le challenger pour la place Google)
  • un ingénieur en informatique
  • un infographiste
  • un juriste
  • un ingénieur des Mines (<joke private=”on”>avec ça, je vais gagner au moins 3 niveaux dans la hiéarchie</joke>)
  • un gérant d’entreprise
  • et enfin…un criminel

Déjà le nom DUVAL (Normand…ou peut-être pas) est assez commun (un peu comme MARTIN), mais en plus Olivier, c’était la mode à l’époque (en 197., 30 ans et des bananes…), merci popa et mam’.

Flippant quand même, quand on sait que tout le monde googleise son voisin (je ferai prochainement une expérience d’ailleurs), être pris dans l’absolu pour un autre voire pire.

Bon, le principal c’est que le blog tient la 1ère place lors d’une recherche sur Google, en 1 an, il est passé de la 2-3ème page au 1er lien, être patient, opiniâtre, régulier et suivre les bonnes pratiques SEO, ça paye.

Egalement, à chaque nouveau service, je m’inscris automatiquement, histoire qu’on ne me pique pas la place (mon patronyme ou mon pseudo), j’ai donc un nombre incalculable de comptes…partout ;-) vivement que chacun implémente OpenID.

Sur ce, je vais voir maintenant si j’ai un don d’ubiquité, on ne sait jamais ;-)

Cybersquatting

Un petit mot sur cette activité plus que disctutable, ces boites qui font du commerce la revente de noms de domaine, sans aucune activité sur ces derniers. Ce n’est ni plus moins du cybersquatting, où la mise à prix du domaine duval.info est à … 600 € (sur Gandi, c’est 12 € /an) ! A cause d’eux, je ne peux offrir un email à ma famille ou un OpenId, merci messieurs !

Apparemment, on peut faire un recours, à voir donc.

Page Web : enlever les caractères indésirables (les puces) de Word

Posted by – April 30, 2008

Lors de saisies de formulaires, il arrive assez fréquemment que l’utilisateur copie / colle à partir de Word son texte. Malheureusement, ce dernier est souvent formaté, notamment avec des puces dessinés.

Ces puces ne seront pas lisibles par le navigateur, malgré l’UTF-8 de la page Web. Aussi, autant que faire se peut, il faut les retirer pour l’affichage sinon on encourt le risque d’avoir ce type de caracères sous FF ou IE ou Safari (disponible en version 3.11, apparemment plus stable sous Windows) :

puces Word FF

puces Word IE

Alors comment faire ?

Grâce à ce site qui nous permettra de rechercher le code UTF du ou des caractères indésirables, par exemple les puces de l’exemple, on recherchera (copier/coller directement du symbole affiché) le symbole qui donnera le code F0E0 :

Une fonction utilitaire avec une regexp suffira pour remplacer les puces par le caractère -, avec un fichier Resource.resx qui contiendra tous les codes UTF des puces à substituer. Pour dire au Replace d’interpréter un code UTF, il faudra préfixer le code par \\u, pour F0E0, cela donnera

  1. Regex.Replace("\\uF0E0","-");

La méthode utilitaire :

  1. public static String CleanWord(String chaine)
  2. {
  3. string mystr = chaine;
  4.  
  5. string[] paras = Resource.RegexSubstituteUTF8.Split(';');
  6. mystr = Regex.Replace(mystr, paras[0], paras[1]); // puce Word , ...
  7.  
  8. return mystr;
  9. }

avec comme Resource.resx :

Resource.resx

on aura alors le résultat escompté

Puces

Conversions : ISO-8859-1/ Windows-1252 et UTF-8

Posted by – April 21, 2008

Imaginons que nous ayons une page encodée en ISO-8859-1 (ou Windows-1252), soit le code page 28591. Si, si, cela peut arriver d’avoir un existant qui balade encore des pages avec cet encodage obsolète, parfois, le choix est limité de tout passer en UTF-8 (code page 65001, la norme actuelle pour l’encodage), car il faut bien souvent le faire en une seule passe, et ce n’est pas toujours simple lorsqu’il existe beaucoup de pages.

Donc, nous avons une page en ISO, dans celle-ci existe un contrôle (au sens UserControl d’ASP.NET) qui permet de consommer un flux (Atom) et de l’afficher : ce flux est encodé en UTF-8 (ce qui est bien…sauf dans notre cas). Certains caractères n’apparaitront pas bien à l’affichage (apparaitront des ? à la place des “ ou —)

page ISO-8859-1

dans une page ISO

config ISO ko

au lieu d’obtenir cette page bien formée :

flux UTF

pour corriger cela, il faudra les convertir en ISO (car page en ISO…)

Une table de correspondance de 27 caractères qui posent souci (prendre le code Hexa pour l’ISO/Win-1252, et le code xml pour l’UTF ) sur ce site

Pour chaque caractère, on va remplacer le code UTF-8 par celui en ISO/Win-1252, un replace suffit , on pourra avoir une méthode utilitaire de ce type, le faire pour les 27 caractères, autrement dit, pas comme dans l’exemple ;-)  :

  1. public static String UTFtoWin1252(String laChaine)
  2. {
  3. string mystr = laChaine;
  4.  
  5. mystr = mystr.Replace((char)0x2022,(char)0x95); // •
  6. mystr = mystr.Replace((char)0x20AC,(char)0x80); // €
  7. mystr = mystr.Replace((char)0x0153,(char)0x9C); // oe
  8. mystr = mystr.Replace((char)0x2026,(char)0x85); // …
  9. mystr = mystr.Replace((char)0x2013,(char)0x96); // –
  10. mystr = mystr.Replace((char)0x201C,(char)0x93); // “
  11. mystr = mystr.Replace((char)0x201D,(char)0x94); // ”
  12. mystr = mystr.Replace((char)0x2014,(char)0x97); // —
  13.  
  14. return mystr;
  15. }

On substitue grâce à la fonction chaque caractère reçu en UTF par son équivalent ISO, on a bien le résultat escompté :

config ISO ok

Bien entendu, ce n’est valable que dans une page ISO, si celle-ci passe en UTF, les caractères n’auront plus de sens – d’où la difficulté de passer tout ou partie d’un existant en UTF où il y a des hacks de ce type : le faire en une seule fois, et repasser sur toutes les pages, bon courage :-)

Conclusion : il est préférable que toute la chaîne soit en UTF : le contenu des fichiers, l’encodage renvoyé par le serveur Web, les données enregistrées dans la base de données, sinon, gare aux astuces de programmation.

Un site où vous pourrez retrouver tous les codes d’un caractère en le recherchant.

SQL Log Rescue : analyser et annuler les opérations SQL de mise à jour (INSERT, …)

Posted by – January 15, 2008

Vous backupez les logs de transactions1 de SQL Server 2000/2005, alors SQL Log Rescue pourra vous être utile. Mon [talentueux] collègue a commencé à le tester en complément du SQL Profiler, afin d’analyser les requêtes SQL (INSERT,UPDATE,DELETE,DROP,TRUNCATE) qui s’étaient exécutées dans l’heure, tout ça pour trouver un éventuel lock un peu trop long. Pour l’instant c’est gratuit, alors il faut en profiter !

SQL Log Rescue vous permettra les opérations suivantes, soit sur les transactions en mémoire, soit sur les fichiers de transactions sauvegardés sur disque :

  • annuler uniquement les opérations que vous souhaitez : UPDATE, INSERT, DELETE, ce qui peut-être pratique.
  • afficher les transactions en filtrant sur le type d’opérations (UPDATE, …)

Red-Gate édite également l’excellent SQL Prompt, malheureusement devenu payant depuis la V3. J’utilise la V2 depuis quelques années, cela permet d’avoir l’intellisense dans le SQL Query Analyser, très pratique pour les SELECT, les WHERE et les jointures qu’il détermine automatiquement. Si vous souhaitez la V2, je pourrais vous la fournir, laisser un message sur zorky00 AT gmail.com.

1 il est conseillé, en plus des sauvegardes complètes de base, de sauvegarder par exemple toutes les heures les transactions, cela sera plus facile de remonter une sauvegarde le cas échéant (granularité plus faible).

^([Rr]ege(x)+[^X]p{0,1}|Regexxxxp?)$

Posted by – October 15, 2007

Un ex-collègue se posait des questions concernant la meilleure manière de rédiger une expression régulière, pour une utilisation avec des règles de ré-écritures d’URL1. Une regexp2 est tout sauf générique, une regexp du type

~/.*/.*/(.+)$ 

n’est pas suffisamment précise pour répondre sans ambiguité aux URLs suivantes :

  • http://localhost:3431/protection-solaire/capital-soleil/LPPM0001 redirection vers http://localhost:3431/product.aspx?codeProduct=LPPM0001
  • http://localhost:3431/nav/about/about.aspx sera redirigée vers l’URL précédente, mais il ne le faudrait pas.

En dehors de tout contexte, on se doit d’introduire un motif discriminant dans une regexp, afin de rendre le résultat déterministe et sans ambiguité.

Quelques exemples, regex => redirection :

  • /?espaces/([\\w\\-_\\.]+)/?$ => /reseau/accueil/default.aspx?res=[resid[$1]] (ex. d’URL à rediriger : http://localhost/espaces/web)
  • /?e/a/(\\d+)(/([\\w\\d\\-\\.]+)?)?$ => /reseau/accueil/default.aspx?res=$1&ccinettoken=$3 (ex. d’URL appelée à rediriger : http://localhost/e/a/34)
  • /?e/c/(\\d+)(/([\\w\\d\\-]+)?)?$ => /cciemploi/PresentationOffres/AfficheOffre.aspx?OffreId=$1&ccinettoken=$3 (ex. d’URL appelée à rediriger : http://localhost/e/c/12928/c35-hg89-kj356)
  • /?e/r/(\\d+)/(\\d+)(/([\\w\\d\\-]+)? )?$ => /reseau/ressources/AfficheRessource.aspx?res=$1&ressId=$2&ccinettoken=$4 (ex. d’URL appelée à rediriger : http://localhost/e/r/34/154674)
  • /?e/f/(\\d+)/(\\d+)(/([\\w\\d\\-]+)?)?$ => /reseau/fic_action/consult.aspx?res=$1&id=$2&ccinettoken=$4

Les motifs qui rendent unique la redirection sont :

  • /e ou /espaces : on va dire la racine pour ce type d’URL
  • /a, /c, /r, … : la sous-catégorie pour ce type d’URL
  • la suite, càd la regexp, représente une règle métier, autrement dit, la page de redirection avec ses paramètres pour cette catégorie et sous-catégorie de pages.

Parce qu’une regexp mal écrite peut s’avérer catastrophique, on la testera avec une liste exhaustive de cas d’utilisation.

Ok, c’est bien, mais quel est l’intérêt ? J’en vois principalement 3 :

  • dans le cas d’un site indexé, permettre d’indexer les mots contenus dans l’URL plutôt que des chiffres (id bien souvent).
  • avoir des URLs qui sont faciles à retenir par l’humain (http://monsite/espaces/web reste mieux que http://monsite/reseau/accueil/default.aspx?res=7887)
  • avoir des URLs courtes pour réduire le risque de coupure dans les mails (URLs contenus dans une newsletter par exemple), certains lecteurs font la césure à 76 caractères.

Quelques ressources : http://del.icio.us/zorky/regex

[EDIT] coupure Noos (Numéricable) toute la journée (blog & co inaccessible). Conclusion : changer de FAI, direction Free.

1 avec des modules (HttpModules) du type UrlRewriter ou celui-ci. Sous Apache, le module mod_rewrite permet également de faire de belles choses.

2 les expressions régulières sont bien la seule chose à ma connaissance qui soit à peu près standard et que l’on peut retrouver dans n’importe quel langage [sérieux] : Perl, Ruby, .NET, Java, …

UTF-8 : linux, windows, mac, everything, everywhere

Posted by – October 9, 2007

Hier, un ami m’a demandé un coup de pouce pour déboguer un problème d’appel Ajax qui ne fonctionnait pas sous IE (alors que sur la page de démo cela marchait, et sur FF également, damned !) : champ de saisie, propositions de mots, autrement dit de l’autocomplétion.

Voyant les caractères renvoyés par la requête Ajax, c’est à dire des ”?” ou tout autre caractère ésotérique, ni une ni deux, l’origine fut trouvée : l’ISO-8859-1. A défaut, l’usage de la fonction utf8_encode a été la parade pour convertir la donnée à la volée.

La majorité des librairies Ajax (Prototype par exemple) ont un encodage par défaut à UTF-8 (et c’est bien !).

Une parade c’est bien, prendre l’habitude d’utiliser l’UTF c’est mieux. C’est la norme actuelle et future, fini les codespages à n’en plus finir. Tout logiciel sérieux devrait le gérer, on trouve encore trop souvent l’usage de l’encodage ISO-8859-1 (ou 8859-15 pour les windowsistes). Autant que faire se peut (un lourd existant peut l’empêcher par ex.), l’usage de l’UTF devrait être naturel.

Quelques trucs et astuces afin d’obtenir sur la majeure partie de la chaine de production une compatibilité UTF-8 :

  • pour le Web, cela passe par un document enregistré en utf-8, et un charset à utf-8 :
 <meta http-equiv="Content-type" content="text/html; charset=utf-8" />  
  • sous Apache, la directive AddDefaultCharset utf-8 peut s’avérer utile
  • un équivalent en ASP.NET pour forcer l’encodage de sortie, ou d’entrée, dans la section du web.config, la directive globalization :
 <globalization requestEncoding="utf-8" responseEncoding="utf-8"/>  
  • accès SSH : fixer sous puTTY l’UTF-8 (Windows / translation)
  • Debian : installer les locales qui vont bien et les positionner à UTF-8 (un excellent article pour Unix) :
 $ locale : affiche les locales pour le terminal $ dpkg-reconfigure locales : pour installer et fixer la locale par défaut $ export LC_ALL=fr_FR.UTF-8 pour fixer manuellement  
  • vim : un :set fileencoding vous indiquera si vous enregistrez en UTF, ou vous permettra de fixer l’encodage du fichier.
  • iconv sera votre compagnon pour la convertion de fichiers ISO-8859-1 en UTF-8
  • mysql >= 4.1 gère l’UTF en natif. Un “SET NAMES utf-8” indique l’encodage d’échange entre le client et le serveur. MySQL 5.0 charsets et collations (MySQL 4.1)
  • SQL Server : ntype (nvarchar, ntext, …) est ton ami

Quelques ressources que j’ai pu glaner sur le Net.

Ami PHPiste, Rubyiste, Javaiste, .NETiste, Perliste, kayakiste (euh non), à bon entendeur…

SQL Server ou la diminution du fichier des transactions

Posted by – June 12, 2007

Imaginons le cas où vous n’ayez pas programmé de tâche (job SQL Agent) pour shrinker quotidiennement les logs de votre base (pour X mauvaises raisons…), SQL Server conserve toutes les transactions émises dans un fichier de log, celui-ci peut devenir à termes très gros (> XX Go) si on ne fait rien.

Pour résoudre ce problème, il suffit par l’intermédiaire du Query analyzer d’exécuter les deux commandes suivantes :

  • backup log mabase with truncate_only
  • dbcc shrinkfile(mabase_log,2)

Cela en sauvera plus d’un et vous fera l’économie d’un disque dur ;)