Astuces

Geany.

Faciliter l'écriture de code répétitif

Dans le cadre du développement d’une application de test pour Android, je dois peupler une classe Questionnaire en utilisant un patron identique à

addQuestion( // 2
    new Question(0, "Avant de franchir une porte, le cariste doit-il :", 1,
            new Choix("accélérer", false),
            new Choix("klaxonner", true),
            new Choix("ralentir", true)
    ));

Soit je me tape du copier-coller avec remplissage des champs une centaine de fois pour chaque questionnaire, soit j’utilise geany et son plugin lua pour qu’il me présente une fenêtre me permettant de compléter les champs servant à remplir le patron. Ayant près d’un millier de questions à créer, je vais économiser quelques milliers de gestes et m’arranger pour l’ordinateur travaille d’avantage à ma place, voici le script rapidement codé :

numero = 0
theme = 0
titre =""
points = 2

function bool2string(a)
    if a == "0" then
        return "false"
    else
        return "true"
    end
end

repeat
    local dlg=dialog.new("Question", {"Valider", "Annuler"})

    dlg:text("numero", numero, "numéro de question")
    dlg:text("theme", theme, "Theme")
    dlg:text("points", points, "nombre de points")
    dlg:text("titre", titre, "titre")
    dlg:text("choixa", "", "choix A")
    dlg:text("choixb", "", "choix B")
    dlg:text("choixc", "", "choix C")

    dlg:checkbox("correcta", false, "Choix A ok")
    dlg:checkbox("correctb", false, "Choix B ok")
    dlg:checkbox("correctc", false, "Choix C ok")
    local button, results = dlg:run()

    if button == 1 then
        if results['choixc'] ~= nil then
            a = string.format([[
                        addQuestion( // %d
                                new Question(%d, "%s", %s,
                                            new Choix("%s", %s),
                                            new Choix("%s", %s),
                                            new Choix("%s", %s)
                                ));]], results['numero'], results['theme'], results['titre'], results['points'],
                                        results['choixa'], bool2string(results['correcta']),
                                        results['choixb'], bool2string(results['correctb']),
                                        results['choixc'], bool2string(results['correctc']))
        else
            a = string.format([[
                        addQuestion( // %d
                                new Question(%d, "%s", %s,
                                            new Choix("%s", %s),
                                            new Choix("%s", %s)
                                ));]], results['numero'], results['theme'], results['titre'], results['points'],
                                        results['choixa'], bool2string(results['correcta']),
                                        results['choixb'], bool2string(results['correctb']))
        end

        geany.copy(a .. "\n")
        geany.paste()

        numero = results['numero'] + 1
        theme = results['theme']
        titre = results['titre']
        points = results['points']
    end
until button ~= 1

L’astuce principale consiste à copier le contenu généré dans le presse-papier puis à le coller dans le document ouvert, ce qui permet de placer le morceau de code à l’emplacement du curseur.

Virtual Box

Réduire la taille des images virtuelles

Les disques virtuel au format VDI de Virtual Box grandissent de façon dynamique en fonction des données qui y sont écrites. Désinstaller un programme ou supprimer des fichiers ne réduit pas la taille des images disque car des données restent écrites dans les blocs libérés.

Pour pouvoir réduire les images, il faut tout d’abord, dans la machine virtuelle, remplir de 0 les blocs libres avec SDelete de SysInternal avec la commande sdelete -z. Puis, dans la machine hôte, on compacte l’image disque avec la commande VBoxManage modifymedium <nom_fichier>.vdi --compact.

Installer un pack d’extension

Après avoir téléchargé le pack sur le site d’Oracle, il faut l’installer avec la commande sudo VBoxManage extpack install <tarball_extension>.