Le nouvel an pour les geeks
Vous réveillonnez chez vous avec vos amis. A l'approche de l'heure fatidique vous dites "on va allumer la TV pour écouter le compte à rebours". Mais 15 minutes avant l'heure fatidique, c'est le drame : coupure de courant dans tout le quartier. Et pas de chance votre GSM ne capte pas de signal.
Mais... Vous avez suivi l'API/casoft, vous êtes sous Linux, la batterie de votre PC portable est chargée à bloc, donc vous pouvez créer un script pour sauver le réveillon !
Question
Question
[Niveau Difficile. En bonus, si vous avez le temps, ~45 minutes] L'année prochaine, vous décidez de ne pas vous faire avoir, vous allez faire un script super génial qui en plus d'afficher l'heure toutes les secondes comme le précédent. Mais lorsqu'il ne reste plus que 10 secondes, va annoncer vocalement le compte à rebours en secondes, et arrivé à zéro dire "Happy new year !"
(pour pouvoir tester votre script, programmez le non pas pour faire le compte à rebours au nouvel an, mais au moment de votre choix)
Indice
Exemple de recherches internet utiles :
« seconds left to a date bash »
. Vous tombez sur un exemple que vous pouvez adapter https://stackoverflow.com/questions/27595758/linux-date-command-finding-seconds-to-next-hour« speech synthesizer linux terminal »
Concepts à utiliser :
Pour éviter que le synthétiseur vocal ne retarde l'exécution du script, il est possible de le lancer en arrière plan. Cherchez comment lancer une commande linux en arrière plan, et appliquez cela au synthétiseur vocal dans votre script
Conseils méthodologiques :
Séparez l'exercice en 2 problèmes distincts : l'affichage de la date que vous avez déjà réussi dans l'exercice précédent, et le compte à rebours vocal de 10 secondes. Vous pouvez faire et tester la fonction du compte à rebours vocal, avant de chercher à l'intégrer au bon moment dans le script.
Indice
Exemple de commande à utiliser :
date
sleep
espeak (ou un autre synthétiseur vocal)
Solution
# installez espeak pour que ce script fonctionne :
# apt install espeak
# fonction pour effectuer vocalement le compte a rebour final
function finalcountdown {
# dans cette boucle, la variable "COUNT" va prendre une valeur de 10 à 1 pour faire notre compte à rebours
for COUNT in {10..1} ; do
# lance le synthétiseur en arrière plan avec le chiffre et attend une seconde avant la prochaine itération
espeak "$COUNT" &
sleep 1
done
espeak "Happy new year"
}
# pour éviter de parler 2 fois, on crée une variable...
SHOULDSPEAK=1
while sleep 1 ; do
date
# nombre de secondes restantes avant le jour de l'an 2020
SECONDSLEFT="$(( $(date '+%s' -d '1 january 2021 00:00:00' ) - $(date '+%s') ))"
# dès qu'il reste moins de 10 seconde, si on a pas déjà parler
if (( $SECONDSLEFT <= 10 && $SHOULDSPEAK )) ; then
SHOULDSPEAK=0
# une fois que la boucle est terminée, lance le synthétiseur avec "happy new year"
# en arrière plan, pour que les dates continuent à s'afficher
finalcountdown &
fi
done