summaryrefslogtreecommitdiffstats
path: root/2022/info/sqlite-after.md
diff options
context:
space:
mode:
Diffstat (limited to '2022/info/sqlite-after.md')
-rw-r--r--2022/info/sqlite-after.md874
1 files changed, 438 insertions, 436 deletions
diff --git a/2022/info/sqlite-after.md b/2022/info/sqlite-after.md
index 5ca6f99c..265cd8f0 100644
--- a/2022/info/sqlite-after.md
+++ b/2022/info/sqlite-after.md
@@ -4,444 +4,446 @@
<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"]]
+[[!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)