Je lisais le premier tome du Comte de Monte Cristo et il était souvent question du terme piastre pour désigner la monnaie de l'époque (19ème siècle).
Au Québec, dans le jargon populaire, il est courant de parler de notre dollar en utilisant le mot piastre (prononcé "piasse"). Toujours dans la thématique vernaculaire, on peut se poser la question à savoir ce que veut dire l'expression : changer 4 trente sous pour une piastre.
Si vous entendez un québécois dire ça, vous devrez traduire ce qu'il veut dire par : changer pour quelque chose d'exactement identique.
Mettons cette expression sous la loupe :
Au Canada, le mot sou est utilisé dans le langage courant pour dénommer la division du dollar canadien, dont le terme officiel est cent. Les pièces d'un cent ont le nom vernaculaire de sou noir, et les pièces de vingt-cinq cents, celui de trente sous.
Pendant tout le régime français, on utilisait, en Nouvelle-France, le même système monétaire qu’en France. Ce système était fondé sur la livre, qui se divisait en 20 sous.
En 1760, les Britanniques font la conquête de la Nouvelle-France, mais ils laissent en place le système monétaire français. En effet, à cette époque, la livre anglaise et la livre française ont à peu près la même valeur.
Au 19e siècle, les dollars font leur apparition. Il y a donc deux systèmes monétaires qui coexistent : la livre et le dollar. Les gens les utilisent sans trop les différencier.
Le gouvernement du Canada détermine que six livres équivalent à un dollar. Puisqu’il y a 20 sous dans une livre et six livres dans un dollar, il y a donc 120 sous dans un dollar (6 fois 20). Et 120 sous divisés par 4 égalent 30 sous. Comme la livre et le dollar étaient interchangeables dans l'esprit des gens, ils se sont mis à dire que ça prenait quatre 30 sous pour faire un dollar.
Ce qui a ajouté de la crédibilité à l'expression, c'est que pendant un certain temps il a effectivement existé des 30 sous en papier, imprimés par des compagnies ferroviaires.
C'est en 1858 que le gouvernement décide de créer le dollar canadien, de même que les pièces de 25 cents. Ce qui ne nous empêche d’utiliser encore des 30 sous... même s'ils ne valent que 25 cents.
Sources :
Je sais que je vais en surprendre plusieurs d'entre vous avec cette déclaration incendière alors attachez bien votre tuque avec d'la broche, assoyez-vous confortablement, respirez un bon coup et tâchez de ne pas perdre connaissance :
Contrairement aux autres fureteurs, Internet Explorer ne supporte pas la fonction indexOf sur les arrays.
Dûr coup à encaisser hein ? Comment, tu n'es pas surpris du tout ? Ami lecteur, moi qui te croyait de bonne foi envers le fureteur vedette de Microsoft. Pourtant, n'ont-ils pas annoncé que leur dernière mouture allait impressionner ?
Eh bien non, même IE8 gâche la fête et cause des maux de têtes aux développeurs. Personnellement, au cours de mes tests, les fureteurs suivants ont passé tous les tests avec succès : Firefox 3, Safari 4, Chrome 4 et Opera 10. Alors qu'IE6, IE7 et IE8 ont décidé de faire classe à part.
Pourtant, tous sans exception supportent correctement String.indexOf() :
console.log( 'lorem ipsum dolor sit amet'.indexOf('ipsum') );Si vous n'utilisez pas Firebug ou Firebug lite :
alert( 'lorem ipsum dolor sit amet'.indexOf('ipsum') );Mais Array.indexOf() cause une erreur sous IE :
console.log( [10,20,30,40].indexOf(40) );C'est ce dont je me suis aperçu lorsque j'ai testé ma librairie (je teste toujours mes assertions en commençant avec Firefox). IndexOf n'est pas un standard mais tous se sont entendus pour supporter nativement la fonction.
Au moins, vous serez heureux d'apprendre qu'il est possible de le fixer facilement. Il suffit d'inclure le fix suivant à votre projet pour ramener la compatibilité de vos scripts en toute tranquillité :
if(!Array.indexOf){Si la fonction indexOf() n'existe pas nativement, elle sera définie par ce script qui prolonge l'objet Array (avec le mécanisme prototype). Notez aussi que dans le code source des frameworks Prototype.js et jQuery, ils implémentent cette patch de la même façon.
Array.prototype.indexOf = function(obj){
for(var i=0; i<this.length; i++){
if(this[i]==obj){
return i;
}
}
return -1;
}
}
Lors de l'écriture d'un plugin jQuery, je cherchais un moyen pour trier un tableau (array) selon une des clés des objets JSON qui le composaient. Après quelques minutes à rechercher un exemple concret pour faire la manipulation, j'en suis venu à la conclusion que ça serait plus simple de trouver comment faire par moi-même.
En m'inspirant de ce qu'il y avait de disponible dans Prototype, j'ai vu qu'il existait la fonction sortBy pour trier selon une fonction personnalisée passée en paramètre mais qu'il n'y avait pas d'équivalent sous jQuery. À ma grande surprise, c'est en JavaScript pur que j'ai trouvé la solution.
Pour se mettre en contexte, mon array pouvait ressembler à ceci (entendons nous, à quelques détails près!) :
var arr = [Pour faire un tri par clé il suffit d'écrire une petite fonction toute simple :
{name:'Code 18', age:28, city:'Montréal'},
{name:'Gandalf', age:1000, city:'Middle-Earth'},
{name:'Elvis', age:42, city:'Memphis'},
{name:'Barack Obama', age:48, city:'Chicago'},
{name:'Ronald McDonald', age:47, city:'San Bernardino'}
];
function sortByName(key1, key2){Ou encore :
return key1.name > key2.name;
}
function sortByAge(key1, key2){Ces fonctions effectueront un tri ascendant, c'est-à-dire du plus petit au plus grand. Pour les inverser, il suffit de remplacer > par <. Ensuite, on indique la fonction de tri à la méthode native sort() de JavaScript. La fonction peut être anonyme ou pas (ce que j'ai fait pour plus de lisibilité) et il n'est pas nécessaire de réattribuer l'array trié à la variable (référence).
return key1.age > key2.age;
}
arr.sort(sortByName);Pour visualiser ce qui se passe, vous pouvez imprimer le résultat avec Firebug avant et après le tri :
arr.sort(sortByAge);
console.log(arr);C'est ridicule comme c'était facile. Ma paresse initiale m'a fait perdre plus de temps que ça m'en a pris pour figurer la solution. Voilà, c'était ce que j'ai appris aujourd'hui.
Le grand public peut remercier les fureteurs d'ajouter automatiquement "http://" devant les domaines qu'ils entrent dans la barre d'adresse. Aussi, plusieurs personnes n'entrent pas le "www" qui précède le domaine. Ça facilite l'accès au site en réduisant le nombre de caractères qu'il y a à taper et les programmeurs sont en mesure de les rediriger automatiquement vers le sous-domaine www par défaut (si c'est le cas).
Sous Apache, si mod_rewrite est activé, on peut placer ce bout de code dans le fichier .htaccess placé à la racine du site :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domaine.com$ [NC]
RewriteRule ^(.*)$ http://www.domaine.com/$1 [R=301,L]
</IfModule>
Sur la ligne RewriteCond, vous devrez remplacer domaine.com par le domaine que le visiteur a entré selon le même genre de syntaxe qu'une regex :
- ^ pour commencer l'expression et $ pour la terminer
- %{HTTP_HOST} est une variable d'environnement d'Apache
- NC entre crochets indique No Case (insensible à la casse)
Le tout regroupé sous la condition IfModule mod_rewrite.c pour s'assurer que le module est chargé.
Un peu hors sujet, à propos de l'ajout automatiquement de http://, je ne me souviens pas comment les vieux fureteurs réagissaient, par exemple Netscape Navigator et Communicator... D'ailleurs, ça me fait penser à une question terminologique : En quelle année les internautes ont cessé de "naviguer" sur le web et se sont mis à "surfer" ?
Puisque le passé n'existe plus et le futur n'existe pas, autant les inventer.
Vous allez voir que j'ai de la suite dans les idées ce matin. Au dernier Pecha Kucha Montréal, Philippe Lamarre a fait une excellente présentation avec "Graphisme vernaculaire : l'identité graphique des villes" (Montréal, Buenos Aires et Berlin) dont vous pouvez retrouver les photos sur le site du magazine Urbania.
Vernaculaire : mot à 100$ ne faisant pas parti de mon vocabulaire courant. Pour en trouver le sens, je me suis retrouvé sur Wikipedia : architecture vernaculaire. Mais j'ai aussi trouvé la fiche d'écureuil :
Le terme écureuil [ekyʁœj] est un nom vernaculaire ambigu qui désigne en français de nombreuses espèces de rongeurs grimpeurs de taille moyenne, parfois même « volants ».
Les écureuils, on en trouve des milliers dans le paysage urbain montréalais. Avec le retour du printemps, à 2 reprises cette semaine, j'en ai vu trouver refuge sur mon balcon, situé au dernier étage de l'immeuble où j'habite. Ça grimpe aux murs de briques ces petites bêtes là.
D'ailleurs, ça me rappelle qu'il y avait une mascotte pour amuser les jeunes au Centre Père Marquette qui, si ma mémoire est bonne, se nommait Stooky (ou Stookie).
Qu'est-ce qui arrive avec elle ? Est-elle toujours en vie ? Justement, un ami nous a visité la semaine dernière et lorsqu'il a quitté pour se rendre à sa voiture stationnée à côté du parc, il a vu un gros SUV rouler à toute allure et s'arrêter à côté d'un gars pour lui faire sa fête, lequel s'est enfuit à toutes jambes. Se battre à plusieurs contre un, c'est déloyal (du moins, c'est ce que Karate Kid m'a appris).
Selon des témoins, la bataille dans le parc ressemblait à ceci :
D'un autre côté, il y a aussi l'histoire virale du crasher squirrel que mon cousin albertain m'avait raconté lorsqu'il y a eu le buzz l'été dernier. Ce fût la photo du jour du National Geographic le 13 août 2009.
Mes idées ne sont pas claires ce matin. Je divague sur le sujet... C'est ce qui arrive quand je dors mal ou que je bois un peu trop de vin. Je me sens comme André Sauvé qui saute du coq à l'âne. D'ailleurs j'ai des billets pour assister à son spectacle au Théâtre Maisonneuve. Présenté par la boisson gazeuse 7up. Eh ben.
Dans le cadre du Pecha Kucha Montréal #16 qui se tenait le 24 mars dernier, je me suis rendu à la SAT avec ma blonde et des amis pour y assister (by the way, je trouve ça ordinaire de dire "conjointe"). Il paraît que le dernier avait eu lieu au Centre Canadien d'Architecture et qu'il n'avait pas été à la hauteur des attentes.
Donc, comme l'événement était de retour à sa salle de prédilection (la Société des Arts Technologiques sur le boulevard Saint-Laurent), nous nous sommes dit que ça serait une bonne idée d'aller manger au Montreal Pool Room situé tout juste en face (avant son déménagement imminent car le secteur sera rasé pour revitaliser le quartier) mais une contrainte nous en a empêché. Ça sera pour une prochaine fois, quoi qu'il faudra faire vite pour aller avaler un hot dog au lieu d'origine de cette institution montréalaise (même si, contrairement à ce que son nom indique, il n'y a plus de tables de billard depuis longtemps déjà).
Si vous ne connaissez pas les Pecha Kucha, vous devez savoir que c'est un concept de présentation où 20 images défilent une à une à 20 secondes d'intervalle et le présentateur n'a pas le contrôle pour les changer. Il doit se servir de celles-ci pour appuyer son sujet.
Je ne résumerai pas la soirée car j'aimerais focuser sur une présentation ultra geek qui m'a fait sourire. Il s'agit de celle intitulée "Sans titre" d'Alexandre Castonguay (artiste multidisciplinaire, professeur à l’Université d’Ottawa et membre fondateur d’Artengine).
Généralement, on constate deux problèmes possibles : soit le présentateur parle trop lentement ou trop vite par rapport à la vitesse de défilement des images, soit l'animateur doit intervenir et ajuster le micro pour le volume ou le feedback.
Cette fois-ci, les problèmes étaient nombreux et on aurait pu croire que M.Castonguay avait déjà connu une meilleure soirée. C'était le chaos. D'abord, il a averti l'assistance qu'il avait des problèmes de batterie de portable et qu'il fallait attendre que l'ordinateur redémarre. On voyait projeté sur les 3 écrans une image du BIOS. Ensuite, sa configuration ne semblait pas au point. Pourtant, il continuait de parler des imprévus qui peuvent survenir mais son expression en disait long : il semblait dépassé par les événements. Sa présentation laissait croire à un désastre : divers messages d'erreurs, le vidéo qui ne démarre pas, mauvais codec ou carte vidéo qui distortionne l'image, compilation Linux avec gcc qui ne semble pas fonctionner, etc. Tout ça sur écran géant pendant qu'une partie de l'assistance semblait mal à l'aise pour le pauvre professeur.
Jusqu'à ce qu'on se rende compte que c'était une mise en scène totalement orchestrée depuis le début. Il avait lui-même simulé les imprévus, soigneusement préparé les images nécessaires à sa mascarade techno. J'avais un doute car comme nous étions assis dans les premières rangées, nous avions remarqué qu'il n'était pas tout à fait synchro avec l'écran quand il tappait au clavier. Il reste que sa mise en scène était vraiment originale et géniale. Il a su garder son sérieux jusqu'à la fin pour piéger tout le monde. J'étais tellement absorbé à comprendre ce qui se passait que je ne suis plus certain de me rappeler de quoi il parlait tellement il semblait se justifier. En terminant son speech, sa batterie a même "brûlé" et de la fumée sortait du laptop. On y a cru jusqu'au bout. Il a certainement su produire l'effet escompté sur le public qui a fini par être lui aussi amusé.
Il peut être fier de son coup.
Pendant que certains regardent un mystérieux personnage improviser des pièces pour piano sur Chat Roulette, je fais ma bonne action et j'en glisse un mot. Ça amusera tout le monde.
Comme il y a un véritable buzz sur ce service de clavardage avec webcam où les voyeurs du monde (pour ne pas dire pervers) s'y donnent rendez-vous, d'autres profitent de la popularité du site pour inspirer une campagne publicitaire virale pour nous faire réfléchir. Disons qu'on change d'humeur subitement. Visitez Do You Chat ? pour comprendre de quoi il est question. Un message assez efficace du mouvement Ni Putes Ni Soumises pour dénoncer la violence contre les femmes. Profitez-en pour passer le mot, celui-là aussi mérite de faire parler de lui.
Enfin, finissons sur une note plus positive et revenons-en aux pianistes de talent qui se diffusent sur le net. J'aimerais vous faire découvrir l'improvisation d'une pièce de Masada (John Zorn) Book II par analihilator. Juste wow.
Avec le standard SQL, vous savez qu'on doit construire une requête SQL ainsi :
SELECT *Sous PostgreSQL, je vais peut-être vous apprendre quelque chose de curieux mais vous pouvez omettre complètement la clause FROM sous certaines circonstances.
FROM table
WHERE id = 100;
Peut-être avez-vous déjà écrit une requête du type :
SELECT 'Code 18', CURRENT_DATE;En effet, vous n'avez pas eu à spécifier de table car il n'était pas question de sélectionner de données qui en provenaient d'une. Et si c'était le cas ?
Bien qu'elle ait la valeur "false" par défaut depuis Postgres 8.1, il est possible de faire basculer la configuration de add_missing_from à "true" pour ne pas avoir à spécifier de clause FROM si on fait référence au nom de la table dans le SELECT.
Pour l'activer :
SET add_missing_from TO TRUE;Ce qui permet de faire :
SELECT SUM(order.amount) as totalAu lieu de la façon standard :
WHERE province = 'Québec'
SELECT SUM(amount) as totalPour la désactiver de nouveau :
FROM order
WHERE province = 'Québec'
SET add_missing_from TO FALSE;Bien entendu, vous aurez compris que ce n'est pas un standard SQL.
Pendant mon passage au Cegep il y a plusieurs années, je lisais tout ce qui me tombait sous la main, plus particulièrement lorsque ça touchait à l'histoire. Je me souviens être allé à la boutique Parchemin dans le métro Berri-UQAM et avoir acheté une brique de 700 pages sur l'Europe : Histoire de ses peuples (Jean-Baptiste Duroselle, Pluriel/Hachette, ISBN 9782012789128).
Sur le coup, ça m'a permis de mieux mettre en contexte l'histoire élémentaire qu'on nous apprenait vaguement au secondaire, en ayant accès à des détails beaucoup plus précis. Pourtant, malgré toute la somme des connaissances qu'il contient, quand je regarde ce livre, je résume mon apprentissage à un seul détail quasi anecdotique : le peuple des Alamani.
J'ai retrouvé le passage au chapitre 6, La grande époque des Germains. En voici un court résumé :
- D'abord, l'historien grec Posidonios les introduit au 1er siècle av.-J.-C. comme "Germain".
- Jules César, au moment de conquérir la Gaule utilisera "Germani" pour désigner les tribus fortement celtisées sur les rives du Rhin (d'où Germany en anglais).
- À partir de 213 après J.-C., on utilisera le terme Alamani (en latin) pour désigner tous les hommes d'un regroupement de tribus, situés à l'extérieur des frontières de l'Empire romain. Tous les hommes comme dans "All Men". Ce qui nous donnera Allemands.
Sinon, un autre truc me revient en tête : l'origine du nom Charlemagne. Savez-vous que ce n'est pas tout à fait son nom ? En fait, on devrait le lire avec son surnom Charles le Magne où Magne veut dire Grand. C'est un peu plus évident à réaliser quand on regarde les équivalences traduites :
- en italien : Carlomagno
- anglo-saxon : Cearl
- en allemand : Karl Der Grosse. Kerl en nouveau haut allemand et Karl en allemand moderne (signifie "Soldat Brave")
Billet mis à jour pour 2011
Un client effectue des ventes en ligne sur son site web. Comme le paiement se fait à l'aide de PayPal, il préfère calculer d'avance les taxes applicables et vendre ses produits "taxes incluses". À des fins de rapports, il voulait que, suite à une transaction, je calcule la portion de TPS et TVQ qui correspondait au prix vendu.
Comment faire pour faire l'opération inverse dans le calcul des taxes ? La difficulté est qu'au Québec, on taxe d'abord le sous-total pour ajouter la TPS (Taxes sur les Produits et Services de 5%). On taxe ensuite la somme du sous-total et de la TPS pour y ajouter la TVQ (Taxe de Vente du Québec qui est passée de 7,5% à 8,5%). Donc la TPS est taxable ! Risible.
Si on connaît le taux de taxation combiné (qui était de 12,875% en 2010 et maintenant de 13,925%, depuis le 1er janvier 2011), on peut diviser le total par ce taux pour déduisant le montant initial avant taxes. Une fois en possession de ce chiffre, il suffit de refaire le calcul normalement pour déterminer le montant de chaque taxe individuelle.
On sait qu'on peut calculer l'ajout des taxes facilement :
DEFINE('TPS', 0.05);Mais comment déterminer le montant initial ?
DEFINE('TVQ', 0.085);
function addTaxes($amount){
$tps = $amount * TPS;
$tvq = ($amount + $tps) * TVQ;
return $amount + $tps + $tvq;
}
$tps = $amount * TPS;La valeur des taxes est donc :
$tvq = ($amount + $tps) * TVQ;
$taxes = $tps + ($tps * TVQ);Le total incluant les taxes :
// ou
$taxes = ($amount * TPS) + (($amount * TPS) * TVQ);
$total = $amount + (($amount * TPS) + (($amount + ($amount * TPS)) * TVQ));Et le ratio montant avec taxes divisé par montant sans taxe :
$ratio = ($amount + ($amount + (($amount * TPS) + (($amount + ($amount * TPS)) * TVQ))) / $amount) - $amount;Ce qui nous donne 1.13925.
En divisant le total par le taux de taxation, on obtient le montant initial qui ne comprend ni la TPS ni la TVQ.
Réduit à sa plus simple expression, on obtient la règle :
$ratio = 1 + ((1 * TPS) + ((1 + (1 * TPS)) * TVQ));Reprenons cette formule pour faire le calcul inversé
function revertTaxes($amount){Pour vérifier si le calcul se fait correctement, je vais vérifier les chiffres sur une facture réelle.
$ratio = 1 + ((1 * TPS) + ((1 + (1 * TPS)) * TVQ));
$amount_without_taxes = $amount / $ratio;
$tps = $amount_without_taxes * TPS;
$tvq = ($amount_without_taxes + $tps) * TVQ;
// arrondir à 2 décimales au besoin
return array($amount_without_taxes, $tps, $tvq);
}
list($initial_price, $tps_value, $tvq_value) = revertTaxes(24.81);
echo "Prix initial: $initial_price \n";
echo "TPS: $tps_value \n";
echo "TVQ: $tvq_value \n";
Sous-total : 21,98 $
TPS : 1,10 $ (5%)
TVQ : 1,73 $ (7,5%)
Total : 24,81 $
Sur la facture :
- Sous-total : 99,99 $
- TPS : 5 $ (5%)
- TVQ : 8,92 $ (8.5%)
- Total : 113,91 $
Prix original: 99.986833443055
TPS: 4.9993416721527
TVQ: 8.9238248847926
Assez précis.
La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre.
Je suis certain que la plupart d'entre vous vous rappelerez avoir utilisé Dreamweaver pour générer des images rollover en quelques clicks. Vous savez alors que l'éditeur générait du code JavaScript dans la page pour préparer le bon fonctionnement du rollover et qu'il ajoutait un appel d'initialisation dans l'attribut onload de la balise body. Plus précisément, il s'agissait de ce groupe de fonctions :
- MM_swapImgRestore()
- MM_preloadImages()
- MM_findObj()
- MM_swapImage()
Pour ne pas se casser la tête, le truc est de prendre l'approche CSS, sans même utiliser le JavaScript.
1. Créer une seule image qui comprend plusieurs états
Ici, j'ai juxtaposé verticalement deux états d'images de 16x16 dans une image unique de 16 pixels de large par 32 pixels de haut.
Au niveau du poids du fichier, on peut parfois obtenir un gain :
- connect.png : 748 octets
- disconnect.png : 796 octets
- les 2 combinées en 1 seul fichier : 1,3 ko (0,2 ko en moins)
2. HTML
La balise IMG pour un bouton rollover ? OUT! On préférera un lien sur lequel on appliquera une classe. Le texte du lien sera disponible pour le référencement mais on le fera disparaître hors-champ par CSS.
<a class="connect" href="/page.php">Connexion</a>3. CSS
Du côté de la feuille de style, on définira l'état initial du bouton. Par défaut, un lien possède la propriété d'affichage "inline", on le forcera à être en bloc. On déterminera la zone visible de l'image, soit la pleine largeur (16px) et les 16 premiers pixels en hauteur. Le texte sera repositionné loin à l'extérieur du cadre (petit tour de passe-passe) et on indiquera le chemin de l'image.
.connect{Une fois ces dispositions prises, on peut prendre avantage de la pseudo-classe hover pour indiquer de passer à l'état second en positionnant temporairement la zone visible (16x16) vers le bas. L'état initial sera repris lorsque le curseur ne sera plus au dessus du lien.
display:block;
width:16px;
height:16px;
text-indent: -9999px;
background:url(/images/connect.png) 0 0 no-repeat;
}
.connect:hover{C'est nettement une grande amélioration par rapport ce qu'il y avait de disponible à l'époque. Yahoo! est réputé pour utiliser cette technique intensivement, surtout pour minimiser le nombre de requêtes HTTP vers ses icônes (exemple). Sans surprise, Facebook aussi (exemple).
background-position: left bottom;
}
Sur mon heure de dîner, je me suis amusé à créer une page Facebook pour mon blogue. Pas qu'il soit extrêmement populaire pour mériter une page et des fans, mais plutôt pour mettre en pratique la devise "Abuser des médias sociaux pour accroître sa visibilité sur le web".
En comptant presque 8000 visites uniques par mois, je me rends compte que je connais peu mes lecteurs. Un de mes buts est de me rapprocher du lectorat, de prendre la rédaction comme prétexte à créer des liens avec des gens ayant des intérêts communs. Ce qui me fait réitérer mon intérêt pour des activités sociales comme les Startup Camp, Pecha Kucha, Ignite, Yulblog et autres événements futurs auquels j'assisterai.
J'en conviens, le terme adepte (fan) n'est pas très approprié. C'est pourquoi je vois davantage l'adhésion comme une simple confirmation que vous me lisez et un support qui m'encourage à mener plus loin le projet. Je suis curieux d'avoir du feedback sur ce que vous venez y chercher, les sections que vous lisez et vos sujets préférés.
Qui sera le premier adepte à se manifester ?
En traduisant une librairie Prototype vers jQuery, c'est toujours une bonne occasion de voir les équivalences et de quelle façon on peut faire un workaround pour arriver au même résultat.
Dans un de mes scripts, j'accédais par un sélecteur à un élément du DOM et je devais remonter à un niveau supérieur dans l'imbrication HTML jusqu'à ce que je trouve l'élément cherché. Avec Prototype, j'utilisais Element.ancestors() ou Element.up() pour remonter l'arborescence jusqu'au parent.
Imaginez l'imbrication suivante :
<div id="grand-pere">En connaissant initialement le div "fils", je voulais savoir quel était le conteneur parent ("pere") et remonter jusqu'au géniteur originel ("grand-pere"). Sous jQuery, j'ai converti le code pour faire l'équivalent en utilisant les fonctions suivantes :
<div id="pere">
<div id="fils"></div>
</div>
</div>
// je ne savais pas que la propriété selector existait!Cette dernière me rappelle Dreamweaver (et la fonction Inspect de Firebug) lorsqu'on sélectionne un élément en mode Design. On voit apparaître la descendence du DOM dans la console de Firebug, en commençant par celui rencontré en premier : [div#pere, div#grand-pere, body, html].
var selected = $j('#fils');
console.log(selected.selector); // #fils
// parent immédiat
console.log( $j('#fils').parent() ); // [div#pere]
// array qui permet d'obtenir la liste des nodes parents
console.log( $j('#fils').parents() );
Comme la fonction retourne une liste d'éléments, on peut boucler dans l'array pour le traverser :
$j.each( $j('#fils').parents(),Il suffit ensuite de comparer la valeur de e.id pour savoir à quel niveau s'arrêter.
function(i, e){
console.log(e);
}
);
Dans l'actualité québécoise des dernières semaines, on a entendu parler de deux événements qui touchent le monde du logiciel libre. D'abord l'épisode du procès Savoir-Faire Linux contre la RRQ (Régie des rentes du Québec), ensuite celui de l'organisme FACIL que le gouvernement québécois poursuit pour 106000$ en frais de justice. Pourquoi ? Parce qu'il préfère favoriser les technologies Microsoft plutôt que de regarder ce que les solutions open-source ont à offrir et certains sont là pour le lui rappeler.
Et la cerise sur le sunday, c'est que pas plus tard que ce matin, on nous apprend que l'Assemblée Nationale du Québec a fait refaire son site web pour la modique somme de 3,4 millions de dollars par la firme Nurun (programmé en .NET). À lire sur Canoë. C'est facile de dilapider l'argent des contribuables quand l'argent n'est pas le sien...
Est-ce qu'il y a moyen d'avoir un modèle de gestion de l'argent plus responsable ? FACIL estimait en 2008 que le gouvernement pourrait sauver annuellement 80 millions de dollars en licenses Windows. De l'argent qui pourrait être injecté directement dans le système de la santé... Alors pourquoi ne pas lui donner une chance, au moins un projet pilote ?
Avant de poursuivre plus loin, vous devez remettre le tout en contexte et lire les articles ci-dessous tirés de Cyberpresse :
- 8 mars 2010 - Savoir-faire Linux: cause sans précédent
- 8 mars 2010 - Contrat sans appel d'offres: les logiciels libres montent au front
- 9 mars 2010 - Contrat sans appel d'offres: perdu d'avance, dit Savoir-faire Linux
- 10 mars 2010 - Logiciels libres écartés: la RRQ voulait s'en tenir à Microsoft
- 14 mars 2010 - Des défenseurs du logiciel libre poursuivis par Québec
Pour ma part, je peux dire que j'ai réussi à faire entrer un intru au gouvernement et qui est tranquillement en train de faire sa place. Un parent, responsable d'un département au gouvernement fédéral, m'a écrit avant les fêtes pour me demander de lui conseiller une alternative au calendrier Outlook. La contraite : à être installé sur des postes n'ayant pas accès à Internet (donc pas de emails) et autant que possible gratuit (comme ça il ne passe pas par l'approbation des dépenses aux paliers supérieurs). Je lui ai immédiatement recommandé Sunbird de la fondation Mozilla (un peu moins connu que les projets Firefox et Thunderbird). Il l'a d'abord lui-même testé et comme il était satisfait, il l'a propagé à son département. C'est peut-être insignifiant comme anecdote mais pour moi, c'est un point de départ.
Comme probablement beaucoup d'autres, vous aussi avez aimé The Lord of the Rings. Au cinéma, le dernier segment de la trilogie (The Return of the King) date déjà de 2003 et on nous promet The Hobbit qui sortira vraisemblablement en 2012. Si vous êtes un hardcore fan et que vous n'en pouvez plus d'attendre pour vous en mettre davantage sous la dent, je vous suggère de visionner Born of Hope, une histoire inspirée des écrits de Tolkien qui se déroule avant la guerre de l'anneau.
Comment est né ce projet ? Par une initiative DIY (Do It Yourself) mis sur pied par la britannique Kate Madison, une grande fan de LOTR. Dans ce projet, elle a pris les responsabilités de directrice et productrice en plus de jouer le rôle d'Elgarain (qui n'est pas un personnage de l'oeuvre originale). Avec l'idée de soumettre un film au Tolkien Fan Film Exhibition, elle a investi ses économies (8000 livres anglaises, soit environ 12000$ canadiens), récolté les dons des fans et 6 ans de travail plus tard, le film était né. Mais c'est principalement parce qu'elle a réussie à convaincre 400 figurants d'y participer gratuitement que le projet a été rendu possible. Un exploit dans le genre.
À voir, parce que c'est très geek et étonnemment bien réussi (vous pouvez jeter un oeil à la bande-annonce mais le film est de bien meilleure qualité). La trame audio n'est disponible qu'en anglais mais avec un choix de 16 langues pour les sous-titres (contributions de la communauté). D'une durée de 70 minutes, le film est disponible gratuitement sur Internet depuis décembre 2009. Comme il sera impossible de mettre la main dessus au club vidéo, vous devrez obligatoirement le regarder par streaming.
Si vous gagnez votre vie en exerçant le métier de programmeur, ce billet vous concerne. On m'a récemment demandé si j'avais des sources d'informations intéressantes sur la programmation (en général) et c'est pourquoi j'aimerais attirer votre attention sur une question posée sur Stack Overflow : What are the best programming articles ?
Voici un extrait des suggestions soumises par les lecteurs, par ordre de pertinence :
- Teach Yourself Programming in Ten Years, Peter Norvig
- Programmer Competency Matrix
- No Silver Bullet - Essence and Accidents of Software Engineering, Fred Brooks (j'ai corrigé le lien brisé)
- Coding Without Comments, Jeff Atwood
- How I Explained REST to My Wife, Ryan Tomayko
- The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software, Herb Sutter
- The Law of Leaky Abstractions, Joel Spolsky
- Big Ball of Mud, Brian Foote & Joseph Yoder
- Making Wrong Code Look Wrong, Joel Spolsky
- What Every Computer Scientist Should Know About Floating-Point Arithmetic, David Goldberg
- Being the Averagest, Steve Yegge
- Hackers and Painters, Paul Graham
- What to do when you're screwed, Rands
- Great Hackers, Paul Graham
- How to Write a Spelling Corrector in Python, Peter Norvig
- What Every Programmer Should Know About Memory, Ulrich Drepper
Et vous, quels articles reliés à la programmation vous ont allumé ? Quelles sont vos suggestions de lecture ?
Le ridicule est comme la mauvaise haleine : on ne le remarque toujours que chez le voisin.
Ce n'est pas réellement une théorie qui existe à proprement dit mais plutôt une constatation que j'ai fait et que j'ai expliqué à bon nombre de personnes et qui fait du sens. Je l'ai nommée la théorie des trois pas.
Imaginez que vous circulez en voiture dans n'importe quelle ville et qu'à une intersection de rues, vous patientez à une lumière rouge le temps que des passants traversent la rue. Inmanquablement, certains s'y prendront sur le tard et commenceront à s'engager sur le passage alors que la lumière est sur le point de changer au vert pour que les voitures puissent poursuivre leur chemin. Afin de faire comprendre qu'ils sont engagés et étant conscients qu'on attend après eux, ils sautilleront sur une distance d'environ 3 pas pour montrer qu'ils se dépêchent mais termineront le reste du parcours à un rythme de marche normal. Pourquoi se hâter ? Après tout, les automobilistes sont supposés faire preuvre de courtoisie et les laisser atteindre l'autre côté en un seul morceau, et ce sans klaxonner.
La prochaine fois que vous serez sur la route, soyez attentif pour noter ce phénomène. Vous remarquerez comme moi que ça arrive plus souvent qu'on le pense.
Et vous, êtes-vous adepte de la théorie des trois pas ?
Depuis que Apple a présenté sa tablette tactile iPad à la communauté, plusieurs concurrents se sont aussi déclarés comme participants pour obtenir sa part du marché. En lisant l'article "ExoPC Slate: le mystère de la tablette" de Marie-Ève Morasse (Technaute), elle fait mention de l'ExoPC slate, un secret bien gardé créé à Rimouski (au Québec) par Jean-Baptiste Martinoli. Encore mieux, elle nous apprend que l'appareil sera assemblé au Québec par l'entreprise CiaraTech de Ville St-Laurent (Montréal).
L'exoPC slate
Ce qui vient compliquer les choses et qui mérite certainement notre attention pour voir ce qu'ils ont à offrir. Au départ, j'aimais l'idée du iPad mais j'avais des réserves quant à l'attachement à Apple et l'utilisation de ses produits exclusifs (dont iTunes et le iTunes store). J'aimerais mieux un peu plus de liberté mais ça, il faudra que je patiente pour pouvoir comparer les possibilités et peser le pour et le contre.
Sinon, j'ai dressé un tableau comparatif de ce qui est promis à l'heure actuelle au niveau du matériel :
Critère | iPad | ExoPC slate |
Écran | Multitouch 9,7 po | Multitouch 8,9 po |
Résolution | 1024 x 768 pixels | 1024 x 600 pixels |
Capacité | 16 à 64 Go Flash | Disque SSD 32 Go, lecteur de cartes SD/MMC |
Processeur | 1 GHz Apple A4 | Intel Atom N270 1.6 GHz |
Mémoire | Inconnu | 2 GB |
Poids | 680 grammes | 820 grammes |
Support | Inconnu | Flash et Silverlight |
Webcam | - | 1,3 Megapixels |
Ports | 1 port USB, casque, micro, SIM | 3 ports USB, casque, micro, Internet 10/100, VGA, SIM (3G bientôt disponible) |
Haut-parleurs | Intégrés | Intégrés |
Réseau | WiFi 820.11a/b/g/n, Bluetooth 2.1+EDR | WiFi 802.11 b/g, Bluetooth, 10/100 |
Système d'exploitation | iPhone OS 3.2 | Windows 7 Pro avec ExoPC UI-Layer |
Autonomie | 10 heures | 4 heures |
Mise en marché | 3 avril 2010 | Été 2010 |
Prix de base | 499$ US | 599$ US |
Chacun semble avoir ses forces et ses faiblesses. Mais j'ai quand même un faible pour un appareil conçu et fabriqué ici. Dès que j'aurai la chance de mettre la main sur un exemplaire, je vous ferai part de mes impressions. Déjà, c'est possible que ça fasse un coup dur aux Netbooks.
Mais le marché sera féroce car la liste des concurrents s'allonge : HP, Dell, Archos, Viliv, Notion Ink... Au moins 7 autres alternatives à l'iPad d'Apple sont ou seront disponibles. À suivre.
SQL Server : compter le nombre d'occurrences dans une chaîne
Je profite de mon heure de dîner pour écrire mon billet d'aujourd'hui puisque je viens à l'instant de trouver ce truc très utile en Transact-SQL (T-SQL) pour SQL Server.
J'avais un texte dans lequel je voulais compter le nombre d'occurrences trouvées d'une autre chaîne. En regardant la documentation pour trouver une fonction built-in qui me permettrait de le faire, j'en suis venu à un constat que le nombre de fonctions disponibles est assez limité : il y aurait une possibilité de faire une boucle en utilisant CHARINDEX mais ce n'était pas l'idéal.
Sinon, il existe ce truc encore plus efficace et étonnamment simple :
DECLAREIl ne reste qu'à dissimuler ce snippet de code réutilisable dans une user defined function et à lui faire appel dans le contexte qui nous convient le mieux.
@count integer,
@search varchar(10),
@long_string varchar(500)
SET @search = '18'
SET @long_string = 'code 18 code 18 code 18 code code code 18'
SET @count = (DATALENGTH(@long_string) - DATALENGTH(REPLACE(@long_string, @search, ''))) / DATALENGTH(@search)
SELECT @count
Il y a eu un temps où les fichiers GIFs (Graphics Interchange Format) étaient à la mode. Sa sur-utilisation sous forme de Gifs animés a fait de ce format d'image la risée de ses concurrents (jpeg, png). C'était le genre de trucs que les débutants utilisaient à profusion pour garnir leurs pages personnelles sur "feu" GeoCities (qui du coup perdait à tout jamais le site de Barbe Douce).
Mais voilà qu'avec la popularité d'Ajax, le Gif refait surface pour trouver un côté pratique et sobre : l'image d'animation de chargement à afficher pendant la requête asynchrone.
Connaissez-vous vraiment quelqu'un qui design encore des Gifs animés ? Moi non. C'est pourquoi j'utilise Ajax loading gif generator pour en obtenir facilement et gratuitement. Ce service permet de personnaliser le style (38 types disponibles), la couleur de fond (peut aussi être transparent) et la couleur de l'image. En un click sur le bouton "Generate it", le résultat est instantané.
Un autre lien que j'ai vu passer sur Twitter pointe vers un test de vitesse de frappe. Selon cette épreuve d'une durée de 60 secondes, j'obtiens les résultats suivants :
- 398 caractères par minute
- 50 mots entrés correctement
- Aucun mot erroné
- J'occupe présentement le 2385 rang sur un total de 26387
50 mots
Vous avez peut-être remarqué que la section qui parle de moi ne dit pas grand chose à part la citation "La seule certitude que j'ai, c'est d'être dans le doute...".
Si je suis si vague, c'est que je souhaitais mettre à l'avant-plan le contenu plutôt que la personne qui le rédige. Mais quelques personnes de mon entourage croient que je devais en dire davantage sur moi. Et je ne suis toujours pas inspiré.
Si j'avais à me décrire...
D'abord, j'avais pensé à monter un curriculum vitae à la manière d'une feuille de personnage de Donjons et Dragons. De un, je ne me rappelle plus ce que ça avait l'air. De deux, ça risque d'être peu révélateur. De trois, qu'est-ce que je pourrais écrire comme pouvoirs spéciaux ?
L'autre possibilité serait de m'inspirer de l'idée de Douglas Coupland et de créer une page sur eBay. Je préfère déjà celle-ci.
En attendant, j'ai ouvert un compte au nom de Code 18 sur Formspring.me. Vous pourrez me poser des questions anonymement et je tenterai d'y répondre le plus honnêtement possible.
Je n'avais pas eu le temps de faire un retour sur la première édition de Ignite Montréal à laquelle j'ai assisté mardi dernier (2 mars 2010) qui se tenait à La Sala Rossa (à ne pas confondre avec La Sala Rosa, le restaurant nommé avec un seul S et qui se trouve dans le même building).
Montréal était un des nombreux endroits (plus de 50 villes) où se tenait un événement dans le cadre du Global Ignite Week. Le concept est de présenter une passion personnelle ou professionnelle en respectant la devise : "Illumine-nous, mais fait ça vite" (Enlighten us, but make it quick). Donc des présentations de 5 minutes, 20 diapositives qui défilent pendant 15 secondes chacunes et peu de chance de s'ennuyer. Bref, assez semblable aux Pecha Kucha.
Étant un peu d'avance dans le secteur, j'en ai profité pour passer à la micro-brasserie artisanale Dieu-du-ciel! et déguster une Nativité Blonde en compagnie du maire Foursquare de la place (mais jusqu'à quand ?).
À l'ouverture des portes, nous nous sommes rendus à la salle pour espérer avoir une bonne place mais comme j'ai jasé avec des gens que je connaissais, les places assises sont disparues assez vite.
Notre première constation fut qu'il y avait beaucoup plus d'anglophones que de francophones présents à cet événement. Comme dirait l'autre : ici aussi deux solitudes. Too bad pour les absents, ils ne savent pas ce qu'ils manquent. La deuxième constation : les billets coûtait légèrement plus chers en pré-vente qu'à la porte. Allez savoir pourquoi!
Alors pourquoi j'en reparle aujourd'hui spécifiquement ? Surtout parce que maintenant que les vidéos des présentations sont diffusées sur le web, ça m'épargne le travail d'avoir à les décrire. Profitez-en pour les visionner, surtout que les clips affichent à la fois les dispositives et le présentateur.
Pour ma part, les présentations qui ont retenu mon attention sont :
- Seb Paquet - How to Become a Culture Hacker
- Max Finder - What I’m learning at University
- Georges Duverger - Le poids de l'air
- Michael Boyle - Counting is not analysis (The Long Tail)
- Adele McAlear - Death and Digital Legacy
- Sylvie Aucoin - An Ex-Hobo’s Basic Street Survival Guide
Quelques photos sont aussi publiées. Hey, on me voit partiellement sur l'une d'elles! Mais heureusement, pas assez pour me reconnaître :-)
En fin de soirée, c'était direction Fairmount Bagels (ouvert 24 heures) pour un casse-croute à se mettre sous la dent en marchant jusqu'au métro.
Cette semaine, j'ai finalisé un projet avant la livraison au client et lorsque j'ai un peu de temps devant moi, j'aime bien faire quelques vérifications sur la qualité. L'une d'elles est de vérifier l'ensemble du code source pour standardiser le style afin qu'il soit uniforme.
Par exemple, on a l'habitude de faire des redirections avec header('location: ...') et nous spécifions le chemin en commençant toujours par la racine /. Je l'avoue, ça m'arrive d'indiquer seulement le nom de page (page.php au lieu de /page.php).
Échantillon de code avec des syntaxes différentes :
header('location: /page.php');Pour palier à ça, je me suis imposé un peu de discipline. À l'aide d'une recherche dans l'ensemble du projet, on peut vérifier à quels endroits le slash est absent. Comme plusieurs éditeurs, NetBeans propose une recherche par expression régulière. Le but sera trouver tous les liens de redirection dont les pages ne débutent pas par /.
header('location : page.php');
header('location: page.php');
Dans l'éditeur NetBeans :
- Sélectionnez le répertoire "Source files" du projet (surtout si vous avez plusieurs projets ouverts en même temps)
- Ouvrez le menu Edit / Replace in projets (CTRL+MAJ+H)
- Entrez dans la case "Containing Text" : header\('location\s?: (?!(\/))
- Replace with : header\('location: \/
- Dans les options, cochez la case "Regular Expression"
- Choisissez le Scope "Selection (Source Files)"
- Cliquez sur le bouton "Find".
- Le panneau des résultats de la recherche apparaîtra. Vous pourrez visualiser les occurences à remplacer avant de procéder.
Le remplacement uniformisera les redirections comme ceci :
header('location: /page.php');Ce sera le même principe si vous exécutez le remplacement sur une page unique (CTRL+H) :
À propos de l'expression régulière
Si vous êtes familier avec les regex, vous n'aurez pas de difficulté à comprendre ce qui a été fait. Autrement, vous vous poserez peut-être la question à savoir ce que signifie la fin de l'expression avec ?!. Il s'agit d'un negative lookahead. Un lookahead sert à vérifier la présence d'une partie de l'expression sans toutefois la faire correspondre dans l'expression elle-même. Si on peut vérifier la présence du slash, on utilisera un positive lookahead (opérateur ?=) alors que pour s'assurer que l'expression n'est pas suivie du slash, ce sera avec un negative lookahead (opérateur ?!). Ici, comme le caractère recherché est le slash, nous sommes obligé de le préfixer avec le caractère d'échappement \ (comme dans \/).
J'ai visionné ces deux DVD à 1 semaine d'intervalle car disons le tout de suite, ça peut être difficile de se farcir en une seule session les 4 heures et 30 minutes que durent les deux parties.
Ce film biographique sur Ernesto "Che" Guevara a été produit par Benicio Del Toro, qui tient aussi le rôle principal (celui-ci est originaire de Puerto Rico, île située dans les Antilles, à l'est de Cuba). Dans "Che, l'argentin (partie un), on raconte d'abord comment Fidel Castro et lui on pu faire la révolution cubaine alors que la deuxième partie, "Che, Guerilla" met l'accent sur un côté un peu moins connu de l'histoire populaire, à savoir que Che Guevara a aussi combattu en Bolivie pour tenter de créer une révolution latino-américaine.
Et ça s'est mal terminé. D'ailleurs, vous pourrez voir sur la fiche Wikipedia quelques photos prises suite à son exécution. Un trophée pour les militaires (l'armée américaine a formé et soutenu celle de la Bolivie contre les rebelles).
En sachant peu sur cette légende (à part l'avoir vu sur des t-shirts comme tout le monde), ma première question avant même de regarder le film a été : pourquoi était-il surnommé "Che" ?
Son surnom vient de l'espagnol, d'un terme utilisé en Argentine quand ils interpellent les gens amicalement, un peu comme "Hey!" en français. D'ailleurs j'ignorais que Che Guevara parlait couramment le français. Le mot "Che" serait une désignation propre aux gens qui viennent de l'Argentine.
On remet souvent en question le communisme par rapport à l'impérialisme américain. Le Che se battait visiblement pour les bonnes raisons et y croyait vraiment. Sa passion, sa détermination ont fait de lui un héros populaire. Médecin, révolutionnaire, auteur, diplomate, leader militaire, père de 5 enfants... il aurait pu passer son tour et vivre simplement mais il savait qu'il pouvait améliorer les conditions de vie des gens autour de lui. Dans le film, on suit ses traces comme un spectateur, dans les yeux d'un de ses camades, comme si on était sur les lieux. Ça donne place à certaines longueurs.
Somme toute, je juge le film assez réussi, penchant davantage sur le côté de la reconstitution que du documentaire (j'aurais facilement intégré des images d'archives à certains endroits). Del Toro lui ressemble physiquement et il a su reproduire son charisme avec brio, remportant le prix du meilleur acteur au Festival de Cannes en 2008. Jouer le rôle d'un personnage aussi fascinant, d'une icône de la contre-culture et de la révolution cubaine doit être un honneur dans la carrière d'un acteur.
Au générique, ma blonde m'a fait remarquer la présence du québécois Marc-André Grondin qui tient le rôle de Régis Debray (notez qu'il a aussi joué dans Watatatow, Les intrépides mais qu'il a surtout été remarqué pour son rôle dans le film C.R.A.Z.Y., la série Nos étés et 5150 Rue des Ormes). Maintenant que vous le savez, essayez de le repérer dans la deuxième partie. Je ne m'attendais pas à le voir là mais maintenant que vous le savez, ce sera plus facile pour vous.
Enfin, j'ai eu la chance de me procurer les DVD au coût de 10$ chaque chez Archambault durant le temps des fêtes. Maintenant, ils les détaillent 25$ chacun (et on ne parle pas d'une copie Blu-Ray!) alors peut-être que vous seriez mieux d'aller faire un tour au club vidéo du coin.
Recevoir des alertes lorsque Google indexe des pages
Quand j'ai créé mon compte Twitter, je n'étais pas très enthousiaste avec le concept. Est-ce que ça allait réellement me servir ? J'avais des réserves. Plus récemment, j'ai commencé à suivre au hasard les Tweets de gens du domaine du web (programmeurs, intégrateurs, etc) et je dois admettre que Twitter est formidable pour partager des liens d'intérêts.
À titre d'exemple (et de publicité gratuite), Hugo Soucy, un intégrateur web de Montréal, rapportait aujourd'hui un lien qui permet de recevoir des alertes par courriel lorsque Google indexe des pages qui correspondent à vos critères de recherche. Il suffit d'inscrire:
- les mots clés
- où regarder (web, blogues, groupes, etc)
- la fréquence
- le nombre de résultats
- votre courriel
Au même titre que je présente sur mon blogue des sujets qui m'intéressent, Twitter devient une source inépuisable de liens à explorer que je n'aurais peut-être pas découvert autrement. Il suffit qu'un titre nous pique la curiosité pour que de nouvelles possibilités s'ouvrent à nous. Avec mes collègues de travail, on doit s'échanger des dizaines de liens par semaine qui proviennent d'un peu partout. Il faudrait que j'en dresse la liste pour les publier ici.
D'autres fois, mes billets s'inspirent de mon expérience professionnelle, de discussions et même des projets sur lesquels je travaille. Mais le domaine est tellement vaste qu'il devient impossible de tout connaître. C'est là que j'apprécie le partage des informations sur les réseaux sociaux, comme si c'était un catalyseur à idées.
Autrement, l'autre truc à ne pas oublier pour savoir quelles pages sont indexées sur Google est d'utiliser la notation site:domaine. Comme dans la requête suivante qui retournera l'ensemble des pages indexées sur le domaine spécifié:
site:code18.blogspot.com
Actuellement 543 pages indexées sur Code 18.
Je l'ai justement utilisé cette semaine pour prouver à un gestionnaire que quand le fichier robots.txt contient les lignes ci-dessous, aucune page n'est indexée par Google.
User-agent: *
Disallow: /
Si vous avez un site qui propose un engin de recherche interne et que votre contenu risque d'être recherché par un bon nombre de visiteurs (un site de référence par exemple), peut-être est-ce là l'opportunité d'intégrer OpenSearch. Ce service spécifie un format qui permet le partage des résultats de recherche. D'où la possibilité d'intégrer la recherche à même le fureteur :
Ici, j'ai simulé l'ajout de la recherche sur mon blogue. Je dis bien simulé car je n'ai pas encore trouvé la procédure exacte pour Blogger. Quand j'essaie de l'ajouter (même dans mes tests sur mon serveur local), j'optiens le message "Firefox could not download the search plugin from...".
Pourtant, la soumission du plugin (description XML) au répertoire OpenSearch semble être optionnelle pour fonctionner. Il existe donc un moyen de le faire marcher indépendamment. J'en conclus que j'ai quelque chose d'invalide dans la syntaxe ou qu'une omission soit à l'origine de l'erreur.
Comme les résultats doivent être fournis sous forme de XML/RSS, je me disais que peut-être je pourrais utiliser la source du feed RSS de mon blogue (si c'est possible). Encore là, je n'en suis pas certain mais c'est une piste à explorer.
Bref, une fois que j'aurai trouvé comment retourner les résultats de la recherche dans le format spécifié, je pourrai créer la description qui ressemblera à ceci :
<?xml version="1.0" encoding="UTF-8"?>Et j'ajouterai l'auto-découverte de l'OpenSearch en entête de page pour pouvoir obtenir le résultat présenté dans l'imprimé d'écran plus haut et effectuer des recherches rapides.
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<shortname>Code 18</shortname>
<description>Manuel du savoir-faire à l'usage des geeks et des curieux</description>
<contact>code18.blogspot@gmail.com</contact>
<img type="image/x-icon" width="16" height="16">http://code18.blogspot.com/favicon.ico</img>
<developer>Infinite Loop</developer>
<url type="application/html" method="get" template="http://code18.blogspot.com/search?q={searchTerms}"></url>
</opensearchdescription>
<link rel="search"Finalement, vous pourrez aussi visiter le Mycroft Project qui répertorie de nombreux plugins de recherche à ajouter à votre fureteur. À partir de là vous pourrez aussi installer des plugins de recherche créés par d'autres contributeurs ou tester et soumettre votre propre plugin de recherche OpenSearch. Sur Windows, les descriptions OpenSearch se trouvent dans C:\Program Files\Mozilla Firefox\searchplugins.
type="application/opensearchdescription+xml"
href="http://code18.blogspot.com/opensearch.xml"
title="Code 18">
En déjeunant ce matin, j'ai lu l'article de Sophie Cousineau intitulé "Dans le ventre de Google" où elle interviewe Patrick Pichette, l'actuel chef de la direction financière de Google. Je vous recommande sa lecture juste pour bien sentir les propos.
On sait que Google a vraiment une culture d'entreprise très particulière que plusieurs idéalisent. Trop beau pour être vrai ? Ma perception rationnelle de tout cela est qu'à chaque entrevue, ils s'assurent de soigner leur image et entretiennent un talent pour répondre aux questions en retournant la situation à leur avantage. Mais bon, Microsoft et Apple en font tout autant (quoi que ce dernier réussit mieux que son concurrent).
On connait aussi les épisodes récents de mauvaise presse par rapport à la censure en Chine et celui où certains dirigeants de Google ont été condamnés à 6 mois de prison en Italie. Don't be evil. Jusqu'à quand ? Où en est réellement Google ?
J'aimerais pouvoir discuter avec des employés pour savoir ce qu'ils en pensent, vu de l'interne. Qu'est-ce que ça peut être de travailler chez Google ? Par contre, quand je lis les sections sur la culture corporative, je dois avouer que c'est inspirant et que les défis semblent très stimulants. Du point de vue professionnel, ça ressemble à un rêve, à une expérience qu'on doit vivre une fois dans sa vie. C'est là que ça se passe.
Mais je n'oserais même pas envoyer mon curriculum vitae. Je les admire mais il y a quelque chose dont je n'arrive pas à mettre le doigt dessus qui me semble malsain. Il faut être workaholic un brin ? Je ne crois pas avoir le profil de l'emploi. J'aime mieux en avoir un plus modeste et profiter de la vie. Sans compter qu'il y a des candidats 1000 fois meilleurs que moi. De votre côté, si vous désirez soumettre votre CV, vous pourrez l'acheminer au centre de développement de Google à Montréal :
Google Montréal
1253 Avenue McGill College #250
Montréal, QC
H3B 2Y5
(514) 670-8700
En regardant le reportage publié dans le journal The Gazette sur les installations de Google à Montréal, ça donne l'impression qu'ils sont bien modestes comparativement au GooglePlex à Mountain View. Visitez aussi Office Snapshots pour visionner les photos de plusieurs autres bureaux d'intérêt : Facebook, Mozilla, Microsoft, etc.
Le fureteur Firefox remporte le combat partout où il passe. La preuve, même sur le site de simulation de combat La Brute, FF règle ses comptes avec IE. Devinez l'issue du match ?
Soyons franc, c'est le souhait que tous les développeurs web espèrent voir se concrétiser un jour : envoyer au tapis IE 6 avec un KO, une fois pour toutes. Et peut-être pourra-t-on finalement assister aux funérailles d'IE 6, annoncées le 4 mars prochain ?
Je tourne maintenant les projecteurs sur un autre combat célèbre : Chuck Norris versus Dieu, le temps que je me sauve pour assister à Ignite Montréal !
Don't fear death... Feel the consequences!
Tel est le slogan de l'entreprise Blair's qui se vante de produire les croustilles les plus piquantes au monde (en plus de toute une gamme d'autres mets très épicés). En effet, j'ai récemment partagé un sac de Blair's Death Rain Habanero avec des amis et disons qu'il ne faut pas avoir peur des sensations fortes ou des brûlements d'estomac. Notez la mention "Feel Alive!" XXX Fort :
La seule place où j'ai réussi à en trouver à Montréal, c'est au magasin de noix en vrac Coconut situé près du Marché Central. Environ 1,50$ par sac. Et jusqu'à maintenant, c'est moi qui fait les commissions pour en acheter à tout ceux de mon entourage qui veulent en faire l'expérience. Ça a beau être fort, on y revient toujours pour en manger une de plus.
Personnellement, j'ai goûté aux saveurs Habanero, Buffalo Wings et Parmesan Habanero, toutes disponibles (en quantités limitées) à cette boutique. Il ne reste qu'à trouver où je peux me procurer les saveurs Cajun, Chipotle et Cheddar.
Comme le dit le personnel de l'Auberge du Dragon Rouge après avoir avalé un Sang de Dragon d'un trait : quand ça pique en entrant, ça pique... en sortant.