vendredi 4 décembre 2009

gcal : Éphémérides solaires

sunrise De nombreux sites existent permettant de trouver les heures de lever et de coucher du soleil. De même en cherchant 30s on trouve très facilement les calculs nous permettant de ré-implémenter l'algorithme. Mais plutôt que de réinventer la roue, nous allons utiliser le méconnu gcal pour trouver les heures cherchées. En fait, gcal n'est pas si méconnu que cela, mais on s'arrête souvent à  sa 1ère fonction : afficher un calendrier.

$ gcal

Décembre 2009

Lundi          7 14 21 28
Mardi       1  8 15 22 29
Mercredi    2  9 16 23 30
Jeudi       3 10 17 24 31
Vendredi    4 11 18 25
Samedi      5 12 19 26
Dimanche    6 13 20 27

Voir pour les plus courageux, calculer les jours de fête de l'an prochain :

$ gcal -qfr --holiday-list 2010
...
Liste permanente des jours de fête:       L'année 2010 N'EST PAS une année bissextile.

Jour de l'An (FR)                        + Ve,   1 Jan 2010
Quinquagesima Sunday (FR)                - Di,  14 Fé 2010
Vendredi Saint (FR)                      * Ve,   2 Avr 2010
Dimanche de Pà¢ques (FR)                 + Di,   4 Avr 2010
Lundi de Pà¢ques (FR)                    + Lu,   5 Avr 2010
Fête du Travail (FR)                    + Sa,   1 May 2010
Jour de la Victoire (FR)                 + Sa,   8 May 2010
Ascension du Christ (FR)                 + Je,  13 May 2010
Dimanche de la Pentecôte (FR)           + Di,  23 May 2010
Lundi de la Pentecôte (FR)              + Lu,  24 May 2010
Fête Nationale (FR)                     + Me,  14 Jui 2010
Ascension de la Vierge (FR)              + Di,  15 Aoà»t 2010
Toussaint (FR)                           + Lu,   1 Nov 2010
Jour de l'Armistice (FR)                 + Je,  11 Nov 2010
Veille de Noà«l (FR)                     - Ve,  24 Dé 2010
Fête de Noà«l (FR)                      + Sa,  25 Dé 2010
Boxing Day (FR)                          * Di,  26 Dé 2010
Sylvester/New Year's Eve (FR)            - Ve,  31 Dé 2010

Or il est bien encore plus puissant que cela ! La preuve ? a quelle heure se couche le soleil à  Paris aujourd'hui ?

$ gcal -c -#'0*d1#999_%s4+485124+0022107,+01:'

Fixed date list:

Je,   3 Dé 2009: 16:53

ne fuyez pas :) nous allons détailler. konsole

  • -c : passer en mode date fixe. C'est un mode qui permet d'associer du texte à  une date indépendamment de l'année, du mois ... Ces dates/textes sont définies dans des fichiers de ressources avec une syntaxe particulière. Typiquement, le 14 juillet ou un anniversaire seront définit ainsi.
  • -# : va nous permettre de définir une date fixe sans passer par un fichier de ressource, mais directement sur la ligne de commande.
  • 0*d1#999 : la, c'est la partie peu claire. normalement, ici on définit la date fixe suivant ce format. mais nous sommes dans un cas particulier, nous voulons que cette ligne de texte soit valable pour tous les jours de l'année (le soleil se couche tous les jours ![1]). Pour cela il faut utiliser cette chaine de caractères.
  • _ : cet underscore représente un espace séparateur entre la date et le texte associé
  • %s4+485124+0022107,+01: : voici la magie, cette chaine dit à  gcal de calculer des données en rapport avec le soleil :
    • s : coucher de soleil (o pour le lever)
    • 4 : calcul à  réaliser. Ici quand le centre du soleil passe à  34'[2] sous l'horizon et disparait. la réfraction est prise en compte.
    • +485124+0022107 : les coordonnées géographiques de Paris au format ISO 6709:1983 (voir aussi) soit :
      • +485124 : 48°51'24' N
      • +0022107 : 2°21'07'' E[3]
    • ,+01: : le décalage horaire par rapport à  l'UTC pour l'avoir en heure locale[4]

Et voila ! Vous voyez ce n'est pas si compliqué[5] !

Maintenant, on peut varier un peu les plaisirs :

$ C='+4844-0032715' # Lannion
$ TZ=$(date +%:z)
$ gcal %20091204 -cQUx -#"0*d1#999_%o4${C},${TZ}__-_%s4${C},${TZ}"
08:51 - 17:17

Demain, à  Lannion, le soleil sera visible de 8h51 à  17h17.

Ah oui, les nouvelles options :

  • C='+4844-0032715' : une variable qui contient nos coordonnées, j'aime pas écrire deux fois la même chose
  • TZ=$(date +%:z) : une variable qui contient le décalage heure locale/UTC soit +01:00. man date pour plus d'infos[6]$
  • %20091204 : permet de fixer la date du calcul
  • Q : on supprime l'affichage des lignes blanches
  • U : on supprime l'affichage de la date

Si l'on continue, on peut avoir les heures de la lune : moon

$ gcal %20091204 -cQUx -#"0*d1#999_%(4${C},${TZ}__-_%)4${C},${TZ}"
19:38 - 11:07

Les phases de lune

$ gcal %20091225 -cQUx -#"0*d1#999_%Z" --moonimage-lines=10
(je laisse la surprise)

Et plein d'autre choses encore comme --limit, --atmosphere les calculs de distances, de biorythme ...

Pour finir quelques liens :

Notes

[1] on verra les pôles plus tard

[2] des minutes d'arc bien sur !!

[3] Les coordonnées viennent de Wikipedia

[4] heure d'hiver: UTC+1

[5] et puis c'est moi qui ai passé les heures dans la doc pour trouver tous ces détails :)

[6] A noter, --time-offset devrait faire la même chose, mais je n'ai pas réussit, si quelqu'un a une explication ...


Commentaires du post original