-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpersonal-train-tracking.html
376 lines (365 loc) · 17.4 KB
/
personal-train-tracking.html
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
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2024-02-25 So 12:37 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>blog of uni</title>
<meta name="author" content="uni" />
<meta name="generator" content="Org Mode" />
<style>
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
</head>
<body>
<div id="content" class="content">
<h1 class="title">blog of uni</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org0b9b42c">1. semi-manual tracking where i’ve been - my workflow</a>
<ul>
<li><a href="#org7820abb">1.1. motivation</a></li>
<li><a href="#org6052f0c">1.2. things i have tried and abandoned</a></li>
<li><a href="#org320f0f5">1.3. what am i doing currently</a>
<ul>
<li><a href="#org8822767">1.3.1. when i go outside</a></li>
<li><a href="#orgd3cc523">1.3.2. public transport</a></li>
<li><a href="#orgfe45a6b">1.3.3. localities</a></li>
<li><a href="#org688ccde">1.3.4. metadata</a></li>
</ul>
</li>
<li><a href="#org857fa8c">1.4. use</a></li>
</ul>
</li>
<li><a href="#org965cc25">2. Update March 2023</a>
<ul>
<li><a href="#orgd691b4a">2.1. maps</a></li>
<li><a href="#orgd1a3513">2.2. public transport</a></li>
</ul>
</li>
<li><a href="#orgdfc5627">3. Update December 2023</a></li>
</ul>
</div>
</div>
<div id="outline-container-org0b9b42c" class="outline-2">
<h2 id="org0b9b42c"><span class="section-number-2">1.</span> semi-manual tracking where i’ve been - my workflow</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org7820abb" class="outline-3">
<h3 id="org7820abb"><span class="section-number-3">1.1.</span> motivation</h3>
<div class="outline-text-3" id="text-1-1">
<p>
Despite all odds, I do indeed go outside and touch grass, and counterintuitively I sometimes go even more outsider by going inside public transport, something that is actually viable over where I live.
Since I’m also almost unhealthily addicted to collect data about myself, I try to track
the roads and paths I’ve walked on as well as the train and bus stops I’ve visited, even the
routes inbetween.
</p>
</div>
</div>
<div id="outline-container-org6052f0c" class="outline-3">
<h3 id="org6052f0c"><span class="section-number-3">1.2.</span> things i have tried and abandoned</h3>
<div class="outline-text-3" id="text-1-2">
<ul class="org-ul">
<li>Google Maps My Places: I used that for train/bus stations for a while, but it’s arguably pretty horrible, you can only see a couple places at once and it’s just incredibly limited.</li>
<li><a href="https://umap.openstreetmap.de/en/">OpenStreetMap UMap</a>: Great interface honestly, especially with the styling features and all that. Used it for quite a while, but it’s just horrible insecure since there’s no way to
restrict people who can view your map, which combined with the 4-digit map IDs just doesn’t feel particularly safe for a map that makes it pretty easy to determine where I live and
the places I regularly visit.</li>
<li>GPS tracking only: While I use GPS tracking as an important step in tracking walked tracks,
it’s both to inaccurate and unreliable (well, at least my phone is) to suffice.</li>
<li><a href="https://gpx.studio/">gpx.studio:</a> Useful tool, especially the “street-matching” feature, but GPX is not made for long tracks that consist of segments accumulated over months or even years.</li>
<li>Mapbox custom maps: This is essentially yet another pretty well-done online GeoJSON editor, but since I only used it to track villages I’ve been to, I’ve moved the little data there was to local files.</li>
</ul>
</div>
</div>
<div id="outline-container-org320f0f5" class="outline-3">
<h3 id="org320f0f5"><span class="section-number-3">1.3.</span> what am i doing currently</h3>
<div class="outline-text-3" id="text-1-3">
<p>
In my Org main folder, there’s a subdirectory that contains four <a href="https://geojson.org/">GeoJSON</a> files: one for walked routes, one for bus data, one for train (which contains subways and trams) data, and one for
overall localities (“<a href="https://en.wikipedia.org/wiki/Ortschaft">Ortschaften</a>”) I’ve been to. This is more or less the place where all the magic happens.
</p>
</div>
<div id="outline-container-org8822767" class="outline-4">
<h4 id="org8822767"><span class="section-number-4">1.3.1.</span> when i go outside</h4>
<div class="outline-text-4" id="text-1-3-1">
<p>
When I’m walking somewhere I know (or at least think) I haven’t been to, I use the app <a href="https://play.google.com/store/apps/details?id=com.ilyabogdanovich.geotracker&hl=en&gl=US">Geo
Tracker</a><sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> to record my routes as GPX files. Once home, I retrace the
not-yet-visited parts on my currently preferred GeoJSON editor, <a href="https://geojson.io">geojson.io</a>, and once again save it, which makes for a pretty simple setup, I guess.
</p>
</div>
</div>
<div id="outline-container-orgd3cc523" class="outline-4">
<h4 id="orgd3cc523"><span class="section-number-4">1.3.2.</span> public transport</h4>
<div class="outline-text-4" id="text-1-3-2">
<p>
Since I live near Nuremberg, most of my transport activities take place within the <a href="https://www.vgn.de/">VGN (Verkehrsverbund Großraum Nürnberg)</a>, who in turn provide <a href="https://play.google.com/store/apps/details?id=com.mdv.VGNCompanion&hl=en&gl=US">their own app</a> for routing.
When I go somewhere new, I use the Share feature for their routes to post them to a certain
1-member telegram group. Once one of my computers and a network connection is in reach, I
use <a href="https://github.com/karlicoss/telegram2org">telegram2org</a> to add a task based on the route message into my org mode agenda,. Once again, my go-to editor for actually adding stops and routes is geojson.io. I add stops as points with a name tag, and add routes without any metadata. To avoid redundancy, multiple tracks close to another that are in some way part of the same route are only added once.
In order to figure out where I’ve been exactly, I use the “ÖPNVKarte” view of OpenStreetMap and retrace the routes from there <sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup>.
</p>
</div>
</div>
<div id="outline-container-orgfe45a6b" class="outline-4">
<h4 id="orgfe45a6b"><span class="section-number-4">1.3.3.</span> localities</h4>
<div class="outline-text-4" id="text-1-3-3">
<p>
This one’s pretty boring, I just add a point for each village or whatever to the file and tag it with the name and maybe a Wikidata ID.
</p>
</div>
</div>
<div id="outline-container-org688ccde" class="outline-4">
<h4 id="org688ccde"><span class="section-number-4">1.3.4.</span> metadata</h4>
<div class="outline-text-4" id="text-1-3-4">
<p>
I’ve got another <a href="calcLength.html">literate org file</a> with python source blocks that use the <a href="https://pypi.org/project/geojson/">GeoJSON library</a> as well as <a href="https://pypi.org/project/geojson-length/">GeoJSON-length</a> to compute some metadata, in particular the combined lengths of the routes I’ve walked, as well as the number of train and bus stations which I usually update after adding new data.
</p>
</div>
</div>
</div>
<div id="outline-container-org857fa8c" class="outline-3">
<h3 id="org857fa8c"><span class="section-number-3">1.4.</span> use</h3>
<div class="outline-text-3" id="text-1-4">
<p>
There is none, honestly, it’s just another fun little thing to track, maybe it’s inspiring or something but that’s not really the point to me so far.
</p>
</div>
</div>
</div>
<div id="outline-container-org965cc25" class="outline-2">
<h2 id="org965cc25"><span class="section-number-2">2.</span> Update March 2023</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-orgd691b4a" class="outline-3">
<h3 id="orgd691b4a"><span class="section-number-3">2.1.</span> maps</h3>
<div class="outline-text-3" id="text-2-1">
<p>
A while ago, I figured out how to change privacy settings in UMap, so I’ve
switched back to that service, since it provides way more display and editing capabilities.
However, I still keep the files downloaded in order to run processing on them, since the individual layers
are still available from a single cURL command (even without authentification - doesn’t seem all that
secure either, but it’s way less problematic than the full maps).
</p>
</div>
</div>
<div id="outline-container-orgd1a3513" class="outline-3">
<h3 id="orgd1a3513"><span class="section-number-3">2.2.</span> public transport</h3>
<div class="outline-text-3" id="text-2-2">
<p>
I have also startd to use <a href="https://traewelling.de">Träwelling</a>, which allows you to track your rides in more detail and simplifies
the process of reconstructing routes a decent bit.
</p>
</div>
</div>
</div>
<div id="outline-container-orgdfc5627" class="outline-2">
<h2 id="orgdfc5627"><span class="section-number-2">3.</span> Update December 2023</h2>
<div class="outline-text-2" id="text-3">
<p>
Now I use <a href="https://travelynx.de">Travelynx</a> instead due to better integration with a discord bot and also record routes via OSMAnd instead of the other GPS tracker.
</p>
</div>
</div>
<div id="footnotes">
<h2 class="footnotes">Footnotes: </h2>
<div id="text-footnotes">
<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
I actually subscribed to the premium version - the app is probably the best GPS tracker I know of, and the OSM/Mapbox background map is definitely 70 cents a month.
</p></div></div>
<div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
There might be a way to automate this, but I really don’t
think it’s worth the time honestly.
</p></div></div>
</div>
</div></div>
<div id="postamble" class="status">
<p class="author">Author: uni</p>
<p class="date">Created: 2024-02-25 So 12:37</p>
</div>
</body>
</html>