Pour ceux que ça pourrait intéresser, j'ai ouvert un compte sur Last.fm pour partager la musique qui entre dans ma tête. Pour le moment, il n'est pas très garni mais je vais configurer mes lecteurs musicaux chez moi (dont mon jukebox touchscreen) et au travail pour diffuser tout ce que j'écoute.
Je n'avais pas beaucoup tendance à parler de moi dans mon blogue alors c'est peut-être un moyen de présenter un autre aspect de ma personnalité à travers mes préférences musicales. Vous verrez que la palette peut être assez vaste, étant mélomane et musicien amateur, j'ai une dépendance chronique à la musique.
Si vos goûts musicaux ressemblent aux miens ou si vous avez quelque chose à me faire découvrir, ça me fera plaisir d'en faire l'écoute.
Dis moi ce que tu écoutes et je te dirai qui tu es.
Cette année, l'équipe de Google remet ça et cache dans son fichier robots.txt un petit clin d'oeil à l'occasion de l'Halloween.
User-agent: Kids
Disallow: /tricks
Allow: /treats
Rappelons nous que l'an dernier, Google avait fait quelque chose de similaire avec les zombies.
Aujourd'hui a été lancé la nouvelle version d'Ubuntu (Karmic Koala). C'est donc le moment d'effectuer la mise à jour pour passer de 9.04 à 9.10.
Avant de lancer le processus, savez-vous quelle version vous utilisez ? Vous pouvez l'obtenir à partir d'un terminal avec une des deux commandes ci-dessous :
$ cat /etc/issue
Ubuntu 9.04
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 9.04
Release: 9.04
Codename: jaunty
Pour votre information, LSB = Linux Standard Base.
Pour faire la mise à jour de la distribution, rendez-vous au menu System / Administration / Update Manager. Il suffit de cliquer sur le bouton Upgrade (difficile d'être plus simple!).
On m'avertit que :
- 655 Mo seront téléchargés
- 28 packages seront retirés
- 285 nouveaux seront installés
- 982 seront mis à jour
- Durée estimée : 19 minutes
Sujet ridicule vous direz, mais pas si bête que ça quand on y pense. Dans le cadre d'une simulation de cours de programmation 101, je vous pose la question : comment effectuez vous la comparaison d'une variable avec une constante ?
Prenez 2 secondes pour y réfléchir et poursuivez votre lecture. Dans tous les langages de programmation, il existe un opérateur d'assignation et un opérateur de comparaison. Dans le cas de PHP, le premier est le symbole = alors que le second est un ==.
D'abord la réponse : la façon la plus sûre de comparer une valeur serait de placer la constante en premier :
if(CONSTANTE == $variable){
// ...
}La raison : parce que si vous faites la gaffe de faire le contraire et par mégarde vous utilisez l'opérateur d'assignation, PHP ne lancera pas d'erreur et le code s'exécutera sans livrer les résultats attendus et vous devrez en chercher la raison (à moins que votre éditeur soit assez intelligent pour vous les faire remarquer - comme NetBeans).if($variable = CONSTANTE){
// ...
}En inversant l'ordre de comparaison, on s'assure que PHP lance un avertissement si on utilise l'assignation plutôt que le == :if(CONSTANTE = $variable){
// oups, on ne peut pas assigner de valeur à une constante
}Parse error: syntax error, unexpected '=' in file...Je soulève le point car j'ai moi-même fait l'erreur récemment malgré plusieurs années d'expérience. Peut-être est-ce le temps de faire des ajustements et de réviser nos habitudes de codage ?
Oui, je suis toujours en vie! Je prends quelques minutes pour vous donner des nouvelles pendant ma pause de rédaction (qui repart tranquillement).
Samedi matin, sur un coup de tête, je me suis levé avec l'idée d'acheter une nouvelle guitare électrique pour dégourdir mes doigts autrement que sur un clavier. Depuis, ça occupe tout mon temps libre et je me rends compte à quel point jouer quelques mesures peut procurer une sensation de bien-être (causé par l'endorphine).
Hier, en revenant du bureau, j'ai pratiqué toute la soirée la rythmique et un solo de la pièce instrumentale To Live is to Die de Metallica. À vrai dire "presque", puisque quatre phrases sont prononcées vers la fin en hommage à leur ancien bassiste Cliff Burton, décédé dans un accident d'autobus en tournée.
Les paroles sont tirées d'un poème écrit par l'allemand Paul Gerhardt (1607-1676) qu'on retrouve en partie dans le film Excalibur (1981) alors que Merlin s'adresse à Arthur.
When a man lies, he murders some part of the world.Vous pouvez consulter le script complet du film ou encore regarder l'extrait vers 1h23 sur le DVD (version anglaise).
These are the pale deaths which men miscall their lives.
All this I cannot bear to witness any longer.
Cannot the Kingdom of Salvation take me home?
Je dois confesser que j'ai regardé Excalibur car j'étais dans le mood de la légende arthurienne puisque je suis présentement l'excellente série humoristique Kaamelott.
Voilà, c'est fait. Code 18 fête aujourd'hui son premier anniversaire d'existence. Né d'un projet qui était au départ un défi personnel de bloguer quotidiennement pendant un an sur l'univers des technologies de l'information, j'ai mis un accent particulier mis sur mon champ d'activité principal, la programmation.
Ça n'a pas toujours été un exercice facile de trouver les sujets d'inspiration, d'écrire un article simple et concis chaque jour mais je suis très satisfait d'y être arrivé. Depuis longtemps, j'essayais de découvrir et d'apprendre un nouveau truc régulièrement pour satisfaire ma curiosité et j'ai senti le besoin de de partager mes connaissances avec les autres.
Un an plus tard, je fais le bilan du travail réalisé : environ 1400 visites uniques chaque semaine, la formation d'une petite communauté avec qui interagir et s'entraider, ce sont des signes suffisamment encourageants pour me convaincre à continuer.
Sur un plan personnel, je juge que ce fût bénéfique puisque prendre le temps d'expliquer un concept en le mettant par écrit permet de réviser les notions, de consolider ce qu'on a appris et de découvrir quelques détails supplémentaires qui nous avaient échappés.
Pour vous mettre en contexte, chaque article pouvait me demander quotidiennement entre 20 minutes et 3 heures que je réalisais en dehors de mes heures de travail (au grand dam de ma blonde!). Parfois même, je pouvais développer certaines idées qui se sont échelonnées sur plusieurs sessions de travail. Même durant mes vacances et à l'occasion d'un voyage à l'extérieur (devinez quand!), j'ai poursuivi mon but sans interruption, juste pour le principe de gagner mon pari.
Même si je le fais d'abord pour moi, j'espère que vous appréciez la somme de mon labeur. Ce blogue va poursuivre son chemin mais pour l'instant je m'accorde un petit congé bien mérité.
Pour la prochaine année, je vais peut-être diminuer un peu la cadence de publication et je risque probablement d'aller jeter un oeil à différents événements dans la communauté culturelle montréalaise, comme YulBlog, des StartUp Camp, Pecha Kucha, Geekfest, etc.
Enfin, je vous invite à me faire part de vos questions, commentaires, idées de sujets, tout ce qui pourrait intéresser les geeks de ce monde. Vous pouvez me contacter par email, Twitter, Identica, Google Talk (code18.blogspot[at]gmail.com), ça me fera plaisir de vous parler.
À bientôt!
Pour mieux structurer une base de données PostgreSQL, j'aime l'idée de répartir les objets en schémas logiques. Ça permet entre autre d'avoir deux tables du même nom dans deux schémas différents.
Par défaut, tous les objets sont créés dans le schéma "public". Vous ne l'aviez peut-être pas remarqué car vous n'êtes pas obligés de le nommer quand vous voulez faire référence aux objets (tables, fonctions, etc) lorsque vous construisez vos requêtes SQL.
SELECT * FROM ma_table;Dès qu'on crée un nouveau schéma et qu'on y ajoute des objets, on devra les préfixer par le nom de schéma suivi d'un point :
CREATE SCHEMA music;Comme vous pouvez le constater, il existe maintenant deux vues portant le nom "collection" qui reposent dans leur propre schéma. Si vous essayez de faire une requête sur la vue collection sans spécifier le schéma, PostgresSQL vous indiquera que l'objet n'existe pas (en fait, il essaiera de référencer collection dans le schéma public mais il s'arrêtera là s'il ne le trouve pas).
CREATE TABLE music.artist(...);
CREATE TABLE music.album(...);
CREATE VIEW music.collection(...);
SELECT * FROM music.collection;
CREATE SCHEMA movie;
CREATE TABLE movie.gender(...);
CREATE TABLE movie.title(...);
CREATE VIEW movie.collection(...);
SELECT * FROM movie.collection;
Cette technique vous permet d'éviter la redondance lorsque vous nommez vos tables (qui auraient aussi bien pu se nommer client_info, client_address, client_order, etc) et qui rend vos objets programmables plus modulaires puisqu'ils sont regroupés logiquement. On trouvera un avantage certain à savoir qu'un schéma possède aussi un propriétaire auquel vous pouvez donner des privilèges particuliers.