Ce vidéo m'a beaucoup amusé quand je l'ai vu ce matin, faisant un clin d'oeil aux outils et interfaces qu'on utilise au quotidien dans mon domaine (tous ceux qui oeuvrent dans le milieu informatique s'y reconnaîtront).
Originalement intitulé "The Art of Analog Computing", les concepteurs ont su transposer dans un monde analogique : le curseur, le Mac, le bureau de travail, les courriels entrants, la corbeille, les popup de confirmation, la loupe (Spotify) de Mac OS, les rappels de réunions, les écrans de veille, Photoshop avec le cadenas pour les layers, le Blue Screen of Death de Windows, Facebook (et le fait de cacher les applications soit disant interdites sur le lieu de travail), Twitter, la baleine "Fail Whale", le classique jeu de solitaire, le choix des fureteurs, les publicités trompeuses, les popup publicitaires, le spam (en conserve!), le "serveur" qui plante, le code binaire, etc.
Chapeau à l'équipe de Meltmedia, c'est très réussi.
Note à moi-même parce que c'est important de s'en souvenir avant de faire des conneries... Selon Fred Brooks (auteur de Mythical Man-Month), l'effet du 2ème système stipule que :
Tout informaticien ayant réalisé un premier système aura tendance à créer un deuxième système incorporant toutes les fonctionnalités qu'il n'a pas pu ajouter au premier système par faute de temps. Un programmeur développant un deuxième système devrait donc être conscient du risque de dépassement des spécifications exigées.
J'aime encore mieux la définition en anglais :
The second-system effect or sometimes the second-system syndrome refers to the tendency, when following on from a relatively small, elegant, and successful system, to design the successor as an elephantine, feature-laden monstrosity. It is somewhat akin to the idea of fighting the last [previous] battle.
Tellement trop vrai que j'en ai eu un bel exemple aujourd'hui alors qu'un programmeur a tenté de réinventer la roue pour qu'elle soit carrée.
Tout est une question de perception :
- Comment le client l'a souhaité
- Comment le chef de projet l'a compris
- Comment l'analyste l'a schématisé
- Comment le programmeur l'a écrit
- Comment le Business Consultant l'a décrit
- Comment le projet a été documenté
- Ce qui a été installé chez le client
- Comment le client a été facturé
- Comment le support technique est effectué
- Ce dont le client avait réellement besoin
Cliquez pour agrandir
Drôle et tellement vrai.
Mais une minute ! Cette simulation de combat entre l'Alliance rebelle et l'armée Impériale ne peut pas être crédible si Luke Skywalker et Darth Vader n'en font pas partis !
Nous ajouterons un combattant de chaque côté avec des super statistiques, comme des héros, qui seront au moins 10 fois plus forts que les autres et avec une défense renforcée. Ces instances seront créées à partir de la classe Fighter mais nous ajusterons les caractéristiques manuellement. En étant plus forts, ils résisteront plus longtemps à la guerre.
Mais d'abord, on modifiera légèrement la classe Fighter pour s'assurer que les méthodes qui permettent de personnaliser les caractéristiques soient présentes plutôt que de conserver celles attribuées par le hasard au moment de la création.
public function setDefense($defense){Dans le fichier champ-de-bataille.php, on ajoutera la création des héros suite à la boucle qui crée les rebels et les stormtroopers.
$this->_defense = $defense;
}
public function setForce($force){
$this->_force = $force;
}
public function setHP($hp){
$this->_hp = $hp;
}
# juste pour rireDans la boucle while, ajouter le bloc de code suivant immédiatement après ces deux lignes :
$showDeclaration = false;
# héros
$luke = new Fighter('Luke Skywalker');
$luke->setDefense(10);
$luke->setForce(10);
$luke->setHP(1000);
$armyRebelAlliance[] = $luke;
$dv = new Fighter('Darth Vader');
$dv->setDefense(10);
$dv->setForce(10);
$dv->setHP(1000);
$armyImperial[] = $dv;
$attacker = array_rand($armies[$armyAttacker]);Ceci permettra de déterminer si le dernier combattant de chaque camp est Luke et Darth Vader. Dès qu'on s'aperçoit qu'ils sont les seuls survivants, on affiche la déclaration de Darth Vader à son fils : Luke, je suis ton père !
$defender = array_rand($armies[$armyDefender]);
# ajouter ici
if( !$showDeclaration && ($fightersLeft[0] == 1 && $fightersLeft[1] == 1) ){
$names = array();
$names[] = $armies[$armyAttacker][$attacker]->getName();
$names[] = $armies[$armyDefender][$defender]->getName();
$heroes = array('Luke Skywalker', 'Darth Vader');
$diff = array_diff($names, $heroes);
if( count($diff) == 0 ){
echo '<h1>LUKE, JE SUIS TON PÈRE !!!</h1>';
$showDeclaration = true;
}
}
Décommentez le bloc if($damage ...) pour voir apparaître la trace du combat (chaque coup porté). Vous verrez qu'il y a des fortes chances pour que Luke et Darth Vader s'affrontent lors du combat final. Un seul survivra.
Le langage politique est conçu pour que les mensonges sonnent vrais, pour que le meurtre semble respectable et pour donner l’apparence de solidité à ce qui n’est que du vent.
Tu arrives chez Steve's Music ou Italmélodie dans le but d'acheter un instrument pour former ton band de garage. Tu te diriges vers la section des instuments et tu hésites entre une Gibson Les Paul, une batterie ou un ukulele. Le choix s'avère difficile.
Et tu finis par tout laisser tomber. Tu te diriges vers la section de sonorisation et décides de faire appel à ta créativité. Si l'inspiration est au rendez-vous, peut-être arriveras-tu à faire sortir la musique d'un bonzaï ?
C'est exactement le type d'expérimentation atypique que Diego Stocco aime mettre sur pied.
Ça fait déjà un mois que je n'ai pas retouché mon script de générateur de combat aléatoire. La dernière fois, j'avais lancé l'idée de modifier le programme de façon à faire s'affronter deux armées plutôt que deux combattants. Autrement dit, il faudra maintenir deux listes de combattants, déterminer au hasard quelle armée et quel combattant sera l'attaquant et l'attaqué, dans un combat à mort qui n'aura pas de lendemain.
Pour ce faire, nous allons tenter de recréer les forces qui opposeront l'Alliance rebelle et l'armée Impériale de Star Wars et laisser le hasard déterminer le vainqueur (pour le meilleur et pour le pire).
Source de la photo
Pour poursuivre mon exemple, j'ai récupéré là où j'étais rendu à l'étape précédente. Aucun changement ne sera nécessaire pour le moment dans la classe Fighter; tout ce qu'il y aura à modifier sera dans le fichier d'arène que j'ai renommé pour l'occasion champ-de-bataille.php.
Le contenu du script PHP :
require_once('classes/fighter.php');Si vous souhaitez voir les caractéristiques des combattants créés par le programme, vous pouvez décommenter cette section :
# constante pour indiquer le nombre de combattants de chaque côté (forces égales)
DEFINE('NB_FIGHTERS', 250);
# noms des armées (pour affichage)
$armyNames = array('Alliance rebelle', 'Armée impériale');
# listes qui accueilleront les combattants
$armyRebelAlliance = array();
$armyImperial = array();
# générer les combattants de chaque armée (à forces égales)
for($i=1 ; $i<=NB_FIGHTERS ; $i++){
$armyRebelAlliance[] = new Fighter('Rebel # ' . $i);
$armyImperial[] = new Fighter('Stormtrooper # ' . $i);
}
/*Le combat peut commencer...
echo '<h3>Alliance rebelle</h3>';
foreach($armyRebelAlliance as $fighter){
echo $fighter->getName() . ' : ' . $fighter->getHP() . ' HP, Force ' . $fighter->getForce() . ', Defense ' . $fighter->getDefense() . "\n";
}
echo '<h3>Armée impériale</h3>';
foreach($armyImperial as $fighter){
echo $fighter->getName() . ' : ' . $fighter->getHP() . ' HP, Force ' . $fighter->getForce() . ', Defense ' . $fighter->getDefense() . "\n";
}
*/
echo '<h3>Fight!</h3>';Ensuite on affiche le gagnant et la liste des survivants :
$armies = array();
$armies[] = $armyRebelAlliance;
$armies[] = $armyImperial;
$fightersLeft = array();
$fightersLeft[] = count($armyRebelAlliance);
$fightersLeft[] = count($armyImperial);
while( $fightersLeft[0] > 0 && $fightersLeft[1] > 0 ){
# déterminer quelle armée attaquera et se défendra
list($armyAttacker, $armyDefender) = array_rand($armies, 2);
shuffle($armies[$armyAttacker]);
shuffle($armies[$armyDefender]);
$attacker = array_rand($armies[$armyAttacker]);
$defender = array_rand($armies[$armyDefender]);
$damage = $armies[$armyAttacker][$attacker]->hit($armies[$armyDefender][$defender]);
/*
if($damage > 0){
echo $armies[$armyAttacker][$attacker]->getName() . ' hits ' . $damage . ' HP on ' . $armies[$armyDefender][$defender]->getName() . "\n";
}
else{
echo $armies[$armyAttacker][$attacker]->getName() . ' miss ' . $armies[$armyDefender][$defender]->getName() . "\n";
}
*/
if( $armies[$armyDefender][$defender]->isKnockOut() ){
#echo '<strong>' . $armies[$armyDefender][$defender]->getName() . ' is KNOCK OUT</strong' . "\n";
// retirer le perdant de la liste des combattants
unset($armies[$armyDefender][$defender]);
$fightersLeft[$armyDefender]--;
}
if($fightersLeft[$armyDefender] == 0){
$armyWinner = $armyAttacker;
}
}
echo '<h3>Gagnant</h3>';Maintenant vous êtes prêts à simuler le combat entre les deux armées rivales. Est-ce que ce sera un massacre ? Pesez sur le bouton et constatez le par vous-même (et si le résultat ne fait pas votre affaire, rafraîchissez la page).
echo $armyNames[$armyWinner];
echo '<h3>Survivants</h3>';
echo 'Alliance rebelle : ' . $fightersLeft[0] . "\n";
echo 'Armée impériale : ' . $fightersLeft[1] . "\n";
echo '<h3>Liste des survivants</h3>';
foreach($armies[$armyWinner] as $survivor){
echo $survivor->getName() . ' with ' . $survivor->getHP() . ' HP left' . "\n";
}
Je fais appel aux fans de musique métal pour voir si j'ai l'oreille dérangée ou si mon impression est bonne. J'avais remarqué, il y a de nombreuses années, que deux riffs provenant de groupes différents avait une étrange ressemblance.
Pas tout à fait comme l'histoire de Malajube contre Katie Costello qui a créé un mini-scandale via Perez Hilton où la musique de Costello de même que le vidéoclip laissent croire à un plagiat artistique.
Dans le cas qui me préoccupe, ça me semble un peu plus subil et complexe. Il y a de nombreuses années, j'avais fait la remarque que le groupe métal français Misanthrope semblait avoir repris le riff très "catchy" d'une pièce d'un autre groupe métal, In Flames, en provenance de Suède.
J'ai sorti les pochettes (parce que oui, j'ai ces deux albums, témoins d'un passé où j'étais complètement fou de ce style musical) et j'ai essayé de comprendre ce qu'il en était.
In Flames
Album : The Jester Race
Pièce : #7 - Artifacts of the Black Rain
Note : enregistré au studio Fredman, à Göteborg en Suède, par Fredrik Nordström en novembre 1995
Misanthrope
Album : Libertines Humiliations
Pièce : #4 - L'écume des Chouans (repris aussi sous le nom "L'écume des solos")
Note : Enregistré au studio Fredman, à Göteborg en Suède, par Fredrik Nordström en août 1998
Curieuse coïncidence. Je me suis posé la question si, durant une période d'enregistrement en studio, le groupe n'aurait pas été influencé par l'autre. Je suis aller déterrer le passé et j'ai lu que le guitariste d'In Flames, Jesper Strömblad, ainsi que Anders Friden avaient déjà collaboré en studio avec Misanthrope lors de l'enregistrement de Visionnaire, un an auparavant.
Si ce n'est pas un "rip-off", doit-on en conclure à un clin d'oeil de la part du musicien ? Quelqu'un d'autre avait noté cette similitude entre le début des deux pièces ? Quelle est la portion de hasard pour que deux groupes différents puissent en venir à la même idée de riff ?
Je viens à l'instant de voir passer cette bande-annonce sur Twitter. Un film qui intéressera les programmeurs Java :
- Du même réalisateur que Javatar et .Not
- Avec Eddie Larrison, Scala Johansson, William Windows, Mona Lisa Harddrive et Lenny Linux
RIP John Johnsen
1951-2011
Where do you want to go today ?
J'en ai une bonne à vous raconter qui s'est passée hier soir à Montréal alors qu'on a décidé d'aller manger une crème glacée en fin de soirée.
Alors qu'on discutait tranquillement assis sur un banc, un homme circulait sur le trottoir avec son drapeau du Québec enroulé autour du corps (comme une cape) et nous a amicalement souhaité "Bonne Saint-Jean-Baptiste" (fête natonale des Québécois). Nous lui avons remis la pareille, sans penser que ça irait plus loin. Il avait l'air sur le party, sur un gros high, mais sans paraître menaçant. Probablement qu'il avait consommé plus que juste de la bière mais c'était un type assez comique pour qu'on le laisse parler.
Il ne demandait pas d'argent mais voulait du feu, question d'allumer sa cigarette. Un fumeur sans feu s'était-il plaint. Après un tour de magie raté impliquant deux allumettes qu'il alluma bout à bout entre ses doigts, il tenta de deviner nos noms. Je lis dans le subjonctif de l'impératif qualificatif du présent (encore pire). Ou quelque chose comme ça. Pour l'occasion, le hasard fait qu'il est tombé du premier coup sur les noms fictifs des deux filles qui m'accompagnaient : Catherine. Et moi, je semblais moins important dans l'histoire car il m'a rebaptisé Pierre Jean Jacques.
Il raconte qu'il doit aller se coucher mais que sa femme est à la maison et risque de le chicaner. Tu sais, elle n'était pas d'accord qu'il aille se promener avec son drapeau dans la rue. Il va rentrer à la maison et augmenter le niveau de l'air climatisé pour que le bruit enterre les questions de sa tendre moitié. Et il fera semblant de dormir. Dans son lit, il a un oreiller de corps : il en parle et en reparle. Ça lui fait du bien car ses genoux lui font mal. Il en parle en les comparant à une prolongation de ses os qui veulent sortir de son corps.
Il n'a plus le goût de faire l'amour à sa femme. Elle est grosse, elle qui pèse 225 livres alors qu'il n'en fait que 160. Pas des livres sterling, précise-t-il, en tentant de faire une tentative de joke. Si c'était des Euros, il serait riche! Être riche, tu peux faire plaisir à ceux que tu aimes et faire chier les autres avec ton argent. Sa femme a eu un cancer de l'utérus et un autre du sein. C'est moins intéressant pour lui. Sans compter que son engin est trop long, il ne peut pas la rentrer qu'à moitié (trop de détails...).
Il travaille le lendemain. 30$ de l'heure comme travailleur autonome, il ne peut pas passer à côté de ça. La prochaine femme qui va l'avoir, elle va être chanceuse. Il lui donnera des baisers en abondance. Une fois, il en a connu une... Elle n'était pas clitorienne ou vaginale. Elle était nichonnienne! Tu en rencontres juste une dans ta vie. S'il était une femme, il serait certainement lesbienne. Tu comprends, c'est un homme à femme. Il aime tellement les femmes, mais ce sont elles qui ont le pouvoir. Elles ont le privilège de décider si elles te veulent, ce sont elles qui ont la décision finale. Un gars ne peut pas faire ça.
Il m'a serré la main et est reparti à la recherche d'une autre personne à qui raconter son histoire. Il l'a trouvée de l'autre côté de la rue. C'est à ce moment-là qu'on s'est poussé en éclatant de rire.
Une autre rencontre étrange à ajouter à mon répertoire. La dernière était celle où un gars nous avait sollicité de l'argent en sortant du Dieu-du-Ciel! en échange d'un morceau de Marie-Claire Séguin interprété à la flûte à bec. Nous lui avons donné une pièce de 2$ et il s'est mis à jouer. Après 45 secondes ou 1 minute, il s'est arrêté soudainement. Selon le musicien, c'était tout ce que ça valait vu le montant qu'on lui avait remis. Priceless!
Bonne Saint-Jean à tous!
P.s. Au moment de la rédaction, je cherchais une photo pour accompagner l'article que j'ai trouvé sur un billet du blogue de Milie et Gex qui dépeint la société québécoise vu par nos cousins français. À lire.
Tant qu'à être dans les curiosités, voici une photo dont j'essaie encore de trouver l'explication et le lien qui unit les trois avertissements :
- No Bicycles Permitted
- Environmentally Sensitive Area
- Caution : Watch For Wheelchair Traffic
Tirez-en vos conclusions et n'hésitez pas à poster un commentaire pour les partager avec nous !
Je viens de faire une mise à jour pour Adobe Flash Player sur mon PC et j'ai remarqué que la barre de progression du programme d'installation indiquait le pourcentage avec un nombre de D K.
Quelqu'un sait ce que ça veut dire ?
- Download Kit ?
- Dizaines de Kilobytes ?
- Donkey Kong ?
Un lecteur (Emmanuel) m'a écrit pour me demander si je pouvais l'aider à faire fonctionner son service web PHP SOAP réalisé avec les composants du Zend Framework. En effectuant des recherches pour sa solution, il a trouvé mon article qui explique comment créer un WSDL facilement. Il a tenté de transposer mon exemple sur son projet mais mis à part faire apparaître le WSDL (serveur.php?wsdl), il n'arrivait pas à se connecter au service avec un client.
J'ai accepté de lui donner un coup de pouce mais au risque de me répéter, je lui ai d'abord demandé s'il avait lu la suite de mon article qui donnait quelques précisions sur l'article original : commentaire sur la création de WSDL en PHP.
En effet, il l'avait consulté et m'a expliqué, à l'aide d'un exemple concret, la nature du problème. Essentiellement, sa fonction appelée depuis le service web retourne un objet nommé Response et qu'il n'arrive pas à le récupérer côté client. La classe peut être définie sommairement comme suit :
class Response{En retournant l'objet, impossible de le récupérer côté client. Pourtant, tout est 100% fonctionnel s'il retourne un simple int, string, float, etc. Son intuition : définir dans le WSDL un type complexe qui correspondrait à l'objet retourné. J'avoue ne pas y avoir pensé et ne pas avoir expérimenté. Mais j'avais un doute que ce soit possible car l'objet possède des fonctions qui ne seraient pas prises en charge au moment du retour. Peut-être que je me trompe et que c'est possible ? À ma connaissance, le but d'un service web est d'offrir une interface standard pour être appelée à partir de n'importe quel langage de programmation. Ce qui sous-entend qu'on recevra des valeurs et non pas des objets.
/** @var bool */
private $returnValue;
/** @var string */
private $errCode;
/** @var string */
private $errMessage;
/* plusieurs fonctions */
}
Ma recommandation a été de lui suggérer de contourner le problème en utilisant une valeur de retour de type "array" associatif. Ainsi, sa classe Response offrirait une fonction pour récupérer les valeurs :
class Response{Dans la classe qui sera inspectée par AutoDiscover, j'ajoute une fonction :
/** @var bool */
private $returnValue;
/** @var string */
private $errCode;
/** @var string */
private $errMessage;
public function __construct(){
// à titre d'exemple...
$this->returnValue = true;
$this->errCode = 404;
$this->errMessage = 'Page not found';
}
public function getValues(){
$arrToReturn =
array(
'returnValue' => $this->returnValue,
'errCode' => $this->errCode,
'errMessage' => $this->errMessage
);
return $arrToReturn;
}
}
/**Alors que du côté client, je peux récupérer les valeurs selon les clés :
* Return array structure
* @return array
*/
public function getResponseStructure(){
$obj = new Response();
return $obj->getValues();
}
$client = new Zend_Soap_Client('http://wsdl.localhost/service.php?wsdl');En sortie de print_r() :
$response = $client->getResponseStructure();
print_r($response);
/*
echo $response['returnValue'] . "\n";
echo $response['errCode'] . "\n";
echo $response['errMessage'] . "\n";
*/
(Ceci devrait suffire pour obtenir les valeurs correctement. Si quelqu'un sait s'il est possible de retourner réellement un objet, je serais preneur pour la solution.
[returnValue] => 1
[errCode] => 404
[errMessage] => Page not found
)
Je suis un utilisateur de Twitter depuis le 6 février 2009 si je me fie au service When Did you Join Twitter. Pourtant, je ne fais pas parti des 2 300 000 suiveux du compte officiel de Google qui a rejoint le réseau de micro-blogging 3 jours après moi.
Pour ma part, je ne me souviens plus du tout quel était mon premier tweet. Mais ce n'était rien d'important et certainement pas un "hello world" (à moins que ?). Du côté de Google, leur premier "gazouilli" (quel mot affreux !) fût le suivant :
Une séquence binaire !
I'm 01100110 01100101 01100101 01101100 01101001 01101110 01100111 00100000 01101100 01110101 01100011 01101011 01111001 00001010
Tout ça juste pour dire une fois décodée : I'm feeling lucky. Ben coudonc.
Mise en situation : le designer d'une maquette de site web est celui qui possède généralement le plus de fonts installées sur son poste de travail. L'intégrateur reproduit le visuel en tentant de respecter au maximim la vision artistique du designer, en prenant soin de spécifier la font utilisée pour l'affichage du texte. Une fois le tout en ligne, le client se plaint qu'il ne voit pas les caractères correctement suivant ce qui avait été présenté. C'est qu'il n'a pas cette police spéciale installée sur son ordinateur.
Si vous rêvez d'intégrer n'importe quelle font à votre site web tout en étant certain que tous la verront, vous devez exploiter le truc @font-face en CSS avec les fonts TrueType (.TTF), OpenType (.OTF) et Web Open Font Format (WOFF).
Choisissez une font à votre goût sur un site tel que OpenFontLibrary ou Font Squirrel, téléchargez le fichier compressé qui contient le ou les différents formats. Certaines fonts sont payantes alors que d'autres sont gratuites pour usage commercial. Pour mon exemple, j'ai choisi Days en OTF.
Dans votre projet web, il est conseillé de conserver les différentes fonts en les organisant sous une arborescence logique comme : /css/fonts/Days/Days.otf.
Dans votre feuille de style CSS :
@font-face {Le fureteur cherchera d'abord localement sur l'ordinateur à un ou plusieurs endroits spécifiés (on peut ajouter plusieurs références de noms alternatifs avec local) et s'il ne le trouve pas, il utilisera l'URL pour la récupérer.
font-family: "Days";
src:
local("Days"),
local("Days alternatif"),
url(fonts/Days/Days.otf);
}
Pour y faire référence, on utilisera le nom indiqué dans font-family de @font-face indiqué plus haut. Ensuite, on l'appliquera à nos éléments par CSS :
h1{Voici un aperçu du résultat :
font-family: Days, Verdana, Arial;
font-size: 18px;
}
h2{
font-family: Days, Verdana, Arial;
font-size: 16px;
}
Le problème, c'est que les fonts avec les accents pour du texte français sont plus rares. Comme dans l'exemple ci-dessus, "à l'usage" est transformé en "a l'usage" en retirant l'accent. C'est à considérer lors du choix de la font.
Fait étonnant, OpenType a été développé par Microsoft et est supporté depuis IE 4 alors que les autres fureteurs n'ont été compatibles que très récemment.
Enfin, quelques ressources pour poursuivre votre exploration :
- @font-face sur Mozilla developer center
- un générateur de kit font-face
- un bon tutoriel sur l'utilisation de font-face
Si parfois tu te sens petit, inutile, démoralisé ou dépressif, n'oublie jamais que tu as été un jour le spermatozoïde le plus rapide de la bande.
Comme le temps est pluvieux, je passais le temps en regardant mes photos pour me remémorer des souvenirs. Lors de mon dernier voyage à Vancouver, j'avais remarqué ce restaurant qui servait des hot dogs inspirés de la culture culinaire japonaise. Si on lit bien, on voit le lien du site web. Il n'est jamais trop tard pour aller voir ce qu'ils offraient.
Dans le menu de Japadog : Teriyamo, Teriyaki, Okonomiyaki, porc Kurobuta, boeuf Kobe, aux fêtes edamame, sauce aux prunes...
Mais le plus drôle, c'est que celui inscrit comme étant le plus populaire est en cours d'amélioration !
Dommage que je ne sois pas allé lors de mon passage. Quelqu'un a déjà goûté à ce mets exotique ? Ça me semble plus raffiné qu'un bon vieux hot dog chou.
Quand j'ai reçu un bon de 100$ pour tester les campagnes AdWords de Google, j'ai sauté sur l'occasion pour essayer de faire un peu de publicité pour le présent blogue en ciblant le public geek. Pourtant, je n'ai rien à vendre alors pourquoi de la publicité ? Je suis ni une entreprise ni un magazine, juste un gars assoiffé de découvrir comment les choses fonctionnent. Et là où je travaille, les campagnes de positionnement ne sont pas sous ma responsabilité. C'est pourquoi je me suis lancé avec quelques tests sur mon projet personnel.
À ma surprise, j'ai vu récemment que ma publicité s'affichait dans la colonne de droite de Code 18. C'est un peu moche d'annoncer son site sur son propre site ! Pourquoi AdWords n'exclut-il pas automatiquement les annonces dont le lien pointe à l'URL où les annonces AdSense sont affichées ?
Je suis allé voir les outils de gestion de campagne AdWords (accès direct si vous êtes connecté) pour voir s'il y avait une possibilité d'ajouter une exception. Je me suis rendu dans la section Site and Category Exclusion et j'ai pu ajouter le domaine à exclure :
Une fois les changements enregistrés, je suis retourné voir si elle apparaissait encore et elle y était toujours. J'en ai conclus que ce n'était pas immédiat et que ça disparaîtrait une fois les index des serveurs mis à jour. Je suis allé dormir et à mon réveil ce matin, elle n'y figurait plus.
Voici un email de scam que j'ai reçu cette semaine, une genre de tentative de fraude visant à soutirer des informations personnelles et/ou de l'argent en me faisant croire que j'ai gagné une loterie. Lisez, vous verrez que c'est rigolo et surtout incohérent.
Madame, Mademoiselle, Monsieur,
Dans le cadre de la soutenance du libre accès à l'ordinateur et d'Internet, la fondation américaine " BILL & MELINDA GATES Foundation" a organisé une loterie concernant toutes les personnes ayant une adresse électronique.
Le tirage a été effectué par " BILL & MELINDA GATES foundation " et a concerné plus de 20.000.000 de compagnies et plus de 30.000.000 adresses d'Email privées de partout dans le monde. Ce programme promotionnel de l'Internet a lieu chaque année.
Cette loterie est une initiative de Monsieur et Madame GATES, Ceci dans le but de soutenir le libre accès à l'ordinateur et d'Internet partout dans le monde entier (INTERNET POUR TOUS) tel est le but de cette initiative.
Voici le tableau des lotsDès réception du présent message, sachez madame / mademoiselle / monsieur que vous êtes la personne correspondante à l'adresse électronique tirée au sort à la seconde place, ce qui fait de vous l'heureux (se) bénéficiaire d'un montant d'une valeur de 150 000 Euros.
- 1er prix Deux villas jumelées d'une valeur de 350 000 Euros située à la Riviera GOLF (Abidjan)
- 2ème prix La somme d'un montant de 150 000 Euros
- 3ème prix La somme d'un montant de 80 000 Euros
- 4ème prix
- 5ème prix La somme d'un montant de 30 000 Euros
- La somme d'un montant de 15 000 Euros
- Le Tirage des adresses Emails gagnants a été effectué par la présidente de succursale en présence d’un huissier de justice sous l'agrégation d'un avocat.
NB : Nous vous prions de bien vouloir nous adresser un message de confirmation à notre adresse email suivante: bm.gatef@yahoo.fr en mentionnant votre numéro d'identification qui est Le N° #xxxxxxxxxx sans oublier de remplir les informations demandées ci-dessous :
CIVILITE:................................................
NOM:…………………………………………………..
PRENOM:……………………………………………
PAYS:........................................................
VILLE:…………………………………………………
CODE POSTAL:……………………………………
TEL. FIXE:……………………………………………
PORTABLE:…………………………………………
ADRESSE COMPLETE :…………………………
PROFESSION:………………………………………
Encore une fois, la direction de vous félicite car vous devenez l'heureux (se) gagnant(e) du deuxième lot. Vous souhaitant bonne réception, nous vous prions de croire à l'assurance de notre considération distinguée.
P/S: REMERCIEMENT A LA POSTE.NET AINSI QU'AU GROUPE YAHOO
Comme le jeu des 7 erreurs qui rendent le message peu crédible :
- L'organisateur du concours possède mon adresse email mais n'a aucune idée de qui je suis. Déjà douteux.
- Depuis le temps, tout le monde sait qu'on doit se méfier de toute forme de message ou publicité qui nous informe qu'on a gagné quelque chose sans avoir participé. Ça l'était avant l'ère Internet, c'est d'autant plus vrai aujourd'hui.
- Juste 30 millions d'adresses email sélectionnées ? On est 1,7 milliards d'utilisateurs sur Internet! Pas très fair-play pour un concours "Internet pour tous"...
- Les arnaques soit disant impliquant la générosité de Microsoft ou Bill Gates, c'est démodé. Cher arnaqueur, essayez au moins de vous mettre à jour en inventant quelque chose comme quoi Sergey Brin et Larry Page seraient personnellement passés devant chez moi avec la caméra Street View, qu'ils ont capté mon adresse par inadvertance et qu'ils souhaitent me dédommager.
- Pourquoi la fondation de Bill préférerait utiliser l'Euro plutôt que la devise américaine, elle qui est basé aux États-Unis ?
- Je crois que je vais m'étouffer. Je dois répondre à une adresse Yahoo! en France. Haha!
- En collaboration avec Poste.net : Server not found.
En bref, la revue d'une semaine chargée :
- En magasinant une pile de rechange Ni-MH HHR-P105 pour mon téléphone sans fil Panasonic, j'ai préféré en commander une générique à un marchand chinois sur eBay pour 3,50$ (livraison incluse) au lieu d'encourager les grandes bannières qui en vendent des équivalentes entre 25$ et 35$.
- J'ai résolu mon problème de performance sur une lourde requête SQL qui utilisait des sous-requêtes dans le select en utilisant une table dérivée combinée avec la clause limit. Passé de 14 secondes d'éxécution à une fraction de seconde.
- J'ai acheté le tout premier numéro du magazine québécois Baron qui traite de culture, politique, design et voyage. Ça semble prometteur. En espérant que cette première parution prendra de la valeur un jour.
- J'ai reçu une vedette internationale dans mon salon! Malheureusement, je n'avais que de la bière Boréale à lui offrir, lui qui est un grand amateur de bières de micro-brasseries obscures.
- J'ai découvert Misteur Valaire et j'ai acheté leur deuxième album en remettant une généreuse contribution volontaire de 11,23$ (ce qui correspond au début de la suite de Fibonacci). Je respecte trop la musique pour faire parti des 61% qui n'ont rien donné. Coup de coeur : Gumshoe, Lillehammer et Ave Mucho.
- Ce vidéo en HTML5 qui se détruit lorsqu'on clique dessus est vraiment impressionnant.
- S'est rendu compte que c'est vraiment cool de réfléchir à une tactique loufoque pour qu'un ami annonce à son entourage qu'il est officiellement en couple avec la demoiselle qu'il voit en cachette depuis un certain temps.
- Les Francofolies sous la pluie, ce sont des spectacles qui tombent à l'eau.
- Tant pis pour ceux qui détestent FailQC en prétextant que ce n'est qu'une pâle copie de Failblog. Les trucs en français ne seraient jamais publiés sur ce dernier, ce qui justifie largement son existence.
- Ne pas oublier la fête des pères.
- Ceux qui ont acheté un t-shirt ou des autocollants à l'effigie du gardien Halak pour mettre sur leur voiture doivent se sentir un peu nono. Le jongleur des mots Guy Mongrain dirait surement que c'est le "Prix" à payer...
- Quelles sont les conséquences si la caissière de la pharmacie oublie de me faire composer mon NIP de carte de crédit ET que je ne signe pas le reçu ?
- Entre le Rigolfeur et le Mini-Putt authentique, lequel choisir ? Est-ce que "aucun" fait parti du choix de réponses ?
Dans un projet web où il y avait un certain nombre de listes d'entrées suffisamment longues qu'on devait utiliser la barre défilante verticale, un des requis ajouté tardivement était de rediriger l'utilisateur au bon endroit dans la liste suite à l'ajout ou la modification d'un enregistrement. Une fois modifié, une redirection s'effectuait vers la liste de gestion en incluant comme paramètre GET de l'URL l'identificateur unique (clé primaire) de l'entrée.
D'ordinaire, le positionnement à un emplacement spécifique de la page se fait par un ancre HTML. Un peu démodé mais ça fonctionne bien quand on en a besoin. Puisque chaque élément de la liste possèdait un attribut ID, j'aurais pu modifier chaque lien de redirection vers les listes pour y ajouter un hash tag (#element-id).
Mais bon, le problème c'est qu'il y a tellement de liens qui redirigent vers ces listes et j'en ai perdu la trace et que je voulais être certain de ne pas en oublier. La meilleure solution qui s'offrait à moi était de le déléguer aux pages des listings.
Si la liste est chargée et qu'elle possède un paramètre GET avec le numéro de l'entrée ajoutée ou modifiée, une instruction JavaScript ajouterait l'ancre automatiquement pour se positionner au bon endroit dans la page.
Et c'était incroyablement simple à faire. Il suffit d'appeler la ligne suivante en indiquant le nom de l'ancre (composé d'un terme générique et du numéro d'enregistrement, par exemple elem-999) :
window.location.hash = 'id-unique-de-l-ancre';Tellement simple que je n'avais aucun souvenir que ça existait. C'était la première fois que je l'utilisais celle-là. Et c'est là que je me dis que ça serait une bonne idée de réviser mes notions de base de JavaScript...
Soyez certain d'attendre que la page est complètement chargée avant d'appeler location.hash (par exemple, à l'intérieur de $(document).ready() de jQuery).
Retour sur l'anti-conférence pour un Web musical Québécois
Hier se tenait l'anti-conférence musiQCnumeriQC (dont j'avais entendu parler par l'entremise de l'Alliance Numérique) qui se tenait à la salle les Katacombes à Montréal (bâtiment curieux de l'extérieur mais très intéressante une fois à l'intérieur).
Je suis allé fouiner un peu pour voir ce qui s'y passait et par rapport à ce que j'ai eu l'occasion de voir, j'ai noté quelques liens intéressants à visiter.
- Alliance Numérique
- Viinyl.com - Your Song. Your Site.
- Ecoutez.ca (c'était le lancement de la plateforme)
- Dacapo - éditions musicales
- Misteur Valaire - un modèle différent (téléchargez l'album au prix désiré)
- FanTactik - Branchez-vous sur vos fans
- Backfed - Plateforme intéressante en développement (à suivre)
- Stage Yourself - Your show, your audience. (avec votre avatar qui assiste au spectacle virtuel)
- Frédéric Leduc (un guitariste qui a offert une performance web avec Stage Yourself)
Voici deux erreurs d'inattention que j'ai noté cette semaine en visitant ces sites web.
Malajube
En effectuant une recherche du mot clé Malajube sur Google, le premier résultat s'affiche comme l'image ci-contre. Damn! Le splash page est en Flash et le seul texte détecté est le choix de langue avec en prime le alt name de l'image "separateur".
Ce qui veut dire que si on cherche la séquence exacte des mots "français separateur english" (en utilisant les guillemets), les premiers résultats font aussi référence au site de Malajube.
Tours Kaleidoscope
Je vous avais glissé un mot sur la visite du Red Light de Montréal. En regardant la liste des visites offertes, j'ai remarqué que 5 rubriques possédaient encore du texte de maquette Lorem Ipsum. Oups!
Juste après mon souper, j'ai eu envie de manger un bon chocolat. J'ai sauté dans mon rapidotron et j'ai attéri à Matane dans le Bas-Saint-Laurent. En consultant les principales activités qu'on peut faire au centre-ville de Matane, j'ai vu dans la liste que le numéro 12 est de se bourrer de chocolat chez Matad'Or. Surtout à ne pas confondre avec les chocolats Matador du Liban!
Non, celui-ci est unique, un peu à l'image du dépanneurs/club vidéo de la campagne. Ici on a affaire à une chocolaterie/crèmerie authentique.
J'y ai déniché un ordinateur old-school en chocolat (avec amandes grillées). Un cadeau que votre geek préféré appréciera à sa juste valeur (dire informaticien, c'est un peu nul, non ?).
Si on regarde de plus près, on s'apercevra que l'écran date des années 80 mais que la technologie était suffisamment avancée pour qu'il soit plat. Quant au clavier, il ne compte que 59 touches et le pad numérique n'a pas de zéro.
Et si vous observez d'encore plus près, vous verrez qu'on s'en fout complètement et que j'ai fini de le manger avant même que vous finissiez de lire ces lignes.
À ajouter sur votre itinéraire dans les bonnes adresses à visiter lors de votre futur périple vers le village de Grosses-Roches.
Les Chocolats Matad'Or
496, avenue Saint-Jérôme
Matane, Québec
Tél. : 418-562-5672
Autrement, si vous préférez vous sucrer le bec avec des chocolats à l'image de technologies plus récentes, vous aurez tout un choix ici.
Voici un petit problème de programmation que j'ai rencontré en tentant de créer un énoncé SQL qui remplaçait des placeholders par les bonnes valeurs. Et c'est vraiment un pur hasard d'avoir trouvé ce bogue dans l'application car je faisais des tests sur un enregistrement spécifique qui m'a permis de déceler le problème.
J'ai simplifié l'exemple pour démontrer plus facilement ce qui se passe et j'ai assumé que j'avais vérifié et "escapé" les valeurs selon leur type pour m'en tenir uniquement à ce dont je voulais voir.
Selon vous, qu'est ce qui ne va pas dans le code PHP suivant :
$search = '/:param1/';À l'impression, l'énoncé SQL devient soudainement :
$value = "'The price is $1.50 USD'";
$sql = 'INSERT INTO table (field) VALUES (:param1)';
echo preg_replace($search, $value, $sql);
INSERT INTO table (field) VALUES ('The price is .50 USD')Le symbole $ est perdu de même que l'unité 1 sur le prix.
Et celle-ci fonctionne correctement :
$value = "'The price is 1.50$ CAD'";Pourquoi ? Je suppose que parce que j'utilise une expression régulière, la fonction preg_replace() peut s'attendre à avoir des back references sous la forme $1, $2, $3, etc., et il confond le symbole dans la valeur avec une référence arrière utilisée pour effectuer son remplacement (par une valeur vide).
Si j'appelle preg_quote() sur la variable $replace (avant d'appeler preg_replace()), j'obtiens cet énoncé :
INSERT INTO table (field) VALUES ('The price is $1\.50 USD')Une fois exécuté, le backslash devant le point n'est pas inséré dans la table. Mais Postgres me retourne un petit warning : Nonstandard use of escape in a string literal. Hint: Use the escape string syntax for escapes, e.g., E'\r\n.
Donc il est heureux si je l'exécute ainsi :
INSERT INTO table (field) VALUES ('The price is $1\.50 USD')Sinon mettre un double backslash (\\) devant les symboles $ fait aussi bien l'affaire et me permet de conserver le prix en entier dans le texte sans avoir à utiliser E' :
$value = str_replace('$', '\\$', $value);C'est ça qui arrive quand on joue dans le vieux code d'un autre, on trouve des belles petites perles qui nous font creuser nos méninges (et parfois sacrer un peu!).
Quand on fait du tourisme à l'étranger, beaucoup font appel aux guides pour en savoir un peu plus sur l'historique de l'endroit. À Montréal, dans ma propre ville où j'habite, je suis loin de tout connaître et comme j'ai un intérêt pour l'histoire, pourquoi ne pas faire le touriste et me rendre à une visite guidée ?
C'est exactement ce qu'on a fait quand ma copine m'a parlé d'un tour guidé de 2 heures (à pied) intitulé Derniers soupirs du Red Light "La Main" (St-Laurent), organisé par Tours Kaleidoscope. Elle s'est fait convaincre suite à la lecture d'un reportage paru dans le journal Metro du 11 juin dernier (voir pages 10 et 11). Un article est aussi disponible sur le site web, profitez-en pour regarder l'extrait vidéo de 6 minutes du guide Michel Jutras (vraiment intéressant et qui fait remarquer des détails auquels on ne porte généralement pas attention). Pour 15$ par personne, on en a eu pour notre argent.
Par la force des choses, le boulevard St-Laurent est devenu la rue principale de Montréal car à l'époque, la petite ville était entourée de remparts et le seul accès par le nord débouchait sur cette route principale. Les voyageurs qui se rendaient à Montréal l'empruntaient et c'est pour servir cette clientèle que des auberges et les débits d'alcools sont apparus tout au long de la Main.
Pour ceux qui s'intéressent à l'architecture, remarquez sur les trottoirs de St-Laurent, du centre-ville jusqu'à Mont-Royal, les années de construction des bâtiments sont inscrites devant chacun d'eux. Les plus vieux immeubles de la Main se trouvent du côté est.
À l'époque, la Main était un endroit respectable. C'est vers les années 1960 que ça s'est mis à devenir plus malfamé (contrôlé par la mafia). Dans le quartier du Red Light, la prostitution se faisait de trois façons :
- la sollicitation sur la rue
- dans les maisons closes
- les services de luxe pour la clientèle fortunée (les grandes dames)
Juste à côté, le Monument National. Vers l'extrémité gauche se trouvait le Musée Eden qui a réellement existé et dont s'est inspiré la série diffusée à Radio-Canada. Plus d'information se trouvera sur le panneau situé de l'autre côté de la rue, sur le mur de la SAT.
À la SAT (Société des Arts Technologies), on remarque la construction d'un dôme sur le toit pour faire des projections sur le plafond. Derrière, un autre dôme plus subtil indique une petite mosquée pour servir les musulmans du quartier. Un genre d'énergumène qui n'avait pas toutes ses facultés est venu se mêler à la visite. Il a rapidement perdu l'intérêt.
Plus loin sur Sainte-Catherine, devant les Foufounes Électriques (le bar s'est déjà nommé le Cabaret La Ceinture fléchée - voir l'histoire des cabarets montréalais sur Wikipedia) se trouve un bâtiment étroit avec une crèmerie qui se plante au milieu d'un stationnement. À l'époque, l'espace du stationnement était occupé par un bar de la mafia (c'était l'ancien quartier italien de Montréal, avant la Petite Italie) auquel était annexé un petit hôtel. Le bar a pris feu et les pompiers l'auraient laissé brûler pour s'en débarasser. Seul l'hôtel y aura survécu. Selon la rumeur, le propriétaire ne veut pas le démolir car il est convaincu qu'Al Capone y aurait déjà séjourné et qu'il pourra le prouver un jour. La compagnie de vêtements Parasuco a démarré ses bureaux dans ce bâtiment et ce sont eux qui ont fait la gigantesque fresque colorée sur les murs.
Notre guide nous a fait remarquer que les entrées des théâtres et salles de spectacles étaient souvent étroites. Ceci était dû au fait qu'on devait payer selon la façade qui avait pignon sur rue. Pour que ça coûte moins cher, on construisait les salles en pleine largeur à l'arrière de la façade étroite.
Dans les cabarets montréalais, des stars ont fait leur réputation. On pense à Charles Aznavour qui serait débarqué à Montréal pour faire quelques spectacles Au Faisan Doré (maintenant le bar de danseuses Kingdom, en face du Screaming Eagle), à Dominique Michel, Olivier Guimond et Lili St-Cyr.
Celle-ci était une éffeuilleuse californienne qui pris un nom français pour attirer la clientèle, par exemple à la salle maintenant connue comme le TNM. À l'époque, une loi interdisait que les danseuses quittent la scène moins vêtue qu'à leur arrivée. Pour contourner cette loi, elle a mis sur pied un numéro où elle se trouvait dans une baignoire et elle se rhabillait progressivement jusqu'à sa sortie. Elle reçut le titre de la stripteaseuse la plus populaire de Montréal.
Quelques autres points d'intérêts de la visite :
- le Montréal Pool Room déménagé l'autre côté de la rue
- Café Cléopatre, le dernier résistant (Hydro-Québec voudrait construire une deuxième tour à cet emplacement)
- shops de juifs (ateliers de couture)
- habitations Jeanne-Mance (habitations à loyer modique) en plein centre-ville
- la musique et les musiciens jazz jamaïcains
- le quartier multi-ethnique
Linux est à Windows ce qu'une jolie fille est à une prostituée : la jolie fille, il faut la séduire pour obtenir ce que l'on désire alors que la prostituée , il suffit de la payer, et surtout bien se protéger.
Qui dit robotique dit aussi programmation. Car ce sont nous les programmeurs qui réaliseront le code nécessaire au bon fonctionnement des robots dans un avenir plus ou moins lointain (à vrai dire, je suis sceptique de le voir de mon vivant !).
D'ailleurs, le prolifique auteur Isaac Asimov a exposé les lois de la robotique qui pourront nous servir de ligne directrice dans l'élaboration de notre travail :
- Un robot ne peut porter atteinte à un être humain, ni, restant passif, permettre qu'un être humain soit exposé au danger.
- Un robot doit obéir aux ordres que lui donne un être humain, sauf si de tels ordres entrent en conflit avec la première loi.
- Un robot doit protéger son existence tant que cette protection n'entre pas en conflit avec la première ou la seconde loi.
Robocop
Du côté du policier Robocop, il suit 4 directives prioritaires, inspirées de celles d'Asimov :
1. Être au service des citoyens
2. Protéger les innocents
3. Faire respecter la loi
4. Interdiction de s'attaquer à un membre de l'OCP
Malgré tout, il doit se nourrir avec de la purée pour bébés.
ED-209
Le rival de Robocop, ED-209 (Enforcement Droid Series 209) possède des armes destructrices et plusieurs défauts de fabrication. Lorsqu'il demande à son adversaire de poser son arme, il ne sait le détecter et tue sans pitié.
De par sa taille, il est maladroit dans les escaliers. Lorsqu'il tombe, son orteil métallique vibre intensément.
No.5 dans Coeur Circuit
Un prototype de robot doté d'intelligence artificielle de l'armée américaine qui est atteint par la foudre, ce qui cause un dérèglement dans son programme informatique, ce qui le rend pacifique et fasciné par la vie.
Non, sérieux non! Ce n'est pas ça du tout, on veut que les robots tuent!
Un peu innocent mais lit très vite. Se sent vivant et veut s'appeler Johnny. Devient plaqué or à la fin de Short Circuit 2.
Un projet de film (remake ?) serait sur la table pour 2011.
R2-D2 et C-3PO
Nul besoin de présentation ici.
R2-D2 est un modèle multi-fonctions possédant un pistolet paralysant, un outil pour agripper les objets, une interface d'ordinateur, un projecteur holographique (qui a déjà diffusé le Star Wars Kid) et un périscope. Peut aussi servir de baril de bière.
C-3PO est un droïde grande gueule qui connaît 6 millions de formes de communications. Autrement dit, il est capable de traduire les langues comme Google Translate ou Bing Translator.
Asimo
La compagnie Honda prétend que son robot Asimo (Advanced Step in Innovative MObility) ne serait pas une référence. Faudra demander au porte-parole de Honda au Québec, Martin Matte. On est toujours pas certain de son utilité.
C'est ben faite pareil cette p'tite bête là!
Terminator
Un cyborg assassin programmable devenu gouverneur de l'état de la Californie. A converti son hummer à l'hydrogène pour qu'il soit écologique.
Son mandat est bientôt terminé est sera peut-être remplacée par l'ancienne présidente d'eBay, Meg Whitman.
Hasta la Vista Baby!
Mention spéciale à HAL 9000, Goldorak, Astro, les Transformers, Marvin (Guide du voyageur galactique), Wall-E... Quelque uns font déjà partie du Hall of Fame des robots.
La balise <canvas> est nouvelle à la spécification HTML 5. Le développeur Daniel Puhe a fait quelques expérimentations intéressantes sur son site spielzeugz.de.
Commencez par regarder la démonstration vidéo de particules liquides sur YouTube. Ensuite, expérimentez vous-même le comportement des éléments sur le canvas avec votre souris et à l'aide d'un fureteurs récent compatible avec HTML 5 (Firefox, Chrome, Opera ou Safari). Vous pourrez aussi jeter un oeil au JavaScript dans le code source (il n'est pas minifié).
Particules liquides
Une version avec des lettres
Particules 2.0
Et ce n'est même pas du Flash ! Mais voyez l'usage du CPU de ma machine :
Pour en savoir plus sur le tag canvas, ce tutoriel présenté par Mozilla Developer Center saura vous guider convenablement.
Dans le glossaire d'un livre informatique, la définition du terme "infinite loop" :
Mais qu'est-ce qu'une boucle infinie ? Allons voir la définition :
Et c'est quoi la récursivité ?
Si vous ne la comprenez pas, ne comptez pas sur moi pour vous l'expliquer...
En cette période d'incertitude économique, amusons-nous a décortiquer l'endos du dollar américain (pour ceux qui y voient toujours les signes d'une conspiration).
- Le haut de la pyramide montre la partie non-complétée des États-Unis;
- L'ombre à gauche représente les terres à découvrir à l'ouest du pays;
- Le soleil levant représente la nouvelle nation;
- L'oeil pourrait ou non représenter la société secrète des Illuminati; C'est aussi probable que ça soit l'oeil de Sauron;
- Le bouclier représente l'habileté du pays à se prendre en charge et à voler de ses propres ailes;
- L'aigle regarde vers une branche d'olivier mais tient aussi des flèches. Il regarde pour la paix mais est aussi prêt à se défendre;
- Le numéro 13 est omniprésent. On compte aussi 13 étoiles au-dessus de l'aigle pour symboliser les 13 colonies originales. La pyramide possède 13 niveaux de briques, les citations latines (Annuit Coeptis et E Pluribus Unum) comptent chacunes 13 lettres, il y a 13 barres sur le bouclier, 13 feuilles sur la branche et 13 flèches;
- MDCCLXXVI est le chiffre romain pour 1776 (indépendance des États-Unis)
- La phrase latine "Novus ordo seclorum" veut dire "New Order of the Ages" pour indiquer la nouvelle ère où la nation américaine est devenue indépendante
- Annuit Coeptis veut dire "He (God) favors our undertaking"
- E Pluribus Unum veut dire "Out of many, one" dans le sens de "Out of many states, one nation"
Je vais partager avec vous un truc que je viens de voir dans un tutoriel vidéo et que je vais installer dès demain sur mon éditeur Netbeans au travail. Le projet Zen Coding sur Google Code propose une nouvelle façon d'écrire rapidement du code HTML et CSS selon les spécifications HTML 5.
Selon leur démonstration, après avoir installé leur package, si on inscrit cette ligne et qu'on appuie sur la touche TAB :
div#page>div.logo+ul#navigation>li*5>a
Ce sera automatiquement transformé en ce code HTML :
<div id="page">Vraiment cool hein ! Donc si votre éditeur est Aptana/Eclipse, Komodo, Notepad++, ils sont officiellement supportés. Du côté de Netbeans 6.8, la compatibilité est actuellement de base pour le HTML (vérifiez la liste des autres éditeurs compatibles sur le site, il y en a beaucoup d'autres dont Dreamweaver). Donc l'exemple ci-dessus ne fonctionne pas encore mais ça viendra et ce sera certainement un plugin prometteur pour les développeurs,
<div class="logo"></div>
<ul id="navigation">
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</div>
À la base, on pourra quand même utiliser certains raccourcis comme ceux-ci :
script TAB
<script type="text/javascript"></script>input TAB
<input type="type" id="name" name="name" value="value" />form TAB
<form action="action" method="method"></form>html:5 TAB (essayez aussi html:4s pour le HTML 5 strict)
<!DOCTYPE HTML>Et de nombreux autres. Référez-vous à la cheat sheet pour voir tous les raccourcis.
<html lang="ru-RU">
<head>
<title>title</title>
<meta charset="UTF-8">
</head>
<body>
</body>
</html>
Installation sur Netbeans 6.8
- Rendez-vous sur la page du projet
- Téléchargez la version la plus récente pour votre éditeur (par exemple NetBeans.Zen.HTML.1.2.zip)
- Vous allez obtenir un petit fichier de 8 Kb
- Dans Netbeans, allez dans Tools / Options
- Sous l'onglet General, cliquez sur le bouton Import (en bas à gauche de la fenêtre)
- Sélectionnez le fichier zip sur votre poste
- Vous verrez une fenêtre avec les options disponibles. Cochez All pour installer les macros et les gabarits de code
- Faites OK et redémarrez l'IDE
Vous pouvez aussi voir la vidéo où j'ai trouvé cette astuce.
Vous vous rappelez que je vous avais parlé des chips les plus piquantes au monde (Blair's Death Rain Habanero Chips) ? J'étais convaincu qu'à la saveur décapante de ces croustilles, elles étaient en vente uniquement en petit format individuel.
Et bien voilà une bonne nouvelle pour les amateurs d'épices qui font bobo à la langue, elles sont maintenant disponibles en grand format de 142 grammes chez Coconut (au coût de 4,79$). Je m'en suis procuré un mais je n'ai pas encore osé l'ouvrir, ne sachant pas quelle occasion serait la plus appropriée pour mettre au défi mes amis.
Je crois que le prochain qui m'invite à un barbecue pourra profiter de ces succulentes chips en ma compagnie.
Hier était la dernière journée du Festival mondial de la bière 2010 qui se tenait à la Gare Windsor à Montréal. Certaines personnes se sont plaintes qu'il y avait trop de monde, qu'on se pilait sur les pieds et qu'il y avait une file d'attente soit pour entrer ou pour acheter des coupons pour les dégustations. Et en plus le mauvais temps était de la partie.
Quand nous sommes arrivés en début d'après-midi, c'était encore supportable. Nous n'avons pratiquement pas attendu en file et nous avons rapidement acheté nos coupons. Dès ma première consommation, j'ai remarqué que les exposants offraient une plus grande quantité si on avait acheté le verre de l'événement (on pouvait aussi en apporter un de chez soi). Je suis donc retourné m'en procurer un au kiosque à l'accueil (8$) et soudainement, il y avait deux files d'attentes qui se rendaient jusqu'à la porte extérieure. Tout ça, en 15 minutes.
Chaque dégustation de bière et autres breuvages alcoolisés coûtait entre 1 et 5 coupons (1$ par coupon, en moyenne 3-4 coupons par consommation). Aussi, il y avait différents mets (fromages, viandes, frites, etc) qu'on pouvait se mettre sous la dent moyennant un frais supplémentaire.
Je vous fais un petit résumé de ce que j'ai goûté (et que ceux qui m'accompagnaient ont bien voulu partager avec moi).
Bières
- Cherry Wheat de Brutopia de Montréal (1er coup de coeur, comme une Kilkenny du type crème aux cerises. J'en veux encore!)
- La Sauvage de Boquébière de Sherbrooke (type rouge de Belgique si je me souviens bien. Intéressant)
- Double de Bonsecours du Broue Pub Bouhaha de Montréal (très bonne, à essayer)
- Sein d'Esprit du Broadway Pub de Shawinigan (personnel sympathique et belle sélection de bières. J'ai maintenant une raison de trainer du côté de Shawinigan)
- Ochamena Bi-Ru au sarrasin et thé japonais du Dieu du Ciel ! de Montréal (j'ai été légèrement déçu, je m'attendais à quelque chose de surprenant)
- Pale Ale lime et framboise de La Barberie de Québec (la finale de lime cachait le goût de la framboise)
- Félix 11,9% du Bilboquet de St-Hyacinthe (bière de glace dont on m'a expliqué le procédé de fabrication avec beaucoup de passion. Juste wow! 2ème coup de coeur)
- Viande de kangourou (la saucisse était délicieuse, la longe devait être mastiquée, moins tendre que je pensais mais plus goûteux)
- Cornet de frites de Frites Alors (sous la pluie!)
- Cassis Monna & Filles de l'Ile d'Orléans (tout simplement délicieux! Produits de grande qualité et personnel sympathique)
- Mistelle de fraise Frasil de Nordvie en Abitibi (celui de type porto est super). Ils font aussi un granité / sloche aux vraies fraises et à la rhubarbe (aussi bon qu'à la crèmerie Meu Meu). À essayer, meilleur et moins concentré et sirupeux que la liqueur Fragoli.
Chronique Saviez-vous que...
J'ai remarqué récemment dans les romans d'une autre époque qu'on parle souvent de "mise en bière" quand on traite de la mort. En effet, une bière était aussi le mot utilisé pour désigner un cercueil.
Alors profitons du premier avant de subir l'autre ! Je lève mon verre à votre santé !
Laptop Toshiba - Réinitialisation "out of the box"
En fin de journée hier, j'ai joué au technicien informatique pour dépanner ma belle-mère avec l'installation de Windows 7 (que je n'ai toujours pas adopté) sur son nouveau laptop. La mère et la fille sont allées magasiner ensemble chez Future Shop et elle a décidé de se gâter en achetant un portable Toshiba Satellite L550D avec écran de 17 pouces (ça semble être un bon rapport qualité/prix). Avec cet achat, elle avait droit à une promotion qui lui permettait de choisir une imprimante qui lui revenait à 20$ seulement (Epson Stylus NX215).
Le vendeur a bien entendu proposé la garantie prolongée mais j'avais préalablement pris soin d'informer ma belle-mère de la garantie supplémentaire qu'offre gratuitement Visa si on paye avec la carte de crédit (je vous conseille fortement de vérifier avec votre banque pour voir si cette protection est offerte).
Par exemple, chez ING :
D’une assurance extension garantie constructeur étendant de 2 années supplémentaires la garantie initiale de 2 ans du constructeur en cas d’achat avec votre carte VISA d’un bien neuf à usage ménager (réfrigérateur…), électronique vidéo (écran Plasma…) ou audio (lecteur MP3…) réservé à un usage privé;
À la Banque Laurentienne :
La carte VISA Noire Ma Récompense vous permet aussi de protéger vos biens acquis avec les assurances achats et garantie prolongée. En effet, la carte double la garantie du manufacturier jusqu’à concurrence d’une année et vous offre une protection contre la perte, le vol ou le bris pour 90 jours suivant l’achat.
Aux Caisses Desjardins :
Double la durée des garanties de moins de cinq ans fournies par le fabricant, jusqu'à concurrence d'un an, à l'égard de presque tous les biens achetés comportant une garantie écrite honorée au Canada.
Ensuite le vendeur a suggéré d'acheter un câble USB pour brancher l'imprimante. Prix: 29,99$. Il justifiait le prix en disant que ce n'était pas un câble USB standard (pas de type A mais de type B). Si ma belle-mère avait été seule, elle l'aurait probablement acheté car elle ne connaît pas ça. Mais ma copine savait que je pourrais lui en dénicher un à meilleur prix chez Addison-Electronique (3,99$ pour 6 pieds) ou sur le site DealExtreme (4,13$ pour 3 mètres, livraison incluse).
Enfin, voyant qu'elle n'est pas une experte, il présente le service ConnectPro qui peut lui configurer l'ordinateur pour 79,99$. C'est là que ma copine m'a téléphoné. Je lui ai dit que sur les laptops récents, le système d'exploitaton est pré-installé sur une partition cachée du disque dur et que ça se configure à peu près tout seul. Pas besoin d'acheter Windows à part ni d'un expert pour attendre à notre place que le système se mette en place de lui-même.
Elles sont donc reparties pour installer tout ça. Durant l'installation, quelque chose s'est interrompu et le processus semblait recommencer continuellement en redémarrant l'ordinateur plusieurs dizaines de fois. Définitivement, il y avait quelque chose qui ne tournait pas rond.
J'ai suggéré qu'on reprenne l'installation à partir du début. Après avoir essayé les classiques F2 et F8 au démarrage, je ne voyais pas de moyen de reprendre en mode "recovery" ou en mode réparation. Je me suis branché sur mon ordinateur et j'ai fait une recherche dans la documentation web pour savoir comment reprendre à la toute première étape et annuler ce qui avait été fait jusqu'à maintenant.
La solution
Pour réinitialiser l'ordinateur à la configuration de sortie d'usine (factory settings), comme si on venait de le sortir de la boîte la première fois ("out of the box") :
- Maintenez le bouton "power" enfoncé jusqu'à ce que l'ordinateur soit éteint
- Appuyez sur la touche 0 (zéro), maintenez-là enfoncée et appuyez sur le bouton "power" en même temps pour le mettre en marche
- Lorsque l'écran de démarrage apparaîtra, vous aurez l'impression que l'image à l'écran sera figée car il n'avancera pas plus loin dans les étapes
- C'est à ce moment-là que vous devrez relâcher la touche 0
- Vous devriez voir apparaître les options de recovery
- Tout sera réinitialisé (et vous perdrez toutes vos données)