SyntaxHighlighter

2012/05/16

Bisecting pathological code with Git


Sometimes, you end up with a bug in the code base and have no clue
where that bug was introduced...


Git has a "bisect" functionality that helps you determine which commit
introduced the pathology.


Once you've found where the problem lies, then Git can't replace your
worthy talent to fix it in the most elegant way human can think
of. Hey, your genius can't be cloned into a program (yet).


So here are the steps to follow when trying to use "git bisect" to
isolate the faulty commit that is responsible for breaking the feature
you've put so much time and effort implementing.


Using Git to help you

Now you wonder how Git can help you isolate the faulty commit, the
all-evil one that brought your program in regression? Here you go...


First step

Make sure you have a way, ideally systematic (read programmatic) to
make checks on the expected results. Having a script or a
semi-automatic way of proceeding might be very useful since you want
to have reproducible results easily, painlessly, reproduce these
results a given number of times.


The theory of complexity says that if you have N items among which to
proceed with a binary search, then you have roughly ceiling(log(N))
steps towards finding what you're looking for.


In practice, this may lead to about 10 iterations. So if you're as
lazy as I am, you'll want to automate the checking from iteration to
iteration.

Second step

To start the bisection search, and it's really a binary search among a
set of commits, you need to identify two edge commits, i.e. one where
it fails (usually the "HEAD" of the branch you're working on) and one
where the feature was working fine. These are the boundaries within
which the binary search will be made.

Third step

Now you can start using Git for the search. It can be initiated using the following command:


git bisect start


You have to tell bisect what are the boundaries of the search. You indicate the commit that is faulty by issuing the following command:


git bisect bad


Leaving the commit hash empty will tell Git to use the HEAD.
You indicate the commit where the functionality is working fine by
issuing the following command: 


git bisect good


From now on, Git will proceed by identifying the median commit in the
search space, check it out and let you proceed with the testing to
identify if the functionality is good/bad.


You can tell Git about that by issuing


git bisect good


or


git bisect bad


accordingly.

Final step

Once you're done, you can stop the "bisect" functionality with this
command:
git bisect reset

Further readings

You can see these web pages for further details:

  • http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search 
  • http://webchick.net/node/99 


2012/05/08

La grève étudiante au Québec

Voici mon point de vue sur la grève étudiante au Québec.

Ma position: en faveur de la gratuité scolaire

Le principe d’utilisateur-payeur ne s’applique que sur certains concept au Québec. Par exemple, le domaine de la santé. Il est clair que mes impôts ne varient pas en fonction du nombre de visites à l’hôpital que je suis en mesure de faire au courant d’une année. C’est un choix de société qui implique que nous payons, tous ensemble, afin que les services soient offerts à tous. Aussi, les voies publiques sont payées non pas en fonction de l’utilisation que nous en faisons: est-ce que je paie à chaque fois et seulement pour les quelques fois que je passe sur le pont Champlain? Non. Est-ce que je paie à chaque fois que j’emprunte l’échangeur Turcot? Non. Ces infrastructures sont là et elles sont disponibles à notre société.

Les coûts des études supérieures, tant au niveau collégial qu’universitaire, peuvent être contrôlés en commençant tout d’abord avec le contrôle à l’accès selon le mérite. Durant mes études, j’ai pû cotoyer des étudiants dont les compétences, et on parle bien de compétences lorsqu’on fait des études supérieures, étaient en deçà de ce qui était attendu d’un étudiant universitaire. Par exemple, une étudiante en administration option comptabilité ne se souvenait pas du résultat de 3 x 8. Par exemple, les étudiants qui ne savent même pas comment conjuguer le verbe être convenablement. Il est clair que le niveau des étudiants universitaires n’est pas celui qui devrait être. On souhaite que l’éducation soit accessible à tous mais on devrait plutôt penser qu’il devrait être accessible au mérite. Par exemple, des directeurs au sein de grosses entreprises qui ne sont même pas capables de faire une phrase sujet, verbe, complément durant un exposé oral. On pourrait ainsi éviter d’avoir trop de diplômés qui sont incompétents, ce dont j’ai trop souvent eu l’occasion de croiser dans mon parcourt professionnel, et redonner aux diplômes la valeur qui leur est dûe.

Et les universités devraient peut-être coûter plus cher aux étudiants étrangers. Si les frais de scolarité pour les étudiants québécois sont gratuits, ce serait parce que c’est un service qu’on a décidé de s’offrir. Tout comme l’assurance-maladie. Et les étudiants étrangers devraient payer plus cher que ce qu’il leur en coûte actuellement. Au même titre que les malades étrangers doivent payer davantage pour les frais médicaux, même s’ils ne payent pas pour passer sur le pont Champlain, Laviolette ou prendre l’autoroute métropolitaine.

Est-ce que les universités dépensent trop peu judicieusement? Bien sûr. Moi-même, ne suis pas irréprochable dans ma façon de gérer mon budget domestique qui est beaucoup moins complexe et géré seulement par moi et ma conjointe. Mais on ne parle pas ici de budget de fonds publics mais bien de mes fonds personnels. Et mes quelques inepties budgétaires n’affectent en rien le bien commun.

Maintenant, on peut se questionner sur le déroulement de la grève et de la manière dont ceci a été géré de part et d’autre. Mais ce n’est pas là le débat.

Est-ce que les étudiants ont mal géré leur processus de grève et leurs négotiations? Bien sûr. J’ai été heureux de voir que des représentants syndicaux se sont portés volontaires pour aider au processus de négociations entre le gouvernement et les étudiants. Et j’aime à penser que leurs conseils ont été bien reçus.

Est-ce que le gouvernement a mal géré la situation? Bien évidemment et de façon lamentable à mon avis. Érudits aux stratégies de la négociation, ils ont manqué de respect envers la communauté étudiante, envers la société au sens large. Étant donné sa position de pouvoir et son rôle social, le gouverment est largement à blâmer dans toute cette histoire: il a la responsabilité de s’assurer que l’ordre social est maintenu. Bien sûr, il a été clair que les enjeux électoraux sont prédominents pour le gouvernement Charest. Et il est aussi clair qu’il a été une de ses priorités de se démarquer favorablement auprès du public, surtout lorsque de fortes (et très nauséabondes) allégations de corruption pèsent sur lui.