summaryrefslogtreecommitdiffstats
path: root/2022/info/sqlite-after.md
blob: 974f032833b542ebd48cdb815606234d3edd155d (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
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
<!-- Automatically generated by emacsconf-publish-after-page -->


<a name="sqlite-mainVideo-transcript"></a>
# Transcript

[[!template new="1" text="""Hello. I'm Andrew Hyatt. I've been working on Emacs,""" start="00:00:00.000" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""with Emacs, and to some extent""" start="00:00:08.556" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""on Emacs for a while. I've written the WebSockets library""" start="00:00:10.540" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and Emacs calc tutorials. I've enjoyed use of""" start="00:00:15.273" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""many of everyone's incredible packages.""" start="00:00:20.046" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""So my thesis for this talk, why I'm giving this talk,""" start="00:00:24.640" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""is that I'm interested in SQLite.""" start="00:00:27.133" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think we should be exploring SQLite for applications""" start="00:00:29.061" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""in ways I think the community has shied away from.""" start="00:00:34.954" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'd like to introduce the triples package as a way,""" start="00:00:37.483" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""both easy and with interesting functionality,""" start="00:00:41.951" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that will allow us to build extensible databases""" start="00:00:47.665" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""in a way that is, I think,""" start="00:00:49.154" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""a little bit unusual and perhaps compelling, I hope.""" start="00:00:52.583" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""So first of all, why SQLite?""" start="00:00:56.220" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Why is this good? Well, SQLite is now built into Emacs.""" start="00:00:59.227" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""So you get a few things out of this when you use it for data.""" start="00:01:06.080" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""First of all, it's a database.""" start="00:01:12.217" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's extremely good for data, of course.""" start="00:01:14.580" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""There's a simplicity to data manipulation""" start="00:01:16.370" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""using a database, compared to data manipulation,""" start="00:01:19.919" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that is, manipulating data in a text file.""" start="00:01:22.028" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Text files are really not built for data.""" start="00:01:25.197" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""So when typically when you need to do this,""" start="00:01:31.034" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""like I know Org Mode is--""" start="00:01:33.140" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which I'm a huge, huge Org Mode fan--""" start="00:01:35.027" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it's all about sort of data in text.""" start="00:01:38.117" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It does work, but you certainly would be""" start="00:01:41.045" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""hard pressed to make sweeping changes""" start="00:01:45.376" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to your database that is represented in text.""" start="00:01:47.360" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's just not well suited for this sort of thing.""" start="00:01:51.954" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It would take a long time,""" start="00:01:53.061" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""where the speed of SQL is incredibly impressive.""" start="00:01:54.964" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think certainly Emacs is not known""" start="00:02:00.220" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""for being extremely speedy.""" start="00:02:04.430" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think the overuse of text""" start="00:02:06.753" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""is part of this. Of course, text and using text,""" start="00:02:11.906" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""using files has awesome advantages as well.""" start="00:02:14.614" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'm really here to talk about""" start="00:02:18.468" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the other side of the coin, right?""" start="00:02:20.511" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Everyone can judge""" start="00:02:22.718" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""those advantages and disadvantages""" start="00:02:23.962" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and make their own trade-offs,""" start="00:02:24.646" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but I want to kind of""" start="00:02:25.417" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""make the pitch for SQLite.""" start="00:02:26.021" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""So let's talk about the triples package.""" start="00:02:29.870" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The triples package is a package""" start="00:02:32.860" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that is designed to give you a very generic schema.""" start="00:02:35.489" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You don't have to do,""" start="00:02:40.420" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""for most of the common operations,""" start="00:02:42.006" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""you don't have to write SQL yourself.""" start="00:02:43.292" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""A lot of stuff is built in""" start="00:02:45.517" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and is based on a very generic schema.""" start="00:02:47.925" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That is, it's a single table.""" start="00:02:51.036" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That table has, of course, fixed schema.""" start="00:02:53.840" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It basically has three columns.""" start="00:02:55.230" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It actually has four columns.""" start="00:02:57.479" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""In this talk, I'm not going to get into""" start="00:03:00.868" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the fourth column and why, but it's useful.""" start="00:03:01.194" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""So the three columns are subject, predicate,""" start="00:03:04.124" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and object. This is what it's related to""" start="00:03:07.711" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""what we call an RDF format.""" start="00:03:10.362" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""These things basically describe a link.""" start="00:03:13.909" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The link is from the subject to the object.""" start="00:03:17.140" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The link type is a predicate.""" start="00:03:20.008" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That sounds overly theoretical,""" start="00:03:23.956" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but the point is that you can describe""" start="00:03:26.086" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""a lot of things with this format.""" start="00:03:28.033" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You probably describe everything with it.""" start="00:03:32.006" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's very simple because the schema is fixed.""" start="00:03:33.330" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's only this kind of data. That means""" start="00:03:39.227" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""for your application, you define a schema""" start="00:03:42.774" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""in subject, predicate, object format.""" start="00:03:44.140" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That defines what data you can use,""" start="00:03:47.327" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""what types there are, what properties they have,""" start="00:03:50.073" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""how you can use the system,""" start="00:03:56.070" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and what is legal to do. And this is stored as data.""" start="00:03:57.215" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think as Lisp people,""" start="00:04:01.007" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think we're all very onboard""" start="00:04:03.891" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""with the fact that you have a simple way""" start="00:04:07.540" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to express everything, and you don't have these""" start="00:04:13.913" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""two systems. In this way,""" start="00:04:17.660" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""you don't have to have code as a system.""" start="00:04:18.925" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Do you have to load code to use the triples package""" start="00:04:20.872" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to make sure your schema is obeyed?""" start="00:04:24.826" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""No, it's all just built in to this database.""" start="00:04:27.917" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'll describe this. As I said,""" start="00:04:35.214" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it's a little bit abstract right now,""" start="00:04:37.037" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but it will become a lot clearer""" start="00:04:39.860" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""when we go through an example,""" start="00:04:42.049" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which we're going to do now.""" start="00:04:46.779" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""As an exercise, let's create Emacs bookmarks,""" start="00:04:50.209" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which basically are three things:""" start="00:04:56.660" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""a name, a file, and an annotation.""" start="00:04:57.346" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I may be missing out on functionality.""" start="00:05:01.039" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Of course, everything in Emacs,""" start="00:05:02.365" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""everything has lots and lots of functionality,""" start="00:05:04.773" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but let's just start with this simple thing.""" start="00:05:05.140" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""First of all, we're going to open up a database.""" start="00:05:08.050" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Pretty simple.""" start="00:05:11.100" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think there's nothing to explain there.""" start="00:05:12.104" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""But here on this line that I'm on right now,""" start="00:05:15.015" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we are saying, okay, there's going to be""" start="00:05:19.107" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""a type called bookmark.""" start="00:05:21.433" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's going to have the following properties.""" start="00:05:24.840" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""First, a file, which is unique and a string.""" start="00:05:26.827" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The second is an annotation,""" start="00:05:29.179" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which is again unique and a string.""" start="00:05:31.765" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Then we're going to have another type called named.""" start="00:05:34.318" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""First of all, why is it named as part of bookmark?""" start="00:05:37.865" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As I'll get into, it's interesting""" start="00:05:39.809" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""when you start sharing this database""" start="00:05:45.563" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""with other things, not just bookmarks, but other types.""" start="00:05:48.512" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Bookmarks are very similar to many other things""" start="00:05:51.366" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that you might want to expand into.""" start="00:05:54.617" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Those other things have names,""" start="00:05:56.724" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but they're not bookmarks.""" start="00:05:57.087" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's nice to separate these concerns out""" start="00:05:58.270" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and just have another type called named,""" start="00:06:04.124" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which just basically has a name.""" start="00:06:08.373" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We can execute this.""" start="00:06:12.780" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's not interesting to look at these.""" start="00:06:15.747" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that is not all that useful for anything,""" start="00:06:21.440" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It outputs something""" start="00:06:21.799" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but that's okay. What's done is, actually,""" start="00:06:25.908" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it's created a database""" start="00:06:28.015" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and it's populated it with the schema.""" start="00:06:32.263" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We can look at this.""" start="00:06:34.046" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We won't go through all of this""" start="00:06:41.479" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""because it's a little bit too much""" start="00:06:43.603" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""for a short presentation like this,""" start="00:06:44.189" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but you could see that there's something here""" start="00:06:46.037" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that's like, oh, we have a subject bookmark.""" start="00:06:48.186" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We have a property base/type.""" start="00:06:52.500" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That just means that there's a property""" start="00:06:56.032" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that's defined by the base.""" start="00:06:58.879" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This means this is from the triples package itself.""" start="00:07:00.563" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's not some other package.""" start="00:07:02.249" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Third is, what is the type of this object?""" start="00:07:08.940" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's a schema. This thing could be many types.""" start="00:07:11.526" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As I said, if you have a--""" start="00:07:17.060" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we haven't seen an example yet,""" start="00:07:19.151" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but if you have a bookmark,""" start="00:07:20.236" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it's going to have a name type""" start="00:07:21.100" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and a bookmark type.""" start="00:07:23.687" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Everything is multi-typed""" start="00:07:25.695" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and that's kind of a feature""" start="00:07:26.720" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""of this kind of storage system.""" start="00:07:28.147" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'm not going to go through everything,""" start="00:07:32.138" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but you can see it's all there in triples,""" start="00:07:33.140" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the whole schema, everything we just did.""" start="00:07:35.866" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""Let's create a bookmark.  Again,""" start="00:07:40.740" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we're going to connect to our database""" start="00:07:42.646" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and we're going to basically set""" start="00:07:46.998" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""an entire subject.""" start="00:07:49.247" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The subject is, it's basically like an entity.""" start="00:07:52.553" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're going to define a whole entity""" start="00:07:54.240" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""or you could refer to it as an object.""" start="00:07:56.106" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That's a perfectly fine way to look at it, I think.""" start="00:08:00.677" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's going to have some identifier.""" start="00:08:03.910" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That identifier could be anything.""" start="00:08:04.357" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It doesn't have to be a string.""" start="00:08:06.724" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It could really be anything, but we're going""" start="00:08:07.432" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to give it a string called emacs-init.""" start="00:08:09.260" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It does not matter what this identifier is,""" start="00:08:11.370" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""at least for our purposes.""" start="00:08:13.299" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It does matter when you're linking to it,""" start="00:08:17.809" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but I think nothing that I'm about to show you.""" start="00:08:19.915" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This could truly be anything""" start="00:08:22.264" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""because it has a separate name.""" start="00:08:25.831" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'm giving it a name here, which is init.""" start="00:08:28.180" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'm just specifying the named type here""" start="00:08:32.133" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and I'm specifying the bookmark type here""" start="00:08:34.918" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and its values. We're going to do that.""" start="00:08:38.048" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Now, if we look, we see everything we saw before,""" start="00:08:43.220" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but now we have subject emacs-init.""" start="00:08:47.770" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It has a type and it's named.""" start="00:08:52.247" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We also see the same thing two lines down.""" start="00:08:55.974" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This type is also a bookmark,""" start="00:08:57.220" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but the name is init in the named/name,""" start="00:08:58.265" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which is like the type is name, named,""" start="00:09:02.820" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and the property is name. It's init.""" start="00:09:05.967" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As you can see, this is just""" start="00:09:08.753" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""how everything looks.""" start="00:09:12.662" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's pretty straightforward""" start="00:09:16.332" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and you can retrieve it.""" start="00:09:18.357" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Now, we're looking at the database,""" start="00:09:19.319" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but you don't really have to""" start="00:09:21.604" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""look at the database for... In fact,""" start="00:09:22.690" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I think we're done looking""" start="00:09:23.219" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""at the triples format,""" start="00:09:24.223" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""because I think it's very simple.""" start="00:09:25.106" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You've already got the hang of it, I think.""" start="00:09:29.719" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""Let's retrieve that just to make sure, yes,""" start="00:09:31.366" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we can retrieve it.""" start="00:09:33.070" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're going to retrieve it and say, okay,""" start="00:09:37.981" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""what do we get when we load the emacs-init subject?""" start="00:09:38.248" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Well, we get a plist of all of its properties,""" start="00:09:43.287" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which then you can use in your application.""" start="00:09:48.698" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""There's many more ways to retrieve""" start="00:09:55.631" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and there's many more ways to save.""" start="00:09:57.456" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""In fact, I think the way I did it here""" start="00:09:59.380" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""with set subject is probably not""" start="00:10:01.905" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the right way to do it most of the time.""" start="00:10:04.016" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's usually because it'll erase everything.""" start="00:10:06.782" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's only really to be used when""" start="00:10:08.128" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""you're sure you control all the data,""" start="00:10:13.740" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but you're never sure because there could be""" start="00:10:15.711" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""other packages that are also using this database,""" start="00:10:16.400" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""they could have their own data.""" start="00:10:19.611" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You don't want to erase""" start="00:10:20.696" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""all the other Emacs init subject data.""" start="00:10:21.343" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""In this case, we did because""" start="00:10:25.015" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we are confident it was a new entity,""" start="00:10:27.700" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but in most cases, the right thing to do is""" start="00:10:30.811" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""just set it by type. Just say,""" start="00:10:31.336" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we're just going to set the bookmark type,""" start="00:10:34.290" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which is... The properties are this,""" start="00:10:36.677" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and then the name type""" start="00:10:37.223" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and the properties are that.""" start="00:10:38.105" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That's a way that you could do things.""" start="00:10:42.815" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""There's also many retrieval types.""" start="00:10:44.900" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The retrieval types:""" start="00:10:48.527" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""you can retrieve by a number of different ways,""" start="00:10:53.756" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which I'm not going to get into,""" start="00:10:56.404" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but you can read about in either the source""" start="00:10:58.870" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""or the readme in the package.""" start="00:11:01.242" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""We have backlinks as well.""" start="00:11:10.034" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Let me explain what backlinks are.""" start="00:11:14.540" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""There's another feature of the triples.""" start="00:11:15.863" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As I mentioned, these things""" start="00:11:17.173" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""can be thought about as links,""" start="00:11:19.861" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but what could be a link in one direction""" start="00:11:21.850" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""could also be a link in the other direction,""" start="00:11:23.798" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and we basically get this for free.""" start="00:11:25.805" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Here's an example where we are again""" start="00:11:28.396" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""connecting toward bookmark. Here we're going to""" start="00:11:33.808" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""add a new type called tagged.""" start="00:11:35.753" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're going to give everything in tags.""" start="00:11:38.224" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Here we're saying, okay, there's a type called tagged""" start="00:11:41.614" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and it has a property called tags.""" start="00:11:45.525" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This is not unique, so it's a list basically.""" start="00:11:49.235" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's a list of string.""" start="00:11:52.060" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""There also is a type called tag.""" start="00:11:54.327" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This is for things that are tags themselves.""" start="00:11:58.676" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Then it has a type called numbers""" start="00:12:01.403" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and it has what we call a virtual reversed property.""" start="00:12:06.128" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's virtual because it's not actually stored.""" start="00:12:18.004" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We just compute it by reversing""" start="00:12:21.076" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the subject and the object.""" start="00:12:23.742" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This is on tagged tags. When we query this,""" start="00:12:24.307" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we can just say, okay,""" start="00:12:29.260" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""what are all the subjects""" start="00:12:32.007" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that have tagged tags of me, the tag?""" start="00:12:33.269" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""In fact, let me demonstrate that for you.""" start="00:12:38.860" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're going to set the type on emacs-init.""" start="00:12:39.366" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're going to add the &quot;tagged&quot; type.""" start="00:12:42.140" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This is the alternate way of setting data""" start="00:12:45.071" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that I mentioned.""" start="00:12:47.018" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This won't erase anything else.""" start="00:12:48.740" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're just adding something here.""" start="00:12:49.925" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're adding this type &quot;tagged&quot;""" start="00:12:51.753" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to our previous bookmark emacs-init.""" start="00:12:54.743" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We're going to add emacs and config""" start="00:12:59.954" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""as the tags. We're going to then""" start="00:13:01.059" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""set emacs as a tag and config as a tag.""" start="00:13:06.867" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That just lets us have this virtual property.""" start="00:13:11.096" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You have to do something.""" start="00:13:15.386" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You can't get it out of thin air.""" start="00:13:16.390" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The design decision we've made is:""" start="00:13:18.734" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""you at least need to tag it""" start="00:13:23.427" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""before you get the free property.""" start="00:13:25.509" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""What you should see... Let's try it out.""" start="00:13:32.660" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We got the subject config,""" start="00:13:35.632" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which we've set no data on.""" start="00:13:36.038" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You can tell we're not sending any data.""" start="00:13:37.262" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""If I get that subject, the result is that""" start="00:13:40.669" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it says its members are emacs-init.""" start="00:13:44.821" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That's what a virtual reverse property.""" start="00:13:46.069" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As we tag more things, this just""" start="00:13:49.879" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""continues to work because it's just doing""" start="00:13:53.607" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""a SQL query here.""" start="00:13:55.152" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""Besides showing off the backlinks function,""" start="00:13:59.380" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""this also shows off the general way""" start="00:14:01.986" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""you can have extensible entities.""" start="00:14:04.176" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That is, it's possible that someone writes""" start="00:14:07.864" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""a bookmarks package that stores everything""" start="00:14:09.392" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""in a database, in the triples database,""" start="00:14:13.063" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but then someone else can come and say,""" start="00:14:18.055" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""okay, I'm going to define my own types""" start="00:14:21.522" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that's meant to work with this database,""" start="00:14:23.591" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""just like someone could do what I did here,""" start="00:14:25.740" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""just to add simple tagging.""" start="00:14:28.508" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's very easy to do.""" start="00:14:30.875" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This stuff is not that easy to do otherwise.""" start="00:14:32.901" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""To do this in Lisp, I would say it's a little awkward.""" start="00:14:35.932" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""With databases, again, it's not only possible,""" start="00:14:38.962" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it's relatively trivial,""" start="00:14:42.674" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""especially with this kind of database.""" start="00:14:43.499" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The benefit is it's super easy to work with.""" start="00:14:49.829" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""With this kind of generic database,""" start="00:14:53.057" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the drawback is it's not all that efficient""" start="00:14:56.042" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""as a special purpose table""" start="00:15:00.312" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that is really built for efficiencies.""" start="00:15:04.382" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""A lot of times you have to do multiple lookups""" start="00:15:06.192" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and things like that.""" start="00:15:08.820" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Again, it's a trade-off for various things.""" start="00:15:09.443" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As you can see, this is like""" start="00:15:11.986" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""one database for everything.""" start="00:15:19.901" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""That means that we don't have to all""" start="00:15:22.067" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""contribute to one giant database.""" start="00:15:29.179" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""All the packages that use triples,""" start="00:15:31.945" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it doesn't have to be one database,""" start="00:15:33.053" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but it's cool if it does.""" start="00:15:35.180" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I don't know what I want to happen""" start="00:15:37.087" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""or what I expect to happen,""" start="00:15:39.394" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but I think an interesting property is that""" start="00:15:41.220" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""this is a way for lots of data to live together""" start="00:15:43.069" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and build off each other in ways that I think""" start="00:15:45.400" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""are hard to do with other forms of table layouts""" start="00:15:49.607" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and things like that.""" start="00:15:55.780" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""Let's talk about a use of it,""" start="00:15:57.008" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which is the EKG package.""" start="00:15:59.654" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The EKG package is something I've written""" start="00:16:02.644" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to demonstrate the triples library""" start="00:16:04.590" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and use it for something I think is interesting,""" start="00:16:07.780" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which is personal knowledge management systems""" start="00:16:09.410" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""of the same type, of the same genre""" start="00:16:12.420" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that Org Roam is,""" start="00:16:14.385" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but with different design decisions.""" start="00:16:15.287" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I'll show it in action for a little bit.""" start="00:16:18.434" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Let's just look at... it's all tag-based,""" start="00:16:26.532" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""same kind of tags we saw before""" start="00:16:28.360" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""when we were playing around""" start="00:16:30.186" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""with the bookmarks example application,""" start="00:16:32.233" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""What I want to show is: I can look at a tag.""" start="00:16:35.224" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but everything here is...""" start="00:16:35.560" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I could see notes with that tag.""" start="00:16:37.476" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Everything you see here is in the database,""" start="00:16:40.288" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""no files involved.""" start="00:16:42.633" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""All of this is just a thing""" start="00:16:43.199" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that's an entire object, the entire string.""" start="00:16:46.405" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It works. It has tags.""" start="00:16:49.391" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You can see not only this tag,""" start="00:16:56.082" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but all the other tags associated with it""" start="00:16:59.230" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and their notes.""" start="00:17:01.355" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's kind of an interesting way to do things.""" start="00:17:04.860" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""When you capture it, I think it's interesting.""" start="00:17:10.256" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""There's a lot of interesting design elements here.""" start="00:17:12.260" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This tags thing is not part of the buffer.""" start="00:17:22.276" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's not like Org Roam.""" start="00:17:25.819" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You see here in this other tags,""" start="00:17:28.752" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""these are things I've imported from Org Roam.""" start="00:17:29.117" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This is why they look like they do.""" start="00:17:31.925" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""They have their own titles because""" start="00:17:32.231" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I just wrote them all in Org Roam.""" start="00:17:34.020" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""What it looks like, really, for these notes""" start="00:17:37.890" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""is that it's just text.""" start="00:17:39.458" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You really don't have to bother with this metadata.""" start="00:17:41.024" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""If I want another tag like pancakes,""" start="00:17:44.616" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I can just add it here. Again, these tags""" start="00:17:46.283" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""will turn into data, triple data.""" start="00:17:53.655" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""The text is just a triple date[??] as well,""" start="00:17:56.740" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but different to triple data.""" start="00:17:59.826" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""All these things are like that.""" start="00:18:01.970" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""You can open up any of these things, et cetera.""" start="00:18:08.363" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""I think the interesting thing here""" start="00:18:12.772" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""is to see the code. It's not super interesting""" start="00:18:16.683" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to look at code for too long,""" start="00:18:22.597" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but we don't have that long.""" start="00:18:23.980" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Whenever we connect--""" start="00:18:26.992" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I just want to point out a few things.""" start="00:18:27.655" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Whenever we connect, we have a schema.""" start="00:18:28.820" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We just do this. Every time we connect,""" start="00:18:29.206" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we just make sure it has the right schema.""" start="00:18:31.176" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This way, the user is up to date.""" start="00:18:33.164" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""This schema just looks exactly like""" start="00:18:36.315" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""stuff I showed you in the triples""" start="00:18:38.301" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""when we were looking at bookmarks.""" start="00:18:41.688" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's not complicated.""" start="00:18:43.533" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I even have stuff here with people""" start="00:18:45.100" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to use this as a person database.""" start="00:18:48.211" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I haven't figured out how I'm going to use this yet,""" start="00:18:51.539" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but you can see just to do this,""" start="00:18:52.105" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""it's really trivial and it's pretty easy.""" start="00:18:54.274" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Let's show a few other things,""" start="00:19:01.914" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""like getting all the tags.""" start="00:19:02.499" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Here, we could just say,""" start="00:19:05.845" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""let's get the subjects of type tag.""" start="00:19:07.991" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""We have all the triples,""" start="00:19:10.380" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""all the ones that are of type tag,""" start="00:19:12.903" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""all the things that have a subject.""" start="00:19:15.850" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""All the subjects that have links,""" start="00:19:18.778" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""that have this type, this tag in it,""" start="00:19:22.146" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we can return them all.""" start="00:19:28.338" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""of all these objects.""" start="00:19:30.426" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Basically, it just gives you a list""" start="00:19:30.660" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Again, you can think of these things as objects.""" start="00:19:32.675" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""All the objects of type tag,""" start="00:19:33.244" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""we'll just get them all. Super, super simple.""" start="00:19:35.434" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Triples gives you this functionality""" start="00:19:37.321" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""out of the box. It's not that complicated.""" start="00:19:39.586" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""What I would like to show,""" start="00:19:43.780" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and that shows my thesis for this whole talk,""" start="00:19:45.168" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""is this rename tag. Now, think about""" start="00:19:49.519" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""how you would rename a tag in Org Roam""" start="00:19:52.786" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""or anything where the tag is part of the files.""" start="00:19:54.151" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""It's like how you would re-tag everything""" start="00:20:03.014" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""in Org Mode. It's complicated and error-prone""" start="00:20:05.280" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and slow. This is anything,""" start="00:20:09.870" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""this is instantaneous and super easy.""" start="00:20:12.557" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Look, that's it. There's not that many places""" start="00:20:14.764" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""for an error to live here.""" start="00:20:17.256" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""One thing I would like to point out""" start="00:20:19.540" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""is that we are doing direct,""" start="00:20:21.508" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""not everything has to go through""" start="00:20:23.338" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the triples package. Maybe it should,""" start="00:20:24.321" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but the triples package is a fixed format,""" start="00:20:28.293" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""which is why it's okay--""" start="00:20:31.660" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""whether it's a good idea, I'm not sure,""" start="00:20:33.907" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""but it's okay for client packages""" start="00:20:34.070" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""to just directly manipulate the tables.""" start="00:20:39.864" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Here, we're just doing it just to""" start="00:20:42.834" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""update all the tags""" start="00:20:43.938" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""and then remove and set types""" start="00:20:45.266" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""so that the correct thing happens.""" start="00:20:47.892" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""As you can see, it's super, super simple.""" start="00:20:49.120" video="mainVideo-sqlite" id="subtitle"]]
[[!template new="1" text="""I think this proves my thesis about""" start="00:20:52.147" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""the advantages of applications with SQLite.""" start="00:20:55.375" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Thank you for listening.""" start="00:21:01.527" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I hope this puts ideas in your minds""" start="00:21:02.431" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""about taking advantage of this functionality.""" start="00:21:05.877" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""I hope to see more things""" start="00:21:09.828" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""using the triples library""" start="00:21:11.936" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""or otherwise that take advantage of this.""" start="00:21:12.180" video="mainVideo-sqlite" id="subtitle"]]
[[!template text="""Thank you for your time.""" start="00:21:16.018" video="mainVideo-sqlite" id="subtitle"]]



Captioner: sachac

Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20sqlite%3A%20Using%20SQLite%20as%20a%20data%20source%3A%20a%20framework%20and%20an%20example)


<!-- End of emacsconf-publish-after-page -->