summaryrefslogtreecommitdiff
path: root/JSTchouTchou.txt
blob: 9d33f5a9e83a61940862deb29d42517cfae6dd9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
Titre: JSTchouTchou
Auteur: Bruno
Date: Sat 30 Nov 2013 01:10:04 +0100
Lien: https://blog.spyou.org/wordpress-mu/2013/11/30/jstchoutchou/
URL de téléchargement de Podcast: http://www.raildar.fr/videos/2013-12-12.mp4

[image 2][2]Les activités professionnelles et associatives m’empêchent de 
continuer à alimenter ce blog de manière régulière, mais ça reviendra bien un 
jour, la preuve, une lubie m’a pris le weekend dernier à propos de l’opendata. 
Suite à un article de l’ami Hervé sur abavala.com[3] ou il expliquait avoir 
parsé les résultats des sites d’info de la SNCF avec une page Google, je me 
suis dit que c’était bien faisable en direct sans passer par nos amis 
américains.

Du coup j’ai dégainé mon plus beau vim et j’ai pissé du perl. Et de fil en 
aiguille, j’en suis arrivé à une carte dynamique de la circulation prenant en 
compte les retards annoncés par la SNCF en (presque) temps réel.

Vous pouvez jouer un peu avec l’outil ici[4].

Vous le remarquerez rapidement, en dehors de la proximité immédiate des gares, 
les trains ne circulent pas sur les voies quand la position indiquée sur 
l’infobulle est marquée « extrapolée » : la problématique est de savoir comment
les positionner précisément sur les voies sans avoir de GPS embarqué. Du coup, 
j’ai pondu aussi pas mal de javascript pour pouvoir associer un trajet en train
avec la géolocalisation d’un mobile. Tout le monde peut participer, il suffit 
de cliquer sur « play » et de sélectionner sa gare et son train avant de monter
dedans.

Vous me direz que les voies sont déjà bien documentées, oui, mais aucun de ces 
descriptifs ne fait le lien avec les trains eux-même, du coup, pas facile de 
savoir pas ou passent les trains entre deux gares.

Histoire de ne pas saturer infolignes et me faire virer comme un malpropre, je 
n’ai pas inclus la totalité des missions nationales dans mes scripts, mais vous
pouvez me demander l’ajout d’un train ou d’une ligne entière sans trop de 
soucis. Je tâcherais de faire en sorte que vous puissiez ajouter de nouveaux 
numéros de circulation en live bientôt.

Il y a quelques bugs :

  * Une partie des échanges avec l’appli se fait via des popups, désactivés par
    défaut dans le navigateur standard sur android
  * La géolocalisation sur autre chose qu’un android ou un iOS a parfois du mal
    à passer comme il faut
  * Certaines gares ne sont pas bien positionnées
  * Il n’y a pas de bouton pour fermer les popups, il faut cliquer dans la 
    partie grisée de l’interface

J’ai ajouté un système de discussion sommaire (« chat » en haut à droite)

Mise à jour du 5 décembre 2013

Pas mal de modification dans l’appli depuis une semaine. En vrac :

  * Changement du système d’approvisionnement : je me basais sur une liste de 
    numéro de circulation des trains faite à la mimine, plutôt fastidieux, puis
    j’allais demander pour chaque trains, sur infolignes, s’il circulait ou pas
    le jour J. En épluchant le portail opendata de la SNCF je suis tombé sur 
    l’API « micro-service » permettant de récolter une quantité colossale 
    d’information théoriques sur les trains. Du coup, j’alimente maintenant ma 
    base chaque nuit pour le lendemain avec la totalité des TER et Intercités 
    circulant dans un nombre de gares données. Je parse ensuite le site 
    infolignes pour chaque train autour de son heure théorique de circulation 
    pour déterminer s’il est en retard ou pas. Je n’ai pas encore mis toutes 
    les gares de france mais ça viendra bien, vu que l’application se comporte 
    globalement assez bien avec la charge (2200 trains quotidiens au moment ou 
    j’écris ces lignes)
  * Passage de la génération du listing de trains en circulation sur un fichier
    statique généré toutes les 10 secondes. Il était fait à la volée avant, 
    c’était gérable pour une cinquantaine de trains et 2 ou 3 visiteurs mais 
    pas plus.
  * Délégation des missions de téléchargement du fichier XML et d’upload des 
    coordonnées GPS à des worker web permettant de s’assurer que le bout de 
    code javascript principal se concentre sur le relevé de position GPS pour 
    éviter d’avoir des trajets discontinu.
  * Changement de la méthode de gestion des trains sur la carte : je vidais 
    entièrement la carte et repositionnait de nouveau les trains. Maintenant, 
    les nouveaux sont ajoutés 15 minutes avant le départ à leur gare d’origine,
    puis se déplacent sans recréation et disparaissent à leur gare d’arrivée.
  * Je me suis pris un p’tit nom de domaine histoire de pas me prendre un 
    procès pour utilisation non autorisée de la marque SNCF dans l’URL.
  * Modification du comportement : lorsqu’on clique sur « Play » on ne voit 
    plus que le train dans lequel on est et sa propre position. C’est d’une 
    part pour donner un peu d’animation toute seule, d’autre part pour 
    décharger les smartphone du traitement de l’ensemble des trains pendant 
    qu’ils s’occupent de faire des relevés GPS

Côté possibilités offertes, deux appels XML qui peuvent vous intéresser 
(méthodes obsolètes. Voir le wiki du projet[5]):

  * http://www.raildar.fr/xml/map_generic qui vous retourne l’ensemble des 
    trains en circulation actuellement avec leur coordonnées GPS
  * http://www.raildar.fr/xml/gares qui vous renvoi l’ensemble des gares que 
    j’ai en base avec les coordonnées et la possibilité de restreindre la 
    selection en ajoutant ?name=nom_exact ou bien ?search=nom_partiel

Je prépare quelques autres API pour accéder facilement au reste des infos. Stay
tuned ! :)

Je profite de cette mise à jour pour vous rappeler que le gros intérêt de la 
chose est aussi de documenter les segment ferroviaires utilisés par notre amie 
SNCF en effectuant des relevés GPS pour placer les trains très précisément sur 
la carte. Il suffit, pour ça :

  * de vérifier que votre ligne est couverte par raildar.fr en observant la 
    carte, et de me demander si ce n’est pas le cas
  * au moment de monter dans le train, d’autoriser le site à vous géolocaliser 
    et d’activer le GPS dans votre smartphone
  * de cliquer sur « play » en haut à gauche, de sélectionner votre gare puis 
    votre train
  * de profiter du paysage en laissant votre smartphone allumé et sur le site
  * d’avoir une batterie bien pleine ou une alimentation externe si vous avez 
    un long trajet
  * de me jeter un petit mail une fois arrivé, que j’aille voir ce que donne 
    votre trace GPS pour la valider
  * vous pouvez aussi utiliser votre soft GPS favori et m’envoyer une trace au 
    format GPX

Si vous êtes développeur iphone ou android et que porter raildar.fr sur ces 
plateformes vous botte, faites moi signe ! :)

Mise à jour du 9 décembre 2013

Encore quelques bricoles :

  * Quelques correction de bug sur le point indiquant votre position
  * Stockage de l’altitude, de la vitesse et de la direction lors de 
    l’acquisition GPS si le terminal le supporte
  * Une carte des gares en base, avec les coordonnées corrigées par mes soins 
    et ceux de madame (oui, la base « opendata » de gares SNCF a des 
    coordonnées moisies pour pas loin de 80 gares, ou alors n’utilise pas les 
    référentiels communs). Visible ici[6].
  * Une carte des traces GPS validée en base. Visible ici[7]. (attention, il 
    vaut mieux avoir un CPU bien accroché)
  * Un petit service web pour vous permettre d’entrer vos gares préférées et 
    d’avoir tout de suite l’info sur les prochains trains et leurs retards. 
    C’est ici[8]. C’est surtout fait pour les mobiles. Le navigateur garde une 
    ID unique permettant de retrouver les gares, donc si vous changez 
    d’ordinateur ou de smartphone, il faut les réindiquer.

Mise à jour du 13 décembre 2013

Je continue doucement, en explorant pas mal de pistes :

  * J’ai joué un peu avec phantomJS, un outil qui permet en gros de créer un 
    navigateur virtuel et prendre des screenshot de site web de façon 
    automatique et ultra simple. Je doutais très fortement qu’il sache gérer la
    cohorte de javascript de raildar, mais il se démerde très bien, et du coup,
    chaque soir, une vidéo de la journée est dispo dans 
    http://www.raildar.fr/videos/date-du-jour.mp4, par exemple, pour la grève 
    d’hier, http://www.raildar.fr/videos/2013-12-12.mp4[9]
  * Un illuminé comme moi a démarré le développement d’une appli android qui se
    base sur mes API pour faire en gros la même chose que le site web. Longue 
    vie !
  * J’ai commencé à réécrire l’ensemble du code server-side pour utiliser le 
    framework Mojolicious et, enfin, développer comme les djeunz avec un fw, un
    dépôt git et compagnie.
  * J’ai entamé aussi un widget permettant de selectionner la visualisation 
    partielle des trains (genre tous les supprimés, tous les en retard, …) et 
    je vais profiter de la réécriture pour ne charger que les trains 
    correspondant au zoom utilisé sur le navigateur de l’utilisateur et activer
    les fonctions de tracking d’un train en dehors du mode « play »
  * Toujours au chapitre réecriture, c’est aussi l’occasion de rendre l’engin 
    modulaire pour y brancher de nouvelles sources de données. L’équipe 
    opendata de Toulouse m’a fourni une clé d’API pour le réseau Tisséo, ce 
    sera donc le premier a gouter du raildar après la SNCF
  * Last but not least, la waybackmachine est utilisable, par exemple avec 
    http://www.raildar.fr/?date=1386867785[10]. Le premier chargement d’un 
    timestamp est un peu long, mais après, ça va tout seul. Notez que je dis 
    wayback, mais ça marche aussi dans le futur, pour l’instant uniquement avec
    le lendemain. Pour bouger dans le temps, entrer un nouveau timestamp dans 
    l’URL ou bien cliquez sur les boutons « +2 / -2″ sur le coté. Si à cette 
    occasion vous trouvez des trains qui bougent trop vite pour être réels, 
    vous avez probablement trouvé une gare mal placée, je suis preneur du 
    numéro du train et du timestamp utilisé.

Bon weekend les enfants !

Mise à jour du 16 décembre 2013

J’ai passé un bon bout du weekend à recoder les fonctions principales de 
raildar pour utiliser un joli framework perl (Mojolicious) et me simplifier la 
vie et les développements futurs. Rien de changé coté interface utilisateur, 
mais un code plus light et plus rapide coté serveur.

Du coup, j’ai changé la moulinette d’acquisition des trains pour tous les 
récupérer, d’ou une nette augmentation du peuplement de la carte.

Au chapitre nouveautés également :

  * Un graph du trafic dispo ici[11] et en bas à droite de l’interface avec un 
    joli bug de positionnement du popup
  * Une API pour trouver des gares en fonction de la latitude et de la 
    longitude d’un point donné : 
    http://www.raildar.fr/xml/gares?lat=45.888&lng=4.8041&dist=20&limit=10 
    (avec latitude, longitude, distance max depuis ce point et nombre 
    d’éléments retournés)
  * Une déclinaison de cette même API qui permet d’avoir toutes les gares (si 
    on ne spécifie aucun argument) et les gares contenant une chaîne avec 
    ?search=chaine
  * Une API pour trouver les prochains trains dans une gare donnée : 
    http://www.raildar.fr/xml/next_missions?id_gare=1747&time_dist=450 (avec 
    id_gare retourné par l’API précédente et time_dist le nombre de minutes)
  * Une API pour avoir le détail d’un train : 
    http://www.raildar.fr/xml/get_mission?id_mission=40926 (avec id_mission 
    retourné par l’API précédente)

Have fnu !

Mise à jour du 21 décembre 2013

Quelqu’un m’a envoyé une belle trace GPS d’un parcours de TGV mais je ne gérais
pas les TGV. Qu’à cela ne tienne, je me suis creusé un peu la tête. La 
problématique pour les TGV est de connaitre les numéros de trains. 
Contrairement aux TER & Intercités, on ne les trouve pas dans les API opendata 
SNCF. J’ai pris le parti de me baser sur ce qu’annonce le site 
Gares-En-Mouvement, soit le tableau des prochains trains dans chaque gares

J’ai donc écris un nouveau parser qui vire les TER, Car et autres idioties de 
ces tableaux et ne garde que ce qui m’intéresse, c’est à dire tout le reste : 
TGV, idTGV, Lyria, Thalys, Eurostar, etc. Je vais laisser tourner cette 
moulinette une petite semaine le temps de récupérer tous les numéros de trains.

Ensuite, je retourne voir mon copain infoligne avec ces numéros pour lui 
demander si le train est prévu en circulation demain, et le reste suit le même 
parcours technique que pour les autres trains.

Reste un tout petit bémol : infolignes ne donne pas les infos sur les 
circulation des Eurostar. Si quelqu’un a une source, je suis preneur :)

Bon weekend et noyeux zoël !

Raildar, la suite

Je ne peux plus continuer à mettre des updates ici. Vous êtes donc cordialement
invités à vous rendre sur le wiki du projet[12] si vous voulez suivre ! :)

Liens:
[1]: http://blog.spyou.org/wordpress-mu/files/2013/11/20131129_213814-e1385769933774.jpg (lien)
[2]: http://blog.spyou.org/wordpress-mu/files/2013/11/20131129_213814-e1385769933774-300x225.jpg (image)
[3]: http://www.abavala.com/ (lien)
[4]: http://www.raildar.fr/ (lien)
[5]: http://wiki.raildar.fr/index.php/API (lien)
[6]: http://www.raildar.fr/static/show_gares.html (lien)
[7]: http://www.raildar.fr/static/show_paths.html (lien)
[8]: http://www.raildar.fr/me/ (lien)
[9]: http://www.raildar.fr/videos/2013-12-12.mp4 (lien)
[10]: http://www.raildar.fr/?date=1386867785 (lien)
[11]: http://www.raildar.fr/tools/rrd_circulation (lien)
[12]: http://wiki.raildar.fr/ (lien)