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

mercredi 29 juin 2011

Récupérer des informations d'un livre par Google Books API

Publié par Infinite Loop, à 21 h 39 9 commentaires

Je l'avoue, je suis un rat de bibliothèque. Je possède des tonnes de livres pour étancher ma curiosité et lorsqu'est venu le temps de faire un inventaire de tout ce que j'avais, la charge de travail me semblait simplement trop pénible. Pour la rendre plus motivante et pour accélérer la saisie des données, j'ai écrit un petit script PHP qui récupère l'information à l'aide de la clé ISBN unique qui se trouve à l'endos d'un livre et de l'API de Google Books. Aucune clé n'est nécessaire.

J'ai d'abord dressé la liste des codes ISBN en les récupérant sur Amazon car a) je m'en suis procuré beaucoup à partir de ce marchand et b) c'est plus simple de compiler les codes numériques par copier/coller du site web que de les sortir un par un de la bibliothèque (paresseux vous dites ?). Si vous préférez le faire à la main, l'ISBN peut être retrouvé facilement en regardant autour du code barre ou sur une des premières pages, au même endroit où se trouve la classification et le copyright.

Ensuite, j'ai créé une page PHP avec un formulaire HTML comprenant un seul champ de recherche pour l'ISBN. Une fois le formulaire soumis, une requête était faite à Google et je faisais apparaître le résultat pour pouvoir valider que c'était bien le livre recherché. D'un simple click sur un bouton et l'information était stockée dans une table de ma base de données SQL. J'ai même osé sauvegarder une copie de l'image sur le disque pour une utilisation future (vous trouverez les détails dans un billet semblable où j'expliquais comment récupérer une image sur Amazon).

Pour ce qui est du script PHP, la portion qui nous intéresse est celle-ci :

$isbn = isset($_POST['isbn']) ? $_POST['isbn'] : '';
// ou si vous préférez hardcodé
// $isbn = '0061234001';

$request = 'https://www.googleapis.com/books/v1/volumes?q=isbn:' . $isbn;
$response = file_get_contents($request);
$results = json_decode($response);

if($results->totalItems > 0){
// avec de la chance, ce sera le 1er trouvé
$book = $results->items[0];

$infos['isbn'] = $book->volumeInfo->industryIdentifiers[0]->identifier;
$infos['titre'] = $book->volumeInfo->title;
$infos['auteur'] = $book->volumeInfo->authors[0];
$infos['langue'] = $book->volumeInfo->language;
$infos['publication'] = $book->volumeInfo->publishedDate;
$infos['pages'] = $book->volumeInfo->pageCount;

if( isset($book->volumeInfo->imageLinks) ){
$infos['image'] = str_replace('&edge=curl', '', $book->volumeInfo->imageLinks->thumbnail);
}

print_r($infos);
}
else{
echo 'Livre introuvable';
}
Résultat :
Array
(
[isbn] => 0061234001
[titre] => Freakonomics
[auteur] => Steven D. Levitt
[langue] => en
[publication] => 2006-10-05
[pages] => 320
[image] => http://bks2.books.google.com/books?id=9O6-UWVfDP0C&printsec=frontcover&img=1&zoom=1&source=gbs_api
)
Deux astuces :
  1. il est parfois possible d'obtenir une image de plus grand format (lorsque disponible) en modifiant la valeur du paramètre zoom. Voici un exemple avec zoom 1 et la même image plus grande avec zoom 4
  2. je suggère de retirer de l'URL la paire clé/valeur "&edge=curl" car dans certains cas, l'URL de l'image retournée par Google contient ce paramètre qui applique un effet recourbé sur le coin inférieur droit de l'image
Bien entendu, tout ceci était fait pour un usage personnel. Pour un projet web, vous devrez vous conformer aux conditions d'utilisation du fournisseur des données ou vous taire à jamais.


Tags: Livres, PHP

lundi 27 juin 2011

Gamme d'instruments de musique futuriste

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

En fouillant pour trouver une démonstration d'un travail de recherche de Desain et Honing présenté au CCRMA (Center for Computer Research in Music and Audio) dans les années 90 (un soulier informatisé qui apprend à reconnaître les rythmiques et qui les reproduit), j'ai découvert une nouvelle gamme d'instuments de musique futuristes développée par Eigenlabs : le Eigenharp qui se décline en trois formats Alpha, Pico et Tau.

Développé pendant 8 ans, le Eigenharp Alpha (le plus complet) est un instrument électronique qui ressemble au sitar indien mélangé avec une flûte qui intègre 120 clés tactiles sensibles dont chacune fonctionne comme un joystick analogique à 4 voies, 12 clés de percussion, un embout pour souffler, une prise à écouteurs et une autre pour un micro, un connecteur USB2, un logiciel, une librairie d'instruments et de percussions, de la compatibilité MIDI et le plus surprenant, c'est présentement supporté que sous Mac (éventuellement Windows).

À 6200$ canadiens, on peut dire que c'est un instrument polyvalent. Oui, c'est plus dispendieux qu'une légendaire Gibson Les Paul ! Voici un "band de garage" ayant investi 20000$ pour former un trio :



Pour voir plus de prototypes d'instruments informatisés dites d'expression de note 3D, visionnez cette vidéo qui traite du Eigenharp, du Continuum et du LinnStrument (avancez le curseur entre 1:00 et 1:09 pour les démonstrations). Remarquez aussi le potentiel rock du Eigenharp qui se transforme par moments en guitare (vers 1:06).

Pour satisfaire votre curiosité :

  • Continuum Fingerboard (prix actuel 5300$)
  • Linnstrument (n'est pas encore commercialisé)
  • Et encore plus d'instruments de demain
Une fois en possession de votre nouvel instrument, essayez de chercher un professeur dans une école locale. Normalement si vous vous en êtes procuré un, c'est que vous avez déjà la virtuosité au bout des doigts.


Tags: Musique

dimanche 26 juin 2011

Citation no. 126 sur le dictionnaire

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

Il n'est plus nécessaire de chercher le mot Dictionnaire dans le dictionnaire, il est inscrit sur la pochette.

- Les Chick'n swell


Tags: Citations

Faux Lucky Luke et guitare disproportionnée

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

Si vous êtes de passage au marché-aux-puces de St-Eustache, arrêtez donc prendre une photo souvenir avec le clone de Lucky Luke et la guitare qui fait deux fois sa hauteur. Cette imitation de stratocaster avec le manche trop court agencé avec un cowboy populaire font le bonheur des chasseurs d'aubaines à l'entrée du ciné-parc qui se transforme en bric-à-brac durant la fin de semaine. Retrouvez cette oeuvre de bon goût à l'aide de Google Maps. Et qui dit bon goût rime avec dégustration de fromage en grains frais du jour que tout le monde a pigé dedans avec ses mains sales. Miam!



Ça me rappelle l'ancien village du Far West de Saint-Césaire où je me souviens avoir eu un pistolet entre les mains et ma première crise d'asthme (rassurez-vous, j'ai eu ce problème pendant des années mais c'est maintenant chose du passé, ayant mis fin à cette mauvaise habitude de me promener avec des armes à feu).

Pub rétro avec le valeureux cowboy Lucky et les deux crapules, Joe et Averell Dalton (le plus petit et le plus grand).



Maintenant fermé du lundi au dimanche.


Tags: Curiosités

vendredi 24 juin 2011

Les murs ont des oreilles et moi aussi

Publié par Infinite Loop, à 10 h 29 4 commentaires

Ce ne sont que quelques indices que j'ai constaté durant la dernière semaine et j'espère me tromper parce que ça serait vraiment une situation fâcheuse.

Considérant que :

  • j'ai entendu une bribe de conversation entre deux employés où l'un d'eux s'est soudainement mis à chuchoter et ou, sans le vouloir (j'étais à proximité), j'ai eu vent qu'il était allé passer une entrevue ailleurs
  • j'ai appris récemment qu'il s'était créé un site web personnel sur lequel il offre ses services
  • le portfolio sur son site montre entre autres des réalisations récentes (datant des derniers mois) dont au moins deux ont été effectuées pour le compte d'un de nos concurrents
  • il a accepté une relation sur LinkedIn avec le même chasseur de tête qui m'a contacté hier pour un poste en programmation PHP
C'est moche hein ? Si un employé n'est pas heureux, on ne peut l'empêcher d'aller voir ailleurs. Par contre, je vois un problème éthique à tout cela, plus particulièrement sur le fait de travailler pour un concurrent alors qu'on occupe un poste permanent en même temps. Dénoncer ou fermer les yeux ? Vous en pensez quoi ? J'ai l'impression que d'une façon ou d'une autre, peu importe qui agira le premier, un changement est imminent.


Tags: Lois et principes

mercredi 22 juin 2011

Le syndrome Memento

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

Vous avez peut-être vu le film Memento du réalisateur Christopher Nolan ? L'histoire est celle d'un homme qui souffre de perte de mémoire à court terme et qui utilise des notes et des tatous pour se souvenir qu'il doit traquer l'homme qu'il croit avoir tué sa femme. Si ce n'est pas le cas, faites-le, vous ne le regretterez pas.

La raison pour laquelle j'aborde le sujet ici est qu'en lisant l'excellent livre This Is Your Brain On Music de Daniel J. Levitin (neuroscientifique du Laboratoire Music Perception, Cognition and Expertise de l'Université McGill à Montréal), j'ai noté le passage suivant que j'ai jugé intéressant à partager et parce qu'il fournit une bribe d'explication sur la maladie d'alzheimer dont souffre ma grand-mère et qui a atteint un stade avancé (à ce sujet, une vidéo expliquant le pouvoir de la musique par rapport à cette maladie cérébrale évolutive). Malgré tout ce qu'elle a oublié (incluant tous les membres de sa famille sauf son défunt mari qu'elle croit toujours vivant), elle chante continuellement Les Roses de Picardie dont les paroles semblent incrustées dans sa mémoire et dont nous ignorerons à jamais la signification que cette chanson avait dans ses souvenirs.

Selon Levitin [traduction approximative], le système musical du cerveau semble fonctionner indépendamment de celui de la langue malgré la proximité du traitement de la musique et de la parole dans les lobes frontaux et temporaux. Des preuves viennent de nombreuses études de cas de patients qui, après un accident, avaient perdu une ou l'autre des facultés, mais pas les deux. Le cas le plus célèbre du "syndrome memento" est sans doute celui de Clive Wearing, un musicien, chef d'orchestre et claviériste, dont le cerveau fût endommagé à la suite d'encéphalite herpétique. Tel que rapporté par Oliver Sacks (neurologue), Clive a perdu toute la mémoire à l'exception des souvenirs musicaux et la mémoire de son épouse (vous voyez le rapprochement).

D'autres cas ont été signalés pour lesquels le patient a perdu la mémoire de la musique mais a conservé la langue et d'autres souvenirs. Lorsque des parties de son cortex gauche se sont détériorées, le compositeur français Maurice Ravel perdit son sens de la hauteur (pitch) tout en conservant son sens du timbre, un déficit qui a inspiré son écriture du Boléro, une pièce qui met l'accent sur les variations de timbre.


Tags: Musique, Saviez-vous que

lundi 20 juin 2011

La guerre des navigateurs

Publié par Infinite Loop, à 20 h 33 6 commentaires

À partir de Chrome, je viens de me déconnecter de mon compte Hotmail que j'utilisais avant Gmail et sur lequel je reçois encore quelques messages à l'occasion. À la fin de la session, j'ai été redirigé automatiquement vers une invitation à "Opter pour le navigateur le plus populaire au monde", c'est-à-dire Internet Explorer 8 (!?). La version proposée vient probablement du fait que le PC utilisé roulait sur Windows XP et qu'Internet Explorer 9 lève le nez sur lui avec dégoût (remarquez dans l'onglet, c'est quand même indiqué IE9).



Navigateur le plus populaire ? Ce n'est pas faux si on se fie aux statistiques d'utilisation des navigateurs des derniers mois. On note aussi que tout est relatif car tout comme le verre d'eau à moitié plein ou à moitié vide, on pourrait aussi qualifier Internet Explorer de navigateur en déclin puisqu'il est passé sous la barre de 50% en septembre 2010 et qu'il se retrouve actuellement avec un peu moins de 44% de part de marché. Ce n'est qu'une façon de faire parler les chiffres...



J'ai remarqué dans l'URL que 6 scénarios promotionnels avaient été préparés pour mousser la dernière mouture du fureteur et il m'a suffit de remplacer la lettre de A à F pour y accéder :

  1. Levez le voile sur un Web plus beau : Votre navigateur actuel exploite à peine 10 % de votre capacité PC.
  2. Beauté rime avec rapidité : Aussi incroyable qu'il soit, le Web s'étend au-delà des horizons. Internet Explorer 9 s'applique à révéler son potentiel insoupçonné.
  3. Levez le voile sur un Web plus beau : Votre navigateur actuel exploite à peine 10 % de votre capacité PC. Internet Explorer 9 s'applique à révéler pleinement le potentiel de votre ordinateur.
  4. Optez pour le navigateur le plus populaire au monde : Le moment est venu de passer à Internet Explorer 8 pour jouir d'une meilleure protection.
  5. Naviguez en toute tranquillité : Félicitations, vous avez choisi le plus sûr des navigateurs adaptés à votre système d'exploitation.
  6. Internet Explorer 9 est tout simplement rapide : Les navigateurs actuels n’utilisent qu’une partie de la puissance que votre PC peut offrir. Internet Explorer 9 libère le reste pour tirer pleinement avantage de tout le potentiel de votre PC.
En général, j'ai toujours eu la perception que quelque chose de populaire n'était pas nécessairement un gage de qualité. Je pense à Wal-Mart ou les magasins à un dollar. Et c'est correct parce que ça correspond à nos attentes, à un besoin immédiat et qu'on sait quand on entre à ces endroits que ce n'est pas là que nous trouverons du grand art ou du raffinement. De même pour Justin Bieber et Lady Gaga qui vendent des tonnes d'albums et ont un succès gigantesque auprès d'un certain public. On ne crie pas non plus au génie. Les plus sélectifs rechercheront et apprécieront les secrets bien gardés, l'unique, la rareté, les compétences. C'est avec ça qu'on crée de la richesse. Trop répandu, il perd son intérêt.

Pour poursuivre sur les fureteurs, si on suit mon raisonnement, la chute imminente d'Internet Explorer, délaissé par le grand public, le rendra moins populaire et le forcera à se réinventer, à innover et à renaître en un produit de meilleure qualité. Vous pouvez me lancer des pierres pour avoir osé dire ça, mais je suis prêt à lui laisser une chance. Firefox l'a fait à partir de Netscape. Pourquoi Microsoft ne rebondirait pas ?

Avec Linux et l'arrivée de ChromeOS de Google comme concurrents et alternatives à l'OS classique de Windows, verra-t-on Firefox suivre les pas du géant avec un système d'exploitation FirefoxOS ? Microsoft délaissera-t-il le nom mal aimé d'Internet Explorer au profit de son futur Windows 8 et ses applications propulsées par HTML5 ? Si les développeurs peuvent créer des applications web qui roulent aussi bien sous ChromeOS que sous Windows 8, pourquoi payerait-on pour ce dernier ? Microsoft aura à prendre des décisions qui s'avéreront critiques pour sa survie.


Tags: Le coin du geek

dimanche 19 juin 2011

Créer un PNG transparent avec GIMP

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

Pour la réalisation d'un projet sur lequel aucun designer n'était impliqué (et qui de toute façon aurait préféré Photoshop à GIMP comme éditeur graphique), j'ai eu à me débrouiller en tant que newbie dans ce domaine pour trouver comment superposer une image PNG (exemple: logo dont la forme est distincte) à un background en conservant la transparence autour du logo.

Voici la méthode à suivre :

  1. Ouvrir l'image
  2. Menu Layer / Transparency / Add Alpha Channel
  3. Ensuite, vous devez sélectionner la zone à rendre transparente. Vous pouvez le faire en utilisant un outil de sélection (Menu Tools / Selection Tools / Fussy Select accessible aussi par le raccourci U sur le clavier) ou en choisissant une couleur (à supposer que votre image est simple comme la mienne). Dans ce cas-ci, Menu Select / By Color (cliquez sur la couleur de votre choix sur le canvas de l'image)
  4. Menu Edit / Clear (ou touche Delete)
  5. File / Save As
  6. Select File Type : PNG image
  7. Donnez-lui un nom et sauvegardez le fichier en utilisant Save As et choisissez PNG image dans la liste Select File Type qui se trouve au bas de la fenêtre Save Image
  8. Dans la fenêtre suivante (Save as PNG), assurez-vous de cocher "Save color values from transparent pixels" et cliquez sur le bouton Save
Poids
  • Image originale au format JPG : 12,2 kb
  • Image convertie en PNG sans alpha channel : 19,3 kb
  • Image PNG avec alpha channel : 21,3 kb
Vous vous demandez peut-être pourquoi une image qui comprend de la transparence (donc en théorie aucune couleur) a un poids plus élevé que si une couleur était conservée ? C'est que normalement, l'information de chaque pixel conserve la valeur des couleurs RGB (rouge, vert, bleu) dans trois canaux différents. En ajoutant un canal alpha, chaque pixel stocke en plus l'information à savoir comment les couleurs devraient être fusionnées lorsqu'elles sont superposées à d'autres. Le alpha channel définit donc le caractère translucide et peut avoir une valeur allant d'opaque à invisible.


Tags: GIMP

mardi 14 juin 2011

L'importance du titre : un mythe

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

Dans les derniers jours, je me suis réinscrit sur LinkedIn suite à une discussion avec un ami qui m'a convaincu du bien fondé de la chose. Bien que je ne sois pas en recherche d'emploi, l'idée d'être présent sur le plus gros répertoire de CV au monde ne peut pas nuire à voir passer les opportunités intéressantes.

J'ai jeté un oeil aux profils des gens que j'ai cotoyé en milieu professionnel (expériences positives comme négatives) et j'ai constaté deux choses étonnantes chez certains individus : d'abord l'instabilité et la courte période des fonctions occupées, ensuite que plusieurs de ceux-ci se présentent aujourd'hui comme "programmeur senior", "lead developer" ou "technical lead". Que de contraste avec les projets désastreux qu'ils ont laissé à leur départ... De la bullshit ou un changement majeur s'est opéré dans leur façon de coder ? Le pire programmeur pour devenir le meilleur dans un environnement où les standards sont différents (l'inverse est aussi vrai).

En toute humilité, je n'ai jamais vraiment accordé d'importance à mon titre, sauf s'il représentait réellement les responsabilités qu'on m'accordait. Sauf que sur un site comme LinkedIn, là où des chasseurs de têtes et employeurs potentiels courtisent les candidats, il faut croire que c'est tentant pour certains d'en mettre plein la vue, même si ça implique de mentir un peu (ou d'embellir la réalité). Après tout, un programmeur en chef qui agit comme "travailleur autonome" ou un directeur de département "qui ne compte qu'un seul employé" ne représentent que des omissions banales dans un curriculum vitae. Tout comme pour la description des compétences, je me méfie de ceux qui se présentent comme experts dans une technologie. Reflet d'un niveau de compétence ou d'incompétence ?

Combien d'années sont nécessaires pour développer une solide expérience dans un domaine ? Personnellement, j'ai écrit mes premières lignes de code HTML vers 1996, mon premier projet dynamique sérieux en 1998 mais j'ai débuté à gagner ma vie avec la programmation en 2002 alors que je pouvais me consacrer à temps plein dans ma passion. Vouloir impressionner, j'indiquerais 15 années d'expérience en développement web alors que dans les faits, la vérité serait de 9 ans. Et vous, lequel seriez-vous tenté d'inscrire sur votre CV ?

Durant mes études pour l'obtention du diplôme d'études collégiales (DEC), on m'a expliqué qu'on pourrait éventuellement occuper un poste de programmeur, de programmeur-analyste (responsabilités de 60/40%), d'analyste-programmeur (40/60%) et finalement d'analyste. Notre profession n'est pas régie comme l'ordre des infirmières ou l'ordre des ingénieurs donc on peut bien inventer le titre qu'on juge qui nous va le mieux. Soudainement, le terme "programmeur" devient péjoratif par rapport à "développeur". La hiérarchie des titres prend le dessus sur les réalisations concrètes. Avec du recul, je comprends un peu plus pourquoi certains se qualifient comme programmeur-ninja ou autres déclinaisons fantaisistes. Parfois par humour, parfois en se prenant un peu trop au sérieux.

Je me souviens qu'à une époque, un de mes patrons qualifiait tous ses programmeurs de seniors alors que nous avions tous moins de 2 ans d'expérience. C'était nous flatter dans le sens du poil pour nous montrer qu'il nous faisait confiance et nous appuyait dans les décisions techniques. Pour d'autres, ça gonfflait leur ego.

Un titre, comme sur un livre, peut être accrocheur et susciter l'intérêt. Mais une fois qu'on creuse un peu, le contenu peut vite devenir décevant. L'importance d'un titre n'a d'égal que la responsabilité qui vient avec. Tout comme pour l'importance de la ceinture de karaté, la sagesse de monsieur Miyagi nous rappelle qu'elle n'est faite que pour retenir le pantalon.

Mon côté critique me dit que personne ne peut réellement prétendre être senior en informatique. Peut-être pour l'attitude mais pas pour les compétences techniques car la technologie évolue trop vite pour qu'on puisse développer une expérience suffisamment solide pour se dire expert (à moins d'être volontairement hyper-spécialisé). La mode du jour est de se proclamer expert dans une technologie après avoir baigné quelques mois dans un domaine émergent, comme par exemple * tousse tousse * les médias sociaux. À ce titre, on est tous des experts en quelque chose. Le reste, c'est de vendre sa salade.


Tags: Lois et principes, Programmation

dimanche 12 juin 2011

Citation no. 125 sur le temps

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

La mort donne un sens à nos vies. Elle accorde à la fois une importance et une valeur au temps. Le temps perdrait tout son sens s'il y en avait trop.

- Ray Kurzweil


Tags: Citations

samedi 11 juin 2011

Tab N Play pour apprendre la guitare

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

Si vous êtes amateurs de guitare, vous avez certainement souri lorsque vous avez vu le doodle de Google qui rendait hommage à Les Paul. J'ai entendu certaines personnes saluer le défi relevé par les ingénieurs de la compagnie mais sachez que le concept existait déjà et a été poussé beaucoup plus loin dans Tab N Play, une interface web en Flash très bien réussie pour apprendre la guitare.



Le principe est simple :

  1. Le scroll-wheel de la souris sert à donner les coups de pick. Faites la défiler rapidement pour effectuer un accord ou lentement pour produire un arpège.
  2. Utilisez le clavier de la souris pour indiquer les accords à jouer en se servant de la notation internationale (A = LA, B = Si, C = Do, D = Ré, E = Mi, F = Fa, G = Sol).
  3. Une combinaison avec la lettre "m" permet de produire un accord mineur (par exemple, E+m = mi mineur).
  4. Plutôt que d'utiliser le clavier, vous pouvez aussi cliquer sur les frettes du manche à l'endroit où vos doigts iraient et faites aller le scroll-wheel pour produire et entendre l'accord (référez-vous à l'onglet Chords pour voir des tutoriels vidéos).
  5. Chargez une tablature pour la faire jouer ou enregistrez votre progression d'accords.
  6. Si vous êtes débutants, n'hésitez pas à utiliser le mode Zoom qui donnera une vue rapprochée du manche.
Même si vous ne connaissez rien à la musique (ou à la guitare), vous pouvez tout de même vous amuser. Par exemple, vous pourrez facilement jouer la chanson Pet pis répète des Chick'n Swell. La progression d'accord est Em, C, G, D (Mi mineur, Do, Sol, Ré).


Tags: Musique

Tournez les tables

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

Soumettez vos yeux et votre cerveau au test suivant qui présente des tables dessinées par le psychologue et professeur Roger Shepard et dites moi intuitivement laquelle est la plus longue.



Si vous avez répondu celle de gauche, vous êtes dans l'erreur (comme la plupart des gens) car aussi surprenant que cela puisse paraître, les deux tables sont exactement de la même dimension, tant en longueur que par la forme (mesurez les et faites faire la rotation ou regardez simplement la démonstration animée). Cet exemple illustre le principe de l'illusion de Ponzo qui exploite les mécanismes de perceptions visuelles des profondeurs (à ne pas confondre avec Ponzi et les fraudes pyramidales qui sont en quelque sorte une autre forme d'illusion). Tout ça parce que notre cerveau reçoit la mauvaise information sur l'objet.


Tags: Curiosités, Saviez-vous que

vendredi 10 juin 2011

Hébergeur recherché

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

Si vous me suivez sur Twitter, vous avez peut-être vu passer mes échanges concernant la recherche d'un hébergeur pour un projet personnel de développement web. Comme il ne nécessitera pas beaucoup de ressources et que le but est non-commercial, je fais appel à vous pour me faire des suggestions en considérant les éléments suivants :

  • Espace disque de 1 Gb minimum
  • Bandwidth illimité (je ne prends pas de chance au cas où)
  • Support PHP 5.2 ou plus
  • Extensions : CURL, mod_rewrite, GD ou ImageMagick (préféré)
  • Base de données PostgreSQL (elle ne sera pas volumineuse)
  • Outils de statistiques
  • Économique et fiable
Dans ce qu'on m'a proposé, les options qui s'offrent à moi sont :

000webhost.com
http://www.000webhost.com
  • L'avantage est qu'il est tout à fait gratuit. Ça pourrait être un bon point de départ.
  • À l'inverse, il ne supporte pas ImageMagick ni Postgres.
  • Il est possible de bonifier le service à Premium pour avoir accès à plus options (4,84$ / mois)
  • Pour en avoir fait l'essai dans le passé, si le panneau de gestion n'est pas suffisamment accédé souvent, le compte peut être désactivé sans préavis. Selon les termes et conditions, ça semble avoir été changé pour une période d'un an, ce qui ne représente pas un très gros risque.
CSoft.net
http://csoft.net
  • Le site n'est pas très vendeur du point de vue du look mais il offre une incroyable sélection de fonctionnalités, dont ImageMagick et Postgres.
  • Le forfait Économie à 5$ par mois offre 10 Gb et le trafic illimité.
  • Je ne connais pas du tout cette compagnie de l'île-de-la-Madeleine.
  • Un compte d'essai gratuit de 30 jours est offert.
  • Facturation mensuelle.
  • Recommandé par @yhugo
iWeb
http://iweb.com
  • Légèrement plus cher que CSoft, on doit prendre un engagement de deux ans pour obtenir le plus bas prix (5,83$ / mois).
  • 600 Gb d'espace disque et trafic non mesuré (j'ai bien lu, 600 gigaoctets?!).
  • Par deux fois j'ai essayé d'avoir une confirmation sur le support d'ImageMagik. Sans succès. Je suppose qu'ils ne le supportent pas.
  • Recommandé par @bencaron
Nixcom
http://www.nixcom.ca
  • Le prix grimpe un peu et est probablement au-delà de mes besoins.
  • J'attends des détails sur les spécifications techniques.
  • Recommandé par @ColoServ
Trust::VPS
http://www.thrustvps.com
  • Une alternative différente intéressante en un serveur virtuel privé.
  • Flexible dans sa configuration pour 15$ par mois.
  • Recommandé par @FouZ
VexxHost
http://vexxhost.com
  • Un des plus bas prix (3,99$ par mois, sur un engagement de 3 ans, sinon 5,59$ /mois)
  • Espace disque et trafic illimité
  • Énormément de fonctionnalités offertes dont ImageMagick et mod_rewrite
    mais ne supporte pas Postgres
  • Ils ont des bureaux à Ville St-Laurent (Montréal, Québec)
  • J'ai eu une meilleure expérience de soutien technique par le chat que chez iWeb
  • Recommandé par @jack_dbernier
Quelles sont vos recommandations ? Vous avez autre chose à proposer ?


Tags: Coffre à outils

lundi 6 juin 2011

Performance sur concaténation de chaînes PHP

Publié par Infinite Loop, à 22 h 54 4 commentaires

En PHP, on sait que l'utilisation des apostrophes par rapport aux guillemets améliore la performance lorsqu'on manipule des chaînes de caractères. Ayant été témoin d'argumentaires sans fin entre programmeurs qui défendaient les bonnes pratiques, j'ai décidé de faire une démonstration pour faire parler les chiffres et mieux cibler les opportunités d'optimisation. Après tout, "premature optimization is the root of all evil"!

En utilisant une technique toute simple déjà expliquée pour mesurer le temps d'exécution d'un script (vous pouvez aussi utiliser xdebug), j'ai isolé la portion de code en question dans une itération et j'ai observé les résultats obtenus sur ce court snippet de code. La seule différence entre les deux boucles est dans la façon de concaténer la chaîne.

set_time_limit(90);

# avec apostrophes
$startTime = microtime(true);
$iterations = 100000;

$tmp = '';
$concat = 'yz';
for($i=0 ; $i<=$iterations ; $i++){
$tmp = 'x' . $concat;
}

$endTime = microtime(true);
$elapsed = $endTime - $startTime;

echo "$elapsed secondes";
# ou echo $elapsed . ' secondes'; ?

# avec guillemets
$startTime = microtime(true);

$tmp = '';
$concat = 'yz';
for($i=0 ; $i<=$iterations ; $i++){
$tmp = "x $concat";
}

$endTime = microtime(true);
$elapsed = $endTime - $startTime;

echo "$elapsed secondes";
# ou echo $elapsed . ' secondes'; ?
Les résultats

1000 itérations (10 ^ 3)
  • Single quotes: 0.0004279613494873 secondes
  • Double quotes: 0.00057315826416016 secondes
10000 itérations (10 ^ 4)
  • Single quotes: 0.0040969848632812 secondes
  • Double quotes: 0.0046517848968506 secondes
100000 itérations (10 ^ 5)
  • Single quotes: 0.03504490852356 secondes
  • Double quotes: 0.046297073364258 secondes
1 000 000 itérations (10 ^ 6)
  • Single quotes: 0.3795599937439 secondes
  • Double quotes: 0.48942708969116 secondes
10 000 000 itérations (10 ^ 7)
  • Single quotes: 3.7059290409088 secondes
  • Double quotes: 4.7981967926025 secondes
100 000 000 itérations (10 ^ 8)
  • Single quotes: 38.336160898209 secondes
  • Double quotes: 49.267479896545 secondes
Effectivement, on note une perte de performance croissante à mesure qu'on augmente le volume d'itérations. Pourquoi ? Parce que dans le deuxième cas, le contenu de la chaîne de caractères entre guillemets est interprété pour ses variables PHP, donc légèrement plus lourd à exécuter.

L'argument de départ tient la route mais il faut avouer que dans de nombreux cas, les efforts déployés à essayer de gagner son point demandent beaucoup plus d'énergie par rapport au gain potentiel qu'on obtient en retour. Il reste qu'en règle générale et par souçi de bonnes pratiques, c'est une bonne idée de privilégier l'utilisation des apostrophes autant que possible. À mon humble avis, personne ne mérite de se faire taper sur les doigts s'il n'est pas aussi assidu à le faire dans des parties non-critiques de l'application. Après tout, si un script PHP venait à devoir exécuter plus d'un million de manipulations, peut-être qu'un changement de stratégie serait de mise et qu'une solution compilée serait plus appropriée...


Tags: PHP

dimanche 5 juin 2011

Dormir en saveur et en odeur

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

Trouvé sur un emballage de draps santé (fibre de molleton) achetés cet automne (et retrouvé récemment au moment de les ranger dans l'étui de plastique).



Cet échantillon propose au consommateur de le sentir plutôt que de le toucher. Ah oui, ça sent le pouce. Et ce n'est pas tout puisque l'étiquette ajoute que vous pourrez dormir en chaleur et en saveur en énergie à l'année longue (je fais abstraction des nombreuses fautes de français et je me questionne toujours sur le sens de la phrase).



Pourquoi ne se sont-ils pas contenté de traduire l'argument anglais ? On aurait pu y lire: une chaleur agréable vous permet de "baiser" le thermostat...


Tags: Curiosités

Citation no. 124 sur la théorie

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

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne... et personne ne sait pourquoi!

- Albert Einstein


Tags: Citations

vendredi 3 juin 2011

Calculer la distance entre deux points géographiques avec PostgreSQL

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

Vous voudriez utiliser une fonction Postgres comme earth_distance() pour calculer la distance théorique entre deux points sur la Terre (en assumant qu'elle est parfaitement ronde) sans installer de package ou utiliser PostGIS ?

Voici une fonction écrite en pl/pgsql qui vous permettra d'obtenir une approximation en fournissant la latitude et la longitude de deux coordonnées. Par exemple, la distance en ligne droite (ou à vol d'oiseau) entre l'Auberge du Dragon Rouge et la microbrasserie Dieu-du-Ciel! à Montréal serait de 4,639 km (j'ai obtenu les coordonnées en pointant et cliquant sur la carte Google Maps Distance Calculator).

Assurez-vous d'abord que le langage pl/pgsql est installé. Ensuite, exécutez le code ci-dessous qui créera la fonction :

CREATE FUNCTION evaluate_earth_distance(
"latitude1" numeric,
"longitude1" numeric,
"latitude2" numeric,
"longitude2" numeric
)
RETURNS numeric AS
$body$
DECLARE
degToRad NUMERIC;
radToDeg NUMERIC;
pi NUMERIC;
theta NUMERIC;
distance NUMERIC;
BEGIN
pi := 3.14159265358979323846;
degToRad := pi / 180;
radToDeg := 180 / pi;
theta := longitude2 - longitude1;

distance := sin(latitude1 * degToRad) * sin(latitude2 * degToRad) + cos(latitude1 * degToRad) * cos(latitude2 * degToRad) * cos(theta * degToRad);
distance := acos(distance);
distance := distance * radToDeg;
distance := distance * 60 * 1.1515 * 1.609344;

RETURN distance;
END;
$body$
LANGUAGE 'plpgsql';
Vous pourrez ensuite faire l'appel comme ceci par une requête SQL :
SELECT evaluate_earth_distance(45.547291,-73.641446, 45.522651,-73.593373);
-- 4,63949681350483 km
La distance sera retournée en kilomètres.


Tags: PostgreSQL

jeudi 2 juin 2011

Le casier disparu

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

Quand nous avons acheté notre maison il y a quelques mois, l'ancienne propriétaire nous a laissé plusieurs choses et nous n'avons pas encore eu le temps de faire l'inventaire. Je savais qu'on avait un vieux casier dont je n'imaginais pas la raison pourquoi il se trouvait là et quand je suis allé le voir de plus près, j'ai vu qu'il portait le numéro 404, comme dans le code de statut HTTP 404 : not found.



Allez savoir pourquoi, j'ai immédiatement imaginé une école avec des couloirs flanqués de casiers où le numéro 404 manquait. Et tout le monde qui se demande depuis des années ce qu'il en est advenu. Arrêtez de chercher, il est chez moi. Promis qu'il restera là et que je lui trouverai une utilité.


Tags: Pancartes et écriteaux

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)
        • Récupérer des informations d'un livre par Google B...
        • Gamme d'instruments de musique futuriste
        • Citation no. 126 sur le dictionnaire
        • Faux Lucky Luke et guitare disproportionnée
        • Les murs ont des oreilles et moi aussi
        • Le syndrome Memento
        • La guerre des navigateurs
        • Créer un PNG transparent avec GIMP
        • L'importance du titre : un mythe
        • Citation no. 125 sur le temps
        • Tab N Play pour apprendre la guitare
        • Tournez les tables
        • Hébergeur recherché
        • Performance sur concaténation de chaînes PHP
        • Dormir en saveur et en odeur
        • Citation no. 124 sur la théorie
        • Calculer la distance entre deux points géographiqu...
        • Le casier disparu
      • ►  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)
      • ►  novembre 2009 (34)
      • ►  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