summaryrefslogtreecommitdiffstats
path: root/2021/captions/dashboard.md
blob: 71d332f372f254bbbbf5feb2bde2f91573ab0625 (plain) (blame)
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
<a name="transcript"></a>
# Transcript

[[!template text="Hi everyone! I'm Mehmet Tekman," start="00:00:00.000" video="mainVideo" id=subtitle]]
[[!template text="and I'm here to talk to you" start="00:00:01.567" video="mainVideo" id=subtitle]]
[[!template text="about using Amazon Kindles" start="00:00:02.483" video="mainVideo" id=subtitle]]
[[!template text="as a productivity dashboard for" start="00:00:03.700" video="mainVideo" id=subtitle]]
[[!template text="your various projects." start="00:00:05.040" video="mainVideo" id=subtitle]]
[[!template text="In a nutshell, you describe your machines," start="00:00:07.359" video="mainVideo" id=subtitle]]
[[!template text="your commands, and your schedules" start="00:00:09.519" video="mainVideo" id=subtitle]]
[[!template text="in an Org-Mode file," start="00:00:11.317" video="mainVideo" id=subtitle]]
[[!template text="and then you just initialize" start="00:00:13.120" video="mainVideo" id=subtitle]]
[[!template text="your Kindle devices." start="00:00:14.933" video="mainVideo" id=subtitle]]
[[!template text="These devices are asleep" start="00:00:16.960" video="mainVideo" id=subtitle]]
[[!template text="most of the time," start="00:00:18.367" video="mainVideo" id=subtitle]]
[[!template text="but they wake up at scheduled times" start="00:00:19.117" video="mainVideo" id=subtitle]]
[[!template text="to retrieve content" start="00:00:20.720" video="mainVideo" id=subtitle]]
[[!template text="from the centralized server." start="00:00:22.033" video="mainVideo" id=subtitle]]
[[!template text="Content can be Org mode and Emacs-based," start="00:00:24.800" video="mainVideo" id=subtitle]]
[[!template text="or it can be from Web content," start="00:00:27.599" video="mainVideo" id=subtitle]]
[[!template text="or it can just be static images and WAV." start="00:00:29.500" video="mainVideo" id=subtitle]]
[[!template text="If you, like me, struggle to" start="00:00:42.840" video="mainVideo" id=subtitle]]
[[!template text="keep your life under tabs," start="00:00:45.600" video="mainVideo" id=subtitle]]
[[!template text="or find it very hard to separate" start="00:00:46.833" video="mainVideo" id=subtitle]]
[[!template text="your work life from your home life," start="00:00:48.300" video="mainVideo" id=subtitle]]
[[!template text="then you, like me, likely need" start="00:00:49.417" video="mainVideo" id=subtitle]]
[[!template text="some kind of passive background service" start="00:00:51.283" video="mainVideo" id=subtitle]]
[[!template text="that reminds you of where you are" start="00:00:52.917" video="mainVideo" id=subtitle]]
[[!template text="and what you are supposed to be doing." start="00:00:54.083" video="mainVideo" id=subtitle]]
[[!template text="Even if it's just a sign saying," start="00:00:55.267" video="mainVideo" id=subtitle]]
[[!template text="&quot;You're at home! Relax!&quot;" start="00:00:56.960" video="mainVideo" id=subtitle]]
[[!template text="An Amazon Kindle is perfect for this." start="00:00:58.640" video="mainVideo" id=subtitle]]
[[!template text="In a nutshell, it's a cheap" start="00:01:00.400" video="mainVideo" id=subtitle]]
[[!template text="black and white e-ink device" start="00:01:01.717" video="mainVideo" id=subtitle]]
[[!template text="that can go for weeks" start="00:01:03.117" video="mainVideo" id=subtitle]]
[[!template text="without needing a single charge." start="00:01:03.800" video="mainVideo" id=subtitle]]
[[!template text="Every year, Amazon brings out" start="00:01:05.033" video="mainVideo" id=subtitle]]
[[!template text="an incrementally better model," start="00:01:06.767" video="mainVideo" id=subtitle]]
[[!template text="which makes the old devices obsolete," start="00:01:07.983" video="mainVideo" id=subtitle]]
[[!template text="and you can find these older models" start="00:01:09.333" video="mainVideo" id=subtitle]]
[[!template text="for 5 euros on second-hand websites." start="00:01:11.067" video="mainVideo" id=subtitle]]
[[!template text="Plus it runs Linux, has WiFi networking," start="00:01:13.360" video="mainVideo" id=subtitle]]
[[!template text="and has a dedicated forum of hackers" start="00:01:15.360" video="mainVideo" id=subtitle]]
[[!template text="for getting the most out of the device." start="00:01:16.987" video="mainVideo" id=subtitle]]
[[!template text="Some drawbacks of this is that" start="00:01:19.200" video="mainVideo" id=subtitle]]
[[!template text="the device often comes with unwanted bloat:" start="00:01:20.366" video="mainVideo" id=subtitle]]
[[!template text="over-the-air updates," start="00:01:22.799" video="mainVideo" id=subtitle]]
[[!template text="it phones home to Amazon regularly," start="00:01:24.050" video="mainVideo" id=subtitle]]
[[!template text="it has a secret microphone" start="00:01:25.833" video="mainVideo" id=subtitle]]
[[!template text="embedded in the device," start="00:01:27.033" video="mainVideo" id=subtitle]]
[[!template text="and it has a bunch of creepy" start="00:01:27.983" video="mainVideo" id=subtitle]]
[[!template text="seemingly interdependent" start="00:01:29.433" video="mainVideo" id=subtitle]]
[[!template text="background processes," start="00:01:30.633" video="mainVideo" id=subtitle]]
[[!template text="where killing one kind of kills the others" start="00:01:31.439" video="mainVideo" id=subtitle]]
[[!template text="risking that you will break the device." start="00:01:34.083" video="mainVideo" id=subtitle]]
[[!template text="But this is where the community" start="00:01:36.560" video="mainVideo" id=subtitle]]
[[!template text="really shines through," start="00:01:37.799" video="mainVideo" id=subtitle]]
[[!template text="since the friendly (and not-so-friendly)" start="00:01:38.883" video="mainVideo" id=subtitle]]
[[!template text="users (and developers)" start="00:01:40.483" video="mainVideo" id=subtitle]]
[[!template text="from the MobileRead forums have pretty much" start="00:01:41.583" video="mainVideo" id=subtitle]]
[[!template text="scraped out a good portion of the" start="00:01:43.200" video="mainVideo" id=subtitle]]
[[!template text="harmful Amazon scripts from the device." start="00:01:44.560" video="mainVideo" id=subtitle]]
[[!template text="Some of the devices even use" start="00:01:46.960" video="mainVideo" id=subtitle]]
[[!template text="Awesome Window Manager," start="00:01:48.550" video="mainVideo" id=subtitle]]
[[!template text="meaning you can really play around" start="00:01:49.483" video="mainVideo" id=subtitle]]
[[!template text="with the existing system" start="00:01:50.800" video="mainVideo" id=subtitle]]
[[!template text="without having to create" start="00:01:51.620" video="mainVideo" id=subtitle]]
[[!template text="your own X11 server." start="00:01:52.633" video="mainVideo" id=subtitle]]
[[!template text="This then empowers users" start="00:01:54.233" video="mainVideo" id=subtitle]]
[[!template text="to display whatever they want on the device." start="00:01:55.377" video="mainVideo" id=subtitle]]
[[!template text="One project that really got this going" start="00:01:57.600" video="mainVideo" id=subtitle]]
[[!template text="was the Kindle-Dash dashboard from" start="00:01:59.040" video="mainVideo" id=subtitle]]
[[!template text="Pascal Widdershoven, who really refined a" start="00:02:00.560" video="mainVideo" id=subtitle]]
[[!template text="lot of the internal scripts" start="00:02:02.320" video="mainVideo" id=subtitle]]
[[!template text="to stabilize the device." start="00:02:03.483" video="mainVideo" id=subtitle]]
[[!template text="However, the project then" start="00:02:05.439" video="mainVideo" id=subtitle]]
[[!template text="puts the onus on the device" start="00:02:06.600" video="mainVideo" id=subtitle]]
[[!template text="to retrieve the data from" start="00:02:07.650" video="mainVideo" id=subtitle]]
[[!template text="somewhere else over the internet," start="00:02:08.560" video="mainVideo" id=subtitle]]
[[!template text="and so you still need to" start="00:02:09.950" video="mainVideo" id=subtitle]]
[[!template text="generate the content" start="00:02:10.753" video="mainVideo" id=subtitle]]
[[!template text="and place it on the web somewhere." start="00:02:11.440" video="mainVideo" id=subtitle]]
[[!template text="Plus you need to do this and manage it" start="00:02:13.200" video="mainVideo" id=subtitle]]
[[!template text="for every Kindle device that you have." start="00:02:14.640" video="mainVideo" id=subtitle]]
[[!template text="Kindle-Sync, however," start="00:02:17.360" video="mainVideo" id=subtitle]]
[[!template text="is an entirely different beast," start="00:02:18.500" video="mainVideo" id=subtitle]]
[[!template text="albeit one that builds off of the works" start="00:02:19.867" video="mainVideo" id=subtitle]]
[[!template text="of the aforementioned projects." start="00:02:21.800" video="mainVideo" id=subtitle]]
[[!template text="It assumes that instead of just having" start="00:02:23.440" video="mainVideo" id=subtitle]]
[[!template text="one Kindle device around" start="00:02:24.800" video="mainVideo" id=subtitle]]
[[!template text="that you wish to re-purpose" start="00:02:26.050" video="mainVideo" id=subtitle]]
[[!template text="for productivity purposes," start="00:02:27.133" video="mainVideo" id=subtitle]]
[[!template text="that you actually have" start="00:02:28.080" video="mainVideo" id=subtitle]]
[[!template text="multiple Kindle devices" start="00:02:28.983" video="mainVideo" id=subtitle]]
[[!template text="that you want to manage" start="00:02:30.117" video="mainVideo" id=subtitle]]
[[!template text="and configure in tandem." start="00:02:30.794" video="mainVideo" id=subtitle]]
[[!template text="Everything is managed" start="00:02:32.720" video="mainVideo" id=subtitle]]
[[!template text="from a dedicated server (or a raspberry pi)" start="00:02:33.633" video="mainVideo" id=subtitle]]
[[!template text="which distributes jobs to multiple Kindles," start="00:02:35.667" video="mainVideo" id=subtitle]]
[[!template text="running on different update timers." start="00:02:37.440" video="mainVideo" id=subtitle]]
[[!template text="These timers are all managed" start="00:02:39.519" video="mainVideo" id=subtitle]]
[[!template text="from the server," start="00:02:40.786" video="mainVideo" id=subtitle]]
[[!template text="and all the Kindle device has to do is:" start="00:02:41.486" video="mainVideo" id=subtitle]]
[[!template text="to wake up, power on the WiFi," start="00:02:43.017" video="mainVideo" id=subtitle]]
[[!template text="receive some media, display the media, and" start="00:02:45.200" video="mainVideo" id=subtitle]]
[[!template text="receive a barebones RTC sleep request." start="00:02:47.280" video="mainVideo" id=subtitle]]
[[!template text="Then it sleeps for the requested time," start="00:02:49.680" video="mainVideo" id=subtitle]]
[[!template text="consuming no power, whilst displaying the" start="00:02:51.040" video="mainVideo" id=subtitle]]
[[!template text="desired media. That is maybe 10 seconds" start="00:02:52.800" video="mainVideo" id=subtitle]]
[[!template text="of awake time between each request." start="00:02:55.200" video="mainVideo" id=subtitle]]
[[!template text="Cron does not actually run" start="00:02:57.599" video="mainVideo" id=subtitle]]
[[!template text="on the Kindle device itself," start="00:02:58.933" video="mainVideo" id=subtitle]]
[[!template text="simply because it does not reliably work." start="00:02:59.933" video="mainVideo" id=subtitle]]
[[!template text="All of this is handled by the server." start="00:03:01.600" video="mainVideo" id=subtitle]]
[[!template text="With the server-client model," start="00:03:04.050" video="mainVideo" id=subtitle]]
[[!template text="it also tries to restrict Amazon access." start="00:03:05.599" video="mainVideo" id=subtitle]]
[[!template text="SSH keys are shared" start="00:03:08.000" video="mainVideo" id=subtitle]]
[[!template text="only from the client to the server," start="00:03:09.517" video="mainVideo" id=subtitle]]
[[!template text="but not from the server to the client," start="00:03:11.217" video="mainVideo" id=subtitle]]
[[!template text="so the Kindle cannot connect" start="00:03:12.517" video="mainVideo" id=subtitle]]
[[!template text="to the Raspberry Pi without a password." start="00:03:13.920" video="mainVideo" id=subtitle]]
[[!template text="IPtables rules are also set" start="00:03:16.319" video="mainVideo" id=subtitle]]
[[!template text="so that the Kindle cannot phone home" start="00:03:18.033" video="mainVideo" id=subtitle]]
[[!template text="to Amazon, and the connections" start="00:03:19.483" video="mainVideo" id=subtitle]]
[[!template text="are restricted to just the LAN." start="00:03:20.667" video="mainVideo" id=subtitle]]
[[!template text="So I got very curious at one point" start="00:03:23.200" video="mainVideo" id=subtitle]]
[[!template text="and decided to see how long" start="00:03:24.820" video="mainVideo" id=subtitle]]
[[!template text="a Kindle could last on a single charge" start="00:03:26.133" video="mainVideo" id=subtitle]]
[[!template text="in such an arrangement," start="00:03:27.599" video="mainVideo" id=subtitle]]
[[!template text="so that every 15 minutes for 18 hours," start="00:03:28.560" video="mainVideo" id=subtitle]]
[[!template text="I tested the device" start="00:03:30.640" video="mainVideo" id=subtitle]]
[[!template text="by sending a media item" start="00:03:31.599" video="mainVideo" id=subtitle]]
[[!template text="and recording the battery level." start="00:03:32.959" video="mainVideo" id=subtitle]]
[[!template text="The Kindle doesn't seem to" start="00:03:35.200" video="mainVideo" id=subtitle]]
[[!template text="report the battery level" start="00:03:36.159" video="mainVideo" id=subtitle]]
[[!template text="very continuously," start="00:03:36.959" video="mainVideo" id=subtitle]]
[[!template text="but at discrete percentages," start="00:03:37.760" video="mainVideo" id=subtitle]]
[[!template text="so that you could end up with" start="00:03:39.040" video="mainVideo" id=subtitle]]
[[!template text="a graph that looks like this." start="00:03:39.840" video="mainVideo" id=subtitle]]
[[!template text="Assuming you have half the charge," start="00:03:42.159" video="mainVideo" id=subtitle]]
[[!template text="and use it once every hour -" start="00:03:43.617" video="mainVideo" id=subtitle]]
[[!template text="it will drop by 10% battery in 76 hours," start="00:03:45.200" video="mainVideo" id=subtitle]]
[[!template text="which is roughly three days." start="00:03:48.319" video="mainVideo" id=subtitle]]
[[!template text="It's hard to extrapolate" start="00:03:49.760" video="mainVideo" id=subtitle]]
[[!template text="with only three good summarized data points," start="00:03:50.640" video="mainVideo" id=subtitle]]
[[!template text="of which the number of requests" start="00:03:52.400" video="mainVideo" id=subtitle]]
[[!template text="per battery level appear to diminish" start="00:03:53.519" video="mainVideo" id=subtitle]]
[[!template text="as shown in the table below," start="00:03:54.879" video="mainVideo" id=subtitle]]
[[!template text="but the final result yields 76 requests" start="00:03:56.640" video="mainVideo" id=subtitle]]
[[!template text="with an average loss of 0.5% battery life" start="00:03:58.560" video="mainVideo" id=subtitle]]
[[!template text="per request. Which is not bad!" start="00:04:00.799" video="mainVideo" id=subtitle]]
[[!template text="Assuming you do a request every 2 hours" start="00:04:02.273" video="mainVideo" id=subtitle]]
[[!template text="from 8am to 8pm," start="00:04:04.400" video="mainVideo" id=subtitle]]
[[!template text="and let it sleep at night," start="00:04:06.000" video="mainVideo" id=subtitle]]
[[!template text="then that's approximately 6 requests a day," start="00:04:07.040" video="mainVideo" id=subtitle]]
[[!template text="which could easily last a device" start="00:04:09.040" video="mainVideo" id=subtitle]]
[[!template text="for a month." start="00:04:10.400" video="mainVideo" id=subtitle]]
[[!template text="The ksync script does" start="00:04:11.280" video="mainVideo" id=subtitle]]
[[!template text="essentially everything:" start="00:04:12.586" video="mainVideo" id=subtitle]]
[[!template text="from generating and fetching the media," start="00:04:13.200" video="mainVideo" id=subtitle]]
[[!template text="to initializing all Kindle devices," start="00:04:14.799" video="mainVideo" id=subtitle]]
[[!template text="generating the server cronjobs," start="00:04:16.720" video="mainVideo" id=subtitle]]
[[!template text="log report summaries," start="00:04:18.160" video="mainVideo" id=subtitle]]
[[!template text="editing the config tables," start="00:04:19.199" video="mainVideo" id=subtitle]]
[[!template text="and much more." start="00:04:20.400" video="mainVideo" id=subtitle]]
[[!template text="The media operations are comparatively" start="00:04:21.199" video="mainVideo" id=subtitle]]
[[!template text="much more complex" start="00:04:22.880" video="mainVideo" id=subtitle]]
[[!template text="and encompass a few media use cases" start="00:04:23.680" video="mainVideo" id=subtitle]]
[[!template text="such as fetching the weather" start="00:04:25.280" video="mainVideo" id=subtitle]]
[[!template text="(though only from Open Weather Maps)" start="00:04:26.400" video="mainVideo" id=subtitle]]
[[!template text="and retrieving Google Calendar views" start="00:04:28.560" video="mainVideo" id=subtitle]]
[[!template text="by week, month, agenda, and four day view." start="00:04:30.000" video="mainVideo" id=subtitle]]
[[!template text="You can retrieve Org-Mode data" start="00:04:32.000" video="mainVideo" id=subtitle]]
[[!template text="from an Emacs instance on the server," start="00:04:33.199" video="mainVideo" id=subtitle]]
[[!template text="which in my case" start="00:04:34.639" video="mainVideo" id=subtitle]]
[[!template text="I produce views for an agenda" start="00:04:35.360" video="mainVideo" id=subtitle]]
[[!template text="or a sparse tree of my main projects file." start="00:04:36.720" video="mainVideo" id=subtitle]]
[[!template text="Finally we have gallery and wavfile," start="00:04:39.360" video="mainVideo" id=subtitle]]
[[!template text="which are static resources" start="00:04:41.120" video="mainVideo" id=subtitle]]
[[!template text="which will never change once generated." start="00:04:42.240" video="mainVideo" id=subtitle]]
[[!template text="The idea is that you feed it" start="00:04:44.000" video="mainVideo" id=subtitle]]
[[!template text="text and an image location," start="00:04:45.199" video="mainVideo" id=subtitle]]
[[!template text="and it generates" start="00:04:46.400" video="mainVideo" id=subtitle]]
[[!template text="a Kindle-compatible image" start="00:04:47.040" video="mainVideo" id=subtitle]]
[[!template text="using imagemagick as a backend for it." start="00:04:48.720" video="mainVideo" id=subtitle]]
[[!template text="In the case of the wavfile," start="00:04:51.280" video="mainVideo" id=subtitle]]
[[!template text="it uses espeak on the backend." start="00:04:52.240" video="mainVideo" id=subtitle]]
[[!template text="The below is summarized" start="00:04:54.160" video="mainVideo" id=subtitle]]
[[!template text="from the help-me text" start="00:04:55.280" video="mainVideo" id=subtitle]]
[[!template text="in the main ksync file," start="00:04:56.317" video="mainVideo" id=subtitle]]
[[!template text="but essentially, you need to" start="00:04:57.199" video="mainVideo" id=subtitle]]
[[!template text="define your config in the CSV files," start="00:04:58.160" video="mainVideo" id=subtitle]]
[[!template text="which we talk about in the next section;" start="00:04:59.919" video="mainVideo" id=subtitle]]
[[!template text="initialize all your Kindle devices," start="00:05:01.440" video="mainVideo" id=subtitle]]
[[!template text="i.e. copy over SSH keys," start="00:05:03.120" video="mainVideo" id=subtitle]]
[[!template text="kill all the unnecessary services," start="00:05:04.720" video="mainVideo" id=subtitle]]
[[!template text="and prime them for media collection;" start="00:05:06.160" video="mainVideo" id=subtitle]]
[[!template text="and ensure that you have" start="00:05:07.840" video="mainVideo" id=subtitle]]
[[!template text="all your static media generated" start="00:05:08.720" video="mainVideo" id=subtitle]]
[[!template text="and fetchable; and finally" start="00:05:10.080" video="mainVideo" id=subtitle]]
[[!template text="you then refresh the scheduling" start="00:05:11.440" video="mainVideo" id=subtitle]]
[[!template text="on the server." start="00:05:12.720" video="mainVideo" id=subtitle]]
[[!template text="Okay, so this is all good and well," start="00:05:14.240" video="mainVideo" id=subtitle]]
[[!template text="and we now know what the server does" start="00:05:15.759" video="mainVideo" id=subtitle]]
[[!template text="and how to probe and inspect it -" start="00:05:17.039" video="mainVideo" id=subtitle]]
[[!template text="but how does the server generate" start="00:05:18.400" video="mainVideo" id=subtitle]]
[[!template text="much of the content?" start="00:05:19.759" video="mainVideo" id=subtitle]]
[[!template text="So a lot of the content" start="00:05:21.120" video="mainVideo" id=subtitle]]
[[!template text="will be dynamically generated," start="00:05:22.080" video="mainVideo" id=subtitle]]
[[!template text="meaning it cannot be cached" start="00:05:23.360" video="mainVideo" id=subtitle]]
[[!template text="and is likely to change from hour to hour." start="00:05:24.639" video="mainVideo" id=subtitle]]
[[!template text="The media content that is generated here" start="00:05:26.720" video="mainVideo" id=subtitle]]
[[!template text="are mostly PNG images" start="00:05:28.400" video="mainVideo" id=subtitle]]
[[!template text="and have a timestamp" start="00:05:29.759" video="mainVideo" id=subtitle]]
[[!template text="embedded in their filenames." start="00:05:30.567" video="mainVideo" id=subtitle]]
[[!template text="The Emacs-specific content" start="00:05:32.320" video="mainVideo" id=subtitle]]
[[!template text="consists of a few views," start="00:05:33.520" video="mainVideo" id=subtitle]]
[[!template text="namely the org-gcal views," start="00:05:34.560" video="mainVideo" id=subtitle]]
[[!template text="org-agenda, and org-calories --" start="00:05:36.000" video="mainVideo" id=subtitle]]
[[!template text="essentially anything that Emacs can display" start="00:05:37.600" video="mainVideo" id=subtitle]]
[[!template text="and that you want to capture into an image." start="00:05:39.520" video="mainVideo" id=subtitle]]
[[!template text="Emacs can't (as far as I know)" start="00:05:42.000" video="mainVideo" id=subtitle]]
[[!template text="render graphics in a headless way," start="00:05:43.360" video="mainVideo" id=subtitle]]
[[!template text="so what we do instead" start="00:05:44.639" video="mainVideo" id=subtitle]]
[[!template text="is run Emacs in a dummy minimal X11 session" start="00:05:45.600" video="mainVideo" id=subtitle]]
[[!template text="via &quot;xvrb-run.&quot;" start="00:05:48.240" video="mainVideo" id=subtitle]]
[[!template text="From inside, you can take screenshots" start="00:05:50.080" video="mainVideo" id=subtitle]]
[[!template text="as you would in" start="00:05:51.680" video="mainVideo" id=subtitle]]
[[!template text="a normal desktop environment," start="00:05:52.233" video="mainVideo" id=subtitle]]
[[!template text="but with the benefit that" start="00:05:53.440" video="mainVideo" id=subtitle]]
[[!template text="you don't actually need to invoke a desktop" start="00:05:54.400" video="mainVideo" id=subtitle]]
[[!template text="or interfere with an existing one." start="00:05:56.479" video="mainVideo" id=subtitle]]
[[!template text="The minimal elisp shown here" start="00:05:58.560" video="mainVideo" id=subtitle]]
[[!template text="is all that is required" start="00:05:59.840" video="mainVideo" id=subtitle]]
[[!template text="to output your desired image from Emacs" start="00:06:00.720" video="mainVideo" id=subtitle]]
[[!template text="and configure it for the Kindle environment." start="00:06:02.400" video="mainVideo" id=subtitle]]
[[!template text="On the web side of things," start="00:06:04.479" video="mainVideo" id=subtitle]]
[[!template text="we don't really need to invoke" start="00:06:05.360" video="mainVideo" id=subtitle]]
[[!template text="a dummy X11 session" start="00:06:06.400" video="mainVideo" id=subtitle]]
[[!template text="because Chromium can run headless" start="00:06:07.520" video="mainVideo" id=subtitle]]
[[!template text="and can be controlled" start="00:06:09.120" video="mainVideo" id=subtitle]]
[[!template text="by the node library &quot;puppeteer&quot;" start="00:06:09.919" video="mainVideo" id=subtitle]]
[[!template text="to render dynamic content," start="00:06:11.600" video="mainVideo" id=subtitle]]
[[!template text="focus on regions of the webpage," start="00:06:13.039" video="mainVideo" id=subtitle]]
[[!template text="and take snapshots." start="00:06:14.560" video="mainVideo" id=subtitle]]
[[!template text="The static content comprises" start="00:06:16.080" video="mainVideo" id=subtitle]]
[[!template text="of two types: images and audio." start="00:06:17.600" video="mainVideo" id=subtitle]]
[[!template text="The content is accessed by a key," start="00:06:19.600" video="mainVideo" id=subtitle]]
[[!template text="in this case Batman," start="00:06:21.520" video="mainVideo" id=subtitle]]
[[!template text="and the content information" start="00:06:22.560" video="mainVideo" id=subtitle]]
[[!template text="is given by the &quot;--extra&quot; parameter" start="00:06:23.600" video="mainVideo" id=subtitle]]
[[!template text="which describes either or both" start="00:06:25.199" video="mainVideo" id=subtitle]]
[[!template text="an image and text." start="00:06:26.960" video="mainVideo" id=subtitle]]
[[!template text="Okay, so now we have content," start="00:06:30.880" video="mainVideo" id=subtitle]]
[[!template text="how do we schedule this content" start="00:06:32.248" video="mainVideo" id=subtitle]]
[[!template text="to appear on our desired machines" start="00:06:33.600" video="mainVideo" id=subtitle]]
[[!template text="at desired times?" start="00:06:34.960" video="mainVideo" id=subtitle]]
[[!template text="Everything is run via cron." start="00:06:36.400" video="mainVideo" id=subtitle]]
[[!template text="So previously we saw that" start="00:06:37.759" video="mainVideo" id=subtitle]]
[[!template text="we only needed the tables MACHINES.csv," start="00:06:38.720" video="mainVideo" id=subtitle]]
[[!template text="COMMANDS.csv, and multiple TIME_*.csv tables" start="00:06:40.880" video="mainVideo" id=subtitle]]
[[!template text="for the shell script to work." start="00:06:43.440" video="mainVideo" id=subtitle]]
[[!template text="But Org-Mode does this far easier," start="00:06:44.880" video="mainVideo" id=subtitle]]
[[!template text="since you can just have everything" start="00:06:46.479" video="mainVideo" id=subtitle]]
[[!template text="in the same file," start="00:06:47.919" video="mainVideo" id=subtitle]]
[[!template text="and with the helper minor-mode," start="00:06:49.039" video="mainVideo" id=subtitle]]
[[!template text="manage everything" start="00:06:50.720" video="mainVideo" id=subtitle]]
[[!template text="from a single Org-Mode document." start="00:06:51.360" video="mainVideo" id=subtitle]]
[[!template text="Here I have 4 kindles and their shortnames." start="00:06:53.120" video="mainVideo" id=subtitle]]
[[!template text="Yes, I even have a Kindle" start="00:06:55.120" video="mainVideo" id=subtitle]]
[[!template text="hanging outside my door." start="00:06:56.160" video="mainVideo" id=subtitle]]
[[!template text="I have 11 defined commands" start="00:06:57.520" video="mainVideo" id=subtitle]]
[[!template text="which represent the views I want to see," start="00:06:58.960" video="mainVideo" id=subtitle]]
[[!template text="and there are 4 timetables I use," start="00:07:00.800" video="mainVideo" id=subtitle]]
[[!template text="but you can have" start="00:07:02.319" video="mainVideo" id=subtitle]]
[[!template text="everything on one, if you like." start="00:07:02.800" video="mainVideo" id=subtitle]]
[[!template text="Rows are machine names," start="00:07:04.319" video="mainVideo" id=subtitle]]
[[!template text="and columns are corresponding hours" start="00:07:05.360" video="mainVideo" id=subtitle]]
[[!template text="at which they run." start="00:07:06.800" video="mainVideo" id=subtitle]]
[[!template text="Trust me, it's easier to configure" start="00:07:07.840" video="mainVideo" id=subtitle]]
[[!template text="repeating tasks just by repeating them" start="00:07:09.440" video="mainVideo" id=subtitle]]
[[!template text="multiple times, because at least this way," start="00:07:10.960" video="mainVideo" id=subtitle]]
[[!template text="it's human readable," start="00:07:12.720" video="mainVideo" id=subtitle]]
[[!template text="and the script which converts these" start="00:07:13.680" video="mainVideo" id=subtitle]]
[[!template text="to a cronjob" start="00:07:14.880" video="mainVideo" id=subtitle]]
[[!template text="collapses the repeating tasks by itself." start="00:07:15.759" video="mainVideo" id=subtitle]]
[[!template text="The ksync script can be called" start="00:07:18.800" video="mainVideo" id=subtitle]]
[[!template text="from within the config.org file" start="00:07:20.560" video="mainVideo" id=subtitle]]
[[!template text="using this convenient" start="00:07:23.120" video="mainVideo" id=subtitle]]
[[!template text="use-package declaration." start="00:07:24.683" video="mainVideo" id=subtitle]]
[[!template text="All that one needs to do" start="00:07:26.960" video="mainVideo" id=subtitle]]
[[!template text="is to configure the ENVIRONMENT_VARIABLES" start="00:07:28.319" video="mainVideo" id=subtitle]]
[[!template text="by setting them in this table" start="00:07:30.560" video="mainVideo" id=subtitle]]
[[!template text="where you set the repo name," start="00:07:32.880" video="mainVideo" id=subtitle]]
[[!template text="the config directory," start="00:07:34.479" video="mainVideo" id=subtitle]]
[[!template text="where the media shall go," start="00:07:36.160" video="mainVideo" id=subtitle]]
[[!template text="and the server IP," start="00:07:37.599" video="mainVideo" id=subtitle]]
[[!template text="although this can be" start="00:07:38.960" video="mainVideo" id=subtitle]]
[[!template text="automatically detected." start="00:07:39.919" video="mainVideo" id=subtitle]]
[[!template text="The package allows you" start="00:07:41.360" video="mainVideo" id=subtitle]]
[[!template text="to export your tables" start="00:07:42.240" video="mainVideo" id=subtitle]]
[[!template text="by running C-c C-c on them," start="00:07:43.440" video="mainVideo" id=subtitle]]
[[!template text="and allows you to update all the jobs" start="00:07:46.720" video="mainVideo" id=subtitle]]
[[!template text="related to each of your clients." start="00:07:49.199" video="mainVideo" id=subtitle]]
[[!template text="You can also initialize clients" start="00:07:52.319" video="mainVideo" id=subtitle]]
[[!template text="using this package --" start="00:07:53.759" video="mainVideo" id=subtitle]]
[[!template text="for either all of them" start="00:07:55.120" video="mainVideo" id=subtitle]]
[[!template text="or individual clients --" start="00:07:56.479" video="mainVideo" id=subtitle]]
[[!template text="and the package comes with" start="00:07:58.479" video="mainVideo" id=subtitle]]
[[!template text="some convenience functions" start="00:07:59.599" video="mainVideo" id=subtitle]]
[[!template text="to do this automatically" start="00:08:01.120" video="mainVideo" id=subtitle]]
[[!template text="for all tables in the buffer." start="00:08:02.720" video="mainVideo" id=subtitle]]
[[!template text="With this, I want to say a big thank you" start="00:08:06.720" video="mainVideo" id=subtitle]]
[[!template text="to Takaaki Ishikawa" start="00:08:08.319" video="mainVideo" id=subtitle]]
[[!template text="for his fantastic &quot;org-tree-slide&quot;" start="00:08:09.840" video="mainVideo" id=subtitle]]
[[!template text="presentation package." start="00:08:11.520" video="mainVideo" id=subtitle]]
[[!template text="To Pascal Widdershoven" start="00:08:12.879" video="mainVideo" id=subtitle]]
[[!template text="and David Hamp-Gonsalves," start="00:08:14.136" video="mainVideo" id=subtitle]]
[[!template text="for their fantastic" start="00:08:15.803" video="mainVideo" id=subtitle]]
[[!template text="kindle-dash repositories," start="00:08:16.633" video="mainVideo" id=subtitle]]
[[!template text="for which some of my internal Kindle scripts" start="00:08:17.840" video="mainVideo" id=subtitle]]
[[!template text="are derived from." start="00:08:19.903" video="mainVideo" id=subtitle]]
[[!template text="Also a big thanks to the friendly" start="00:08:20.720" video="mainVideo" id=subtitle]]
[[!template text="and not-so-friendly users and hackers" start="00:08:22.160" video="mainVideo" id=subtitle]]
[[!template text="in the MobileRead forums." start="00:08:23.520" video="mainVideo" id=subtitle]]
[[!template text="And finally, a big thanks" start="00:08:24.960" video="mainVideo" id=subtitle]]
[[!template text="to the Emacs community" start="00:08:25.919" video="mainVideo" id=subtitle]]
[[!template text="and the conference organizers." start="00:08:26.960" video="mainVideo" id=subtitle]]
[[!template text="Thank you! captions by Mehmet" start="00:08:28.270" video="mainVideo" id=subtitle]]