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

vendredi 25 mai 2012

Scénario insolite

Publié par Infinite Loop, à 16:13 0 commentaire

Un typique dîner d'équipe entre programmeurs. Nous sommes tous embarqués dans la même voiture pour se rendre au restaurant. Après notre repas, nous nous sommes dirigés dans le stationnement vers la voiture de notre conducteur quand un des passagers remarqua garée à proximité une bagnole en tout points semblable à la sienne : mêmes marque, modèle, couleur et année de construction. Ce sont surtout les traces de rouille qui se trouvaient exactement aux mêmes endroits qui lui ont mis la puce à l'oreille. Voulant dissiper le doute, il se diriga vers l'arrière du véhicule pour jeter un oeil à la plaque d'immatriculation. Heureusement, ce n'était pas la sienne.

Sur le chemin du retour, on déconna sur le sujet. Quelles auraient été les probabilités pour qu'une crapule peu futée vole la voiture sur notre lieu de travail et, pendant sa fuite, décide d'arrêter casser la croûte au même restaurant que nous ? Si ça avait été le cas et que par pur hasard mon collègue avait eu ses clés sur lui, il aurait pu repartir avec.

Quand j'y pense, j'aurais aimé que ça soit vrai pour voir le bandit perdre la face et se faire prendre à son propre jeu. Nous aurions bien ri.


Tags: Curiosités

dimanche 20 mai 2012

Est-ce que lire peut brûler les graisses ?

Publié par Infinite Loop, à 16:02 3 commentaires

Dans la dernière année, j'ai pris 10 lbs et j'avoue que ça me complexe un peu d'embarquer sur la Wii Balance Board pour que Wii Fit me dise que j'ai été catapulté en dehors de mon poids santé. Ce n'est qu'un jeu mais ça pèse pour vrai cette patente là!

Il me fallait donc prendre une résolution : employer mon temps à lire ou à perdre cet excès de poids pour revenir à un niveau qui ne décevra pas le petit personnage du jeu vidéo. En réalité, ce n'est pas du poids que je souhaite perdre mais du gras. Pour un intellectuel, faire de l'exercice physique au détriment de sa matière grise n'a rien de motivant. Le compromis : faire du vélo stationnaire incliné, de façon à être assis confortablement, le dos appuyé sur le dossier et les mains libres pour tenir un livre. Après essai, ça ne sautille pas et ne gêne d'aucune façon la lecture.

Sachant qu'un gramme de gras équivaut à 7,7 calories (source), le tableau de bord de l'appareil indiquait une perte approximative de 400 calories en 35 minutes pour la séance de ce matin. Cela représente 52 grammes de gras.On est loin de l'objectif des 10 livres à perdre ! La bonne nouvelle, c'est que je vais rattraper le retard dans mes lectures en faisant une pierre deux coups (j'ai initialement fait un lapsus dans cette phrase en écrivant "une bière deux coups" pour me rendre compte que ça avait aussi du sens mais que c'était aussi à l'opposé d'avoir un six-pack...).

De plus, la libération d'endorphine dans le corps déclenche une sensation de bien-être instantané et me permettra d'attaquer mon travail avec une énergie renouvellée. Je vais tenter de relever le défi de me lever 30 minutes plus tôt, 3 fois par semaine et voir quels résultats je peux atteindre. On ne se le cachera pas, à travailler à temps plein en informatique, on finit tôt ou tard par gagner du poids, à moins de brûler ses calories à force de stress, ce qui n'a rien de sain.

Je vous tiens au courant des progrès que je ferai.


Tags: Le coin du geek, Livres

mercredi 16 mai 2012

Acheter des livres avec l'intention de ne pas les lire

Publié par Infinite Loop, à 21:19 3 commentaires

Vous allez sans doute trouver ça curieux mais j'ai commandé aujourd'hui sur Amazon.ca des livres que je sais que je ne lirai pas. Mais pourquoi donc ? Tout à fait, c'était complètement inutile mais volontaire. La raison est que je les ai déjà lus sur ma liseuse électronique.

Je confesse, j'en ai téléchargé illégalement sur des sites comme Filestube, Wowebook, Avaxhome, Team Alexandriz ou ebooksfreedownload. Et pourtant, ce n'est pas parce que j'encourage le piratage, loin de là. Chaque fois qu'on lit un livre, on enrichit sa culture et ça a son prix. Ce n'est pas par souçi d'économiser 15$ que j'agis ainsi. Si je suis prêt à débourser ce montant pour un plat de sushi pour engraisser mon bedon, je le suis autant à engraisser mon cerveau! C'est surtout une question de mieux cibler mes intérêts et d'avoir un contrôle à qui je remettrai mon argent, par mérite. J'étais tanné de gaspiller mon argent pour m'en procurer et qu'après quelques pages lues, je me résignais à les abandonner. Sans compter que l'aperçu des livres sur Amazon n'est pas suffisant pour se faire une bonne idée de ce qu'on est sur le point acheter.

Après tout, quelle est la différence avec la possibilité d'aller à la boutique Chapters-Indigo, choisir un livre, s'installer confortablement dans un fauteuil mis à notre disposition à l'intérieur du commerce et d'entâmer la lecture avant de prendre la décision de l'acheter ? Peut-être une question de commodité. Et non, contrairement à certains que j'ai vu, je ne suis pas assez cheap pour passer la journée là-bas pour avoir le temps de le lire en totalité et m'éviter de l'acheter... Et sur le marché d'occasion, les livres qui m'intéressent sont rarement disponibles.

Pire, je pourrais l'emprunter à la bibliothèque et ne pas injecter un sous dans l'économie. Sous cet angle, quelle est la différence entre l'emprunt et le piratage en ebook ? La différence est éthique et par principe, si j'ai apprécié ce que j'ai lu, j'achète une copie du livre. C'est une forme de marque d'appréciation envers l'auteur que de lui remettre son dû, comme un pourboire. Une fois lu, c'est plutôt rare qu'on le relit à nouveau. Au mieux on s'y réfère au besoin ou on le prête. Si on dit que le livre fait voyager, la copie papier servirait ici de babiole qu'on rapporte en souvenir d'un voyage ?

Les livres que je me suis procuré sont (neufs, format paperback) :

  • Physics of the Future de Michio Kaku (480 pages)
  • The World is Flat de Thomas Friedman (672 pages)
La note de suivi d'UPS m'indique que le colis qui me sera livré pèse 2,7 lbs. À ce poids, on peine à imaginer la somme du travail accompli par ces auteurs, qui devient presqu'une illusion lorsqu'on peut se les procurer aussi facilement en fichier électronique.

Fait intéressant, Amazon m'offrait le mode de livraison Priority pour 15$ supplémentaire, ce qui me garantissait la réception pour vendredi. Heureusement, j'ai conservé l'option de livraison gratuite et UPS prévoit me livrer le colis dans la journée de demain (jeudi) !

Les livres s'accumulent chez moi mais je ne m'en plains pas. Quand je suis déménagé, j'avais 14 boîtes pleines de livres. Je me croise les doigts d'être installé pour de bon pour ne pas à avoir à les redéménager de sitôt...Comme l'a vécu récemment un ami qui en avait encore plus que moi, c'est là qu'on constate l'avantage qu'une liseuse électronique peut en transporter des milliers dans le fond d'un sac.

Cela dit, ma liseuse électronique est de loin le gadget qui m'a été le plus utile jusqu'à maintenant. S'il brisait, j'en rachèterais un immédiatement (Kindle Touch ou Kobo Touch, qui se vendent la moitié du prix que j'avais payé pour mon Sony PRS-650 il y a moins d'un an et demi).

Mise à jour
Comme prévu, j'ai reçu les livres dès le lendemain!



Tags: Livres

samedi 12 mai 2012

De retour après la pause

Publié par Infinite Loop, à 17:34 1 commentaire

Depuis quelques semaines, je remets en question la pertinence d'écrire un blogue. Toutefois, je n'ai pas l'intention d'abandonner, du moins pas encore. Seulement, j'ai l'impression que je pourrais mieux disposer de mon temps si j'éliminais ce passe-temps pour me consacrer à autre chose.

Il y a 4 ans lorsque j'ai amorcé ce projet, j'avais des raisons et des motivations que je n'ai plus aujourd'hui. C'est sans doute le signe qu'il est temps de prendre une pause et de regarder les options qui s'offrent à moi. Récemment, je disais vouloir consacrer plus de temps à la guitare, à la lecture et à l'apprentissage d'un nouveau langage de programmation. Ça se reflètera toujours dans le sujet de mes futurs billets mais le rythme de publication ralentira. Quand on ressent un fort besoin de changement, ce n'est jamais une bonne idée de prendre des décisions radicales.

Je me pose aussi des questions sur mon emploi que j'occupe depuis 10 ans. Plus ma carrière professionnelle avance, plus je me spécialise dans certaines technologies. Des technologies où je suis rentable pour l'employeur qui m'embauche mais qui ne reflètent pas nécessairement les défis que je souhaiterais relever. Depuis mon entrée sur le marché du travail, plusieurs nouvelles innovations ont fait leur apparition et pour plusieurs d'entre elles, j'ai l'impression d'avoir manqué le bateau. Heureusement en informatique, les opportunités se présentent rapidement.

Depuis les années 60, les technologies, langages de programmation et systèmes informatiques se sont succédés en voyant appararaître de plus en plus de lignes de code à maintenir. On peut certainement affirmer qu'elles se sont multipliées par un facteur difficile à imaginer mais élevé. Du coup, ça pourrait laisser croire qu'il y a de l'emploi pour tout le monde mais seuls certains langages et technologies ont survécus. Et le pire cauchemar serait de s'être investi à fond dans ceux-là sans prévoir de plan B. Comme à la bourse, il vaut mieux ne pas mettre tous ses oeufs dans le même panier et il est prudent de diversifier son portefeuille.

Tôt ou tard, malgré les succès actuels, on finit par se demander : "est-ce que mes compétences sont sur le point de devenir désuettes au point de ne plus paraître attirantes pour les futurs employeurs ?". C'est aussi un constat de voir que les jeunes qui sortent de l'école avec des connaissances toutes fraîches (quoique sans expérience) et qui demandent un salaire moindre ont un atout face aux opportunités technologiques.

En tant que développeur, on souhaite demeurer à l'affût des plus récentes innovations et il est impossible de considérer comme valeurs sûres nos choix technologiques qui nous garantiront une carrière à long terme. Qui peut prédire si PHP ou jQuery seront encore largement utilisés dans 2, 5 ou 10 ans ? On peut en douter... D'où la nécessité de se réinventer pour être constamment à jour. Au boulot, la routine ne me permet pas de sortir de ma zone de confort. En tout cas, plus autant qu'avant. Si je veux du défi, je dois m'investir sur mon temps personnel le soir et les weekends. D'où mon questionnement : écrire un blogue ou apprendre ?

En regardant ma bibliothèque ce matin, je faisais remarquer à ma copine  que je n'avais jamais fait de Python ni de Flash (sans regret). Jamais ? Non jamais ! Les langages de programmation, comme pour la publicité des fromages du Québec, il en existe plus que huit ! (dans les faits, il existe plus de 300 fromages et des milliers de langages de programmation). Les choix sont infinis, le temps à notre disposition lui ne l'est pas.

Marc Andreessen (de Mosaic et Netscape) disait :

Si vous croyez que les désirs et besoins de l'homme sont infinis, alors il y a un nombre infini d'industries à être créées, un nombre infini d'entreprises à être démarrées et un nombre infini de tâches à accomplir. Le seul facteur limitatif est l'imagination humaine.

Se conditionner à apprendre, peu importe le sujet, enrichit notre bagage personnel et nous prépare sans doute à être prêt lorsque les opportunités se présenteront. Sans toutefois négliger l'équilibre entre le travail, la famille, les amis, la musique, les rénovations, la lecture, organiser des BBQ, etc. La preuve qu'il est possible d'accomplir son travail avec succès sans devoir sacrifier tout le reste.


Tags: Le coin du geek, Programmation

mercredi 9 mai 2012

Compter le nombre d'enregistrements de chaque table en Postgres

Publié par Infinite Loop, à 20:26 0 commentaire

En SQL, une des premières choses qu'on apprend est de compter le nombre d'enregistrements présents dans une table unique à l'aide d'un simple count(*). Quand j'ai eu à transférer la totalité des enregistrements des tables d'une base de données existante vers une nouvelle, je me suis aperçu que sur la centaine de tables, quelques enregistrements avaient été perdus en chemin. Par exemple, si une table source comptait 1000 inscriptions, la table de destination n'en recevait que 999.

Pour dépister rapidement les tables qui ne balançaient pas, mon réflexe fût de bâtir une requête qui listerait toutes les tables d'un utilisateur propriétaire et pour chacune, de lancer une sous-requête qui obtiendrait le compte. Le problème, c'est qu'on ne peut pas le faire par un seul énoncé SQL. Bien que pg_tables retourne le schéma et le nom de la table, il faut contourner la limitation en écrivant une fonction utilitaire qui les concaténerait sous forme de texte pour être exécutée comme équivalent à la sous-requête qui retournerait le compte.

Sous cette forme :

SELECT schemaname, tablename, count_table_rows(schemaname, tablename) as nb_rows
FROM pg_tables
WHERE tableowner='code18'
ORDER BY schemaname, tablename

La définition de la fonction PL/pgSQL de ma solution :
CREATE OR REPLACE FUNCTION count_table_rows (
    "schema_name" name,
    "table_name" name
)
RETURNS integer AS
$body$
DECLARE nb_rows INTEGER;
BEGIN
    EXECUTE 'SELECT COUNT(*) FROM ' || schema_name || '.' || table_name INTO nb_rows;

    RETURN nb_rows;
END;
$body$
LANGUAGE 'plpgsql'
Vous remarquerez que j'ai déclaré les paramètres en utilisant le type "name" plutôt que "text" ou "varchar". C'est qu'en testant la fonction sur deux serveurs qui faisaient tourner des versions différentes de Postgres, l'un procédait à un cast implicite à partir d'un varchar, l'autre d'un text. Pour que la fonction soit compatible dans les deux cas sans nécessiter de conversion, j'ai vérifié quels étaient les types des valeurs retournées par pg_tables et j'ai ajusté la fonction avec des paramètres de type name :
SELECT column_name, data_type
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'pg_tables'


Tags: PostgreSQL

dimanche 6 mai 2012

Citation no. 151 sur la vérité (ou le mensonge)

Publié par Infinite Loop, à 13:09 1 commentaire

Dites toujours la vérité, ainsi vous n'aurez pas à vous souvenir de ce que vous aviez dit.

- Mark Twain


Tags: Citations

vendredi 4 mai 2012

Labyrinthe de maïs d'Astérix et Obélix

Publié par Infinite Loop, à 20:41 0 commentaire

En Allemagne, dans la ville d'Utting (à l'ouest de Munich), si vous jetez un oeil sur Google Maps ou Google Earth et que vous zoomez sur les coordonnées 48°01'56.80"N 11°05'43.67"E, vous devriez voir un champs de maïs en forme des personnages d'Astérix, Obélix (et son petit chien Idéfix).


Il semblerait qu'un nouveau dessin soit réalisé chaque année. Parmi les oeuvres d'Ex Ornamentis, notons :
  • la Terre
  • l'Europe
  • Albert Einstein
  • l'homme de Vitruve
  • un bateau de pirates
  • le château de Neuschwanstein
  • la carte de l'Afrique avec des yeux de panthère 
  • la carte des États-Unis
  • Astérix et Obélix


Tags: Curiosités

Messages plus anciens Accueil
Inscription à : Messages (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (154)
    • Club Vidéo (22)
    • Coffre à outils (59)
    • CSS (8)
    • Curiosités (106)
    • Design Pattern (2)
    • Easter Eggs (23)
    • Extensions Firefox (20)
    • Histoire (14)
    • HTML (31)
    • Humour (54)
    • Intégration (34)
    • iPod (12)
    • JavaScript (108)
    • Jeu de combat (6)
    • Le coin du geek (97)
    • Liens (12)
    • Linux (56)
    • Livres (66)
    • Lois et principes (38)
    • Marché des saveurs (25)
    • Mathématique (18)
    • Montréal (19)
    • Musique (86)
    • Pancartes et écriteaux (14)
    • Perl (8)
    • PHP (129)
    • PostgreSQL (44)
    • Programmation (100)
    • Saviez-vous que (50)
    • SEO (5)
    • SQL Server (22)
    • Sécurité (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Zend Framework (26)

    Divers


    Archives

    • ▼  2012 (65)
      • ▼  mai 2012 (9)
        • Scénario insolite
        • Est-ce que lire peut brûler les graisses ?
        • Acheter des livres avec l'intention de ne pas les ...
        • De retour après la pause
        • Compter le nombre d'enregistrements de chaque tabl...
        • Citation no. 151 sur la vérité (ou le mensonge)
        • Labyrinthe de maïs d'Astérix et Obélix
        • Kossé ça ? Ce n'est pas l'homme de Vitruve !
        • Quand le soleil se lève, il faut courir
      • ►  avril 2012 (13)
        • Diagramme d'accords de guitare en canvas HTML5
        • Progresser, c'est ralentir pour mieux avancer
        • Citation no. 150 sur les erreurs
        • Initiation à la cacopédie et l'anti-savoir
        • Itérateur infini en PHP
        • En veux-tu une froide ?
        • À Montréal, il vaut mieux louer un appartement que...
        • La logique du programmeur mise à l'épreuve
        • L'approche Zen de la guitare
        • Citation no. 149 sur l'alcool
        • Les limites du département des miracles
        • Design pattern Strategy expliqué par Dexter
        • Compilation 2012 de 20+ poisson d'avril
      • ►  mars 2012 (15)
        • Pratiques douteuses chez le disquaire
        • BrowserQuest, un mini-MMORPG en HTML5
        • Le dentiste préfère qu'on ait des dents solides
        • Citation no. 148 sur la vérité absolue
        • La légende du vendeur imbécile qui était aussi idi...
        • Les imprévus comme tremplin à l'innovation
        • Une pomme par jour n'éloigne pas le médecin pour t...
        • Le hockey vu par un programmeur : Design pattern O...
        • Connecter sa guitare à l'ordinateur pour 13$
        • Citation no. 147 sur le choix d'une guitare
        • Dexter, le tueur qui connaît le HTML
        • Introduction aux CTE de Postgres
        • Mon frigo est plus cool que le vôtre
        • La semaine de travail de 7 jours comme solution
        • 10 constatations du Confoo Montréal 2012
      • ►  février 2012 (15)
        • Un dernier souffle pour mon iPod Touch
        • Zend_Date me fait perdre mon temps avec l'heure d'...
        • Aucun ingrédient imprononçable
        • L'affaire est ketchup
        • Citation no. 146 sur le guitariste
        • Personnage le plus vulgaire de tous les temps
        • Le piège des design patterns
        • Convertir une image couleur à grayscale avec le ca...
        • Mettre sa vie sur pause pendant un moment
        • Quoi faire quand le VPN nous déconnecte après 3 mi...
        • Effet miroir sur une image avec le canvas HTML5
        • Ces imbéciles qui veulent voir la vie en 3D
        • Citation no. 145 sur les langages de programmation...
      • ►  janvier 2012 (13)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ►  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ►  2009 (431)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (40)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (37)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Membres

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