summaryrefslogtreecommitdiffstats
path: root/2021/talks/dashboard.md
blob: 8ceacc4b84f24ca01e5c44a142d2df798a81f0c8 (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
[[!meta title="Productivity Dashboards with Emacs and Kindle"]]
[[!meta copyright="Copyright © 2021 Mehmet Tekman"]]
[[!inline pages="internal(2021/info/dashboard-nav)" raw="yes"]]

<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Productivity Dashboards with Emacs and Kindle
Mehmet Tekman

Since 2008, Amazon have released a new Kindle device every year,
supplanting each generation with a newer model that boasts highly
promoted incremental features which greatly devalues the price of
their older models. These forgotten models are sold on Ebay and
other secondhand websites at highly discount prices by owners who
do not see the true potential of these devices: Kindles are
excellent high contrast low-refresh display rate E-Ink devices,
with Wifi capability, that run embedded Linux in the
background. Depending on the model, an idle Kindle can last weeks
before needing a recharge. This makes them ideal as passive image
devices that can be configured easily using a few shell
scripts. Indeed, efforts have been made in dedicated hacker forums
to expose the Linux filesystem and to enable features such as
custom screensavers, SSH networking, and more. By exploiting these
features, and by carefully disabling the software/bloatware that
comes with the device, these Kindles have found new life as online
dashboard devices which can fetch and display information from the
internet at timely intervals.

Here we describe a tool to control multiple Kindle devices with a
single org-mode/shell-based tool, built initially to periodically
serve updated Emacs Org-Agenda views, but later expanded to produce
online local weather reports and work calendar, Emacs calendars
(calfw, org-gcal), daily dietary information (org-calories),
Org-Mode sparse TODO trees, miscellaneous image and text content
(via imagemagick), small messages, and much more.

In this talk, we show how to configure multiple Kindles with any
desired custom content, following any daily/weekly schedule, all
easily managed from Emacs within a single Org-Mode file.



# Outline

-   5-10 minutes:
    
    1-3 mins
          Talk about repurposing Kindles:
    
    -   Cheap second-hand wifi device, hackable
    -   Low-powered, long battery life, low refresh rate &#x2013; perfect
        for a dashboard
        -   Timely updated Org-Mode Agendas anyone?
    -   Reference to inspired projects (kindle-dashboard)
    
    2-3 mins
          Generate content
    
    -   A static text+picture image easily generated with imagemagick
        wrapper
    -   An image of a sparse tree of org-mode TODO file
    -   An image of another emacs view (e.g. Calfw, or org-calories)
    -   Show post-processing for optimizing image for Kindles
    
    1-2 mins
          Configuration in a single org-mode file
    
    -   Defining Machines
    -   Defining Commands to generate content
    -   Defining Schedules to run Commands on multiple Machines at
        specific points in the day
    
    1-2 mins
          Export and Run:
    
    -   Show exported shell configs and generated cronjobs
    -   Witness multiple Kindles producing desired content with wakeup
        timers

<!--
-   20 minutes:
    
    4 mins
          Repurposing Kindles
    
    -   Cheap second-hand wifi device, hackable
    -   Low-powered, long battery life, low refresh rate &#x2013; perfect
        for a dashboard!
    -   Reference to inspired projects (kindle-dashboard)
    -   Discuss Use Cases:
        -   Dynamic content: Org-Mode Agendas, Weather Reports, Web
            Calendars
        -   Static content: Gallery, Motivational Messages
        -   Untapped potential
    
    3 mins
          Generate content
    
    -   A static text+picture image easily generated with imagemagick
        wrapper
    -   An image of a sparse tree of org-mode TODO file
    -   An image of another emacs view (e.g. Calfw, or org-calories)
    -   Show post-processing for optimizing image for Kindles
    
    4 mins
          Configuration in a single org-mode file
    
    -   Defining Machines
    -   Defining Commands to generate content
        -   Types of commands
        -   Extending the commands with custom
    -   Defining Schedules to run Commands on multiple Machines at
        specific points in the day
    
    6 mins
          Export and Run:
    
    -   Show exported shell configs and generated cronjobs
    -   Scripts and Design Considerations:
        -   Killing services (to keep amazon out)
        -   Iptables blocking (to keep amazon out)
        -   What SSH keys are shared and where (to keep amazon out)
        -   How the Sleep and Wakeup timers work
        -   Optimizing for longer battery life
            -   Eips and X
            -   Minimizing service checks
            -   Graph of number of screen updates per drop in battery life
        -   View many Kindles simultaneously in action
    
    3 mins
          Final Thoughts
    
    -   Limitations:
        -   Cannot interrupt a device's sleep, it wakes up only when you
            last told it to
        -   Hard to see at night, invest in some LEDs maybe?
    -   Take back your devices!
    -   Name suggestions? "kindle-sync", "kindle-cluster",
        -   Something that won't be forced to change at a later date if
            it becomes too notorious.
    -   Planned features
    -   Acknowledgments and Resources

-   40 minutes: N/A
-->


[[!inline pages="internal(2021/info/dashboard-schedule)" raw="yes"]]

[[!inline pages="internal(2021/info/dashboard-nav)" raw="yes"]]