# Comment j'ai perdu un ami 2024-03-06T09:43:22Z Voici le récit de comment j'ai perdu mon meilleur ami. Tout commence le jour où nos avis divergent sur une oeuvre majeure. Lui passionné de cinéma, moi du roman original. Impossible de se mettre d'accord, ses souvenirs de l'oeuvre initiale sont remplacés par les images du film tandis que je n'arrive pas à me défaire de mon admiration pour le livre. Et puis avouons-le, on s'amuse bien à se chicaner. En parallèle, il se trouve que quelqu'un d'adorable m'a trouvé le texte original au format numérique. Je pensais en faire un générateur de mots de passe, mais soudain, le diable me susurre à l'oreille. Comme on dit, pas besoin d'ennemis avec des amis pareils. Je commence par activer le mode débogage de mon téléphone. Avec le câble USB, ça marche mal, mais en WiFi, c'est nickel: ``` adb pair 192.168.1.40:xxxxx adb connect 192.168.1.40:zzzzz ``` Quelques tests suivent, je trouve alors comment envoyer un SMS: ``` #!/bin/sh tel="+33xxxxxxxxxxx" msg="$(printf "%s" "$*" | sed -e 's/\x27/’/g')" adb shell service call isms 5 i32 1 s16 "com.android.mms.service" s16 "null" s16 "$tel" s16 "null" s16 "'${msg}'" s16 "null" s16 "null" i32 1 i32 0 ``` Le message est entre single quotes. Obligé, sinon il faut échapper tous les espaces. De même, je remplace le single quote par une apostrophe avec sed, ça évite de mettre le bazar dans le paramètre de la commande utilisée. Tout est prêt, reste à envoyer le contenu du livre, ligne après ligne. Cependant, les trop longs messages ne partent pas, il y a une limite à la taille d'un SMS, et je n'ai pas trouvé comment en faire un MMS. Alors, on appelle ''fold'' pour limiter une ligne à 70 caractères. On pourrait plus, mais à condition de n'utiliser que des caractères ASCII. ``` fold -s -w 70 book.txt > book-folded.txt ``` J'envoie maintenant les lignes une à unes: ``` #!/bin/sh -e book=~/book/book-folded.txt tel="+33xxxxxxxxx" # warning : lines must be 70 char max long while [ $(awk 'END {print NR}' $book) -ne 0 ]; do # get the line and replace quotes with apostrophes l="$(sed -n '1p' $book | sed -e 's/\x27/’/g')" # wait as many seconds as there are chars / 4 n=$(($(printf "%s" "${l}" | awk '{print length($0)}') / 4)) # send sms printf "%s [%s]\n" "$l" "$n" adb shell service call isms 5 i32 1 s16 "com.android.mms.service" s16 "null" s16 "$tel" s16 "null" s16 "'${l}'" s16 "null" s16 "null" i32 1 i32 0 # delete line sed -i '1d' $book sleep $n done ``` En supprimant les lignes au fur et à mesure, on peut arrêter et reprendre quand on veut. Il y a des limites contre les spams, et c'est très bien comme ça. Il vaut donc mieux garder le délai entre chaque message. J'ai dans le script considéré qu'il faut 0.25s pour écrire un caractère. Ne faîtes pas ça chez vous :) --- Une réaction? Envoyez votre commentaire par mail (votre adresse mail sera retirée des entêtes cachée): => mailto:bla@bla.si3t.ch?subject=comment-j-ai-perdu-un-ami Voici quelques instructions pour utiliser la liste de diffusion et recevoir les réponses à vos messages: => /log/_commentaires_.txt