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