mardi 26 juin 2012

Le meilleur gâteau à la banane au monde.

Je viens de réaliser un gâteau à la banane vraiment délicieux aujourd'hui et j'en suis extrêmement fier.

Voici la recette :)

  • Préchauffez le four th. 7 (210°C).
  • Mélangez les ingrédients suivants dans une jatte :
    • 2 oeufs
    • 1 yaourt nature
    • 2 pots de farine (utilisez le pot de yaourt)
    • 2 pots de sucre
    • Un peu de levure, utilisez la dose conseillée sur le sâchet
    • 1/3 ou 1/4 de pot d'huile
    • 5 bananes réduites en purée grossière
  • Versez la pâte dans un moule à savarin
  • Laissez le gâteau cuire pendant 25minutes au four (il est conseillée de surveiller le gâteau de près pendant les 5 dernières minutes, on ne sait jamais).
  • Une fois cuit, laissez le gâteau s'ahérer
  • Mangez :)

samedi 23 juin 2012

Créer des "time-lapse" avec une webcam simplement sous GNU/Linux

J'ai toujours eu une fascination pour les time-lapse. Il y a quelques années, j'en avais déjà produit un avec la webcam de mon Père sous Windows XP. J'avais trouvé une petit outil... probablement payant et que j'avais cracké, je ne sais plus.

Le temps à passé, j'ai accumulé des webcams diverses et variées et je ne me sers plus que de Arch Linux (ou Parabola lorsque le matériel me le permet).
Je me sers ici d'une 808 Car Keys Micro Camera en mode webcam (modèle #3, le modèle #8 ne fonctionne pas sous GNU/Linux).

Ce que j'aime avec la communauté du libre, c'est qu'il existe toujours un logiciel simple et concret qui correspond à ce que vous avez envie de faire.
Mes connaissances en informatiques étant largement supérieures à ce qu'elles étaient, j'ai trouvé un moyen "plus simple" pour créer un time-lapse :
1) Trouver un logiciel en ligne de commande qui prend une photo avec la webcam.
2) Faire un simple script bash pour répéter l'action toutes les X secondes.
3) Utiliser FFMpeg ou MEncoder pour produire le fichier vidéo.

Le seul problème réside dans l'étape 1). Une simple recherche Google m'a amené sur des dizaines (littéralement) d'articles de blogs sur la question qui proposaient tous des solutions alambiquées allant jusqu'à utiliser trois ou quatre logiciels différents (!?), ou des solutions simples mais avec des logiciels qui n'existent plus ou qui ne fonctionnent pas.

À force de persévérance j'ai fini par trouver le logiciel fswebcam qui remplit parfaitement la tâche 1). Je pensais pouvoir tout faire uniquement avec FFMpeg, mais celui-ci n'arrive pas à lire /dev/video0 directement.

fswebcam permet d'enregistrer une photo de la webcam au format PNG ou JPG, en y incrustant la date et l'heure (option activée par défaut) et/ou d'autres textes encore.

Le but maintenant est de faire un script qui enregistre une photo toutes les X secondes avec un nom différent, de préférence un nom qui permet de classer les images par ordre chronologique (bien qu'il soit possible de faire ce tri après sans se baser sur le nom des fichiers mais c'est trop d'ennuis).
Si vous êtes familier avec Unix, vous connaissez sans doute l'existence du temps Unix qui compte les secondes écoulées depuis le 01/01/1970. Ainsi il suffit de nommer le fichier avec le temps Unix où celui-ci est enregistré et le tour est joué.
Vous pouvez afficher le temps Unix dans le terminal en tapant la commande "date +%s".

Le script est donc le suivant :
#!/bin/bash
while (( 1 )) ; do
    fswebcam --no-timestamp --no-banner --png --save %s.png
    sleep 5
done
Pour la petite histoire, je n'ai jamais compris comment les boucles while fonctionnaient lors d'un script shell. J'ai beau avoir essayé while [ 1 ], while [[ 1 ]] avec ou sans le do à la ligne. Peu importe, il n'y a que while (( 1 )) ; do qui fonctionne. Il me semblait pourtant avoir réussi plusieurs fois à faire des scripts contenant des boucles infinies avec while [ 1 ].
Peu importe...

La boucle est donc en marche, les paramètres --no-timestamp --no-banner permettent d'obtenir simplement l'image de la webcam sans la date imprimée dessus, --png permet de sauver l'image au format PNG, et enfin --save %s.png permet d'utiliser le temps Unix comme nom du fichier (ne me demandez pas pourquoi %s tout seul et pas date +%s comme dans l'exemple).
sleep 5 permet effectivement d'attendre cinq secondes avant de répéter la boucle.

Pour l'encodage de la vidéo à partir des images capturées, je me suis inspiré d'une commande trouvée sur un des blogs. Je me pencherai plus tard dessus pour la remplacer par une commande FFMpeg car elle ne me plaît pas.
Il faut d'abord lister les fichiers obtenus dans un fichier texte avec la commande ls -1tr *.png > files.txt, puis demander à MEncoder de créer un fichier vidéo à partir de cette liste :
mencoder  -nosound -ovc raw -o test.avi -mf type=png:fps=30 mf://@files.txt
Le résultat est suffisant, mais pas assez bon selon mes critères (le fichier n'est pas lisible avec FFPlay, allez savoir pourquoi).

Après quoi on obtient un joli time-lapse à mettre sur YouTube ! :)

lundi 18 juin 2012

L'ordinateur au service de l'homme.

Il faut vraiment que j'apprenne à exploiter à fond les scripts bash et mon fichier .bashrc.

Je me souviens avoir découvert ce que je manquais en jetant un coup d’œil au .bashrc de Aaron Griffin. Cela m'a fait un choc.
La simple fonction "mkcd" qui crée un dossier et se déplace directement dedans m'avait bluffée.

J'ai donc commencé à écrire les miennes. Une fonction pour effectuer une recherche DuckDuckGO dans lynx et une autre pour faire une copie d'un disque dans un fichier binaire.

function ddg () {
    if [ $1 != 0 ]; then
        lynx https://www.duckduckgo.com/?q="$1";
    else
        lynx https://www.duckduckgo.com/;
    fi
}

function cd2bin () {
        if [ $1 != 0 ]; then
                sudo cdrdao read-cd --read-raw --datafile "$1".bin --device /dev/sr0 --driver generic-mmc-raw "$1".toc
        else
                echo Please enter a filename
    fi
}


Peut-être que cela aidera quelqu'un.