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

samedi 11 juin 2011

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)
        • Citation no.164 sur la tromperie
      • ►  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)
      • ►  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