Author Archive for tomzx

Marshal un hash avec proc

Il arrive souvent que l’on veut écrire un hash imbriqué, tel que objet[:unevaleur][:unesecondevaleur] accédant à la valeur :unesecondevaleur du hash contenu dans objet[:unevaleur]. Voici une implémentation simpliste de la chose.

1
X = Hash.new {|h, k| h[k] = Hash.new(0)}

Avec ce code, à chaque fois qu’on crée un hash non-existant dans X, on ajoute un nouveau hash avec 0 comme valeur par défaut. Si maintenant on veut marshaller X, on obtient l’erreur suivante:

Marshal.dump(X)
TypeError: can’t dump hash with default proc

On obtient cette erreur puisque, lorsqu’on crée X, on a passé un bloc à new ce qui fait que lorsqu’on veut le marshaller, Ruby n’est pas mesure de marshaller le proc associé.
Afin d’être en mesure de marshaller X, il suffit simplement d’éliminer le proc en effectuant une copie vers un nouveau hash sans proc.

1
2
3
Y = Hash.new
X.each {|h, k| Y[h] = X[h]}
Marshal.dump(Y)

Software developer

A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: “Excuse me, can you tell me where I am?”

The man below says: “Yes you’re in a hot air balloon, hovering 30 feet above this field.”

“You must be a software developer,” says the balloonist.

“I am,” replies the man. “How did you know?”

“Well,” says the balloonist, “everything you have told me is technically correct, but it’s of no use to anyone.”

The man below says, “You must work in business as a manager.” “I do,” replies the balloonist, “but how did you know?”

“Well,” says the man, “you don’t know where you are or where you are going, but you expect me to be able to help. You’re in the same position you were before we met but now it’s my fault.”

Source: Coding Horror

Développement logiciel sur plateforme Linux et Windows

Le domaine informatique a toujours été dominé par trois géants (du côté consommateur) : Linux, Windows et Macintosh. Les trois systèmes étant très différents, cela a toujours causé des complications aux programmeurs qui voulaient rendre leur code accessible à une plus grande population. Ainsi, ils devaient « porter » leurs codes vers une nouvelle plateforme, soit pour passer de Windows à Macintosh ou encore de Linux vers Windows par exemple. Afin de diminuer cette tâche qui se verrait devenir répétitive, ces développeurs ont eut l’idée de regrouper les ensembles de codes similaires afin d’en former des librairies qu’ils pourraient réutiliser pour accélérer le développement d’applications futures.

Avec l’ensemble des librairies qui ont été codés avec le temps (GTK, FTLK, Qt, wxWidgets, OpenGL, SDL, etc.), la majorité des plateformes informatiques ont commencés à devenir de plus en plus uniformes, permettant ainsi de déployer un même code sur plusieurs machines utilisant des systèmes d’opérations différents. On observe de plus la présence d’environnements de développement intégrés (EDI) multi-plateformes tel que Netbeans, Eclipse et Code::Blocks. Toutefois, il reste à déterminer quelle plateforme est la plus apte à permettre un développement qui sera rapide, efficace et de qualité. Afin de débattre de cette question, il est nécessaire d’évaluer certains aspects essentiels à la création d’un logiciel. Un logiciel peut être très facile à programmer mais être de piètre qualité en termes de performance (facilité de développement). Il peut être très long à programmer mais ne rien coûter (coûts reliées au développement). Les outils que les plateformes nous offrent peuvent être flexibles mais nécessiter une grande connaissance de ceux qui les emploient. Pour le développeur qui souhaite vendre son logiciel, il faut aussi connaître les diverses restrictions qui s’appliquent lorsqu’on emploi une librairie. Bref, il s’agit ici d’un ensemble d’aspects que nous aborderons afin de déterminer quelle plateforme entre Windows et Linux convient le mieux à un programmeur.

Pour lire l’ensemble du texte: Télécharger le PDF

Protected: La motivation

This post is password protected. To view it please enter your password below:


Getting things done

Objectif
J’écris ce message dans le but d’aider plusieurs d’entre mes amis qui semblent avoir des difficultés à se pousser à accomplir certaines tâches. Il s’agit ici d’une méthode élaborée par David Allen, l’auteur du livre Getting Things Done. GTD est une méthode simple qui a pour objectif de regrouper l’ensemble de ses tâches pour ensuite les sous-diviser en sous-tâches qui seront facilement accomplies. La méthode que je présente ici est tirée de cette méthode, mais plus spécifique aux tâches de nature

À prendre avec un grain de sel
Toutefois, je dois vous avertir. Bien que la méthode ait pour objectif de vous aider à focuser sur votre travail, il peut arriver que de la surutiliser puisse mener à une démotivation. En effet, si vous en venez à décortiquer vos tâches en une centaine de petites tâches, vous vous rendrez alors compte que vous en aurez pour un bon moment avant d’avoir fini. L’idée ici est simplement qu’il vous faudra être persistant et patient. Puisque vous avez un plan, vous serez donc en mesure de vous approcher peu à peu de votre objectif final. Il est sûr que ce n’est peu être pas aussi excitant que d’accomplir quelque chose d’un coup, mais si vous ne faite rien de tout vos petits moments passés à ne rien faire, vous pourriez accomplir pas mal de travail et être possiblement plus satisfait.

Ce que je tente de dire ici, c’est simplement qu’un gros projet ne s’accomplis pas de de lui même. Aussi, même si votre projet s’étale sur plusieurs jours/semaine/mois/années, et qu’il se complète, cela est déjà beaucoup mieux que de n’avoir jamais rien fait de son temps (je parle spécifiquement à ceux qui regardent trop facebook pour perdre leur temps ou encore youtube, mais pas ceux qui ont des objectifs spécifiques envers ceux-ci).

GTD, en gros
Bref, revenons sur le sujet. GTD est composé d’un ensemble d’étapes:

  1. Rassembler toutes les tâches qui doivent être accomplies
  2. Définir le type de tâches
  3. Former un plan d’action
  4. Agir (ou déléguer)

À la base, GTD s’applique sur des documents format papier. Il permet de définir ce qu’on doit faire pour toute “donnée”, que ce soit un chèque, une lettre d’un ami, le besoin d’acheter une lampe, un livre, des questions que l’on se pose, etc. Tout ce qui est dans notre tête et qui perturbe notre focus mental devrait être écrit sur une feuille de papier. Il est suggéré que d’écrire nos pensées sous forme papier libère l’esprit et je suis de cet avis. De cette manière, vous savez que vous avez un endroit où cette pensée ce trouve et vous serez en mesure de repasser dessus à un moment donné.

Passons donc à chacune des étapes et voyons ce qui doit être accompli.

Voici quelques aides-mémoire qui pourrons rapidement vous remémorer les quelques concepts imports de la méthode.

Rassembler toutes les tâches qui doivent être accomplies
Premièrement, il s’agit de mettre à un même endroit toutes les tâches qui doivent être résolues. Un endroit commun a pour objectif de permettre à notre esprit d’être à l’aise avec le fait que certaines pensées ne seront plus transportées avec nous à longueur de journée.

Commencez donc par faire une liste de toutes les tâches que vous avez à faire pour les prochains jours, puis les prochaines semaines et ainsi de suite. Par la suite, demandez vous quels sont les problèmes que vous avez actuellement et qui perturbent votre focus lorsque vous essayez de travailler. Finalement, regrouper toutes les lettres, textes, messages et autres sur lesquels vous devez poser une action (ou pas). On fait ça pour pouvoir ensuite passer à travers et déterminer ce qu’on doit faire de chacun des items.

Définir le type des tâches
Pour chacun des items que l’on a, on doit décider de quel type de tâche il s’agit. Est-ce un item qu’on doit éliminer? Garder pour être revue plus tard (on ne peut rien faire pour cette tâche actuellement) ou encore un item qui doit être gardé comme référence?

Si on peut s’en débarasser, alors on le jete et on ne se pose plus de question.
Si on doit le revoir plus tard, on le transfère dans la pile à être revue. Vous pouvez définir comment vous voulez revoir vos documents (chaque jours/mois/semaines/etc).
Si l’item est gardé comme référence, il faut s’assurer de bien le classer. Un document mal classé est l’équivalent de ne pas avoir de document et aussi bien l’avoir jeté.

Former un plan d’action
Pour chacune des tâches qui nécessite une action de votre part, vous pouvez définir un plan d’action. Il s’agit ici de lister les grands points de la tâche que vous aurez à accomplir. Dans mon cas, j’aime bien définir l’ensemble de la tâche à accomplir et si certains éléments sont à ajouter, je le fait au fur et à mesure. La méthode GTD elle, dit simplement de définir quel doit être la prochaine tâche que vous devez accomplir afin de faire avancer votre tâche.

Je préfère définir la tâche au complet car cela me permet de déceler les problèmes plus tôt et ainsi faire une planification. L’objectif est de me permettre d’optimiser ce que j’accomplis. Si je suis en mesure de définir un ensemble de tâche qui peut être accomplis d’un coup à un même endroit, alors je viens de me sauver beaucoup de temps. Un exemple grossier serait une personne qui fait une liste d’épicerie avant d’y aller. À l’opposé, ne pas faire une liste, et aller à l’épicerie, item par item, ne serait aucunement efficace. Bien que l’exemple soit bête, c’est un très bon exemple de compactage d’activités.

Agir (ou déléguer)
Avec votre prochaine action de définie, il ne vous reste plus qu’à faire celle-ci. Une tâche ne peut tristement pas s’accomplir par elle-même et il vous faudra donc mettre les efforts requis pour la mener à terme. En ayant suivi ces étapes, vous vous sentirez probablement un peu mieux de savoir que votre projet avance, même si ce n’est qu’à petit pas.

Dans mon cas, j’ai adopté cette mentalité surtout puisque j’ai remarqué que je perdais beaucoup de mon temps à ne rien “effectuer” du tout. Naviguer sur Internet de part et d’autre sans aucune raison, lire des articles sur l’informatique sans objectif précis, avoir des discussions sans but sont quelques uns des exemples de ce que je faisais. Et je ne suis pas fier de dire que c’était du temps bien employé.

Conclusion
Avec un peu de travail, même un 5 minutes par jour, on peut accomplir vraiment beaucoup de travail. Je crois qu’il vous faut voir à long terme, et arrêter de vouloir tout de suite. Par exemple, 5 minutes par jour pour apprendre une langue, ça représente 30h d’apprentissage par an. Ce n’est peut-être pas beaucoup, mais sachant qu’un enfant commence généralement à apprendre l’anglais vers la troisième année du primaire et à s’en servir tous les jours (écouter la télévision ou encore servir des clients anglais) vers le secondaire 5, ça fait presque 8 ans d’apprentissage, et donc 240h. Vous voyez, avec le temps, les choses peuvent prendre beaucoup d’envergure, enfin, seulement si on leur en donne.