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
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
|
WEBVTT
00:00.000 --> 00:05.819
And you're ready to go. All right, perfect.
00:05.820 --> 00:07.875
Hello, my name is Zachary Romero
00:07.876 --> 00:08.879
and today I'll be giving a talk
00:08.880 --> 00:12.719
on how I'm using Emacs for Android
00:12.720 --> 00:15.399
to replace my fitness app I normally use.
00:15.400 --> 00:17.239
So it goes without saying
00:17.240 --> 00:21.559
that a lot of the mobile ecosystem these days
00:21.560 --> 00:25.439
are pretty hostile to the interest of its users.
00:25.440 --> 00:26.999
So there's privacy policies
00:27.000 --> 00:32.959
that are constantly collecting your data and selling it.
00:32.960 --> 00:36.399
without your consent, bombardment of ads.
00:36.400 --> 00:37.999
And then there's a lot of features that are locked.
00:38.000 --> 00:40.479
Sometimes features that the app gives you,
00:40.480 --> 00:42.959
they're put behind paywalls.
00:42.960 --> 00:45.159
And so a lot of the ecosystem
00:45.160 --> 00:49.119
isn't in the best interest of users.
00:49.120 --> 00:51.959
And obviously there are apps like on F-Droid
00:51.960 --> 00:56.799
and the Android ecosystem that do try to address this,
00:56.800 --> 00:59.159
but the solutions overall are lagging
00:59.160 --> 01:05.439
behind maybe desktop computers.
01:05.440 --> 01:14.479
One option that has come in the past few years
01:14.480 --> 01:17.239
is Emacs on Android. It's just a normal Emacs build,
01:17.240 --> 01:21.159
and so it can do everything, in theory, that Emacs can do.
01:21.160 --> 01:24.399
And so I got to thinking how could I, how I could use Emacs
01:24.400 --> 01:27.039
to replace some of the proprietary apps
01:27.040 --> 01:28.479
that I use on a daily basis.
01:28.480 --> 01:31.279
So I just went thinking about the apps,
01:31.280 --> 01:33.039
the apps that Emacs can replace.
01:33.040 --> 01:35.119
Some of them seem quite easy.
01:35.120 --> 01:39.879
Some of them... maybe might take a little effort but seem doable
01:39.880 --> 01:41.959
and then obviously there's a whole class of apps
01:41.960 --> 01:47.199
that would be pretty impossible to emulate on Emacs.
01:47.200 --> 01:52.679
So I mean besides like to-do lists, note taking, org mode,
01:52.680 --> 01:55.759
one thing that came to mind was my fitness tracking app.
01:55.760 --> 01:59.239
This is an app I use pretty often
01:59.240 --> 02:06.719
and in theory Emacs should be quite usable for this case.
02:06.720 --> 02:09.759
So weightlifting tracking is,
02:09.760 --> 02:13.599
so it's normally used to record
02:13.600 --> 02:17.519
what exercises you do at what intensity
02:17.520 --> 02:20.719
in order to progress week by week.
02:20.720 --> 02:25.719
So you might plan on like slowly increasing
02:25.720 --> 02:27.399
the amount of effort you put into
02:27.400 --> 02:30.159
your various workouts from week to week,
02:30.160 --> 02:34.079
and then maybe you'll have put some rest weeks in there.
02:34.080 --> 02:37.439
And so you want a detailed plan
02:37.440 --> 02:40.439
and recording of what you do throughout the week.
02:40.440 --> 02:43.919
And so I guess way back, normally
02:43.920 --> 02:45.919
this would have been done on pen and paper.
02:45.920 --> 02:48.079
So you would take your notebook
02:48.080 --> 02:50.999
and just write down on paper what you did.
02:51.000 --> 02:56.559
And this obviously works, and a lot of people do do this.
02:56.560 --> 02:59.799
But these days, there are quite a few apps
02:59.800 --> 03:02.639
that make this process quite seamless and effortless.
03:02.640 --> 03:06.279
So just as an example, really fast.
03:06.280 --> 03:09.039
So this is one of the popular apps out these days
03:09.040 --> 03:10.399
that has such a feature.
03:10.400 --> 03:13.479
So you can save all your workout routines
03:13.480 --> 03:14.319
and this nice interface.
03:14.320 --> 03:18.719
And so you click a button and then it starts,
03:18.720 --> 03:20.919
you have the workout interface and then
03:20.920 --> 03:23.439
You can kind of, you go through your workout
03:23.440 --> 03:25.079
and then you can input,
03:25.080 --> 03:27.399
you can input like what things you do.
03:27.400 --> 03:29.119
And then it has this like fancy timer at the bottom.
03:29.120 --> 03:30.959
So like, this is kind of like the,
03:30.960 --> 03:35.839
kind of like what a lot of people use these days,
03:35.840 --> 03:39.319
just for, just for, to make it as frictionless as possible.
03:39.320 --> 03:44.359
So obviously you can do like this bare bone text editing in Emacs.
03:44.360 --> 03:46.959
You just have to open up an org mode file and just right away.
03:46.960 --> 03:48.879
So, but there are a number of problems with this.
03:48.880 --> 03:50.559
So like, especially on mobile,
03:50.560 --> 03:52.719
character by character editing,
03:52.720 --> 03:55.879
just like writing all these, this text out manually,
03:55.880 --> 03:58.759
maybe some formatting, it can be pretty tedious
03:58.760 --> 04:01.839
and not, maybe not something you want to, you want to have to do,
04:01.840 --> 04:04.559
especially if you're like exhausted or tired.
04:04.560 --> 04:06.479
So, I mean, there's also like the problem
04:06.480 --> 04:09.439
of like remembering which, where in your workout you are,
04:09.440 --> 04:11.839
like how many of these, these, like which,
04:11.840 --> 04:13.479
which, like where are you, where you are,
04:13.480 --> 04:17.159
like, um like which set number set number are you on
04:17.160 --> 04:17.679
are you on the first second
04:17.680 --> 04:19.919
and then also like maybe you failed
04:19.920 --> 04:22.239
maybe you weren't able to like perform this
04:22.240 --> 04:24.279
and maybe you have to make a note that so like
04:24.280 --> 04:28.279
so that's even more text editing you would have to do
04:28.280 --> 04:30.959
um also some things like unit conversions
04:30.960 --> 04:31.799
like you could use calc
04:31.800 --> 04:35.879
but then you know you'd have to like open up the calc,
04:35.880 --> 04:39.799
and then number, unit conversion, switch buffers.
04:39.800 --> 04:41.999
So it's doable, but it takes a little effort.
04:42.000 --> 04:43.439
And then also the rest timer.
04:43.440 --> 04:45.399
So if you want to make sure you're resting
04:45.400 --> 04:46.999
in between these exercises you do,
04:47.000 --> 04:51.079
you'd have to maybe open up another app,
04:51.080 --> 04:52.439
or maybe you'd have to bring your watch.
04:52.440 --> 04:53.719
So that's another thing that
04:53.720 --> 04:58.399
these apps normally would do for you.
04:58.400 --> 05:02.559
So writing some Elisp, I created a package
05:02.560 --> 05:04.479
to try to emulate that experience
05:04.480 --> 05:06.079
I showed you on that other app.
05:06.080 --> 05:08.159
So let me just demo this real fast.
05:08.160 --> 05:13.679
So here, the package is called org-fit.
05:13.680 --> 05:17.359
And so here, I'm going to start a new workout.
05:17.360 --> 05:19.559
And then here, I'm prompted by a list of routines
05:19.560 --> 05:22.159
that I have pre-written in org mode.
05:22.160 --> 05:25.759
So the header name is the routine name.
05:25.760 --> 05:29.279
And so I can, out of all these routines I've written,
05:29.280 --> 05:35.959
I can select one and then also I can have it populate.
05:35.960 --> 05:41.519
So here it's populating preset weights I had for it.
05:41.520 --> 05:45.839
So yeah, so basically this is my current attempt
05:45.840 --> 05:47.599
to emulate that experience.
05:47.600 --> 05:51.039
So here we can, so here like the arrows and the tabs,
05:51.040 --> 05:55.239
they only go through like the, editable fields I can so
05:55.240 --> 05:58.119
on the notes section you see you see here in the table
05:58.120 --> 06:00.439
this is like the my plan for the day
06:00.440 --> 06:02.159
so I can press space to easily
06:02.160 --> 06:03.839
just fill out the data tab
06:03.840 --> 06:06.879
go the next the next the next set
06:06.880 --> 06:10.239
I can press quote to copy from above
06:10.240 --> 06:13.359
There's also some interesting things with Android,
06:13.360 --> 06:15.719
like you can bind the volume down key.
06:15.720 --> 06:17.319
So here I have the volume down key
06:17.320 --> 06:21.439
just like inputting the data automatically
06:21.440 --> 06:22.399
and going to the next field.
06:22.400 --> 06:26.639
So you see there it's quite seamless input of information.
06:26.640 --> 06:30.119
Notice also when all the sets
06:30.120 --> 06:31.839
of a single exercise are done,
06:31.840 --> 06:34.759
it marks that heading as done.
06:34.760 --> 06:37.959
Also, if you notice at the top, on the left,
06:37.960 --> 06:42.239
you have the session time for the workout.
06:42.240 --> 06:44.199
And then on here, we have the rest timer.
06:44.200 --> 06:48.519
So the rest timer is actually just defined as an org mode property.
06:48.520 --> 06:50.839
So here it's saying that, okay,
06:50.840 --> 06:52.759
you should start the auto rest timer
06:52.760 --> 06:54.479
for three minutes every time you do a set.
06:54.480 --> 06:58.279
So here, let's fill it in, go to the next one.
06:58.280 --> 07:00.639
And now the rest timer is set for three minutes.
07:00.640 --> 07:03.079
And so here I have, I can just rest
07:03.080 --> 07:05.879
I just have the information right here.
07:05.880 --> 07:08.119
Also, you'll notice here we have
07:08.120 --> 07:09.439
some calculations at the bottom.
07:09.440 --> 07:12.159
This is something also that those apps provide,
07:12.160 --> 07:14.319
like in order to make sure you're tracking
07:14.320 --> 07:16.719
on certain levels of intensity.
07:16.720 --> 07:22.599
Let's see, what else do we have?
07:22.600 --> 07:30.879
We can add warmups, automatic warmup set inserting, unit conversions,
07:30.880 --> 07:33.439
and then Something else to know
07:33.440 --> 07:35.439
is that all of these actions I'm doing,
07:35.440 --> 07:37.079
they're all bound to a single key
07:37.080 --> 07:40.159
to make things as effortless as possible.
07:40.160 --> 07:43.679
So yeah, that's the app in a nutshell.
07:43.680 --> 07:47.079
And then, so how is this done?
07:47.080 --> 07:51.239
So the philosophy behind this is to use org mode as a base.
07:51.240 --> 07:55.639
So all the functionality, the timer for the session,
07:55.640 --> 08:00.319
that's just clock in or clock in.
08:00.320 --> 08:05.159
The various, all the data you fill in,
08:05.160 --> 08:09.519
the exercises, routines, those are just org headings,
08:09.520 --> 08:12.159
like with nested entries.
08:12.160 --> 08:14.959
So yeah, and then all the movement,
08:14.960 --> 08:16.759
like a lot of the editing stuff
08:16.760 --> 08:18.559
is just going off of the org mode API.
08:18.560 --> 08:22.919
So like here, my upper field, is actually just using the,
08:22.920 --> 08:26.239
so it's using like the org table go to line function.
08:26.240 --> 08:28.999
Adding a no is org table put.
08:29.000 --> 08:31.319
So like all of my functions I'm using,
08:31.320 --> 08:33.239
they're just building off of the org mode API.
08:33.240 --> 08:38.199
And I found that this pattern worked work pretty well.
08:38.200 --> 08:41.959
So you get the benefits of org mode
08:41.960 --> 08:48.839
and then the ease of using it on mobile.
08:48.840 --> 08:51.919
And so I guess in the last few minutes of this talk,
08:51.920 --> 08:53.479
I'll just go over some quick things
08:53.480 --> 08:56.319
about working with Android that might come up.
08:56.320 --> 08:58.879
So the first thing is notifications.
08:58.880 --> 09:01.039
This is actually an interesting feature.
09:01.040 --> 09:03.679
So In the Android build for Emacs,
09:03.680 --> 09:05.799
you have the function android notifications notify.
09:05.800 --> 09:09.039
And so here, this is how you can send a notification.
09:09.040 --> 09:11.999
So my rest timer, for example, utilizes this function
09:12.000 --> 09:14.399
to let you know when your rest is over.
09:14.400 --> 09:22.439
And the cool thing about this is that the build for Emacs
09:22.440 --> 09:29.039
lets you, so here in the app settings, under notifications,
09:29.040 --> 09:33.039
so here you can actually pick a notification group,
09:33.040 --> 09:36.639
which is here set, which is, yeah, so it's set right here
09:36.640 --> 09:37.999
and you can just customize it.
09:38.000 --> 09:39.599
So like what sound do you want it to make?
09:39.600 --> 09:40.439
Do you want it to vibrate?
09:40.440 --> 09:41.679
Do you want to show on the screen?
09:41.680 --> 09:43.519
And so this way, like you can easily,
09:43.520 --> 09:46.839
so if you are resting, you will get a notification.
09:46.840 --> 09:47.879
It will vibrate.
09:47.880 --> 09:50.079
it might make a really loud noise if you want it to.
09:50.080 --> 09:51.919
And so this is all customizable.
09:51.920 --> 09:54.479
And the cool thing is that if you have other packages
09:54.480 --> 09:55.639
that utilize these notifications,
09:55.640 --> 09:57.479
all of the notification groups,
09:57.480 --> 10:01.079
they're all customizable separately. So, and there we go.
10:01.080 --> 10:02.359
So that notification you see on the top
10:02.360 --> 10:04.999
is actually from the Emacs app.
10:05.000 --> 10:07.399
So you notice here, we're not even running Emacs
10:07.400 --> 10:09.759
and yet we got that rest timer is over.
10:09.760 --> 10:13.559
So that's one thing. Next, keyboard.
10:13.560 --> 10:15.039
So just when working with Emacs,
10:15.040 --> 10:19.079
I found using the unexpected keyboard, in particular,
10:19.080 --> 10:22.519
to be really helpful with all the keybinding.
10:22.520 --> 10:25.879
So if you just want to try out Emacs
10:25.880 --> 10:27.719
from F-Droid or something,
10:27.720 --> 10:30.239
I would recommend using a keyboard like this
10:30.240 --> 10:33.999
to let you use the meta keys and the control keys.
10:34.000 --> 10:37.039
And then yeah, using this keyboard,
10:37.040 --> 10:39.159
I haven't really noticed any problems
10:39.160 --> 10:41.679
with Emacs key bindings.
10:41.680 --> 10:45.159
And then lastly, just like my setup.
10:45.160 --> 10:49.679
So SyncThinkFork is another app I rely on heavily.
10:49.680 --> 10:54.399
So as I mentioned, all the, this is org-fit files,
10:54.400 --> 10:55.719
they're all org-mode files.
10:55.720 --> 10:57.439
So I use SyncThinkFork to synchronize them
10:57.440 --> 10:59.879
between my laptop and my Android.
10:59.880 --> 11:04.479
And then also like to get this package,
11:04.480 --> 11:06.559
just syncing a list folder might be helpful
11:06.560 --> 11:09.999
if you want to easily edit your init file
11:10.000 --> 11:12.319
on Android on your machine.
11:12.320 --> 11:15.639
So yeah, SyncThinkPort is another helpful thing
11:15.640 --> 11:17.959
that you might wanna look into
11:17.960 --> 11:22.919
if you're exploring Android, the Emacs build of Android.
11:22.920 --> 11:26.239
So yeah, Emacs on Android does actually have the potential
11:26.240 --> 11:30.959
to replace a decent number of common use cases.
11:30.960 --> 11:35.759
And org mode can be a solid foundation
11:35.760 --> 11:39.959
for any of these applications that you're thinking of.
11:39.960 --> 11:45.639
And yeah, I highly recommend giving giving Emacs on Android a shot.
11:45.640 --> 11:49.719
And that concludes this presentation.
11:49.720 --> 11:56.439
Thank you so much, Zachary. That was an awesome talk,
11:56.440 --> 11:59.599
and I appreciate your preparing it for us.
11:59.600 --> 12:03.399
A couple questions on the pad, if anybody wants to jump in
12:03.400 --> 12:05.119
and throw in your questions or comments.
12:05.120 --> 12:08.599
Of course, happy to read them out on screen here.
12:08.600 --> 12:12.039
I think when we were talking backstage before,
12:12.040 --> 12:14.239
you had asked me to kind of read them out,
12:14.240 --> 12:17.199
but feel free to jump in and kind of
12:17.200 --> 12:18.999
take over at any point.
12:19.000 --> 12:25.279
This is the You Show. I'm kind of...
12:25.280 --> 12:30.199
So the first question we had was a comment.
12:30.200 --> 12:31.439
This is very cool.
12:31.440 --> 12:33.519
It would be nice to build up some
12:33.520 --> 12:38.439
org rep max calculation formula into calc.
12:38.440 --> 12:42.119
Is that something that you've thought about?
12:42.120 --> 12:47.159
Um, well, I mean, um, one rep max. Yeah.
12:47.160 --> 12:48.799
I mean, not in honesty,
12:48.800 --> 12:52.359
I'm not sure about the, like the, like, uh,
12:52.360 --> 12:53.839
extending calc itself.
12:53.840 --> 12:56.799
Like if there's, you know, if like,
12:56.800 --> 12:59.199
what are the ways of extending calc itself,
12:59.200 --> 13:01.999
but this, this package, um, or fit,
13:02.000 --> 13:04.159
I mean, it does have the one rep max.
13:04.160 --> 13:11.199
Like I kind of had to dig into that, like, um, uh,
13:11.200 --> 13:20.079
I can find the code, but yeah, I mean, it does,
13:20.080 --> 13:25.079
I mean, you know, so this is specifically this package,
13:25.080 --> 13:33.039
but yeah, you can use the various one rep max formulas for this.
13:33.040 --> 13:37.159
Extend this clock report. Yes, yeah, exactly.
13:37.160 --> 13:39.199
Graphical reports. These are all something that,
13:39.200 --> 13:43.439
It currently doesn't have, and these nice apps do have.
13:43.440 --> 13:45.399
They have charts of all kinds.
13:45.400 --> 13:48.799
You can see your progress from week to week
13:48.800 --> 13:49.959
on various exercise.
13:49.960 --> 13:54.359
They have like charts galore, all these like fancy apps.
13:54.360 --> 14:00.319
And in theory, it wouldn't be hard at all to like,
14:00.320 --> 14:03.719
cause like, you know, there's a GNU plot.
14:03.720 --> 14:07.119
There's those, and then they have like
14:07.120 --> 14:10.479
very good packages on any of them.
14:10.480 --> 14:13.919
So, I mean, I assume integration would be pretty seamless.
14:13.920 --> 14:16.199
So yes, that is definitely on the list
14:16.200 --> 14:17.759
of things I want to do.
14:17.760 --> 14:21.599
Have you ever wanted to modify
14:21.600 --> 14:23.679
the functionality of your mobile device
14:23.680 --> 14:26.119
while working out any good
14:26.120 --> 14:28.439
or challenging experiences or tips with that?
14:28.440 --> 14:30.759
Yeah, that's actually funny.
14:30.760 --> 14:37.439
There was a time where, yeah, I mean, like debugging,
14:37.440 --> 14:40.999
there was like some bug I was having with my code.
14:41.000 --> 14:44.799
And so I have, in the middle of a workout,
14:44.800 --> 14:48.439
yeah, start, like, open up the debugger and kind of,
14:48.440 --> 14:50.959
and the cool thing is that, I mean,
14:50.960 --> 14:53.079
the biggest thing, like, the biggest thing by far
14:53.080 --> 14:54.599
is unexpected keyboard.
14:54.600 --> 14:56.359
Like, I can't state how,
14:56.360 --> 14:58.439
I don't know how much unexpected keyboard is,
14:58.440 --> 15:01.279
because, like, with unexpected, with the unexpected,
15:01.280 --> 15:03.599
with that keyboard, you can literally just, like,
15:03.600 --> 15:06.159
it's, it's not hard at all to, like,
15:06.160 --> 15:11.159
you can do meta x or uh control meta x
15:11.160 --> 15:13.639
or you know control u control meta x
15:13.640 --> 15:15.959
to like you know debug like you can do all the key bindings
15:15.960 --> 15:18.519
with unexpected keyboard there's so there's no problem
15:18.520 --> 15:20.279
whatsoever whatsoever
15:20.280 --> 15:23.599
with that part the only part is muscle memory like like
15:23.600 --> 15:25.599
it's because you get the muscle memory
15:25.600 --> 15:26.839
of like the emacs key binding
15:26.840 --> 15:28.279
and so you have to kind of like yeah
15:28.280 --> 15:31.639
i mean that translation is actually kind of
15:31.640 --> 15:35.039
you have to think about it like, like, okay,
15:35.040 --> 15:36.559
what was that key binding again?
15:36.560 --> 15:39.559
And you have to kind of like do it with your fingers.
15:39.560 --> 15:41.359
And it was like doing it on the, on Android is,
15:41.360 --> 15:44.199
I mean, it takes a little longer
15:44.200 --> 15:45.439
and it's just a different, yeah,
15:45.440 --> 15:47.079
different set of different muscle memory.
15:47.080 --> 15:51.559
Gotcha. Sorry, if you've covered this,
15:51.560 --> 15:55.439
does the rest timer end with an audible notification?
15:55.440 --> 15:58.199
That's the cool thing.
15:58.200 --> 16:02.519
So with the Emacs, with the Android notification settings,
16:02.520 --> 16:06.159
you can, I can show that again in more detail.
16:06.160 --> 16:17.079
So bonus settings, apps, pick the app, notifications.
16:17.080 --> 16:21.159
And then here we get that Org Fit Restover.
16:21.160 --> 16:22.919
And so here you can set, for example,
16:22.920 --> 16:24.879
whether it's a silent notification.
16:24.880 --> 16:27.959
And so this won't, this won't make it make noise you can do
16:27.960 --> 16:29.559
or like make it have a noise
16:29.560 --> 16:31.679
and so you can have it make sure
16:31.680 --> 16:33.119
it's pop on this way the screen
16:33.120 --> 16:37.039
and then yeah you can just pick you can just pick whatever ringtone you want
16:37.040 --> 16:38.679
and you can make it look like yeah
16:38.680 --> 16:42.559
and then obviously you have like the whole uh volume setting
16:42.560 --> 16:44.559
so you can like when you're when you're uh when you're working
16:44.560 --> 16:50.519
you know you can just set the volume pretty high
16:50.520 --> 16:51.679
so if you set if you do happen
16:51.680 --> 16:55.719
to set your phone kind of away You set the volume high,
16:55.720 --> 16:57.239
maybe make a really annoying sound,
16:57.240 --> 17:00.759
a loud sound you won't miss. And then, yeah, you'll be set.
17:00.760 --> 17:02.159
So that works.
17:02.160 --> 17:04.639
That was actually one of the biggest surprises.
17:04.640 --> 17:08.599
I wasn't expecting that to work so nice.
17:08.600 --> 17:17.279
One of the next question relates to the unexpected keyboard.
17:17.280 --> 17:19.399
Question is, have you tried other keyboards,
17:19.400 --> 17:20.399
such as Hacker's Keyboard?
17:20.400 --> 17:27.119
Not recently. I haven't, so I couldn't compare them.
17:27.120 --> 17:31.359
Fair enough. Another keyboard question.
17:31.360 --> 17:34.399
Have you tried Flickboard on F-Droid?
17:34.400 --> 17:37.959
The commenter says, this is the craziest keyboard.
17:37.960 --> 17:44.559
You use one thumb. Oh, that is interesting. Let me see.
17:44.560 --> 17:48.879
Flickboard. Flickboard. Yeah, I'll have to try that.
17:48.880 --> 17:53.119
I'm curious to get the key bindings done.
17:53.120 --> 17:57.359
I wonder if the key bindings and all that work.
17:57.360 --> 18:01.279
I hope that's interesting. I'll definitely look into that.
18:01.280 --> 18:02.359
So I'll hold on just a moment
18:02.360 --> 18:04.239
as people are typing in more questions.
18:04.240 --> 18:06.759
A good moment to just thank you for the talk.
18:06.760 --> 18:09.719
It's personally, it's one of my favorite things
18:09.720 --> 18:14.559
to see at EmacsConf is, you know, a glimpse into a world
18:14.560 --> 18:17.679
that kind of isn't mine, right?
18:17.680 --> 18:22.799
but it shows how, you know, Emacs is sort of
18:22.800 --> 18:25.999
the bazaar in the cathedral
18:26.000 --> 18:28.439
and bazaar sense of we're all just here
18:28.440 --> 18:31.839
sort of hauling our bags of toys
18:31.840 --> 18:35.679
into the center square and, you know, making a,
18:35.680 --> 18:38.439
you know, I don't know if it's a house of cards
18:38.440 --> 18:40.319
or what exactly it is,
18:40.320 --> 18:43.559
but it, you know, it's managing to keep me afloat personally.
18:43.560 --> 18:47.239
And I just appreciate your, you know,
18:47.240 --> 18:48.519
kind of expanding my world.
18:48.520 --> 18:53.759
It's pretty cool. Yeah, definitely. Yeah, I mean, I agree.
18:53.760 --> 19:01.079
There's a lot of different, yeah. So, next commenter.
19:01.080 --> 19:05.359
I'm curious, oh, sorry, I skipped one here.
19:05.360 --> 19:07.399
This user interface is simplified,
19:07.400 --> 19:09.639
but still keyboard based.
19:09.640 --> 19:11.959
Have you thought about ways to make it more touch-based?
19:11.960 --> 19:16.039
Good question. Yeah, yeah, yeah.
19:16.040 --> 19:19.599
So the only thing currently, I think,
19:19.600 --> 19:22.119
of specific touch-based functionality I have,
19:22.120 --> 19:25.399
which, so this is like, so let's see,
19:25.400 --> 19:37.679
it's Control X, Control Plus,
19:37.680 --> 19:40.159
I think that's the, okay, that wrong,
19:40.160 --> 19:42.959
that key binding wrong, what was it? Okay, whatever.
19:42.960 --> 19:45.559
Yeah, so in terms of touch command,
19:45.560 --> 19:47.839
so pressing on a headline will actually unfold it
19:47.840 --> 19:50.799
and move your cursor to the next field that you,
19:50.800 --> 19:54.639
yeah, so like, yeah, at the beginning of the table.
19:54.640 --> 19:56.959
So like, there's that, yeah, and so.
19:56.960 --> 20:02.399
It sounds like that is something you're thinking about.
20:02.400 --> 20:03.639
Yeah, exactly.
20:03.640 --> 20:05.999
Like, you know, maybe like a little thing at the bottom,
20:06.000 --> 20:09.559
like, so this thing has the, this app has this,
20:09.560 --> 20:10.839
if you notice, like, if you do something,
20:10.840 --> 20:12.479
it has this rest timer at the bottom.
20:12.480 --> 20:14.639
So I mean, it wouldn't be,
20:14.640 --> 20:16.599
it wouldn't be pretty, it wouldn't be,
20:16.600 --> 20:18.799
it seems quite doable to just have like,
20:18.800 --> 20:19.839
maybe something at the bottom,
20:19.840 --> 20:21.319
like for a timer,
20:21.320 --> 20:24.159
and then you can just like plus 15 seconds or cancel it
20:24.160 --> 20:25.239
or, you know, just,
20:25.240 --> 20:27.279
and then those could all be just like touch based.
20:27.280 --> 20:30.559
And so, yeah. And then obviously just like,
20:30.560 --> 20:36.119
just like classic Emacs, the Emacs,
20:36.120 --> 20:43.359
like clicking actions, they just, yeah,
20:43.360 --> 20:44.159
they work just fine.
20:44.160 --> 20:47.439
Like, so there's no like weird Android touch thing
20:47.440 --> 20:48.359
you have to worry about.
20:48.360 --> 20:52.559
So let me ask a question of my own here.
20:52.560 --> 20:57.199
Just thinking about that myself, how would you, you know,
20:57.200 --> 21:00.119
ideally approach that as that you'd most prefer
21:00.120 --> 21:02.879
to sort of dive into yourself?
21:02.880 --> 21:07.919
Or would you think about factoring that out into
21:07.920 --> 21:12.159
like some kind of org touch higher level API or?
21:12.160 --> 21:19.679
Oh, I mean, personally, personally, I mean, I mean,
21:19.680 --> 21:21.279
I think just like the clicking
21:21.280 --> 21:28.279
and just like adding a lambda to it. That works.
21:28.280 --> 21:35.759
I mean, that feels like it works just fine.
21:35.760 --> 21:41.639
And you can add the code, like the command right there.
21:41.640 --> 21:45.439
So it's all like, yeah, it's all, I mean,
21:45.440 --> 21:49.159
and that's kind of a nice thing is like having everything like close,
21:49.160 --> 21:54.159
just like not having those, a lot of layers of abstraction.
21:54.160 --> 22:03.279
It's just like, you have a Lambda to the click and then just do.
22:03.280 --> 22:06.439
Yeah, just do. That was my experience too.
22:06.440 --> 22:09.599
This is a few years several years ago at ENAC's conference,
22:09.600 --> 22:13.079
we were shocked to learn just how usable,
22:13.080 --> 22:18.559
this is echoing a comment I see from Elip Energo on IRC,
22:18.560 --> 22:21.479
who says, touch seems so wildly usable nowadays,
22:21.480 --> 22:22.399
that's so awesome.
22:22.400 --> 22:25.159
And that was really my experience too with Dungeon.
22:25.160 --> 22:28.719
We were just working on it, we got the fog of war going,
22:28.720 --> 22:32.439
and then just took it onto a touchscreen laptop at the time,
22:32.440 --> 22:33.959
and we're just shocked to learn,
22:33.960 --> 22:37.479
you know, everything just worked. Yeah.
22:37.480 --> 22:38.639
Maybe like the hardest thing
22:38.640 --> 22:40.559
is actually just the default font size.
22:40.560 --> 22:42.559
You know, you have to like, you can't,
22:42.560 --> 22:44.279
you can't have your font too small or you'll,
22:44.280 --> 22:46.319
you'll like, you'll touch, you'll,
22:46.320 --> 22:48.279
you'll miss touch things a lot. Yeah.
22:48.280 --> 22:50.159
Well, there's no font size
22:50.160 --> 22:52.999
large enough to make me, you know,
22:53.000 --> 22:58.159
to make me comfortable on a smart device, unfortunately.
22:58.160 --> 23:00.599
But, but that, I think it may be a me problem.
23:00.600 --> 23:04.439
I think this question we might've missed. So the file sync.
23:04.440 --> 23:12.679
Yeah, so the file sync in terms of what's worked for me,
23:12.680 --> 23:14.039
I did have to play around with this a lot.
23:14.040 --> 23:15.999
Let me go ahead and read it out.
23:16.000 --> 23:18.519
You mentioned file sync, what have you found works well for you?
23:18.520 --> 23:21.319
Sorry. Yeah, yeah, yeah.
23:21.320 --> 23:25.319
So in terms of what, yeah, I did have to play around with this a lot,
23:25.320 --> 23:28.639
but sync thing fork is what I eventually settled on.
23:28.640 --> 23:34.959
I mean, this is another thing that, I mean, I don't,
23:34.960 --> 23:36.319
it wouldn't nearly be as usable,
23:36.320 --> 23:39.679
like Emacs wouldn't be nearly usable without it.
23:39.680 --> 23:41.319
So syncing fork essentially, okay.
23:41.320 --> 23:44.559
And then I also have like a droplet on DigitalOcean,
23:44.560 --> 23:47.399
just like, so that's kind of like the whole,
23:47.400 --> 23:49.879
that's kind of like what bridges it together.
23:49.880 --> 23:52.519
So like, so my Emacs can sync to that,
23:52.520 --> 23:56.559
and then my machine also syncs to that.
23:56.560 --> 24:00.719
And so like, I don't have to have them
24:00.720 --> 24:06.359
both on the same time. It's just there, that copy.
24:06.360 --> 24:09.599
And so that works pretty well.
24:09.600 --> 24:13.559
I also found that editing code in general,
24:13.560 --> 24:15.359
I think this also goes
24:15.360 --> 24:19.919
with the development experience question.
24:19.920 --> 24:22.639
So I'm curious about the development experience.
24:22.640 --> 24:24.639
Do you do everything on the phone? And that's the thing.
24:24.640 --> 24:27.119
None of my development in general is done on the phone.
24:27.120 --> 24:32.439
just because, for one, my muscle memory isn't there,
24:32.440 --> 24:38.399
and two, just in general, typing on a virtual keyboard on the phone,
24:38.400 --> 24:40.119
it's just really slow.
24:40.120 --> 24:47.159
So yeah, all the development is done on my machine,
24:47.160 --> 24:52.119
but then there's the problem of you have to have an init.l in your Android,
24:52.120 --> 24:55.159
and so you're going to have to write, you know,
24:55.160 --> 24:56.919
I found like you'd have to like,
24:56.920 --> 24:58.279
when you first get Emacs set up,
24:58.280 --> 25:01.239
you might have to like write some, I don't know,
25:01.240 --> 25:03.959
like you'll kind of have to like get into your init file
25:03.960 --> 25:04.479
and then just like,
25:04.480 --> 25:06.999
maybe just like start to put things together.
25:07.000 --> 25:09.759
But the cool thing is with SyncThinkFork,
25:09.760 --> 25:15.519
I'm syncing my, I'm setting it to load off of a sync directory.
25:15.520 --> 25:18.559
Like this, this init file,
25:18.560 --> 25:21.159
my Android file is synced with my machine.
25:21.160 --> 25:24.319
So if I wanted to, I could just edit it on my machine
25:24.320 --> 25:25.879
and just have that synced automatically.
25:25.880 --> 25:28.839
So that makes like the whole, like in it,
25:28.840 --> 25:31.879
cause like it's, it's such a, like, that is one of the,
25:31.880 --> 25:33.079
it's just like getting,
25:33.080 --> 25:36.879
sit writing your init L and M in Emacs on Android
25:36.880 --> 25:37.839
is just kind of a.
25:37.840 --> 25:39.359
We do have one more question.
25:39.360 --> 25:41.479
I can't help but throw in a comment there.
25:41.480 --> 25:43.759
I think that's like.
25:43.760 --> 25:47.519
That's an extremely good tip, right?
25:47.520 --> 25:49.959
That if we're, as we're exploring Android,
25:49.960 --> 25:52.839
we want to think about that as
25:52.840 --> 25:55.759
adding support for another port of Emacs.
25:55.760 --> 25:58.959
So the whole dance of, oh, I took, you know,
25:58.960 --> 26:01.239
I took, you know, I took my init
26:01.240 --> 26:04.479
and I wanted to use it on BSD
26:04.480 --> 26:06.439
after mostly using GNU Linux.
26:06.440 --> 26:09.119
Now we're going in and we're looking at our Emacs.
26:09.120 --> 26:11.279
all of our Emacs and it stuff
26:11.280 --> 26:13.839
and thinking about compatibility,
26:13.840 --> 26:15.199
turning features on and off
26:15.200 --> 26:19.959
based on the OS that we're running underneath and so on.
26:19.960 --> 26:22.119
I think that's pretty heads up advice.
26:22.120 --> 26:24.759
Let me read out this other question.
26:24.760 --> 26:28.199
Have you thought about integrating cardio tracking
26:28.200 --> 26:30.559
like time runs, bike rides, and so on?
26:30.560 --> 26:34.319
Yes, I definitely thought about that.
26:34.320 --> 26:36.599
And that might be another thing
26:36.600 --> 26:38.479
where a touch interface might be helpful.
26:38.480 --> 26:41.559
I don't know if I can easily pull it up,
26:41.560 --> 26:47.199
but the app itself, oh yeah, here it is.
26:47.200 --> 26:50.199
So you can see kind of how they have,
26:50.200 --> 26:53.279
and you can kind of see how this fits.
26:53.280 --> 26:55.119
This is like an org, you can see
26:55.120 --> 26:57.399
that these are just tables, right?
26:57.400 --> 26:59.239
This is just like this whole interface in general,
26:59.240 --> 27:02.279
just like kind of screams like an org mode,
27:02.280 --> 27:05.119
file with you have you have your different headings
27:05.120 --> 27:06.559
like here's a warm-up heading
27:06.560 --> 27:07.839
and then you have the tables
27:07.840 --> 27:09.879
and you know you could just like envision
27:09.880 --> 27:12.839
how you could have a org table
27:12.840 --> 27:15.039
with one of the columns called time
27:15.040 --> 27:18.439
and then you could just imagine like there'd be a button there
27:18.440 --> 27:21.159
and you can just just have it click,
27:21.160 --> 27:24.279
and then you'd have a timer in the background
27:24.280 --> 27:25.799
that would update this timer.
27:25.800 --> 27:32.599
It's so, I mean, conceptually, there's nothing really,
27:32.600 --> 27:35.799
it conceptually maps really well to this.
27:35.800 --> 27:41.559
So yeah, I mean, that's definitely something.
27:41.560 --> 27:44.439
That's awesome. Great answer.
27:44.440 --> 27:47.759
So I think we're just at about 90 seconds left.
27:47.760 --> 27:50.119
Perfect amount of time, I think, to just wrap up.
27:50.120 --> 27:52.199
Closing thoughts. I'll share mine first.
27:52.200 --> 27:53.759
Really appreciate you, Zach.
27:53.760 --> 27:56.639
Thank you for putting this talk together.
27:56.640 --> 27:59.359
I think this is the type of talk
27:59.360 --> 28:01.239
that's really going to tie the room together
28:01.240 --> 28:07.559
for people that may be, you know, not sure how they can take
28:07.560 --> 28:12.719
although they've been interested in that,
28:12.720 --> 28:16.399
this can be a really good way to kind of open up the world.
28:16.400 --> 28:20.319
Thank you. Thank you for putting it together.
28:20.320 --> 28:22.439
Yeah, yeah, yeah, yeah, I would just say
28:22.440 --> 28:24.159
like definitely just try things out.
28:24.160 --> 28:25.359
Like if you think, you know,
28:25.360 --> 28:26.439
they're just like random ideas,
28:26.440 --> 28:30.319
like a book tracking app or like a recipe app,
28:30.320 --> 28:33.479
like, you know, there's a lot of things
28:33.480 --> 28:35.599
that you do on your mobile device
28:35.600 --> 28:37.719
that aren't like banking apps that you could easily,
28:37.720 --> 28:39.759
that seem like they could be done in Emacs.
28:39.760 --> 28:42.479
So yeah, just try different things out
28:42.480 --> 28:47.239
and I would love to hear what other people do. Bravo.
28:47.240 --> 28:52.519
I appreciate it once again, you're coming together
28:52.520 --> 28:56.639
and especially you're doing it live.
28:56.640 --> 29:00.079
I know that as a conference, we have a lot of preference
29:00.080 --> 29:01.479
for those recorded talks
29:01.480 --> 29:02.759
and getting the captioning together,
29:02.760 --> 29:05.319
but I just have a special place in my heart
29:05.320 --> 29:07.679
for the energy that comes with a live talk
29:07.680 --> 29:12.560
and I appreciate you doing it. Thanks for putting this on.
|