Journal S'amuser avec sl (si si)

Posté par (page perso) . Licence CC by-sa
Tags :
86
5
juin
2015

Bonjour nal,

Mes deux précédents articles ayant eu pour but d'enlarge your productivity, il serait temps de faire un article pour la diminuer drastiquement, en compensation. Ça tombe bien, on est vendredi !
Pour cela, on va s'amuser avec sl.

Si, si, sl. La commande qui affiche des trains.

Je sens que cet article va être n'importe quoi
Je sens que cet article va être n'importe quoi

Ce qui est drôle avec sl, c'est qu'avec une simple boucle, on peut avoir une INFINITÉ DE TRAINS.

while true ; do sl -e; done

Notons que l'option -e est importante pour la suite, elle va nous permettre de repositionner notre train.

Plus de trains !

Ouvrons plusieurs fenêtres, et assurons-nous qu'elles ont la bonne taille (avec un gestionnaire de fenêtre en mode tiling comme i3, c'est plus simple).

Hihi, j'ai deux trains
Hihi, j'ai deux trains

À coup de ^C lorsque celle de gauche arrive vers le bord de la fenêtre, on peut les positionner de sorte qu'il semble que la locomotive passe d'une fenêtre à l'autre.

Magie
Magie

Allons plus loin.

PLUS de trains.

Ouvrons plus de terminaux.

Mais c'est que je commence à trouve ça drôle...
Mais c'est que je commence à trouver ça drôle…

We can go deeper

MWAHAHAHAHA
MWAHAHAHAHA

Et encore… Ouvrons plus de terminaux !

Mon dieu, mais qu'est-ce que je suis en train de faire de ma soirée
Mon dieu, mais qu'est-ce que je suis en train de faire de ma soirée

N'oublions pas que sl a aussi d'autres options :
- -a ajoute des personnages qui crient au secours
- -l affiche un différent type de train, plus petit.

Eh bien, combinons tout ça !

wtf
Qu'ai-je fait de ma vie ? Et pourquoi je trouve ça drôle ? Tant de questions sans réponse.

(Version vidéo)

Conclusion :
Les trains, c'est super.

Je laisse en exercice au lecteur le soin de faire la même chose avec sl -F (qui fait se déplacer le train dans la diagonale, rendant la synchronisation plus complexe, en mode tiling en tout cas). Pour ceux qui n'ont particulièrement rien à faire de leur soirée, ils peuvent tenter de faire passer la locomotive d'un écran à l'autre.

  • # Command not found

    Posté par (page perso) . Évalué à 5.

    À propos de sl, je trouve dommage que cet outil indispensable ne couvre qu'une erreur courante sur ls. Je me demande s'il serait possible de bricoler un truc pour appeler sl pour toutes les commandes inexistantes mais proches de commandes existantes, comme atp-get par exemple.

    • [^] # Re: Command not found

      Posté par (page perso) . Évalué à 2.

    • [^] # Re: Command not found

      Posté par (page perso) . Évalué à 1.

      Ça marche déjà avec LS :-)

    • [^] # Re: Command not found

      Posté par . Évalué à 4. Dernière modification le 05/06/15 à 14:34.

      Il y a des handlers dans bash et autres shell pour appeller une function quand la commande n'existe pas.

      command_not_found_handle() {
      [ -x /usr/bin/sl ] && /usr/bin/sl
      }
      Ceci devrait le faire dans ton .bashrc . Non tester.

      • [^] # Re: Command not found

        Posté par (page perso) . Évalué à 3.

        Certes, sauf que ça appellerait sl pour toutes les commandes inexistantes, or sl est à la base conçu pour sanctionner les faute de frappe. Par exemple, taper nc sur une machine ou netcat n'est pas installé, ce n'est pas une faute de frappe, contrairement à taper entcat par exemple.

        • [^] # Re: Command not found

          Posté par . Évalué à 7. Dernière modification le 05/06/15 à 15:36.

          command_not_found_handle() {
              case "$1" in
                  "cn" | "sl" | "entcat" | "blo" | "beer" | "1337" )
                      [ -x /usr/bin/sl ] && /usr/bin/sl
                      ;;
              esac
          }
          

          Bon, après on pourrait trouver une méthode pour rechercher le taux de ressemblance entre deux chaînes et ainsi pouvoir comparer la commande erronée avec les commandes existantes, mais ça devient lourd à faire et difficile à expliquer au chef même un vendredi.

        • [^] # Re: Command not found

          Posté par . Évalué à 2.

          Pour entcat il faudrait plutôt afficher un arbre qu'un train.

    • [^] # Re: Command not found

      Posté par (page perso) . Évalué à 10.

      Il y a Fuck pour ça.

      Commentaire sous licence LPRAB - http://sam.zoy.org/lprab/

  • # man hilarant

    Posté par . Évalué à 6.

    Hahaha, je ne connaissais pas et le man est très bon.
    Je plussois !

    • [^] # Re: man hilarant

      Posté par . Évalué à 6.

      % man hilarant
      No manual entry for hilarant
      

      é_è

  • # gif89a

    Posté par (page perso) . Évalué à 4.

    Prochain épisode : comment en faire des GIFs animées ?

    un xterm qui compte

    http://la.buvette.org/photos/myrys/g/animer_un_xterm.html

    * Ils vendront Usenet^W les boites noires quand on aura fini de les remplir.

    • [^] # Re: gif89a

      Posté par . Évalué à 4.

      Sous GNU/Linux (je précise car sur AIX par exemple c’est une toute autre commande…) il y a la commande watch, vachement pratique.

      http://www.thegeekstuff.com/2010/05/watch-command-examples/

      ça marche avec des fractions de seconde (ce n’est pas indiqué dans le lien il me semble).

    • [^] # Re: gif89a

      Posté par . Évalué à 3.

      Il y a aussi asciinema qui permet d’avoir une animation du texte en javascript (avec pause, copier/coller et compagnie).

  • # ça c'est du journél qui dénonce grave !

    Posté par . Évalué à 7.

    l'outil indispensable à installer sur toute sa prod !

    j'ai le souvenir d'une version Gentoo qui devait être patchée. le train était un train de marchandise de 3 locomotives et une vingtaine de wagons, qui mettait plus de 2 minutes à passer sans possibilité de faire un Ctrl+C
    bon je l'avais vite viré hein :)

  • # cowsay

    Posté par . Évalué à 10.

    C’est pas mal de mettre un écran qui affiche

     ________
    < Meuh ! >
     --------
            \   ^__^
             \  (oo)\_______
                (__)\       )\/\
                    ||----w |
                    ||     ||
    

    en face de l’écran où passe le train !

    • [^] # Re: cowsay

      Posté par (page perso) . Évalué à 3.

      Ça me rappel un first jeudi mythique à Nantes, où on avait passé la soirée, passablement (très très) arrosée à retourner la vache, et ensuite mis plusieurs vaches retournées, qui regardaient le train passer…
      Le plus gros fout-rire geek de ma vie

      « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: cowsay

        Posté par . Évalué à 2.

        Ça me rappel un first jeudi mythique à Nantes, où on avait passé la soirée, passablement (très très) arrosée à retourner la vache

        Je me suis sérieusement demandé ce qu’on pouvais faire avec cowsay, sl (que je ne connaissais pas et que je n’ai même pas eu encore le temps de tester) et des pipes Unix ou un utilitaire comme watch:)

        Tout ça c’est du folklore et je me méfie du folklore en général… cowsay et figlet c’est clairement des relicats d’une époque révolue où à part l’écran 60x80 caractères et l’imprimante à aiguilles il n’y avait rien… Le fait que ces programmes traversent le temps et soient toujours packagés dans toute bonne distribution, ça fait réfléchir…

        • [^] # Re: cowsay

          Posté par (page perso) . Évalué à 6.

          Je suis déçu que psdoom ne soit packagé nul part (peut-être qu'un jour j'aurai le courage de le faire moi-même).

        • [^] # Re: cowsay

          Posté par (page perso) . Évalué à 5.

          Encore un peu de folklore :

          bsdmainutils: /usr/bin/printerbanner
          et probablement un peu aussi la libcaca

          • [^] # Re: cowsay

            Posté par . Évalué à 3. Dernière modification le 06/06/15 à 12:50.

            Encore printerbanner et figlet on comprend facilement l’utilité, par contre sl et cowsay j’ai du mal à comprendre…

            • [^] # Re: cowsay

              Posté par (page perso) . Évalué à 4.

              Pour t'aider à comprendre :

              $ apt-get moo
                               (__) 
                               (oo) 
                         /------\/ 
                        / |    ||   
                       *  /\---/\ 
                          ~~   ~~   
              ..."Have you mooed today?"...
              
              $ for i in $(seq 1 6); do opt="${opt}v";aptitude -$opt moo ; done
              Il n'y a vraiment pas d'œufs de Pâques dans ce programme.
              Ne vous ai-je pas déjà dit qu'il n'y avait pas d'œufs de Pâques dans ce programme ?
              Arrêtez donc !
              D'accord, d'accord, si je vous donne un œuf de Pâques, vous en irez-vous ?
              D'accord, vous avez gagné.
              
                                             /----\
                                     -------/      \
                                    /               \
                                   /                |
                 -----------------/                  --------\
                 ----------------------------------------------
              Qu'est-ce que c'est ? C'est un éléphant qui se fait manger par un
              serpent, bien sûr.
              

              Et le tout récent :

              $ apt moo
                               (__) 
                               (oo) 
                         /------\/ 
                        / |    ||   
                       *  /\---/\ 
                          ~~   ~~   
              ..."Have you mooed today?"...
              

              Beaucoup plus clair maintenant non ?

              • [^] # Re: cowsay

                Posté par . Évalué à 3.

                Non ce n’est pas plus clair ! :)

                Du coup j’ai été me renseigner moi-même sur cowsay :

                Cowsay and Cowthink are written in the Perl programming language, and as such is easily adaptable to system tasks in Unix, such as telling users their home directories are full, they have new mail, etc.

                Cowsay

                J’aurais dû y penser… Vu qu’on peut créer ses propres cows on peut effectivement trouver tout plein d’usage à une époque où on faisait tout (ou presque) en mode texte :)

                • [^] # Re: cowsay

                  Posté par (page perso) . Évalué à 4.

                  export PROMPT_COMMAND=sl
                  export PS1="$(cowsay $USER@$HOSTNAME:$PWD)\n\e[0;32m#####################################\e[m$ "
                  

                  « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                  • [^] # Re: cowsay

                    Posté par . Évalué à 4.

                    Haha :)

                    Je me suis sérieusement demandé si je devrais pas mettre un fortune | cowsay dans mon PS1 :) Je crois que je vais essayer !

                    • [^] # Re: cowsay

                      Posté par . Évalué à 2.

                      Moi j'utilise ponysay plutôt que cowsay ^

                      bépo powered

                      • [^] # Re: cowsay

                        Posté par . Évalué à 3.

                        Là c’est too much ! ;)

                        Par contre je note le PS1 de l’exemple du site ponysay, c’est pas con de mettre le load average dans le prompt…

                        • [^] # Re: cowsay

                          Posté par (page perso) . Évalué à 3.

                          J'utilise liquidprompt qui n'affiche le load que s'il dépasse une limite. Je trouve ça mieux parce que ça décale le prompt et donc, c'est plus visible quand la limite est dépassée (même chose avec la batterie sur portable).

                          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                          • [^] # Re: cowsay

                            Posté par . Évalué à 4. Dernière modification le 06/06/15 à 19:46.

                            ça décale le prompt

                            Quand tu commences à faire des prompts tunning je crois que le mieux c’est de mettre un retour à la ligne juste avant le $

                            user@host:~ [mon prompt de la mort qui tue]
                            $

                            EDIT : Arf j’ai encore pas bien compris ta remarque avant d’y répondre… Oui en fait je vois ce que tu veux dire…

                  • [^] # Re: cowsay

                    Posté par . Évalué à 2.

                    le $PWD est évalué au moment de la création de la variable PS1… il vaut mieux mettre $(pwd) à la place.

  • # Merci

    Posté par . Évalué à 7.

    Merci.

  • # distributionnalisme primaire.

    Posté par . Évalué à 1. Dernière modification le 08/06/15 à 12:36.

    Bon, déjà, distributionnalisme est dans mon dictionnaire, c'est incroyable.

    Le point important : je vois cette news, je me dit : "chouette, ma productivité peu encore diminuer, c'est l'patron qui va être content." Je lance sl dans mon terminal et la : "bash: sl : commande introuvable"

    Autant vous dire que j'ai pleuré. Alors ma question est : quel distro sl ?

    PS : Bien sûr, distributionnalisme est ici détourné pour dénoncer un racisme envers des petites distributions.

  • # Version TGV

    Posté par . Évalué à 1.

    sl > tgv && while true; do cat tgv  ; done
    
  • # Plus de vaches

    Posté par (page perso) . Évalué à 3.

    Si cowsay n'est pas installé:

    #!/usr/bin/env perl
    
    # A simple clone of cowsay for when it's not in your repos
    # Copyright xaccrocheur@gmail.com
    # This software is GPL2
    
    use Text::Wrap;
    
    $num_args = $#ARGV + 1;
    
    if ($num_args != 1) {
        $WIDTH = 40;
    } else {
        $WIDTH = $ARGV[0];
    }
    
    $Text::Wrap::columns = $WIDTH;
    $Text::Wrap::unexpand = 0;
    $Text::Wrap::separator = "|$/";
    
    my $FORTUNE = `/usr/games/fortune -a`;
    
    chomp($FORTUNE);
    
    my $LINEWIDTH = $WIDTH - 1;
    
    my $TOP =  "\n " . '_' x $LINEWIDTH . "\n";
    my $BOTTOM =  "\n " . '-' x $LINEWIDTH . "\n";
    
    my $o = "oO";
    
    my $COW ="       \\   ^__^
            \\  ($o)\\_______
               (__)\\       )\\/\\
                    ||----w |
                    ||     ||
    ";
    
    my $text = wrap('/ ', '| ', $FORTUNE) . "\n";
    $text =~ s/(^.+)\K\|/' ' x ($Text::Wrap::columns - length($1) -1) . ' |'/gem;
    
    chop($text);
    
    print $TOP . $text . $BOTTOM . $COW;
    • [^] # Re: Plus de vaches (linuxfr version)

      Posté par (page perso) . Évalué à 3. Dernière modification le 20/06/15 à 18:09.

      #!/usr/bin/env perl
      
      # A simple clone of cowsay for when it's not in your repos
      
      use Text::Wrap;
      $WIDTH = 40;
      
      if ($#ARGV + 1 == 1) {
          if ($ARGV[0] eq "fortune") {
              $MOO = `/usr/games/fortune -a`;
          } elsif ($ARGV[0] eq "dlfp") {
              $MOO = `curl http://sam.linuxfr.org/random.txt 2>/dev/null`;
          } else {
              $MOO = $ARGV[0];
          }
      } else {
          $MOO = "I got nothing to moo";
      }
      
      $Text::Wrap::columns = $WIDTH;
      $Text::Wrap::unexpand = 0;
      $Text::Wrap::separator = "|$/";
      
      chomp($MOO);
      
      my $LINEWIDTH = $WIDTH - 1;
      my $TOP =  "\n " . '_' x $LINEWIDTH . "\n";
      my $BOTTOM =  "\n " . '-' x $LINEWIDTH . "\n";
      my $o = "oO";
      my $COW ="       \\   ^__^
              \\  ($o)\\_______
                 (__)\\       )\\/\\
                      ||----w |
                      ||     ||
      ";
      
      my $text = wrap('/ ', '| ', $MOO) . "\n";
      $text =~ s/(^.+)\K\|/' ' x ($Text::Wrap::columns - length($1) -1) . ' |'/gem;
      
      chop($text);
      
      print $TOP . $text . $BOTTOM . $COW;

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.