Affichage des articles dont le libellé est tutoriel. Afficher tous les articles
Affichage des articles dont le libellé est tutoriel. Afficher tous les articles

mercredi 25 septembre 2013

displaying Gerrit review history in git log

Over the last few weeks, several people complained I should share my tip'n tricks with more people. They are apparently worth a post.  I am giving it a try there to show you how to make available in your git cli the Gerrit review informations. I will start with some context then spurt magical commands to let you make it happen on your own computer.

In the beginning of 2012, the Wikimedia Foundation switched from Subversion to Git. The main reason for the switch was to prevent committers from inserting bad code in the central repository. Thus lowering the stress when deploying said code on the production site.  The only way to do it is to elect a gatekeeper between patch authors and the reference repository used for deployment. In Linux, that is more or less the role of Linus Torvalds. At Wikimedia we selected Gerrit which is used at Google to accept patches for their Android platform.

The Gerrit workflow is pretty simple: authors send their patches to Gerrit, he and others comment or amend the patch, rinse and repeat until there is no more to say. After a few iterations, the community ends up with a robust patch which is worth entering the reference repository. A few people are allowed to approve the change and have it actually merged.

The history that led to the final commit is available (example for a patch I wrote: https://gerrit.wikimedia.org/r/75569) and is very valuable whenever a bug appear: the comments can give you an idea of the design choices and list out every single person that get involved in the patch. If the original author is not available, you can most probably reach out to the person that review the code. When you are facing an issue in production, the more people to ask the merrier.

It is too cumbersome to have to open the browser in the Gerrit web interface. Aging, I rely more and more on terminals and command lines. How would I get the commit history from the command line without having to parse some Gerrit json? Luckily, there is a way to get all the reviewing history saved locally and thus available offline.

Internally, Gerrit relies a lot upon git, its internal configuration for a given repository is even available (under refs/meta/config). The review history for a repository is thus stored in Git as well and it lives under refs/notes.

You can thus fetch all the review history:
git fetch -v origin refs/notes/*:refs/notes/*
Then configure your repository to always show the notes in git log:
git config --local notes.displayRef refs/notes/review
End result:

$ git log -n1 1dad0218
commit 1dad021840bf936b0e130ddda3459d11f0ad8421
Author: Antoine Musso 
Date:   Wed Jul 24 12:08:52 2013 +0200

    SpecialPrefixindex formatting methods are now protected
    
    namespacePrefixForm() and showPrefixChunk() accepted additional
    arguments to slightly alter the form such as hiding redirects.  The
    argument has been removed in favor of class property just like
    stripprefix introduced earlier and the method have been made protected
    since there is no point in calling them out of the special page scope.
    
    Change-Id: I55728fd2634f8a935a033052dcce3c7247cb1aa3

Notes (review):
    Verified+2: jenkins-bot
    Code-Review+2: Matmarex 
    Submitted-by: jenkins-bot
    Submitted-at: Fri, 30 Aug 2013 19:41:21 +0000
    Reviewed-on: https://gerrit.wikimedia.org/r/75569
    Project: mediawiki/core
    Branch: refs/heads/master


On this patchset, we can see that Matmarex has accepted the change :-) You can prevent notes from displaying whenever you like by passing --no-notes to the git log command. Note: you will have to fetch the notes from time to time since they are not fetched by default. An alias would be useful:
git config --global alias.fetchreviews \ 'fetch -v gerrit refs/notes/review:refs/notes/review'
You can then refresh notes by nvoking git fetchreviews.

Summary:

* Get notes: git fetch -v origin refs/notes/review:refs/notes/review
* Configure git to always show them: git config --local notes.displayRef refs/notes/review

lundi 18 juillet 2011

git cheat sheet

This post is supposed to be a cheat sheet for git commands. Much like the previous mac port post (in french).

regrouping commits

# back to master & up-to-date:
git checkout master
git pull
# create a new clean branch
git checkout -b clean_new_feature
# merge in the branch with ton of commits
git merge messy_feature
# The clean_new_feature branch now has everything needed.
# Move its pointer back to the origin so our merge is considered
# a series of unstaged changes:
git reset origin/master
git status # review the differences :)
git add .
git add -u # you wants to send file deletions too
git commit


You now have all the commits regrouped in one new branch named 'clean_new_feature'. You can now request a pull&merge to upstream.


advancing remote branch

(master)$ git checkout -b localbranch nickname/master
Branch localbranch set up to track remote branch master from nickname.
Switched to a new branch 'localbranch'
(localbranch)$ git merge origin/master
Updating 1234567..9abcdef
Fast-forward
...
X files changed, Y insertions(+), Z deletions(-)
(localbranch)$ git status
# On branch localbranch
# Your branch is ahead of 'nickname/master' by T commits.
#
nothing to commit (working directory clean)
(localbranch)$ git push
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:nickname/repository.git
   1234567..9abcdef  master -> master
(localbranch)$ git status
# On branch localbranch
nothing to commit (working directory clean)
(localbranch)$





pushing local branch to a remote branch

$ git push nickname localbranch:remotebranchname

This would push your local branch named 'localbranch' to the 'nickname' repository under the branch name 'remotebranchname'. Simple isn't it?

mardi 30 novembre 2010

compiling php extension under Mac OS X 10.5

Today, I installed the amazing Xdebug PHP extension and had some troubles making it running under my Apache2 installation. This short blog post is intended to keep track of the issue and might help other people encountering a similar issue.


Firstly, the symptoms : xdebug loads correctly under CLI (ie PHP launched from shell) since it shows the "with Xdebug v2.1.0". Under apache2, it reports a cryptic error:
Failed loading /usr/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so:  (null)
On for a debugging session!

Firsty, my computer run Mac OS X 10.5.8 updated as of 11/30/2010 and I rely on Apple tools to develop PHP scripts. This mean:
  • PHP 5.2.14 (built: Oct  6 2010 16:57:10) 
  • Apache 2.2.14
  • phpize --version reports:
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
I compiled Xdebug using the usual steps:
  • wget
  • tar -xvzf
  • cd xdebug2.1
  • /usr/bin/phpize
  • ./configure && make
  • sudo cp ./modules/xdebug.so ...
  • sudo apachectl restart

After some googling, I found the solution in a blog post by Patrick Gibson. Here is the lame copy pasting :

MACOSX_DEPLOYMENT_TARGET=10.5 \
CFLAGS='-arch i386 -arch x86_64 -arch ppc7400 -arch ppc64' \
LDFLAGS='-arch i386 -arch x86_64 -arch ppc7400 -arch ppc64' \
CXXFLAGS='-arch i386 -arch x86_64 -arch ppc7400 -arch ppc64' \
./configure --enable-xdebug
The above environment variables are used to instruct configure and make that a multiple architecture library should be build. I then did the usual make, copy and Apache restart. Et Voilà! Problem fixed.

I am not sure what is the real cause of the issue, probably related to the Apache2 libphp5.so.

Last step was to report the issue:

I have contacted Xdebug author Derick on irc, since this issue can probably get handle by tweaking the configure script. After a quick bug report, it is an issue with Mac OS X phpize which does not include the MACOSX_DEPLOYMEN_TARGET environment variable nor the CFLAGS, LDFLAGSn CXXFLAGS needed to build a multi architecture library. Basically not an issue with Xdebug itself.

Hence this blog post to make sure I remember the above compilation FLAGS.


vendredi 16 avril 2010

... des commandes MacPorts les plus utiles

Le projet MacPorts est un projet de la communauté open-source pour compiler, installer et mettre à jour facilement un large panel de logiciels open source. On peut le rapprocher d'un dépot Debian pour Mac OS X. Ce billet présente les commandes les plus utiles ce qui me servira de référence dans le futur.

-d : option permettant un affichage plus verbeux.
  • port selfupdate : mise à jour du dépot
  • port list outdated : liste ensuite les paquets à mettre à jour
  • port upgrade outdated : mise à jour de ces paquets
Par défaut, lorsqu'on met à jour un paquet, port ne le supprime pas mais le marque inactif. Le pseudo paquet "inactive" permet de s'en occuper :
  • port list inactive : liste ces paquets inactifs
  • port uninstall inactive : désinstalle les paquets inactifs
Pour éviter cette manipulation, on peut mettre à jour un paquet avec le switch -u afin d'éliminer les anciennes versions :
  • port -u upgrade
Et bien sur port search pour voir ce que l'on peut ensuite installer avec port install .

Enfin, mac port ne supprime pas les anciennes versions : il se contente de les désactiver. De même, la compilation des paquets laisse des traces. On veillera donc à faire régulièrement le ménage :
  • port clean --all installed
  • port uninstall inactive
Simple non ? :)


Sinon, il existe des GUI permettant de tout gérer à la souris : Porticus et Pallet.

dimanche 7 février 2010

La méthode SCRUM en quelques vidéos

Ce billet vise à regrouper quelques vidéos en anglais concernant SCRUM, une méthode agile de développement logiciel. Cette méthode est en opposition avec les méthodes plus connues de l'élève ingénieur telles que Cycle en V, Merise ou le modèle Waterfall. Notamment, la méthode étonne par sa réactivité, l'absence de cahier des charges et son processus itératif.

Plus qu'un long discours (vous en trouverez un en fin de billet), je pense que vous aurez un meilleur aperçu en visionnant les quelques vidéos que je vous propose. Je les ai volontairement classée par ordre d'intérêt et de durée croissante.

mercredi 28 octobre 2009

une soirée de geek

Une petite soirée de geek comme je les aime. Il est devenu de plus en rare de trouver de la motivation pour replonger dans le code le soir. Heureusement, devenu architecte réseau, je n'écris plus que dans un logiciel de traitement de texte. Adieu perl, shell, ruby, SQL et JavaScript entre 9 et 7 :p

Ce soir, donc, j'ai eu une bride de motivation pour installer HBase sur un Mac. Le projet vise à héberger des bases gigantesques réparties sur un parc de machine. Écris en java, çà plante bien évidemment. Un petit inventaire des quelques problèmes que j'ai pu rencontrer.

jeudi 15 octobre 2009

... de lignes de perl pour illustrer un fork

Ceci est un vieux message je l'avais commencé en juin 2008 et jamais publié. Le principe était de rédiger un exemple d'utilisation de fork() en perl. Je n'ai pas réellement relu le code et il nécessiterait un bon coup de balai, il aura au moins le mérite d'être publié. Le résultat de l'exécution est à la suite.

mercredi 14 octobre 2009

Télécharger word gratuitement

Pour postuler à une offre d'emploi, on vous demande généralement d'envoyer votre curriculum vitae au format Word. Malheureusement, ce logiciel n'est ni libre ni gratuit. Un particulier doit donc acheter le logiciel qui sera fourni avec une licence d'utilisation. Comptez une bonne centaines d'euros. Un peu cher pour un simple CV non ?

Tout d'abord, qu'est ce que Word ? En anglais "word" signifie "mot", c'est le nom donné par la société Microsoft à son logiciel de traitement de texte : Word. Il permet d'écrire et de mettre en page des documents textes (votre CV, un livre, un rapport ...) éventuellement agrémentés d'images. Comme il est très répandue parmi les entreprises, les fichiers au format Word sont devenus le format de facto pour les échanges de documents.

Les particuliers ont rarement un ordinateur équipé de Word si votre problème est simplement de lire un fichier Word, vous pouvez télécharger gratuitementWord Viewer sur le site de Microsoft. Pour répondre à une annonce d'emploi, nous allons voir les alternatives à notre
disposition.

La première solution est de télécharger OpenOffice, il s'agit d'un concurent de Microsoft Office mais en version libre et gratuite. L'équivalent de Word mais en libre et gratuit est nommée Writer (écrivain en français). Le site propose une série de guide pour apprendre à s'en servir. Une fois votre CV terminé, il vous suffira de l'enregistrer au format Word et de l'envoyer. Pour celà aller dans Fichier, Enregistrer sous... puis dans la fenêtre de dialogue modifiez le type de fichier :

Enregistrer sous ... dans OpenOffice.


La seconde solution est d'utiliser WordPad. C'est un logiciel de traitement de texte très simplifié et inclus par défaut dans Windows. Vous pouvez le lancer dans le menu démarrer, puis Programmes, Accessoires et enfin WordPad. Sa limitation est qu'il n'enregistre qu'au format RTF, mais votre destinataire devrait pouvoir ouvrir le document avec son logiciel Word. Pratique et pas cher !

Enfin, et c'est ma dernière solution, vous pouvez créer votre curriculum vitae sur internet en quelques clics de souris. C'est ce que propose le site DoYouBuzz. Une fois inscrit, vous aurez un plan complet, il ne vous restera qu'à choisir les couleurs et à remplir les différentes section ! Vous pourrez alors communiquer à votre destinataire l'adresse de votre site en ligne ou télécharger depuis le site votre CV au format PDF. Il vous suffira de le faire parvenir à votre correspondant.

Pour conclure, il faut vous assurer que votre correspondant pourra lire votre fichier. Utilise t'il Windows ? Il pourra lire le fichier au format .RTF. As t'il Adobe Acrobat Reader pour lire les fichiers PDF ? Enfin, certaines sociétés ont une politique d'accès très stricte à internet, votre correspondant n'aura peut être pas accès à votre CV numérique !


Bonne rédaction de CV sans Word.

vendredi 17 avril 2009

Makefile with chained pattern rules for dummies

This is a simple Makefile (for GNU make, see http://www.gnu.org/software/make/) which I am publishing as a reference to my poor little brain. Who know ? Maybe it can prove useful for someone else. I even inserted some comments.


My problem was easy : I am given some RRA files (http://oss.oetiker.ch/rrdtool/) that need to be rendered as PNG. I am willing to render to PNG using an XSL stylesheet although I am aware 'rrdtool graph' would handle this anyway in one shot.

I want fun.


What is the point in having rrdtool handling all the stuff for you without learning anything new in the process ? Does it feel boring ?

It does. I want fun.

lundi 23 juin 2008

... de code hexadécimal sur fond bleu

Durant quelques semaines, mon installation de Windows XP avait quelques ratés : un écran bleu après quelques heures de fonctionnement. J'ai voulu en savoir un peu plus et je me suis lancé dans le déchiffrement des différents messages.

Mais qu'est ce qu'un écran bleu ? Tout simplement un message d'alerte du coeur du système d'exploitation indiquant que quelque chose s'est mal déroulé. Windows affiche alors une série de code d'erreur. Dans mon cas tout les écrans avaient le même premier code :

0x0000008E == KERNEL_MODE_EXCEPTION_NOT_HANDLED

Microsoft faisant bien les choses, nous disposons d'une description complète de ce code sur msdn. Le deuxième paramètre indique l'adresse et le troisième un "trap frame". J'ai donc :
1 Except code : 0xC0000005
2 Address : 0x8062BFBF
3 trap frame : 0xBEE482E4
4 reserved : 0x00000000
Un autre écran bleu me donne :
1 Except code : 0xC0000005
2 Address : 0x8062BFBF
3 trap frame : 0xB71946D4
4 reserved : 0x00000000
Pour le code d'exception, rien de plus facile, il suffit de regarder dans le même article et j'ai :
0xC0000005 == STATUS_ACCESS_VIOLATION
En gros une violation d'accès mémoire. Le lecteur curieux pourra aller voir ntstatus.h pour le detail.
0xC0000005: STATUS_ACCESS_VIOLATION indicates that a memory
access violation occurred.
MSDN indique quelques pistes pour résoudre le problème:
  • Vérifiez l'espace disque : OK pour moi
  • Si il y a un driver identifé, désactivez le ou autre : pas de driver mentionné
  • Changez de carte vidéo : je n'en ai pas sous la main.
  • Mettez à jour le BIOS : j'ai fait çà il y a quelques années, je ne souhaite pas brancher ma puce à chaud sur un autre PC. Je n'ai plus le goût du risque.
  • Désactivez les options de cache mémoire dans le BIOS.
Bref, rien de transcendant là dedans. Je réendosse mon costume de mineur et je vais au fin fond d'internet à la recherche du deuxième paramètre 0x8062BFBF.Au détour d'un couloir mal éclairé, je découvre le message d'un utilisateur ayant le même problème. Dessous, une petite lanterne parle de minidump et indique que la cause est toujours la même nt!HvpGetCellMapped+5f :

>> All of the minidumps are crashed with same symptom.
>>
>> BugCheck 1000008E, {c0000005, 8062bfbf, b625598c, 0}
>> Probably caused by : ntkrnlpa.exe ( nt!HvpGetCellMapped+5f )
>> The registry is corrupted. Refer this problems :
>> http://www.techspot.com/vb/showthread.php?p=236454#post236454
>> http://www.techspot.com/vb/all/windows/t-63005-BSOD-Memory-Problems.html


La base de registre aurait donc un problème. Mais par quel moyen cette personne est elle arrivée à cette conclusion ?

La réponse est WinDBG, un utilitaire de Microsoft pour mener ce genre d'analyse. A chaque écran bleu, il est possible de garder une trace de l'étât du coeur de Windows au momment du plantage, c'est un fichier que l'on nomme minidump. WinDBG permet de le décrypter.

Je charge donc le dernier minidump et je me lance :

Debugging Details:
------------------

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - L'instruction "0x%08lx" emploie l'adresse m moire "0x%08lx". La m moire ne peut pas tre "%s".


FAULTING_IP:
nt!HvpGetCellMapped+5f
8062bfbf 8b4304 mov eax,dword ptr [ebx+4]

TRAP_FRAME: b71946d4 -- (.trap 0xffffffffb71946d4)
ErrCode = 00000000
eax=00001ff0 ebx=00001ff0 ecx=889ab6a0 edx=00000007 esi=e2525b60 edi=00000fff
eip=8062bfbf esp=b7194748 ebp=b7194790 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
nt!HvpGetCellMapped+0x5f:
8062bfbf 8b4304 mov eax,dword ptr [ebx+4] ds:0023:00001ff4=????????
Resetting default scope

CUSTOMER_CRASH_COUNT: 1
DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0x8E
PROCESS_NAME: firefox.exe

LAST_CONTROL_TRANSFER: from 8062bed0 to 8062bfbf

STACK_TEXT:
b7194790 8062bed0 e2525b60 00ffffff e2525b60 nt!HvpGetCellMapped+0x5f
b71947a4 80630364 e2525b60 00ffffff d08f9664 nt!HvpGetHCell+0x10
b71947c0 80634e9c e2525b60 00ffffff e2525b60 nt!HvMarkCellDirty+0x30
b71947e0 80634fd6 e2525b60 002b8660 e1098170 nt!CmpMarkKeyDirty+0x68
b71947f8 8062ab42 e2525b60 002b8660 00000001 nt!CmpFreeKeyByCell+0x14
b7194828 806191a2 e2a4c4a8 b7194894 00128740 nt!CmDeleteKey+0x8c
b7194888 8053c808 00000540 00128768 7c91eb94 nt!NtDeleteKey+0x138
b7194888 7c91eb94 00000540 00128768 7c91eb94 nt!KiFastCallEntry+0xf8
WARNING: Frame IP not in any known module. Following frames may be wrong.
00128768 00000000 00000000 00000000 00000000 0x7c91eb94

STACK_COMMAND: kb

FOLLOWUP_IP:
nt!HvpGetCellMapped+5f
8062bfbf 8b4304 mov eax,dword ptr [ebx+4]

SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: nt!HvpGetCellMapped+5f
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: nt
IMAGE_NAME: ntkrnlpa.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 42250a1d
FAILURE_BUCKET_ID: 0x8E_nt!HvpGetCellMapped+5f
BUCKET_ID: 0x8E_nt!HvpGetCellMapped+5f
Followup: MachineOwner

Pour mémoire les quelques commandes que j'ai utilisées dans WinDBG sont:
  • .bugcheck : liste les données du code
  • .kb : liste la pile (stack trace)
  • .kv : liste les trap frames
  • .trap : récupére les registres au moment de l'erreur
ESI est le pointeur d'instruction, une valeur de zéro est logiquement un problème. On refait une demande de la pile (kb).

La base de registre de mon utilisateur est corrompu. J'ai donc créé un nouvel utilisateur, migré mes préférences applicatives et tout fonctionne correctement.

D'autres questions ?

mardi 17 juin 2008

Firefox 3 et le zoom à la molette

La version finale de Firefox 3 est sortie ce 17 juin à 19H00 et je me suis empressé de l'installer sur mon poste Microsoft Windows.

Les navigateurs et d'autres applications ont souvent une fonctionnalité intéressante : le zoom à la souris. Lorsque je veux agrandir ou réduire le texte affiché, il me suffit de maintenir la touche CTRL et de faire glisser la molette de la souris. On y prend vite goût surtout lorsqu'on a eu une souris à deux boutons pendant de nombreuses années. Si dépendant que je n'y pense plus : c'est devenu un réflexe.

Bref, sous Firefox 3, à la première utilisation j'ai tout de suite remarqué un problème : ma souris fonctionne à l'envers !

Je pars donc à la recherche d'un paramètre caché qui pourrait me permettre de corriger ce problème. Pour cela je souhaite accéder au paramètre permettant de rétablir le fonctionnement attendu. J'indique dans ma barre d'adresse about:config et je me retrouve avec la liste de toute les préférences disponibles. Les plus pratiques et les moins dangereuses sont usuellement modifiées avec Outils -> Options, les autres sont dans cette longue liste. Voyons si nous pouvons trouver quelque chose permettant d'altérer le comportement de cette molette.

Tout d'abord, cet engrenage indispensable, se nomme en anglais mousewheel. Je tape ce mot dans le champ Filtre :



En défilant on peut voir les différentes sous-propriétés :
  • horizscroll : probablement pour les molettes permettant un mouvement de gauche à droite.
  • transaction : ça ne ressemble pas à ce que je recherche
  • withaltkey : littéralement «avec la touche ALT»
  • withcontrolkey : littéralement «avec la touche CONTROL», voilà !

Je complète donc ma recherche avec le terme withcontrolkey:



Il ne reste plus que trois propriétés : action, numlines et sysnumlines. L'action "3" est loin d'être parlante, quelques recherches s'imposent pour déchiffrer ces valeurs. Un manuel complet serait l'idéal.

La référence est bien sûr le site www.mozdev.org qui héberge tout un tas de ressources pour les adeptes de Mozilla. Dans mon cas, je m'intéresse plus particulièrement à preferential.mozdev.org qui décrit les arcanes du système de préférence et particulièrement la branche mousewheel.withcontrolkey :

mousewheel.withcontrolkey.action
Action to take:
  • 0 : Scroll document by X lines
  • 1 : Scroll document by one page
  • 2 : Move back/forward in history
  • 3 : Make text larger/smaller
mousewheel.withcontrolkey.numlines
Number of lines to scroll by (if relevant)

mousewheel.withcontrolkey.sysnumlines
Scroll by a number of lines equal to system default?

Du coup, je vérifie que la molette avec la touche CONTROL modifie effectivement la taille du texte. Dans ce cas, le paramètre numlines ne semble pas avoir de sens. Pourrait-il être utilisé d'une manière détournée ? Peut-être s'agit-il du facteur de zoom ? Si j'indique la valeur -1 je devrais pouvoir inverser le système.

Un simple double clic sur la ligne et voilà la valeur modifiable à souhait :
Je valide avec le bouton OK et je constate que le changement est effectif immédiatement. Ma présomption était correcte.

Mon zoom à la molette est corrigé. Nul besoin de changer de souris.