Transcript

[[!template new="1" text="""Search in daily workflows""" start="00:00:00.000" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Hello, my name is Zachary Romero, and today I'll be going""" start="00:00:00.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""over p-search, a local search engine in Emacs.""" start="00:00:03.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Search these days is everywhere in software, from text editors,""" start="00:00:08.116" video="mainVideo-p-search" id="subtitle"]] [[!template text="""to IDEs, to most online websites. These tools tend to fall""" start="00:00:12.399" video="mainVideo-p-search" id="subtitle"]] [[!template text="""into one of two categories. One are tools that run locally,""" start="00:00:18.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""and work by matching string to text. The most common""" start="00:00:25.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""example of this is grep. In Emacs, there are a lot of""" start="00:00:31.280" video="mainVideo-p-search" id="subtitle"]] [[!template text="""extensions which provide functionality on top of these""" start="00:00:35.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""tools, such as projectile-grep, deadgrep,""" start="00:00:38.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""consult-ripgrep. Most editors have some sort of""" start="00:00:42.389" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search current project feature. Most of the time,""" start="00:00:46.850" video="mainVideo-p-search" id="subtitle"]] [[!template text="""some of these tools have features like regular expressions,""" start="00:00:52.692" video="mainVideo-p-search" id="subtitle"]] [[!template text="""or you can specify file extension,""" start="00:00:56.394" video="mainVideo-p-search" id="subtitle"]] [[!template text="""or a directory you want to search in,""" start="00:00:59.216" video="mainVideo-p-search" id="subtitle"]] [[!template text="""but features are pretty limited.""" start="00:01:01.637" video="mainVideo-p-search" id="subtitle"]] [[!template text="""The other kind of search we use are usually hosted online,""" start="00:01:03.958" video="mainVideo-p-search" id="subtitle"]] [[!template text="""and they usually search a vast corpus of data.""" start="00:01:07.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""These are usually proprietary""" start="00:01:12.303" video="mainVideo-p-search" id="subtitle"]] [[!template text="""online services such as Google, GitHub,""" start="00:01:15.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""SourceGraph for code.""" start="00:01:18.766" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Problems with editor search tools""" start="00:01:24.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""The kind of search feature that editors""" start="00:01:24.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""usually have have a lot of downsides to them. For one, a lot""" start="00:01:28.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""of times you don't know the exact search string you're""" start="00:01:36.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""searching for. Some complicated term like this""" start="00:01:38.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""high volume demand partner, you know, do you know if...""" start="00:01:42.784" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Are some words abbreviated, is it capitalized,""" start="00:01:46.861" video="mainVideo-p-search" id="subtitle"]] [[!template text="""is it in kebab case, camel case, snake case?""" start="00:01:49.709" video="mainVideo-p-search" id="subtitle"]] [[!template text="""You often have to search all these variations.""" start="00:01:53.090" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Another downside is that the search results returned""" start="00:01:57.572" video="mainVideo-p-search" id="subtitle"]] [[!template text="""contain a lot of noise. For example,""" start="00:02:05.435" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you may get a lot of test files.""" start="00:02:07.770" video="mainVideo-p-search" id="subtitle"]] [[!template text="""If the tool hits your vendor directory,""" start="00:02:10.817" video="mainVideo-p-search" id="subtitle"]] [[!template text="""it may get a bunch of results from libraries""" start="00:02:13.538" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you're using, which most are not helpful. Another downside""" start="00:02:17.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""is that the order given is, well, there's no meaning to the""" start="00:02:22.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""order. It's usually just the search order that the tool""" start="00:02:26.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""happens to look in first.""" start="00:02:30.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Another thing is, so when you're searching, you oftentimes""" start="00:02:34.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""have to keep the state of the searches in your head. For""" start="00:02:38.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""example, you try one search, you see the results, find the""" start="00:02:41.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""results you think are relevant, keep them in your head, run""" start="00:02:46.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search number two, look through the results, kind of""" start="00:02:49.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""combine these different search results in your head until""" start="00:02:52.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you get an idea of which ones might be relevant.""" start="00:02:56.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Another thing is that the search primitives are fairly limited.""" start="00:02:59.971" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So yeah, you can search regular expressions, but you can't""" start="00:03:04.516" video="mainVideo-p-search" id="subtitle"]] [[!template text="""really define complex things like, I want to search files in""" start="00:03:10.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""this directory, and this directory, and this directory,""" start="00:03:14.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""except these subdirectories, and accept test files, and I""" start="00:03:18.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""only want files with this file extension. Criteria like""" start="00:03:22.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that are really hard to... I'm sure they're possible in tools""" start="00:03:25.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""like grep, but they're pretty hard to construct.""" start="00:03:28.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""And lastly, there's no notion of any relevance. All the""" start="00:03:34.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""results you get back, I mean, you don't know, is the search""" start="00:03:38.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""more relevant? Is it twice as relevant? Is it""" start="00:03:42.040" video="mainVideo-p-search" id="subtitle"]] [[!template text="""100 times more relevant? These tools usually don't provide""" start="00:03:43.096" video="mainVideo-p-search" id="subtitle"]] [[!template text="""such information.""" start="00:03:52.280" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Information retrieval""" start="00:03:58.233" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""There's a field called information retrieval,""" start="00:03:58.233" video="mainVideo-p-search" id="subtitle"]] [[!template text="""and this deals with this exact problem.""" start="00:04:00.395" video="mainVideo-p-search" id="subtitle"]] [[!template text="""You have lots of data you're searching for.""" start="00:04:02.617" video="mainVideo-p-search" id="subtitle"]] [[!template text="""How do you construct a search query?""" start="00:04:04.719" video="mainVideo-p-search" id="subtitle"]] [[!template text="""How do you get results back fast? How do you""" start="00:04:09.262" video="mainVideo-p-search" id="subtitle"]] [[!template text="""rank which ones are most relevant? How do you evaluate""" start="00:04:09.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""your search system to see if it's getting better or worse?""" start="00:04:14.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""There's a lot of work, a lot of books written on the topic of""" start="00:04:20.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""information retrieval. If one wants to improve""" start="00:04:23.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""searching in Emacs, then drawing inspiration from this""" start="00:04:28.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""field is necessary.""" start="00:04:31.880" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Search engine in Emacs: the index""" start="00:04:34.296" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""The first aspect of information retrieval is the index.""" start="00:04:34.296" video="mainVideo-p-search" id="subtitle"]] [[!template text="""The reverse index is what search engines use to find results really fast.""" start="00:04:41.384" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Essentially, it's a map of search term""" start="00:04:46.609" video="mainVideo-p-search" id="subtitle"]] [[!template text="""to locations where that term is located.""" start="00:04:51.455" video="mainVideo-p-search" id="subtitle"]] [[!template text="""You'll have all the terms or maybe even parts of""" start="00:04:54.739" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the terms, and then you'll have all the locations where""" start="00:04:57.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""they're located. Any query could easily look up""" start="00:04:59.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""where things are located, join results together, and""" start="00:05:02.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that's how they get the results to be really fast. For this""" start="00:05:05.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""project, I decided to forgo creating an index altogether.""" start="00:05:12.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""An index is pretty complicated to maintain because""" start="00:05:19.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""it always has to be in sync. Any time you open a file and save""" start="00:05:23.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""it, you would have to re-index, you would have to make sure""" start="00:05:27.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that file is re-indexed properly. Then you have the""" start="00:05:29.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""whole issue of, well, if you're searching in Emacs,""" start="00:05:32.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you have all these projects, this directory,""" start="00:05:36.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that directory, how do you know which? Do you always have to""" start="00:05:38.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""keep them in sync? It's quite a hard task to handle""" start="00:05:42.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that. Then on the other end, tools like ripgrep can""" start="00:05:47.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search very fast. Even though they can't search maybe on the""" start="00:05:53.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""order of tens of thousands of repositories, for a local""" start="00:05:59.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""setting, they should be plenty fast enough.""" start="00:06:03.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""I benchmarked. Ripgrep, for example, is""" start="00:06:06.040" video="mainVideo-p-search" id="subtitle"]] [[!template text="""on the order of gigabytes per second.""" start="00:06:12.240" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Definitely, it can search a few pretty big size""" start="00:06:15.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""repositories.""" start="00:06:19.240" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Search engine in Emacs: Ranking""" start="00:06:21.757" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Next main task. We decided not to use an""" start="00:06:21.757" video="mainVideo-p-search" id="subtitle"]] [[!template text="""index. Next task is how do we rank search results? So there's""" start="00:06:24.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""two main algorithms that are used these days. The first""" start="00:06:29.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""one is tf-idf, which stands for term frequency, inverse""" start="00:06:33.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""target frequency. Then there's BM25, which is sort of a""" start="00:06:36.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""modified tf-idf algorithm.""" start="00:06:43.040" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""tf-idf: term-frequency x inverse-document-frequency""" start="00:06:43.553" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""tf-idf, without going into""" start="00:06:43.553" video="mainVideo-p-search" id="subtitle"]] [[!template text="""too much detail, essentially multiplies two terms. One""" start="00:06:45.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""is the term frequency, and then you multiply it by the""" start="00:06:49.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""inverse document frequency. The term frequency is a""" start="00:06:51.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""measure of how often that search term occurs. The""" start="00:06:54.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""inverse document frequency is a measure of how much""" start="00:06:58.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""information that term provides. If the term occurs a lot,""" start="00:07:00.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""then it gets a higher score in the term frequency section.""" start="00:07:06.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""But if it's a common word that exists in a lot of documents,""" start="00:07:08.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""then its inverse document frequency goes down.""" start="00:07:12.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""It kind of scores it less. You'll find that words like the,""" start="00:07:13.901" video="mainVideo-p-search" id="subtitle"]] [[!template text="""in, is, these really common words, since they occur""" start="00:07:20.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""everywhere, their inverse document frequency is""" start="00:07:25.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""essentially zero. They don't really count towards a""" start="00:07:29.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""score. But when you have rare words that only occur in a""" start="00:07:32.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""few documents, they're weighted a lot more. So the more""" start="00:07:35.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""those rare words occur, they boost the score higher.""" start="00:07:37.680" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""BM25""" start="00:07:41.160" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""BM25 is a modification of this. It's essentially TF, it's""" start="00:07:41.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""essentially the previous one, except it dampens out terms""" start="00:07:48.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that occur more often. Imagine you have a bunch of""" start="00:07:53.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""documents. One has a term 10 times, one has a term, that same""" start="00:07:55.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""term a hundred times, another has a thousand times.""" start="00:07:59.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""You'll see the score dampens off as the number of""" start="00:08:02.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""occurrences increases. That prevents any one term from""" start="00:08:06.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""overpowering the score. This is the algorithm I ended up""" start="00:08:10.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""choosing for my implementation. So with a plan of using a""" start="00:08:16.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""command line tool like ripgrep to get term occurrences, and""" start="00:08:21.040" video="mainVideo-p-search" id="subtitle"]] [[!template text="""then using a scoring algorithm like BM25 to rank the terms,""" start="00:08:29.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""we can combine this together and create a simple search""" start="00:08:36.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""mechanism.""" start="00:08:40.080" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Searching with p-search""" start="00:08:41.200" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Here we're in the directory for the Emacs source code.""" start="00:08:41.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Let's say we want to search for the display code. We""" start="00:08:47.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""run the p-search command, starting the search engine. It""" start="00:08:53.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""opens up. We notice it has three sections, the candidate""" start="00:08:58.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""generators, the priors, and the search results. The""" start="00:09:01.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""candidate generators generates the search space we're""" start="00:09:05.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""looking on. These are all composable and you can add as""" start="00:09:10.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""many as you want. So with this, it specifies that here""" start="00:09:14.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""we're searching on the file system and we're searching in""" start="00:09:19.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""this directory. We're using the ripgrep tool to search""" start="00:09:25.240" video="mainVideo-p-search" id="subtitle"]] [[!template text="""with, and we want to make sure that we're searching only on""" start="00:09:30.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""files committed to Git. Here we see the search results.""" start="00:09:33.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Notice here is their final probability. Here, notice""" start="00:09:40.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that they're all the same, and they're the same because we""" start="00:09:45.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""don't have any search criteria specified here. Suppose""" start="00:09:47.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""we want to search for display-related code. We add a""" start="00:09:50.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""query: display.""" start="00:09:55.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So then it spins off the processes, gets the search term""" start="00:09:57.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""counts and calculates the new scores. Notice here that""" start="00:10:06.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the results that come on top are just at first glance appear""" start="00:10:10.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""to be relevant to display. Remember, if we compare""" start="00:10:15.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that to just running a ripgrep raw, notice here we're""" start="00:10:19.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""getting 53,000 results and it's pretty hard to go through""" start="00:10:25.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""these results and make sense of it.""" start="00:10:31.280" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So that's p-search in a nutshell.""" start="00:10:34.320" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Flight AF 447""" start="00:10:41.457" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Next, I wanted to talk about the story of Flight 447.""" start="00:10:41.457" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Flight 447 going from Rio de Janeiro to Paris""" start="00:10:45.983" video="mainVideo-p-search" id="subtitle"]] [[!template text="""crashed somewhere in the Atlantic Ocean""" start="00:10:49.327" video="mainVideo-p-search" id="subtitle"]] [[!template text="""on June 1st, 2009, killing everyone on board.""" start="00:10:51.510" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Four search attempts were made to find the wreckage.""" start="00:10:54.714" video="mainVideo-p-search" id="subtitle"]] [[!template text="""None of them were successful, except the finding of some debris""" start="00:10:56.895" video="mainVideo-p-search" id="subtitle"]] [[!template text="""and a dead body. It was decided that they really wanted""" start="00:11:01.076" video="mainVideo-p-search" id="subtitle"]] [[!template text="""to find the wreckage to retrieve data as to why the search""" start="00:11:05.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""occurred. This occurred two years after the""" start="00:11:09.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""initial crash. With this next search attempt, they""" start="00:11:14.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""wanted to create a probability distribution of where the""" start="00:11:19.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""crash could be. The only piece of concrete data they had""" start="00:11:23.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""was a GPS signal from the ship at 210 containing the GPS""" start="00:11:26.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""location of the plane was at 2.98 degrees north, 30.59""" start="00:11:35.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""degrees west. That was the only data they had to go off of.""" start="00:11:40.240" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So they drew a circle around that point""" start="00:11:44.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""with a radius of 40 nautical miles. They assumed that""" start="00:11:50.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""anything outside the circle would have been impossible for""" start="00:11:54.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the ship to reach. This was the starting point for""" start="00:11:57.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""creating the probability distribution of where the""" start="00:12:01.240" video="mainVideo-p-search" id="subtitle"]] [[!template text="""wreckage occurred. Anything outside the circle, they""" start="00:12:04.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""assumed it was impossible to reach.""" start="00:12:08.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""The only other pieces of data were the four failed search""" start="00:12:09.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""attempts and then some of the debris found. One thing they""" start="00:12:16.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""did decide was to look at similar crashes where control was""" start="00:12:21.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""lost to analyze where the crashes landed, compared to where""" start="00:12:26.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the loss of control started. This probability""" start="00:12:30.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""distribution, the circular normal distribution was""" start="00:12:37.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""decided upon. Here you can see that the center has a lot""" start="00:12:43.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""higher chance of finding the wreckage. As you go away""" start="00:12:47.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""from the center, the probability of finding the wreckage""" start="00:12:51.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""decreases a lot. The next thing they looked at was, well,""" start="00:12:55.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""they noticed they had retrieved some dead bodies from the""" start="00:13:02.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""wreckage. So they thought that they could calculate the""" start="00:13:05.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""backward drift on that particular day to find where the""" start="00:13:12.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""crash might've occurred. If they found bodies at a""" start="00:13:18.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""particular location, they can kind of work backwards from""" start="00:13:21.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that in order to find where the initial crash occurred.""" start="00:13:25.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So here you can see the probability distribution based off of""" start="00:13:30.666" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the backward drift model. Here you see the darker colors""" start="00:13:34.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""have a higher probability of finding the location. So""" start="00:13:40.280" video="mainVideo-p-search" id="subtitle"]] [[!template text="""with all these pieces of data, so with that circular 40""" start="00:13:46.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""nautical mile uniform distribution, with that circular""" start="00:13:50.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""normal distribution of comparing similar crashes, as well""" start="00:13:54.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""as with the backward drift, they were able to combine all""" start="00:14:02.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""three of these pieces""" start="00:14:07.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""in order to come up with a final prior distribution of where""" start="00:14:08.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the wreckage occurred. So this is what the final model""" start="00:14:14.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""they came upon. Here you can see it has that 40 nautical""" start="00:14:19.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""mile radius circle. It has that darker center, which""" start="00:14:24.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""indicates a higher probability because of the""" start="00:14:29.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""crash similarity. Then here you also see along this line""" start="00:14:32.040" video="mainVideo-p-search" id="subtitle"]] [[!template text="""has a slightly higher probability due to the backward drift""" start="00:14:38.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""distribution.""" start="00:14:50.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So the next thing is, since they had performed searches,""" start="00:14:52.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""they decided to incorporate the data from those searches""" start="00:14:56.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""into their new distribution. Here you can see places""" start="00:15:00.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""where they searched initially. If you think about it,""" start="00:15:04.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you can assume that, well, if you search for something,""" start="00:15:08.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""there's a good chance you'll find it, but not necessarily.""" start="00:15:11.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Anywhere where they searched, the probability of it""" start="00:15:14.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""finding it there is greatly reduced. It's not zero because""" start="00:15:18.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""obviously you can look for something and miss it, but it kind""" start="00:15:22.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""of reduces the probability that we would expect to find it in""" start="00:15:26.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""those already searched locations. This is the""" start="00:15:31.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""posterior distribution or distribution after counting""" start="00:15:36.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""observations made.""" start="00:15:41.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Here we can see kind of these cutouts of where the""" start="00:15:44.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""previous searches occurred. This is the final""" start="00:15:48.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""distribution they went off of to perform the subsequent""" start="00:15:53.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search. In the end, the wreckage was found at a point close to""" start="00:15:57.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the center here, thus validating this methodology.""" start="00:16:02.000" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Modifying priors""" start="00:16:06.771" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""We can see the power of this Bayesian search methodology""" start="00:16:06.771" video="mainVideo-p-search" id="subtitle"]] [[!template text="""in the way that we could take information from all the sources we had.""" start="00:16:10.333" video="mainVideo-p-search" id="subtitle"]] [[!template text="""We could draw analogies to similar situations.""" start="00:16:14.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""We can quantify these, combine them into a model,""" start="00:16:19.238" video="mainVideo-p-search" id="subtitle"]] [[!template text="""and then also update our model according to each observation we make.""" start="00:16:22.480" video="mainVideo-p-search" id="subtitle"]] [[!template text="""I think there's a lot of similarities to be drawn with""" start="00:16:27.894" video="mainVideo-p-search" id="subtitle"]] [[!template text="""searching on a computer in the sense that when we search for""" start="00:16:30.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""something, there's oftentimes a story we kind of have as to""" start="00:16:35.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""what search terms exist, where we expect to find the file.""" start="00:16:39.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""For example, if you're implementing a new feature, you'll""" start="00:16:43.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""often have some search terms in mind that you think will be""" start="00:16:46.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""relevant. Some search terms, you might think they have a""" start="00:16:49.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""possibility of being relevant, but maybe you're not sure.""" start="00:16:54.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""There's some directories where you know that they're not""" start="00:16:57.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""relevant. There's other criteria like, well, you know that""" start="00:17:02.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""maybe somebody in particular worked on this code.""" start="00:17:07.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""What if you could incorporate that information? Like, I know""" start="00:17:11.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""this author, he's always working on this feature. What if""" start="00:17:16.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""I just give the files that this person works on a higher""" start="00:17:21.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""probability than ones he doesn't work on? Or maybe you think""" start="00:17:25.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that this is a file that's committed too often. You think""" start="00:17:32.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that maybe the amount of times of commits it receives""" start="00:17:38.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""should change your probability of this file being""" start="00:17:43.440" video="mainVideo-p-search" id="subtitle"]] [[!template text="""relevant. That's where p-search comes in.""" start="00:17:47.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Its aim is to be a framework in order to incorporate all these""" start="00:17:52.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""sorts of different prior information into your searching""" start="00:17:57.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""process. You're able to say things like, I want files""" start="00:18:01.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""authored by this user to be given higher probability. I want""" start="00:18:06.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""this author to be given a lower priority. I know this author""" start="00:18:11.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""never works on this code. If he has a commit, then lower its""" start="00:18:13.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""probability, or you can specify specific paths, or you can""" start="00:18:18.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""specify multiple search terms, weighing different ones""" start="00:18:24.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""according to how you think those terms should be relevant.""" start="00:18:30.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So with p-search, we're able to incorporate information""" start="00:18:38.920" video="mainVideo-p-search" id="subtitle"]] [[!template text="""from multiple sources. Here, for example, we have a prior""" start="00:18:42.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""of type git author, and we're looking for all of the files""" start="00:18:46.280" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that are committed to by Lars. So the more commits he has,""" start="00:18:52.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the higher probability is given to that file. Suppose""" start="00:18:56.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""there's a feature I know he worked on, but I don't know the""" start="00:19:01.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""file or necessarily even key terms of it. Well, with this, I""" start="00:19:04.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""can incorporate that information.""" start="00:19:09.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So let's search again. Let's add display.""" start="00:19:12.141" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Let's see what responses we get back here. We can add""" start="00:19:16.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""as many of these criteria as we want. We can even specify that""" start="00:19:22.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the title of the file name should be a certain type. Let's""" start="00:19:27.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""say we're only concerned about C files. We add the file""" start="00:19:31.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""name should contain .c in it. With this, now we""" start="00:19:36.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""notice that all of the C files containing display authored""" start="00:19:45.400" video="mainVideo-p-search" id="subtitle"]] [[!template text="""by Lars should be given higher probability. We can""" start="00:19:51.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""continue to add these priors as we feel fit. The workflow""" start="00:19:56.280" video="mainVideo-p-search" id="subtitle"]] [[!template text="""that I found helps when searching is that you'll add""" start="00:20:02.720" video="mainVideo-p-search" id="subtitle"]] [[!template text="""criteria, you'll see some good results come up and some bad""" start="00:20:07.520" video="mainVideo-p-search" id="subtitle"]] [[!template text="""results come up. So you'll often find a pattern in those""" start="00:20:11.360" video="mainVideo-p-search" id="subtitle"]] [[!template text="""bad results, like, oh, I don't want test files, or this""" start="00:20:15.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""directory isn't relevant, or something like that. Then""" start="00:20:18.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you can update your prior distribution, adding its""" start="00:20:22.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""criteria, and then rerun it, and then it will get different""" start="00:20:27.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""probabilities for the files. So in the end, you'll have a""" start="00:20:31.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""list of results that's tailor-made to the thing you're""" start="00:20:35.160" video="mainVideo-p-search" id="subtitle"]] [[!template text="""searching for.""" start="00:20:37.640" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Importance""" start="00:20:40.405" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""There's a couple of other features I""" start="00:20:40.405" video="mainVideo-p-search" id="subtitle"]] [[!template text="""want to go through. One thing is that each of these priors,""" start="00:20:41.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""you can specify the importance. In other words, how""" start="00:20:49.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""important is this particular piece of information to your""" start="00:20:55.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search? So here, everything is of importance medium. But""" start="00:21:01.120" video="mainVideo-p-search" id="subtitle"]] [[!template text="""let's say I really care about something having the word""" start="00:21:05.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""display in it. I'm going to change its importance.""" start="00:21:07.880" video="mainVideo-p-search" id="subtitle"]] [[!template text="""Instead of medium, I'll change its importance to high.""" start="00:21:12.680" video="mainVideo-p-search" id="subtitle"]] [[!template text="""What that does essentially is things that don't have""" start="00:21:18.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""display in it are given a much bigger penalty and things with""" start="00:21:23.280" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the word display in it are rated much higher.""" start="00:21:28.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""With this, we're able to fine-tune the results that we get.""" start="00:21:28.129" video="mainVideo-p-search" id="subtitle"]]
[[!template new="1" text="""Complement or inverse""" start="00:21:38.560" video="mainVideo-p-search" id="subtitle"]]
[[!template text="""Another thing you can do is that you can add the complement or""" start="00:21:38.560" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the inverse of certain queries. Let's say you want to""" start="00:21:45.640" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search for display, but you don't want it to contain the word""" start="00:21:49.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""frame. With the complement option on, when we create this""" start="00:21:53.240" video="mainVideo-p-search" id="subtitle"]] [[!template text="""search prior, now it's going to be searching for frame, but""" start="00:21:58.040" video="mainVideo-p-search" id="subtitle"]] [[!template text="""instead of increasing the search score, it's going to""" start="00:22:01.840" video="mainVideo-p-search" id="subtitle"]] [[!template text="""decrease it if it contains the word frame.""" start="00:22:04.960" video="mainVideo-p-search" id="subtitle"]] [[!template text="""So here, things related to frame are kind of""" start="00:22:07.000" video="mainVideo-p-search" id="subtitle"]] [[!template text="""deprioritized. We can also say that we really don't want""" start="00:22:14.320" video="mainVideo-p-search" id="subtitle"]] [[!template text="""the search to contain the word frame by increasing its""" start="00:22:18.080" video="mainVideo-p-search" id="subtitle"]] [[!template text="""importance. So with all these composable pieces, we can""" start="00:22:21.600" video="mainVideo-p-search" id="subtitle"]] [[!template text="""create kind of a search that's tailor-made to our needs.""" start="00:22:27.200" video="mainVideo-p-search" id="subtitle"]] [[!template text="""That concludes this talk. There's a lot more I could talk""" start="00:22:33.413" video="mainVideo-p-search" id="subtitle"]] [[!template text="""about with regards to research, so definitely follow the""" start="00:22:35.760" video="mainVideo-p-search" id="subtitle"]] [[!template text="""project if you're interested. Thanks for watching, and I""" start="00:22:37.800" video="mainVideo-p-search" id="subtitle"]] [[!template text="""hope you enjoy the rest of the conference.""" start="00:22:40.640" video="mainVideo-p-search" id="subtitle"]]
Captioner: sachac

Q&A transcript (unedited)

[[!template text="""...starting the recording here in the chat, and I see some""" start="00:00:00.000" video="qanda-p-search" id="subtitle"]] [[!template text="""questions already coming in. So thank you so much for your""" start="00:00:03.560" video="qanda-p-search" id="subtitle"]] [[!template text="""talk, Zac, and I'll step out of your way and let you field""" start="00:00:06.040" video="qanda-p-search" id="subtitle"]] [[!template text="""some of these questions.""" start="00:00:09.360" video="qanda-p-search" id="subtitle"]] [[!template text="""Sounds good. All right, so let's see. I'm going off of the""" start="00:00:10.280" video="qanda-p-search" id="subtitle"]] [[!template text="""question list.""" start="00:00:22.000" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: Do you think a reduced version of this functionality could be integrated into isearch?""" start="00:00:22.970" video="qanda-p-search" id="subtitle"]]
[[!template text="""So the first one is about having reduced""" start="00:00:22.970" video="qanda-p-search" id="subtitle"]] [[!template text="""version of the functionality integrated into iSearch. So""" start="00:00:25.840" video="qanda-p-search" id="subtitle"]] [[!template text="""yeah, with the way things are set up, it is essentially a""" start="00:00:32.000" video="qanda-p-search" id="subtitle"]] [[!template text="""framework. So""" start="00:00:37.920" video="qanda-p-search" id="subtitle"]] [[!template text="""you can create a candidate. So just a review from the talk. So""" start="00:00:42.680" video="qanda-p-search" id="subtitle"]] [[!template text="""you have these candidate generators which generate search""" start="00:00:46.280" video="qanda-p-search" id="subtitle"]] [[!template text="""candidates. So you can have a file system candidate which""" start="00:00:49.920" video="qanda-p-search" id="subtitle"]] [[!template text="""generates these file documents, which have text content in""" start="00:00:54.560" video="qanda-p-search" id="subtitle"]] [[!template text="""them. In theory, you could have like a website candidate""" start="00:00:58.520" video="qanda-p-search" id="subtitle"]] [[!template text="""generator, and it could be like a web crawler. I mean, so""" start="00:01:01.800" video="qanda-p-search" id="subtitle"]] [[!template text="""there's a lot of different options. So one option, it's on my""" start="00:01:06.400" video="qanda-p-search" id="subtitle"]] [[!template text="""mind, and I hope to get to this soon, is create a defun, like a""" start="00:01:10.520" video="qanda-p-search" id="subtitle"]] [[!template text="""defun candidate generator. So basically it takes a file,""" start="00:01:15.040" video="qanda-p-search" id="subtitle"]] [[!template text="""splits it up into like defunds, kind of like just like what""" start="00:01:18.600" video="qanda-p-search" id="subtitle"]] [[!template text="""iSearch would do. and then use each of those, the body of""" start="00:01:22.280" video="qanda-p-search" id="subtitle"]] [[!template text="""those, as a content for the search session. So, I mean,""" start="00:01:26.280" video="qanda-p-search" id="subtitle"]] [[!template text="""essentially you could just, you could start up a session,""" start="00:01:30.960" video="qanda-p-search" id="subtitle"]] [[!template text="""and there's like programmatic ways to start these up too. So""" start="00:01:35.360" video="qanda-p-search" id="subtitle"]] [[!template text="""you could, if such a candidate generator was created, you""" start="00:01:39.480" video="qanda-p-search" id="subtitle"]] [[!template text="""could easily, and just like, you know, one command. Get the""" start="00:01:42.600" video="qanda-p-search" id="subtitle"]] [[!template text="""defunds, create a search session with it, and then just go""" start="00:01:49.560" video="qanda-p-search" id="subtitle"]] [[!template text="""straight to your query. So, definitely, something""" start="00:01:54.600" video="qanda-p-search" id="subtitle"]] [[!template text="""just like this is in the works. And I guess another thing is""" start="00:02:01.440" video="qanda-p-search" id="subtitle"]] [[!template text="""interface.""" start="00:02:06.920" video="qanda-p-search" id="subtitle"]] [[!template text="""The whole dedicated buffer is helpful for searching, but""" start="00:02:08.240" video="qanda-p-search" id="subtitle"]] [[!template text="""with this isearch case, there's currently not a way to have a""" start="00:02:17.080" video="qanda-p-search" id="subtitle"]] [[!template text="""reduced UI, where it's just like, OK, I have these function""" start="00:02:21.920" video="qanda-p-search" id="subtitle"]] [[!template text="""defuns for the current file. I just want them to pop up at the""" start="00:02:27.840" video="qanda-p-search" id="subtitle"]] [[!template text="""bottom so I can quickly go through it. So currently, I don't""" start="00:02:32.240" video="qanda-p-search" id="subtitle"]] [[!template text="""have that. But such a UI is definitely, yeah, thinking about""" start="00:02:35.800" video="qanda-p-search" id="subtitle"]] [[!template text="""how that could be done.""" start="00:02:41.200" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: Any idea how this would work with personal information like Zettlekastens?""" start="00:02:45.360" video="qanda-p-search" id="subtitle"]]
[[!template text="""Alright, so yeah. So next question. Any idea how this""" start="00:02:45.360" video="qanda-p-search" id="subtitle"]] [[!template text="""will work with personal information like Zettelkasten?""" start="00:02:50.360" video="qanda-p-search" id="subtitle"]] [[!template text="""So this is, this is like, I mean, it's essentially usable as""" start="00:02:52.600" video="qanda-p-search" id="subtitle"]] [[!template text="""is with Zettelkasten method. So, I mean, that I mean""" start="00:02:58.320" video="qanda-p-search" id="subtitle"]] [[!template text="""basically what like for example org-roam, and I think other""" start="00:03:04.560" video="qanda-p-search" id="subtitle"]] [[!template text="""ones like Denote, they put all these files in the""" start="00:03:08.280" video="qanda-p-search" id="subtitle"]] [[!template text="""directory, and so with the already existing file system""" start="00:03:12.160" video="qanda-p-search" id="subtitle"]] [[!template text="""candidate generator all you'd have to do is set that to be the""" start="00:03:15.920" video="qanda-p-search" id="subtitle"]] [[!template text="""directory of your Zettelkasten system and then it would""" start="00:03:19.680" video="qanda-p-search" id="subtitle"]] [[!template text="""just pick up all the files in there and""" start="00:03:23.200" video="qanda-p-search" id="subtitle"]] [[!template text="""then add those as search candidates. So you could easily""" start="00:03:26.800" video="qanda-p-search" id="subtitle"]] [[!template text="""just search whatever system you have.""" start="00:03:28.800" video="qanda-p-search" id="subtitle"]] [[!template text="""Based off of the ways it's set up, if you had maybe your""" start="00:03:33.280" video="qanda-p-search" id="subtitle"]] [[!template text="""dailies you didn't want to search, it's just as easy to add a""" start="00:03:36.040" video="qanda-p-search" id="subtitle"]] [[!template text="""criteria saying, I don't want dailies to be searched. Like""" start="00:03:41.000" video="qanda-p-search" id="subtitle"]] [[!template text="""give, like just eliminate the date, like the things from the""" start="00:03:44.520" video="qanda-p-search" id="subtitle"]] [[!template text="""daily from the sub directory. And then there you go. you have""" start="00:03:47.600" video="qanda-p-search" id="subtitle"]] [[!template text="""your Zettelkasten search engine, and you could just copy""" start="00:03:51.680" video="qanda-p-search" id="subtitle"]] [[!template text="""the, you know, there's, I mean, I need, I'm working on""" start="00:03:57.800" video="qanda-p-search" id="subtitle"]] [[!template text="""documentation for this to kind of set this up easily, but,""" start="00:04:00.000" video="qanda-p-search" id="subtitle"]] [[!template text="""you know, you could just create your simple command, just""" start="00:04:03.520" video="qanda-p-search" id="subtitle"]] [[!template text="""like, your simple command, just like, just take in a text""" start="00:04:06.680" video="qanda-p-search" id="subtitle"]] [[!template text="""query, run it through the system, and then just get your""" start="00:04:10.680" video="qanda-p-search" id="subtitle"]] [[!template text="""search results right there. So yeah, definitely that is a""" start="00:04:14.360" video="qanda-p-search" id="subtitle"]] [[!template text="""use case that's on top of my mind.""" start="00:04:19.600" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: How good does the search work for synonyms especially if you use different languages?""" start="00:04:22.041" video="qanda-p-search" id="subtitle"]]
[[!template text="""So next one, how good does a""" start="00:04:22.041" video="qanda-p-search" id="subtitle"]] [[!template text="""search work for synonyms, especially if you use different""" start="00:04:23.240" video="qanda-p-search" id="subtitle"]] [[!template text="""languages? Okay, this is a good question because with the""" start="00:04:26.440" video="qanda-p-search" id="subtitle"]] [[!template text="""way that VM25 works, it's essentially just like trying to""" start="00:04:30.720" video="qanda-p-search" id="subtitle"]] [[!template text="""find where terms occur and just counts them up.""" start="00:04:34.720" video="qanda-p-search" id="subtitle"]] [[!template text="""I mean, this is something I couldn't get into. There's just""" start="00:04:41.120" video="qanda-p-search" id="subtitle"]] [[!template text="""too much on the topic of information retrieval to kind of go""" start="00:04:44.000" video="qanda-p-search" id="subtitle"]] [[!template text="""into this, but there is a whole kind of field of just like, how""" start="00:04:46.920" video="qanda-p-search" id="subtitle"]] [[!template text="""do you, given a search term, how do you know what you should""" start="00:04:52.880" video="qanda-p-search" id="subtitle"]] [[!template text="""search for? So like popular kind of industrial search""" start="00:04:58.280" video="qanda-p-search" id="subtitle"]] [[!template text="""engines, like they have kind of this feature where you can""" start="00:05:02.520" video="qanda-p-search" id="subtitle"]] [[!template text="""like define synonyms, define, term replacement. So""" start="00:05:07.520" video="qanda-p-search" id="subtitle"]] [[!template text="""whenever you see this term, it should be this. And it even""" start="00:05:11.040" video="qanda-p-search" id="subtitle"]] [[!template text="""gets even further.""" start="00:05:14.080" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Plurals""" start="00:05:15.092" video="qanda-p-search" id="subtitle"]]
[[!template text="""If someone searches for a plural string,""" start="00:05:15.092" video="qanda-p-search" id="subtitle"]] [[!template text="""how do you get the singular from that and search for that? So""" start="00:05:19.440" video="qanda-p-search" id="subtitle"]] [[!template text="""this is a huge topic that currently p-search doesn't""" start="00:05:22.280" video="qanda-p-search" id="subtitle"]] [[!template text="""address, but it's on the top of my mind as to how. So that's one""" start="00:05:27.560" video="qanda-p-search" id="subtitle"]] [[!template text="""part.""" start="00:05:33.520" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Different languages""" start="00:05:33.883" video="qanda-p-search" id="subtitle"]]
[[!template text="""The next part is for different languages, one thing""" start="00:05:33.883" video="qanda-p-search" id="subtitle"]] [[!template text="""that kind of seems like it's promising is vector search,""" start="00:05:39.000" video="qanda-p-search" id="subtitle"]] [[!template text="""which, I mean, with the way p-search is set up, you could""" start="00:05:42.840" video="qanda-p-search" id="subtitle"]] [[!template text="""easily just create a vector search prior, plug it into the""" start="00:05:47.400" video="qanda-p-search" id="subtitle"]] [[!template text="""system, and start using it. The only problem is that kind of""" start="00:05:51.160" video="qanda-p-search" id="subtitle"]] [[!template text="""the vector search functions, like you have to do like cosine""" start="00:05:54.600" video="qanda-p-search" id="subtitle"]] [[!template text="""similarity, like if you have like 10,000 documents, If""" start="00:05:58.880" video="qanda-p-search" id="subtitle"]] [[!template text="""you're writing Elisp to calculate the cosine similarity""" start="00:06:03.640" video="qanda-p-search" id="subtitle"]] [[!template text="""between the vectors, that's going to be very slow. And so now""" start="00:06:06.680" video="qanda-p-search" id="subtitle"]] [[!template text="""the whole can of worms of indexing comes up. And how do you do""" start="00:06:09.880" video="qanda-p-search" id="subtitle"]] [[!template text="""that? And is that going to be native elisp? And so that's a""" start="00:06:14.160" video="qanda-p-search" id="subtitle"]] [[!template text="""whole other can of worms. So yeah, vector search seems""" start="00:06:17.480" video="qanda-p-search" id="subtitle"]] [[!template text="""promising. And then hopefully maybe other traditional""" start="00:06:21.840" video="qanda-p-search" id="subtitle"]] [[!template text="""synonyms, stemming, that kind of stuff for alternate""" start="00:06:25.960" video="qanda-p-search" id="subtitle"]] [[!template text="""terms, that could also be incorporated.""" start="00:06:33.440" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: When searching by author I know authors may setup a new machine and not put the exact same information. Is this doing anything to combine those into one author?""" start="00:06:40.200" video="qanda-p-search" id="subtitle"]]
[[!template text="""Okay, next one. When searching by author, I know authors may""" start="00:06:40.200" video="qanda-p-search" id="subtitle"]] [[!template text="""set up a new machine and not put the exact same information.""" start="00:06:43.720" video="qanda-p-search" id="subtitle"]] [[!template text="""Is this doing anything to combine these two in one author?""" start="00:06:47.120" video="qanda-p-search" id="subtitle"]] [[!template text="""Okay, so for this one, it's not. So it's like the way the get""" start="00:06:49.520" video="qanda-p-search" id="subtitle"]] [[!template text="""prior is currently set up is that it just does like a get""" start="00:06:54.400" video="qanda-p-search" id="subtitle"]] [[!template text="""command to get all the get authors. You select one and then it""" start="00:06:58.120" video="qanda-p-search" id="subtitle"]] [[!template text="""just uses that. But the thing is, is if you knew the two emails""" start="00:07:02.000" video="qanda-p-search" id="subtitle"]] [[!template text="""that user might have used, the two usernames, you could just""" start="00:07:07.960" video="qanda-p-search" id="subtitle"]] [[!template text="""set up the""" start="00:07:12.520" video="qanda-p-search" id="subtitle"]] [[!template text="""two priors. One for the old user's email, and then just add""" start="00:07:14.280" video="qanda-p-search" id="subtitle"]] [[!template text="""another prior for the new user's email. And then that would""" start="00:07:19.800" video="qanda-p-search" id="subtitle"]] [[!template text="""be a way to just get both of those set up. So that's kind of a""" start="00:07:24.080" video="qanda-p-search" id="subtitle"]] [[!template text="""running theme throughout p-search is that It's made to be""" start="00:07:29.280" video="qanda-p-search" id="subtitle"]] [[!template text="""very flexible and very kind of like Lego block ish kind of""" start="00:07:32.960" video="qanda-p-search" id="subtitle"]] [[!template text="""like you can just, you know, if you need, you know, if""" start="00:07:36.240" video="qanda-p-search" id="subtitle"]] [[!template text="""something doesn't meet your needs, you know, it's easy to""" start="00:07:39.960" video="qanda-p-search" id="subtitle"]] [[!template text="""put pieces in, create new components of the search""" start="00:07:41.920" video="qanda-p-search" id="subtitle"]] [[!template text="""engine. Let's see, a cool powerful grep "Rak" to maybe have""" start="00:07:45.960" video="qanda-p-search" id="subtitle"]] [[!template text="""some good ideas. I have searches record code while""" start="00:07:51.800" video="qanda-p-search" id="subtitle"]] [[!template text="""searching. Okay. So. Okay, that's interesting. I'll have""" start="00:07:58.840" video="qanda-p-search" id="subtitle"]] [[!template text="""to look into this""" start="00:08:04.040" video="qanda-p-search" id="subtitle"]] [[!template text="""tool. I haven't seen that. I do kind of keep my eyes out for""" start="00:08:05.240" video="qanda-p-search" id="subtitle"]] [[!template text="""these kind of things. One thing I have seen that was kind of""" start="00:08:15.280" video="qanda-p-search" id="subtitle"]] [[!template text="""that, I mean, looked interesting was kind of like AST, like""" start="00:08:18.200" video="qanda-p-search" id="subtitle"]] [[!template text="""the treesitter, the treesitter grep tools. But like, you""" start="00:08:24.440" video="qanda-p-search" id="subtitle"]] [[!template text="""can grep for a string in the language itself. So that's""" start="00:08:29.520" video="qanda-p-search" id="subtitle"]] [[!template text="""something I think would be cool to implement either,""" start="00:08:35.360" video="qanda-p-search" id="subtitle"]] [[!template text="""because I mean, there's treesitter in Emacs, so it's""" start="00:08:37.960" video="qanda-p-search" id="subtitle"]] [[!template text="""possible to do a new list. If not, there are those kind of like""" start="00:08:41.360" video="qanda-p-search" id="subtitle"]] [[!template text="""treesitter. So that's, that's something that I think would""" start="00:08:44.520" video="qanda-p-search" id="subtitle"]] [[!template text="""be cool to incorporate.""" start="00:08:47.720" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: Have you thought about integrating results from using cosine similarity with a deep-learning based vector embedding?""" start="00:08:50.720" video="qanda-p-search" id="subtitle"]]
[[!template text="""Let's see. Have you thought about integrating results from""" start="00:08:50.720" video="qanda-p-search" id="subtitle"]] [[!template text="""using cosine similarity with a deep learning based vector""" start="00:08:58.280" video="qanda-p-search" id="subtitle"]] [[!template text="""embedding? Yeah, exactly. So yeah, this kind of goes back to""" start="00:09:01.000" video="qanda-p-search" id="subtitle"]] [[!template text="""the topic before it. Definitely the whole semantic search""" start="00:09:06.680" video="qanda-p-search" id="subtitle"]] [[!template text="""with vector embeddings, that's something that, I mean, it""" start="00:09:09.760" video="qanda-p-search" id="subtitle"]] [[!template text="""would be actually kind of trivial to implement that in""" start="00:09:12.680" video="qanda-p-search" id="subtitle"]] [[!template text="""p-search. But like I said, computing the cosine similarity""" start="00:09:15.480" video="qanda-p-search" id="subtitle"]] [[!template text="""in elisp, it's probably too slow.""" start="00:09:20.240" video="qanda-p-search" id="subtitle"]] [[!template text="""And then also there's a whole question of how do you get the embeddings?""" start="00:09:25.960" video="qanda-p-search" id="subtitle"]] [[!template text="""Like, how do you get the system running locally on your""" start="00:09:34.880" video="qanda-p-search" id="subtitle"]] [[!template text="""machine if you want to run it that or, I mean, so that's""" start="00:09:36.920" video="qanda-p-search" id="subtitle"]] [[!template text="""actually another kind of aspect that I need to look into.""" start="00:09:41.240" video="qanda-p-search" id="subtitle"]] [[!template text="""Okay, so let's see.""" start="00:09:48.880" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: Is it possible to save/bookmark searches or search templates so they can be used again and again?""" start="00:10:01.940" video="qanda-p-search" id="subtitle"]]
[[!template text="""Okay, next question. Let's see. I'm sorry if this has been""" start="00:10:01.940" video="qanda-p-search" id="subtitle"]] [[!template text="""covered. Is it possible to save/bookmark searches or search""" start="00:10:06.320" video="qanda-p-search" id="subtitle"]] [[!template text="""templates so they can be used again and again? Exactly. So""" start="00:10:09.080" video="qanda-p-search" id="subtitle"]] [[!template text="""just recently I added bookmarking capabilities. So""" start="00:10:14.560" video="qanda-p-search" id="subtitle"]] [[!template text="""you can essentially just bookmark whatever search session you""" start="00:10:18.200" video="qanda-p-search" id="subtitle"]] [[!template text="""have. And yeah, and it's just, it was just a bookmark. You can""" start="00:10:21.120" video="qanda-p-search" id="subtitle"]] [[!template text="""just open and just like reopen that, rerun that search from""" start="00:10:26.360" video="qanda-p-search" id="subtitle"]] [[!template text="""where you left off. So there's that. And then also, I tried to""" start="00:10:29.840" video="qanda-p-search" id="subtitle"]] [[!template text="""set this up so that there is a one-to-one mapping of a Lisp""" start="00:10:36.120" video="qanda-p-search" id="subtitle"]] [[!template text="""object to the search session. So from every search session""" start="00:10:40.560" video="qanda-p-search" id="subtitle"]] [[!template text="""you make, you should be able to get a, there's a command to do""" start="00:10:44.760" video="qanda-p-search" id="subtitle"]] [[!template text="""this, to get a data representation of the search. So it would""" start="00:10:49.520" video="qanda-p-search" id="subtitle"]] [[!template text="""just be like some plist. All you have to do is just take that""" start="00:10:55.200" video="qanda-p-search" id="subtitle"]] [[!template text="""plist, call this function p-search-setup-buffer with that""" start="00:11:00.080" video="qanda-p-search" id="subtitle"]] [[!template text="""data. And then that function should set up the session as you""" start="00:11:04.480" video="qanda-p-search" id="subtitle"]] [[!template text="""left off. So then like, you know, you could make your""" start="00:11:09.120" video="qanda-p-search" id="subtitle"]] [[!template text="""commands easy. You can make custom search commands super""" start="00:11:12.600" video="qanda-p-search" id="subtitle"]] [[!template text="""easy. You just get the data representation of that search,""" start="00:11:15.360" video="qanda-p-search" id="subtitle"]] [[!template text="""find what pieces you want the user to be able to, you know, the""" start="00:11:18.920" video="qanda-p-search" id="subtitle"]] [[!template text="""search term, make that a parameter in the""" start="00:11:22.520" video="qanda-p-search" id="subtitle"]] [[!template text="""command, in the interactive code. So you'd have like""" start="00:11:26.334" video="qanda-p-search" id="subtitle"]] [[!template text="""print on top and then there you go. You have,""" start="00:11:29.080" video="qanda-p-search" id="subtitle"]] [[!template text="""you have a command to do the search""" start="00:11:31.907" video="qanda-p-search" id="subtitle"]] [[!template text="""just like just right there. So, so""" start="00:11:34.328" video="qanda-p-search" id="subtitle"]] [[!template text="""there's a lot of those things and there's a lot more that""" start="00:11:35.760" video="qanda-p-search" id="subtitle"]] [[!template text="""could be done. Like maybe having, you know, there's kind of""" start="00:11:38.520" video="qanda-p-search" id="subtitle"]] [[!template text="""in the works and like thinking about having groups of groups""" start="00:11:41.000" video="qanda-p-search" id="subtitle"]] [[!template text="""of these things, like maybe you can set up like, Oh, I always""" start="00:11:45.480" video="qanda-p-search" id="subtitle"]] [[!template text="""add these three criteria together. So I, you know, maybe I""" start="00:11:48.960" video="qanda-p-search" id="subtitle"]] [[!template text="""can make a preset out of these and make them easy, easily""" start="00:11:51.920" video="qanda-p-search" id="subtitle"]] [[!template text="""addable. So yeah. A lot of things like that are, you know, I'm""" start="00:11:54.560" video="qanda-p-search" id="subtitle"]] [[!template text="""thinking about a lot of things about that, so.""" start="00:11:58.080" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: You mentioned about candidate generators. Could you explain about to what the score is assigned to?""" start="00:12:02.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""Okay, so next question. You mentioned about candidate""" start="00:12:02.800" video="qanda-p-search" id="subtitle"]] [[!template text="""generators. Could you explain about what the score is""" start="00:12:06.080" video="qanda-p-search" id="subtitle"]] [[!template text="""assigned to? Is this to a line or whatever the candidate""" start="00:12:08.480" video="qanda-p-search" id="subtitle"]] [[!template text="""generates? How does it work with our junior demo? Okay,""" start="00:12:12.200" video="qanda-p-search" id="subtitle"]] [[!template text="""yeah, so this is a, this is, so actually I had to implement, I""" start="00:12:17.080" video="qanda-p-search" id="subtitle"]] [[!template text="""had to rewrite p-search just to get this part right. So the""" start="00:12:21.800" video="qanda-p-search" id="subtitle"]] [[!template text="""candidate generator generates documents. Documents have""" start="00:12:26.720" video="qanda-p-search" id="subtitle"]] [[!template text="""properties. So the most notable property is the content""" start="00:12:31.160" video="qanda-p-search" id="subtitle"]] [[!template text="""property. So essentially what happens is that when you""" start="00:12:36.920" video="qanda-p-search" id="subtitle"]] [[!template text="""create a file system candidate generator and give it a""" start="00:12:40.600" video="qanda-p-search" id="subtitle"]] [[!template text="""directory, the code goes into the directory, kind of""" start="00:12:42.880" video="qanda-p-search" id="subtitle"]] [[!template text="""recursively goes through all the directories, and""" start="00:12:45.920" video="qanda-p-search" id="subtitle"]] [[!template text="""generates a candidate, which is just like a simple list""" start="00:12:49.080" video="qanda-p-search" id="subtitle"]] [[!template text="""form. It's saying, this is a file, the file path is this. So""" start="00:12:51.560" video="qanda-p-search" id="subtitle"]] [[!template text="""that's the document ID. So this is saying, this is a file,""" start="00:12:55.680" video="qanda-p-search" id="subtitle"]] [[!template text="""it's a file, and its file path is this. And so from that, you""" start="00:13:00.800" video="qanda-p-search" id="subtitle"]] [[!template text="""get all of the different properties, the sub properties. If""" start="00:13:05.560" video="qanda-p-search" id="subtitle"]] [[!template text="""you're given that, you know how to get the content. If you're""" start="00:13:09.280" video="qanda-p-search" id="subtitle"]] [[!template text="""given that, you know how to... So all these properties come""" start="00:13:11.720" video="qanda-p-search" id="subtitle"]] [[!template text="""out. And then also the candidate generator is the thing that""" start="00:13:15.440" video="qanda-p-search" id="subtitle"]] [[!template text="""knows how best to search for the terms. So for example, there""" start="00:13:18.840" video="qanda-p-search" id="subtitle"]] [[!template text="""is a buffer candidate generator. What that does is it just""" start="00:13:25.440" video="qanda-p-search" id="subtitle"]] [[!template text="""puts all your buffers as search candidates. So obviously""" start="00:13:29.160" video="qanda-p-search" id="subtitle"]] [[!template text="""you can't, you can't run ripgrep on buffers like you can't you""" start="00:13:34.760" video="qanda-p-search" id="subtitle"]] [[!template text="""can't do that, you can't run ripgrep on just like yeah just""" start="00:13:37.880" video="qanda-p-search" id="subtitle"]] [[!template text="""just like buffers that don't have files attached or, for""" start="00:13:41.760" video="qanda-p-search" id="subtitle"]] [[!template text="""example, maybe there's like an internet search candidate""" start="00:13:44.320" video="qanda-p-search" id="subtitle"]] [[!template text="""generator, like a web crawler thing. You just imagine it""" start="00:13:47.560" video="qanda-p-search" id="subtitle"]] [[!template text="""goes to a website, kind of crawls all the links and all that,""" start="00:13:51.280" video="qanda-p-search" id="subtitle"]] [[!template text="""and then just gets your web pages for the candidates.""" start="00:13:55.760" video="qanda-p-search" id="subtitle"]] [[!template text="""Obviously, you can't use ripgrep for that either. So, every""" start="00:13:58.120" video="qanda-p-search" id="subtitle"]] [[!template text="""candidate generator knows how best to search for the terms""" start="00:14:01.160" video="qanda-p-search" id="subtitle"]] [[!template text="""of what candidate it's generating. So, the file system""" start="00:14:04.680" video="qanda-p-search" id="subtitle"]] [[!template text="""candidate generator will say, okay, I have a base""" start="00:14:08.920" video="qanda-p-search" id="subtitle"]] [[!template text="""directory. So, if you ask me, the file system candidate""" start="00:14:12.360" video="qanda-p-search" id="subtitle"]] [[!template text="""generator, how to get the terms, it knows it's set up to use""" start="00:14:17.240" video="qanda-p-search" id="subtitle"]] [[!template text="""ripgrep. And so, it runs ripgrep, and so then it goes""" start="00:14:21.240" video="qanda-p-search" id="subtitle"]] [[!template text="""through, it runs the command, gets the counts, and then""" start="00:14:25.200" video="qanda-p-search" id="subtitle"]] [[!template text="""store those counts. So, the lines have nothing. At this""" start="00:14:29.440" video="qanda-p-search" id="subtitle"]] [[!template text="""point, the lines have nothing. There's no notion of lines at""" start="00:14:32.360" video="qanda-p-search" id="subtitle"]] [[!template text="""all. It's just document, document ID with the amount of""" start="00:14:36.000" video="qanda-p-search" id="subtitle"]] [[!template text="""times it matched. And that's all you need to run this BM25""" start="00:14:40.560" video="qanda-p-search" id="subtitle"]] [[!template text="""algorithm. But then when you get the top results, you""" start="00:14:43.840" video="qanda-p-search" id="subtitle"]] [[!template text="""obviously want to see the lines that matched. And so there's""" start="00:14:47.520" video="qanda-p-search" id="subtitle"]] [[!template text="""another thing, another method to kind of get the exact""" start="00:14:51.360" video="qanda-p-search" id="subtitle"]] [[!template text="""thing, to kind of match out the particular lines. And so""" start="00:14:56.400" video="qanda-p-search" id="subtitle"]] [[!template text="""that's a separate mechanism. And that can be done in Elist,""" start="00:15:00.560" video="qanda-p-search" id="subtitle"]] [[!template text="""because if you're not displaying, that's kind of a design""" start="00:15:03.160" video="qanda-p-search" id="subtitle"]] [[!template text="""decision of P-Search, is that it only displays like maybe 10""" start="00:15:05.720" video="qanda-p-search" id="subtitle"]] [[!template text="""or 20. It doesn't display all the results. So you can have""" start="00:15:09.320" video="qanda-p-search" id="subtitle"]] [[!template text="""Elist just go crazy with just like highlighting things,""" start="00:15:12.520" video="qanda-p-search" id="subtitle"]] [[!template text="""picking the best kind of pieces to show. So yeah, that's how""" start="00:15:16.680" video="qanda-p-search" id="subtitle"]] [[!template text="""that's set up.""" start="00:15:22.720" video="qanda-p-search" id="subtitle"]] [[!template text="""So, here's perhaps a good moment for me to just jump in and""" start="00:15:27.360" video="qanda-p-search" id="subtitle"]] [[!template text="""comment that in a minute or so we will break away with the live""" start="00:15:38.280" video="qanda-p-search" id="subtitle"]] [[!template text="""stream to give people an hour of less content to make sure""" start="00:15:42.080" video="qanda-p-search" id="subtitle"]] [[!template text="""everybody goes and takes their lunch and break a little bit.""" start="00:15:47.440" video="qanda-p-search" id="subtitle"]] [[!template text="""But if you would like to keep going in here, Love to love to""" start="00:15:50.640" video="qanda-p-search" id="subtitle"]] [[!template text="""take as many questions. And, of course, we will include""" start="00:15:55.040" video="qanda-p-search" id="subtitle"]] [[!template text="""that all when we publish the Q and A. Sounds good. Yeah, I'll go""" start="00:15:59.840" video="qanda-p-search" id="subtitle"]] [[!template text="""and stick around on the stream as we cut away, as we've got a""" start="00:16:06.160" video="qanda-p-search" id="subtitle"]] [[!template text="""little video surprise we've all prepared to play, just some""" start="00:16:12.200" video="qanda-p-search" id="subtitle"]] [[!template text="""comments from an Emacs user dated in 2020 or something like""" start="00:16:16.000" video="qanda-p-search" id="subtitle"]] [[!template text="""this. I forget the detail. Thank you again so much, Zac, for""" start="00:16:19.360" video="qanda-p-search" id="subtitle"]] [[!template text="""your fascinating talk.""" start="00:16:29.680" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, so, okay.""" start="00:16:30.960" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: easy filtering with orderless - did this or something like this help or infulce the design of psearch?""" start="00:16:32.302" video="qanda-p-search" id="subtitle"]]
[[!template text="""This makes me really think about the""" start="00:16:32.302" video="qanda-p-search" id="subtitle"]] [[!template text="""emergent workflows with Denote and easy filtering with""" start="00:16:33.360" video="qanda-p-search" id="subtitle"]] [[!template text="""orderless.""" start="00:16:36.000" video="qanda-p-search" id="subtitle"]] [[!template text="""Did this or something like this help influence the design of""" start="00:16:36.640" video="qanda-p-search" id="subtitle"]] [[!template text="""p-search? Yeah, exactly. So, I mean, yeah, I mean, there's""" start="00:16:42.040" video="qanda-p-search" id="subtitle"]] [[!template text="""just so many different searches. Like, it's just kind of""" start="00:16:47.360" video="qanda-p-search" id="subtitle"]] [[!template text="""mind-boggling. Like, you could search for whatever you want""" start="00:16:49.920" video="qanda-p-search" id="subtitle"]] [[!template text="""on your computer. Like, there's just so much, like, you""" start="00:16:52.520" video="qanda-p-search" id="subtitle"]] [[!template text="""can't, yeah, you can't just like, you can't just like hard""" start="00:16:54.600" video="qanda-p-search" id="subtitle"]] [[!template text="""code any of these things. It's all malleable. Like maybe""" start="00:17:01.200" video="qanda-p-search" id="subtitle"]] [[!template text="""somebody wants to search these directories. And so, yeah,""" start="00:17:04.160" video="qanda-p-search" id="subtitle"]] [[!template text="""like""" start="00:17:09.280" video="qanda-p-search" id="subtitle"]] [[!template text="""exactly like that use case of having a directory of files""" start="00:17:10.640" video="qanda-p-search" id="subtitle"]] [[!template text="""where""" start="00:17:18.400" video="qanda-p-search" id="subtitle"]] [[!template text="""they contain your personal knowledge management system.""" start="00:17:18.960" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, that use case definitely was at the top of my mind.""" start="00:17:25.920" video="qanda-p-search" id="subtitle"]] [[!template text="""Let's see.""" start="00:17:33.480" video="qanda-p-search" id="subtitle"]] [[!template text="""Let's see, so Git covers the multiple names thing itself.""" start="00:17:35.880" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: Notmuch with the p-search UI""" start="00:17:56.960" video="qanda-p-search" id="subtitle"]]
[[!template text="""Okay, yeah,""" start="00:17:56.960" video="qanda-p-search" id="subtitle"]] [[!template text="""so something about notmuch with p-search UI. Actually,""" start="00:18:00.360" video="qanda-p-search" id="subtitle"]] [[!template text="""interestingly, I think notmuch is, I haven't used it""" start="00:18:09.600" video="qanda-p-search" id="subtitle"]] [[!template text="""myself, but that's the, email something about yeah so i mean""" start="00:18:16.400" video="qanda-p-search" id="subtitle"]] [[!template text="""this is like these things are just like these these kind of""" start="00:18:22.760" video="qanda-p-search" id="subtitle"]] [[!template text="""extensions could kind of go go forever but one thing i""" start="00:18:25.680" video="qanda-p-search" id="subtitle"]] [[!template text="""thought about is like i use mu4e for email""" start="00:18:30.480" video="qanda-p-search" id="subtitle"]] [[!template text="""and that uses a full-fledged index. And so having""" start="00:18:33.370" video="qanda-p-search" id="subtitle"]] [[!template text="""some method to kind of reach into these different systems""" start="00:18:41.120" video="qanda-p-search" id="subtitle"]] [[!template text="""and kind of be kind of like a front end for this.""" start="00:18:44.880" video="qanda-p-search" id="subtitle"]] [[!template text="""Another thing is maybe SQL database.""" start="00:18:47.939" video="qanda-p-search" id="subtitle"]] [[!template text="""You can create a candidate generator from a SQLite query""" start="00:18:52.001" video="qanda-p-search" id="subtitle"]] [[!template text="""and then... yeah...""" start="00:18:55.824" video="qanda-p-search" id="subtitle"]] [[!template text="""I've had tons of ideas of different things you could""" start="00:19:02.583" video="qanda-p-search" id="subtitle"]] [[!template text="""incorporate into the system. Slowly,""" start="00:19:05.520" video="qanda-p-search" id="subtitle"]] [[!template text="""they're being implemented. Just recently, I implemented""" start="00:19:09.560" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Info""" start="00:19:13.600" video="qanda-p-search" id="subtitle"]]
[[!template text="""an info file candidate generator. So it lists out all the""" start="00:19:13.600" video="qanda-p-search" id="subtitle"]] [[!template text="""info files, and then it creates a candidate for each of the""" start="00:19:17.040" video="qanda-p-search" id="subtitle"]] [[!template text="""info nodes. So it turns out, yeah, I mean, it works pretty, I""" start="00:19:21.560" video="qanda-p-search" id="subtitle"]] [[!template text="""mean, just as well as Google. So I'm up for my own testing.""" start="00:19:26.760" video="qanda-p-search" id="subtitle"]] [[!template text="""Let's see, you can search a buffer using ripgrep feeding in""" start="00:19:32.560" video="qanda-p-search" id="subtitle"]] [[!template text="""as standard in to the ripgrep process, can't you? Yep, yeah,""" start="00:19:40.000" video="qanda-p-search" id="subtitle"]] [[!template text="""you can definitely search a buffer that way. So, yeah, I""" start="00:19:44.760" video="qanda-p-search" id="subtitle"]] [[!template text="""mean, based off of I mean, if this, yeah, so one thing that""" start="00:19:50.040" video="qanda-p-search" id="subtitle"]] [[!template text="""came up is that the system wants, I mean, I wanted the system""" start="00:19:56.360" video="qanda-p-search" id="subtitle"]] [[!template text="""to be able to search a lot of different things. And so it came""" start="00:19:59.040" video="qanda-p-search" id="subtitle"]] [[!template text="""up that I had, you know, implementing,""" start="00:20:03.560" video="qanda-p-search" id="subtitle"]] [[!template text="""doing these search things, having an Elist""" start="00:20:06.000" video="qanda-p-search" id="subtitle"]] [[!template text="""implementation, despite it being slow, would be""" start="00:20:10.160" video="qanda-p-search" id="subtitle"]] [[!template text="""necessary. So like anything that isn't represented as a""" start="00:20:13.080" video="qanda-p-search" id="subtitle"]] [[!template text="""file, Elisp, there's a mechanism in p-search to search for""" start="00:20:17.400" video="qanda-p-search" id="subtitle"]] [[!template text="""it.""" start="00:20:21.640" video="qanda-p-search" id="subtitle"]] [[!template text="""So, yeah, so having that redundancy kind of lets you get into""" start="00:20:23.320" video="qanda-p-search" id="subtitle"]] [[!template text="""the, you know, using kind of ripgrep for the big scale""" start="00:20:29.720" video="qanda-p-search" id="subtitle"]] [[!template text="""things. But then when you get to the individual file, you""" start="00:20:32.800" video="qanda-p-search" id="subtitle"]] [[!template text="""know, just going back to Elisp to kind of get the finer""" start="00:20:37.760" video="qanda-p-search" id="subtitle"]] [[!template text="""details seems to, you know, seems to end up working pretty""" start="00:20:41.000" video="qanda-p-search" id="subtitle"]] [[!template text="""well.""" start="00:20:47.200" video="qanda-p-search" id="subtitle"]] [[!template text="""Thank you all for listening. Yeah, sounds like we're about""" start="00:21:04.240" video="qanda-p-search" id="subtitle"]] [[!template text="""out of questions. Hi, Zacc. I have a question or still a""" start="00:21:27.400" video="qanda-p-search" id="subtitle"]] [[!template text="""question. I just want to thank everybody one more time for""" start="00:21:31.280" video="qanda-p-search" id="subtitle"]] [[!template text="""their participation, especially you for speaking, Zack. I""" start="00:21:34.120" video="qanda-p-search" id="subtitle"]] [[!template text="""look forward to playing with p-search myself. Thank you.""" start="00:21:37.720" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, there might be one last question. Is there someone?""" start="00:21:41.240" video="qanda-p-search" id="subtitle"]] [[!template text="""Yes, there is. I don't know if you can understand me, but""" start="00:21:44.040" video="qanda-p-search" id="subtitle"]] [[!template text="""thank you for making this lovely thing""" start="00:21:48.520" video="qanda-p-search" id="subtitle"]] [[!template text="""I feel inspired to try it out and I'm thinking about how to""" start="00:21:50.360" video="qanda-p-search" id="subtitle"]] [[!template text="""integrate it because it sounds modular and nicely thought""" start="00:21:57.920" video="qanda-p-search" id="subtitle"]] [[!template text="""out. One small question. Have you thought about Project L""" start="00:22:04.200" video="qanda-p-search" id="subtitle"]] [[!template text="""integration? And then I have a little bigger question about""" start="00:22:09.800" video="qanda-p-search" id="subtitle"]] [[!template text="""the interface.""" start="00:22:13.720" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""project.el integration""" start="00:22:14.880" video="qanda-p-search" id="subtitle"]]
[[!template text="""Yeah, project.el integration, it's used in a couple of ways.""" start="00:22:14.880" video="qanda-p-search" id="subtitle"]] [[!template text="""It's kind of used to kind of as like kind of like a default.""" start="00:22:20.800" video="qanda-p-search" id="subtitle"]] [[!template text="""This is the directory I want to search for the default""" start="00:22:25.720" video="qanda-p-search" id="subtitle"]] [[!template text="""p-search command. It does, yeah, it kind of goes off of""" start="00:22:31.280" video="qanda-p-search" id="subtitle"]] [[!template text="""project.el. If there is a project, it kind of says, okay, this,""" start="00:22:33.640" video="qanda-p-search" id="subtitle"]] [[!template text="""I want to search this project. And so it kind of, it used that""" start="00:22:37.120" video="qanda-p-search" id="subtitle"]] [[!template text="""as a default. So there's that. Because I use the project-grep""" start="00:22:40.320" video="qanda-p-search" id="subtitle"]] [[!template text="""or git-grep search a lot and maybe this is a better solution to""" start="00:22:46.120" video="qanda-p-search" id="subtitle"]] [[!template text="""the search and the interface you have right now for the""" start="00:22:50.680" video="qanda-p-search" id="subtitle"]] [[!template text="""search results.""" start="00:22:55.320" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: How happy are you with the interface?""" start="00:22:56.477" video="qanda-p-search" id="subtitle"]]
[[!template text="""How happy are you with it and have you""" start="00:22:56.477" video="qanda-p-search" id="subtitle"]] [[!template text="""thought about improving or have you ideas for""" start="00:22:58.720" video="qanda-p-search" id="subtitle"]] [[!template text="""improvements? Yeah, well actually what you see in the demo""" start="00:23:02.600" video="qanda-p-search" id="subtitle"]] [[!template text="""in the video isn't... There's actually, there is an""" start="00:23:06.640" video="qanda-p-search" id="subtitle"]] [[!template text="""improvement in the current code. Basically, what it""" start="00:23:09.200" video="qanda-p-search" id="subtitle"]] [[!template text="""does is it scans there's the current default as it scans""" start="00:23:13.960" video="qanda-p-search" id="subtitle"]] [[!template text="""the entire file for all of the searches.""" start="00:23:17.240" video="qanda-p-search" id="subtitle"]] [[!template text="""It finds the window that that has the highest score. So it kind""" start="00:23:20.055" video="qanda-p-search" id="subtitle"]] [[!template text="""of goes through entire file and just says... And it kind of finds""" start="00:23:25.960" video="qanda-p-search" id="subtitle"]] [[!template text="""like the piece of the section of text that has the most""" start="00:23:29.600" video="qanda-p-search" id="subtitle"]] [[!template text="""matches with the terms that score the best. So it's, I mean,""" start="00:23:33.480" video="qanda-p-search" id="subtitle"]] [[!template text="""that section is pretty good. I mean, that, so yeah, that,""" start="00:23:37.920" video="qanda-p-search" id="subtitle"]] [[!template text="""that ends up working pretty well. So I mean, in terms of other""" start="00:23:40.120" video="qanda-p-search" id="subtitle"]] [[!template text="""UI stuff, there's, there's tons, there's tons more that""" start="00:23:44.520" video="qanda-p-search" id="subtitle"]] [[!template text="""could be done, like, especially like debug ability or like""" start="00:23:46.880" video="qanda-p-search" id="subtitle"]] [[!template text="""introspection. Like, so this, this result, like, for""" start="00:23:50.160" video="qanda-p-search" id="subtitle"]] [[!template text="""example, this result ranks really high. Maybe you don't""" start="00:23:53.800" video="qanda-p-search" id="subtitle"]] [[!template text="""know why though. It's like, because of this, this text query""" start="00:23:57.120" video="qanda-p-search" id="subtitle"]] [[!template text="""arrow, was it because of this criteria? I think""" start="00:24:01.720" video="qanda-p-search" id="subtitle"]] [[!template text="""there's some UI elements that could kind of help the user""" start="00:24:04.480" video="qanda-p-search" id="subtitle"]] [[!template text="""understand why results are scoring high or low. So that's""" start="00:24:09.040" video="qanda-p-search" id="subtitle"]] [[!template text="""definitely... And that makes a lot of sense to me. You know, a""" start="00:24:12.520" video="qanda-p-search" id="subtitle"]] [[!template text="""lot of it is demystifying, like understanding what you're""" start="00:24:15.640" video="qanda-p-search" id="subtitle"]] [[!template text="""learning better and not just finding the right thing. A lot""" start="00:24:19.040" video="qanda-p-search" id="subtitle"]] [[!template text="""of it is, you know, kind of exploring your data. I love that.""" start="00:24:22.720" video="qanda-p-search" id="subtitle"]] [[!template text="""Thanks. Okay. I'm not trying to hurry us through either by""" start="00:24:26.520" video="qanda-p-search" id="subtitle"]] [[!template text="""any stretch. I would be happy to see this be a conversation.""" start="00:24:31.640" video="qanda-p-search" id="subtitle"]] [[!template text="""I also want to be considerate of your time. And I also wanted to""" start="00:24:36.600" video="qanda-p-search" id="subtitle"]] [[!template text="""make a quick shout out to everybody who's been updating and""" start="00:24:42.360" video="qanda-p-search" id="subtitle"]] [[!template text="""helping us capture the questions and the comments and the""" start="00:24:45.480" video="qanda-p-search" id="subtitle"]] [[!template text="""etherpad. That's just a big help to the extent that people""" start="00:24:50.480" video="qanda-p-search" id="subtitle"]] [[!template text="""are jumping in there and you know, revising and extending""" start="00:24:53.640" video="qanda-p-search" id="subtitle"]] [[!template text="""and just doing the best job we can to capture all the""" start="00:24:57.200" video="qanda-p-search" id="subtitle"]] [[!template text="""thoughtful remarks.""" start="00:24:59.800" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, thank you, Zac. I'm not too sure what to ask anymore,""" start="00:25:00.800" video="qanda-p-search" id="subtitle"]] [[!template text="""but yes, would love to try it out now. Yeah, I mean,""" start="00:25:14.840" video="qanda-p-search" id="subtitle"]] [[!template text="""definitely feel free to...""" start="00:25:20.560" video="qanda-p-search" id="subtitle"]] [[!template text="""any feedback, here's my mail, or issues...""" start="00:25:22.077" video="qanda-p-search" id="subtitle"]] [[!template text="""I mean I'm happy to get any any feedback. It's""" start="00:25:25.680" video="qanda-p-search" id="subtitle"]] [[!template text="""still in the early stages, so still kind of a lot of""" start="00:25:29.040" video="qanda-p-search" id="subtitle"]] [[!template text="""documentation that needs to be writing. There's a lot.""" start="00:25:31.680" video="qanda-p-search" id="subtitle"]] [[!template text="""There's a lot on the roadmap, but yeah, I mean, hopefully, I""" start="00:25:35.600" video="qanda-p-search" id="subtitle"]] [[!template text="""could even publish this to ELPA and have a nice""" start="00:25:38.440" video="qanda-p-search" id="subtitle"]] [[!template text="""manual so yeah hopefully yeah those come soon. Epic.""" start="00:25:42.760" video="qanda-p-search" id="subtitle"]] [[!template text="""That sounds great, yes.""" start="00:25:47.728" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""gptel""" start="00:25:50.280" video="qanda-p-search" id="subtitle"]]
[[!template text="""The ability to save your searches kind of reminds me of like""" start="00:25:50.280" video="qanda-p-search" id="subtitle"]] [[!template text="""the gptel package for the AI, where you can save searches,""" start="00:25:59.360" video="qanda-p-search" id="subtitle"]] [[!template text="""which makes it feel a lot more different. And yeah, we don't""" start="00:26:05.120" video="qanda-p-search" id="subtitle"]] [[!template text="""have something for that with search, but yeah, that's a""" start="00:26:10.800" video="qanda-p-search" id="subtitle"]] [[!template text="""whole different dynamic where it's like, okay, yeah, and""" start="00:26:14.840" video="qanda-p-search" id="subtitle"]] [[!template text="""makes it a unique tool that is, I guess would be unique to""" start="00:26:19.280" video="qanda-p-search" id="subtitle"]] [[!template text="""Emacs where you don't see that with like this AI package""" start="00:26:24.680" video="qanda-p-search" id="subtitle"]] [[!template text="""where the gptel is kind of unique because it's not just throw""" start="00:26:28.080" video="qanda-p-search" id="subtitle"]] [[!template text="""away. It's how did I get this? How did I search for it? And be an""" start="00:26:31.120" video="qanda-p-search" id="subtitle"]] [[!template text="""organic search, kind of like the orderless and vertico""" start="00:26:37.040" video="qanda-p-search" id="subtitle"]] [[!template text="""and...""" start="00:26:40.320" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, that's a good, I mean, that brings me to another thing""" start="00:26:43.040" video="qanda-p-search" id="subtitle"]] [[!template text="""in that, so,""" start="00:26:46.280" video="qanda-p-search" id="subtitle"]] [[!template text="""I mean, you could easily...""" start="00:26:48.240" video="qanda-p-search" id="subtitle"]] [[!template text="""you could create bridges from p-search to these different""" start="00:26:53.200" video="qanda-p-search" id="subtitle"]] [[!template text="""other packages, like, for example, kind of a RAG search,""" start="00:26:57.400" video="qanda-p-search" id="subtitle"]] [[!template text="""like there's this RAG, there's this thing called a RAG""" start="00:27:01.520" video="qanda-p-search" id="subtitle"]] [[!template text="""workflow, which is kind of popular these days. It's like""" start="00:27:04.680" video="qanda-p-search" id="subtitle"]] [[!template text="""retrieval augmented generation. So, you do a search and""" start="00:27:06.880" video="qanda-p-search" id="subtitle"]] [[!template text="""then based off the search results you get, then you pass""" start="00:27:11.640" video="qanda-p-search" id="subtitle"]] [[!template text="""those into LLM. So, the cool thing is that like you could use""" start="00:27:14.200" video="qanda-p-search" id="subtitle"]] [[!template text="""p-search for the retrieval. And so you could even like, I""" start="00:27:20.360" video="qanda-p-search" id="subtitle"]] [[!template text="""mean, you could even ask an LM to come up with the search terms""" start="00:27:25.120" video="qanda-p-search" id="subtitle"]] [[!template text="""and then have it search. There's no""" start="00:27:28.800" video="qanda-p-search" id="subtitle"]] [[!template text="""programmatical interface now to do this exact workflow.""" start="00:27:32.080" video="qanda-p-search" id="subtitle"]] [[!template text="""But I mean, there's another kind of direction I'm starting""" start="00:27:35.440" video="qanda-p-search" id="subtitle"]] [[!template text="""to think about. So like you could have maybe""" start="00:27:39.040" video="qanda-p-search" id="subtitle"]] [[!template text="""a question answer kind of workflow where it does""" start="00:27:43.200" video="qanda-p-search" id="subtitle"]] [[!template text="""like an initial search for the terms and then you get the top""" start="00:27:47.760" video="qanda-p-search" id="subtitle"]] [[!template text="""results and then you can put that through maybe gptel or all""" start="00:27:51.640" video="qanda-p-search" id="subtitle"]] [[!template text="""these other different systems. So that's, and that seems""" start="00:27:57.200" video="qanda-p-search" id="subtitle"]] [[!template text="""like a promising thing. And then another thing is like,""" start="00:27:59.760" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Saving a search""" start="00:28:01.480" video="qanda-p-search" id="subtitle"]]
[[!template text="""well, you mentioned the ability to save a search.""" start="00:28:01.480" video="qanda-p-search" id="subtitle"]] [[!template text="""One thing I've noticed""" start="00:28:10.595" video="qanda-p-search" id="subtitle"]] [[!template text="""kind of like with the DevOps workflows is, I'll write a""" start="00:28:11.480" video="qanda-p-search" id="subtitle"]] [[!template text="""CLI command that I do, or like a calculator command. Then I end""" start="00:28:15.360" video="qanda-p-search" id="subtitle"]] [[!template text="""up in the org mode document, write what I wrote, had the""" start="00:28:20.520" video="qanda-p-search" id="subtitle"]] [[!template text="""results in there, and then I'll go back to that.""" start="00:28:24.000" video="qanda-p-search" id="subtitle"]] [[!template text="""It's like, oh, this is why, this is that calculation I did""" start="00:28:26.944" video="qanda-p-search" id="subtitle"]] [[!template text="""and this is why I did it.""" start="00:28:31.967" video="qanda-p-search" id="subtitle"]] [[!template text="""I'll have run the same tool three different""" start="00:28:34.008" video="qanda-p-search" id="subtitle"]] [[!template text="""times to get three different answers, if it was like a""" start="00:28:36.960" video="qanda-p-search" id="subtitle"]] [[!template text="""calculator, for example.""" start="00:28:40.520" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Workflows""" start="00:28:41.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""But yeah, that's a very unique feature that isn't seen and""" start="00:28:41.800" video="qanda-p-search" id="subtitle"]] [[!template text="""will make me look at it and see about integrating it into my""" start="00:28:49.320" video="qanda-p-search" id="subtitle"]] [[!template text="""workflow. Yeah, I think you get on some interesting, you""" start="00:28:53.960" video="qanda-p-search" id="subtitle"]] [[!template text="""know, kind of what makes Emacs really unique there and how""" start="00:28:59.080" video="qanda-p-search" id="subtitle"]] [[!template text="""to... interesting kind of ways to exploit""" start="00:29:03.160" video="qanda-p-search" id="subtitle"]] [[!template text="""Emacs to learn in the problem. I'm seeing a number of""" start="00:29:07.400" video="qanda-p-search" id="subtitle"]] [[!template text="""ways you're getting at that. For example, if I think about""" start="00:29:12.440" video="qanda-p-search" id="subtitle"]] [[!template text="""like an automation workflow, and there's just a million""" start="00:29:15.800" video="qanda-p-search" id="subtitle"]] [[!template text="""we'll say, assumptions that are baked into a search""" start="00:29:19.000" video="qanda-p-search" id="subtitle"]] [[!template text="""product, so to speak, like represented by a Google search or""" start="00:29:22.720" video="qanda-p-search" id="subtitle"]] [[!template text="""Bing or what have you. And then as I unpack that and repack it""" start="00:29:26.720" video="qanda-p-search" id="subtitle"]] [[!template text="""from an Emacs workflow standpoint, thinking about, well,""" start="00:29:31.640" video="qanda-p-search" id="subtitle"]] [[!template text="""first of all, what is the yak I'm shaving? And then also, what""" start="00:29:35.160" video="qanda-p-search" id="subtitle"]] [[!template text="""does doing it right mean? How would I reuse this? How would I""" start="00:29:39.080" video="qanda-p-search" id="subtitle"]] [[!template text="""make the code accessible to others for their own purposes in""" start="00:29:43.760" video="qanda-p-search" id="subtitle"]] [[!template text="""a free software world kind of way? and all of the different""" start="00:29:47.680" video="qanda-p-search" id="subtitle"]] [[!template text="""sort of say like orthogonal headspacey kind of things,""" start="00:29:52.440" video="qanda-p-search" id="subtitle"]] [[!template text="""right? Emacs brings a lot to the table from a search""" start="00:29:57.480" video="qanda-p-search" id="subtitle"]] [[!template text="""standpoint because I'm going to want to think about. I'm""" start="00:30:00.080" video="qanda-p-search" id="subtitle"]] [[!template text="""going to want to think about where does the UI come in? Where""" start="00:30:03.720" video="qanda-p-search" id="subtitle"]] [[!template text="""might the user want to get involved interactively? Where""" start="00:30:07.800" video="qanda-p-search" id="subtitle"]] [[!template text="""might the user want to get involved declaratively with""" start="00:30:11.400" video="qanda-p-search" id="subtitle"]] [[!template text="""their configuration, perhaps based on the particular""" start="00:30:14.360" video="qanda-p-search" id="subtitle"]] [[!template text="""environment where this Emacs is running? And there's just a""" start="00:30:16.920" video="qanda-p-search" id="subtitle"]] [[!template text="""lot of what Emacs users think about that really applies.""" start="00:30:21.360" video="qanda-p-search" id="subtitle"]] [[!template text="""I'll use the word again, orthogonally across all my many""" start="00:30:24.880" video="qanda-p-search" id="subtitle"]] [[!template text="""workflows as an Emacs user. You know, the search is just such""" start="00:30:28.360" video="qanda-p-search" id="subtitle"]] [[!template text="""a big word. Yeah, that's actually, this exact point I was""" start="00:30:33.240" video="qanda-p-search" id="subtitle"]] [[!template text="""thinking about with this. It's like, I mean, it seems kind of""" start="00:30:38.520" video="qanda-p-search" id="subtitle"]] [[!template text="""obvious, like just like using grep or something, just like to""" start="00:30:43.160" video="qanda-p-search" id="subtitle"]] [[!template text="""get search counts, like, okay, you can just run the command,""" start="00:30:46.320" video="qanda-p-search" id="subtitle"]] [[!template text="""get the term counts and you could just run it through a""" start="00:30:49.360" video="qanda-p-search" id="subtitle"]] [[!template text="""relatively simple algorithm. to get your search score. So""" start="00:30:51.440" video="qanda-p-search" id="subtitle"]] [[!template text="""if it's this easy, though, why don't we see this in other... And""" start="00:30:55.960" video="qanda-p-search" id="subtitle"]] [[!template text="""the results are actually surprisingly good. So why don't we""" start="00:31:01.760" video="qanda-p-search" id="subtitle"]] [[!template text="""see this anywhere, really? And it occurred to me that just""" start="00:31:06.920" video="qanda-p-search" id="subtitle"]] [[!template text="""the amount of configuration... The amount of setup you have to""" start="00:31:10.560" video="qanda-p-search" id="subtitle"]] [[!template text="""do to get it right.""" start="00:31:16.400" video="qanda-p-search" id="subtitle"]] [[!template text="""It's above this threshold that you need something like""" start="00:31:20.040" video="qanda-p-search" id="subtitle"]] [[!template text="""Emacs to kind of get pushed through that configuration.""" start="00:31:24.600" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Transient and configuration""" start="00:31:27.857" video="qanda-p-search" id="subtitle"]]
[[!template text="""So for example, that's why I rely heavily on transient""" start="00:31:27.857" video="qanda-p-search" id="subtitle"]] [[!template text="""to set up the system. 'Cause like, if you want to get good""" start="00:31:30.800" video="qanda-p-search" id="subtitle"]] [[!template text="""search results, you're going to have to configure a lot""" start="00:31:34.120" video="qanda-p-search" id="subtitle"]] [[!template text="""of stuff. I want this directory. I want this, I don't""" start="00:31:36.080" video="qanda-p-search" id="subtitle"]] [[!template text="""want this directory. I want these search terms, you know,""" start="00:31:38.520" video="qanda-p-search" id="subtitle"]] [[!template text="""there's a lot to set up. And in most programs, I mean, they""" start="00:31:41.560" video="qanda-p-search" id="subtitle"]] [[!template text="""don't have an easy way to, I mean, they'll often try and try to""" start="00:31:48.160" video="qanda-p-search" id="subtitle"]] [[!template text="""hide all this complexity. Like they say, okay, our users""" start="00:31:52.080" video="qanda-p-search" id="subtitle"]] [[!template text="""too, you know, we don't want to, you know, we don't wanna, you""" start="00:31:55.040" video="qanda-p-search" id="subtitle"]] [[!template text="""know, make our users, we don't wanna scare our users with""" start="00:31:59.200" video="qanda-p-search" id="subtitle"]] [[!template text="""like, complicated search engine configuration. So we're""" start="00:32:02.720" video="qanda-p-search" id="subtitle"]] [[!template text="""just going to do it all in the background and we're just not""" start="00:32:06.880" video="qanda-p-search" id="subtitle"]] [[!template text="""going to let the user even know that it's happening. I mean,""" start="00:32:09.080" video="qanda-p-search" id="subtitle"]] [[!template text="""that's the third time you've made me laugh out loud. Sorry""" start="00:32:12.600" video="qanda-p-search" id="subtitle"]] [[!template text="""for interrupting you, but yeah, you're just spot on there.""" start="00:32:15.120" video="qanda-p-search" id="subtitle"]] [[!template text="""You're some people's users. Am I right? like, you know, and""" start="00:32:17.880" video="qanda-p-search" id="subtitle"]] [[!template text="""also some people's workflows.""" start="00:32:23.000" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Problem space""" start="00:32:25.391" video="qanda-p-search" id="subtitle"]]
[[!template text="""And, you know, another case""" start="00:32:25.391" video="qanda-p-search" id="subtitle"]] [[!template text="""where just like, if you're thinking about Emacs, you either""" start="00:32:27.720" video="qanda-p-search" id="subtitle"]] [[!template text="""have to pick a tunnel to dive into and be like, no, this is""" start="00:32:30.800" video="qanda-p-search" id="subtitle"]] [[!template text="""going to be right for my work, or your problem space is never""" start="00:32:33.280" video="qanda-p-search" id="subtitle"]] [[!template text="""ending in terms of discovering the ways other people are""" start="00:32:37.760" video="qanda-p-search" id="subtitle"]] [[!template text="""using Emacs and how that breaks your feature. and how that""" start="00:32:40.880" video="qanda-p-search" id="subtitle"]] [[!template text="""breaks your conceptualization of the problem space,""" start="00:32:45.840" video="qanda-p-search" id="subtitle"]] [[!template text="""right? Or you just have to get so narrowed down that can""" start="00:32:49.680" video="qanda-p-search" id="subtitle"]] [[!template text="""actually be hard to find people that are quite understand""" start="00:32:53.560" video="qanda-p-search" id="subtitle"]] [[!template text="""you, right? You get into the particular, well, it solves""" start="00:32:57.120" video="qanda-p-search" id="subtitle"]] [[!template text="""these three problems for me. Well, what are these three""" start="00:33:00.280" video="qanda-p-search" id="subtitle"]] [[!template text="""problems again? And this is a month to unpack. You have Emacs""" start="00:33:03.040" video="qanda-p-search" id="subtitle"]] [[!template text="""and I don't know, it's like you got a lot of, they all agree is""" start="00:33:08.640" video="qanda-p-search" id="subtitle"]] [[!template text="""like we're going to use elisp to set variables every emacs""" start="00:33:12.640" video="qanda-p-search" id="subtitle"]] [[!template text="""package is going to do that we're going to use elisp and have a""" start="00:33:16.560" video="qanda-p-search" id="subtitle"]] [[!template text="""search in place to put our documentation and like it does""" start="00:33:21.200" video="qanda-p-search" id="subtitle"]] [[!template text="""also eliminate a lot of confusion and gives a lot of""" start="00:33:25.480" video="qanda-p-search" id="subtitle"]] [[!template text="""expectations of what they want. One thing that I'm""" start="00:33:32.560" video="qanda-p-search" id="subtitle"]] [[!template text="""surprised I haven't seen elsewhere is you have the""" start="00:33:37.720" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""consult-omni""" start="00:33:39.856" video="qanda-p-search" id="subtitle"]]
[[!template text="""consult-omni package which allows you to search multiple websites""" start="00:33:39.856" video="qanda-p-search" id="subtitle"]] [[!template text="""simultaneously for multiple web search engines. and put""" start="00:33:44.240" video="qanda-p-search" id="subtitle"]] [[!template text="""them in one thing and it's like, and then you use orderless.""" start="00:33:49.800" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""orderless""" start="00:33:52.800" video="qanda-p-search" id="subtitle"]]
[[!template text="""Why would you use orderless? Because that's what you""" start="00:33:52.800" video="qanda-p-search" id="subtitle"]] [[!template text="""configured and you know exactly what you wanna use and you""" start="00:33:55.160" video="qanda-p-search" id="subtitle"]] [[!template text="""use the same font and your same mini buffer and you use all""" start="00:33:57.800" video="qanda-p-search" id="subtitle"]] [[!template text="""that existing configuration because, well, you're an""" start="00:34:01.680" video="qanda-p-search" id="subtitle"]] [[!template text="""Emacs user or like you're a command line user. You know how""" start="00:34:04.080" video="qanda-p-search" id="subtitle"]] [[!template text="""you want these applications to go. You don't want them to be""" start="00:34:07.600" video="qanda-p-search" id="subtitle"]] [[!template text="""reinvented the wheel 1600 times in 1,600 different ways,""" start="00:34:11.560" video="qanda-p-search" id="subtitle"]] [[!template text="""you want it to use your mini buffer, your font, your et""" start="00:34:17.400" video="qanda-p-search" id="subtitle"]] [[!template text="""cetera, et cetera, et cetera. But I haven't""" start="00:34:23.080" video="qanda-p-search" id="subtitle"]] [[!template text="""seen a website where I can search multiple websites at the""" start="00:34:28.160" video="qanda-p-search" id="subtitle"]] [[!template text="""same time in something like Emacs before. And it's like,""" start="00:34:32.480" video="qanda-p-search" id="subtitle"]] [[!template text="""yeah, with my sorting algorithm,""" start="00:34:35.160" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, exactly. Yeah. Yeah. Yeah. I mean, just setting the""" start="00:34:38.320" video="qanda-p-search" id="subtitle"]] [[!template text="""bar for configuration and set up just like, yeah, you have to""" start="00:34:49.360" video="qanda-p-search" id="subtitle"]] [[!template text="""have a list. Yeah. I mean, it, it does, obviously it's not,""" start="00:34:57.080" video="qanda-p-search" id="subtitle"]] [[!template text="""it's not most beginner beginner friendly, but I mean, it,""" start="00:35:02.840" video="qanda-p-search" id="subtitle"]] [[!template text="""yeah, it definitely widens the amount of the solution space""" start="00:35:05.840" video="qanda-p-search" id="subtitle"]] [[!template text="""you can have to such problems. Oh my gosh, you used the word""" start="00:35:10.320" video="qanda-p-search" id="subtitle"]] [[!template text="""solution space. I love it. But on the flip side, it's like,""" start="00:35:14.680" video="qanda-p-search" id="subtitle"]] [[!template text="""why does Emacs get this consult-omni package? Or let's see,""" start="00:35:18.760" video="qanda-p-search" id="subtitle"]] [[!template text="""you have elfeed-youtube where it will put a flowing""" start="00:35:25.120" video="qanda-p-search" id="subtitle"]] [[!template text="""transcript on a YouTube video or you got your package. Why""" start="00:35:30.720" video="qanda-p-search" id="subtitle"]] [[!template text="""does it get all these applications? And I don't see""" start="00:35:34.480" video="qanda-p-search" id="subtitle"]] [[!template text="""applications like this as much outside of Emacs. So there's""" start="00:35:39.880" video="qanda-p-search" id="subtitle"]] [[!template text="""a way that it just makes it easier.""" start="00:35:45.680" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""User interface""" start="00:35:46.268" video="qanda-p-search" id="subtitle"]]
[[!template text="""It's because user""" start="00:35:46.268" video="qanda-p-search" id="subtitle"]] [[!template text="""interface is the, you know, it's the economy stupid of""" start="00:35:47.480" video="qanda-p-search" id="subtitle"]] [[!template text="""technology, right? If you grab people by the UX, you can sell""" start="00:35:51.440" video="qanda-p-search" id="subtitle"]] [[!template text="""a million of any product that solves problem that I didn't""" start="00:35:58.120" video="qanda-p-search" id="subtitle"]] [[!template text="""think technology could solve, or that I didn't think I had""" start="00:36:01.680" video="qanda-p-search" id="subtitle"]] [[!template text="""the patience to use technology to solve, which is a lot of""" start="00:36:04.640" video="qanda-p-search" id="subtitle"]] [[!template text="""times what it comes down to. And here exactly is the, you""" start="00:36:08.320" video="qanda-p-search" id="subtitle"]] [[!template text="""know, the the Emacs sort of conundrum, right? How much time""" start="00:36:12.160" video="qanda-p-search" id="subtitle"]] [[!template text="""should I spend today updating my Emacs so that tomorrow I can""" start="00:36:16.800" video="qanda-p-search" id="subtitle"]] [[!template text="""just work more, right? And, you know, I love that little""" start="00:36:20.760" video="qanda-p-search" id="subtitle"]] [[!template text="""graph of the Emacs learning curve, right? Where it's this""" start="00:36:26.320" video="qanda-p-search" id="subtitle"]] [[!template text="""concentric, it becomes this concentric spiral, right? The""" start="00:36:29.840" video="qanda-p-search" id="subtitle"]] [[!template text="""Vim learning curve is like a ladder, right? Or, you know, and""" start="00:36:33.400" video="qanda-p-search" id="subtitle"]] [[!template text="""And the nano learning curve is like just a flat plane, you""" start="00:36:38.760" video="qanda-p-search" id="subtitle"]] [[!template text="""know, or a ladder, a vertical ladder or a horizontal ladder.""" start="00:36:44.120" video="qanda-p-search" id="subtitle"]] [[!template text="""There we go. And the Emacs learning curve is this kind of""" start="00:36:49.280" video="qanda-p-search" id="subtitle"]] [[!template text="""straight up line until it curves back on itself and""" start="00:36:56.720" video="qanda-p-search" id="subtitle"]] [[!template text="""eventually spirals. And the more you learn, the harder it is""" start="00:36:59.800" video="qanda-p-search" id="subtitle"]] [[!template text="""to learn the next thing. And are you really moving forward at""" start="00:37:03.080" video="qanda-p-search" id="subtitle"]] [[!template text="""all? Like, it just works for me. What a great analogy. And""" start="00:37:05.840" video="qanda-p-search" id="subtitle"]] [[!template text="""that's my answer, I think. Yeah. You know, it's because""" start="00:37:09.040" video="qanda-p-search" id="subtitle"]] [[!template text="""we... The spiral is great. Sorry. There are each of these""" start="00:37:15.280" video="qanda-p-search" id="subtitle"]] [[!template text="""weird little packages that some of us, you know, it solves""" start="00:37:20.200" video="qanda-p-search" id="subtitle"]] [[!template text="""that one problem and lets us get back to work. And for others,""" start="00:37:26.640" video="qanda-p-search" id="subtitle"]] [[!template text="""it makes us go, gosh, now that makes me rethink a whole bunch""" start="00:37:29.280" video="qanda-p-search" id="subtitle"]] [[!template text="""of things because there's... Like I don't even know what""" start="00:37:32.440" video="qanda-p-search" id="subtitle"]] [[!template text="""you're talking about with some of your conceptualizations""" start="00:37:35.240" video="qanda-p-search" id="subtitle"]] [[!template text="""of UI. Maybe it comes from Visual Studio, and I've not""" start="00:37:37.720" video="qanda-p-search" id="subtitle"]] [[!template text="""used that or something. So for you, it's a perfectly normal UX""" start="00:37:41.040" video="qanda-p-search" id="subtitle"]] [[!template text="""paradigm that you kind of lean on for others. It's like you""" start="00:37:44.680" video="qanda-p-search" id="subtitle"]] [[!template text="""know occupying some screen space and I don't know what the""" start="00:37:48.800" video="qanda-p-search" id="subtitle"]] [[!template text="""gadgets do and when I open them up... They're thinking""" start="00:37:52.000" video="qanda-p-search" id="subtitle"]] [[!template text="""about... they have... they imply their own""" start="00:37:57.760" video="qanda-p-search" id="subtitle"]] [[!template text="""abstractions let's say logically against a programming""" start="00:38:01.000" video="qanda-p-search" id="subtitle"]] [[!template text="""language. This would be tree sitter, right. If i'm not used to""" start="00:38:03.640" video="qanda-p-search" id="subtitle"]] [[!template text="""thinking in terms of an abstract abstract syntax tree, some""" start="00:38:07.000" video="qanda-p-search" id="subtitle"]] [[!template text="""of the concepts just aren't as natural for me. If i'm used to""" start="00:38:11.720" video="qanda-p-search" id="subtitle"]] [[!template text="""like emacs at a more fundamental level is, or the old modes""" start="00:38:14.800" video="qanda-p-search" id="subtitle"]] [[!template text="""right, we're used to them thinking in terms of progressing""" start="00:38:19.040" video="qanda-p-search" id="subtitle"]] [[!template text="""forward through some text, managing a stack of markers into""" start="00:38:23.480" video="qanda-p-search" id="subtitle"]] [[!template text="""the text, right? It's a different paradigm. The world""" start="00:38:26.960" video="qanda-p-search" id="subtitle"]] [[!template text="""changes. Emacs kind of supports it all. That's why all the""" start="00:38:29.240" video="qanda-p-search" id="subtitle"]] [[!template text="""apps are built there. That's why when you're talking about""" start="00:38:33.560" video="qanda-p-search" id="subtitle"]] [[!template text="""that spiral. what that hints at is that this is really just a""" start="00:38:37.040" video="qanda-p-search" id="subtitle"]] [[!template text="""different algorithm that you're transferring out that""" start="00:38:40.760" video="qanda-p-search" id="subtitle"]] [[!template text="""makes some things a lot easier and some things a lot harder.""" start="00:38:44.240" video="qanda-p-search" id="subtitle"]] [[!template text="""That's why I was bringing in those three packages, because""" start="00:38:47.320" video="qanda-p-search" id="subtitle"]] [[!template text="""in some way it's making these search terms with reusable...""" start="00:38:51.720" video="qanda-p-search" id="subtitle"]] [[!template text="""Let's see... saveable buffers or interactive buffers in a way""" start="00:38:59.709" video="qanda-p-search" id="subtitle"]] [[!template text="""that... in a way, that is bigger than what I think it should have,""" start="00:39:07.084" video="qanda-p-search" id="subtitle"]] [[!template text="""especially in comparison to like how many people use""" start="00:39:10.360" video="qanda-p-search" id="subtitle"]] [[!template text="""YouTube, but I don't see very many YouTube apps that will""" start="00:39:15.480" video="qanda-p-search" id="subtitle"]] [[!template text="""show Rolling subtitle list that you can click on to move up""" start="00:39:20.320" video="qanda-p-search" id="subtitle"]] [[!template text="""and down the video""" start="00:39:26.280" video="qanda-p-search" id="subtitle"]] [[!template text="""even though YouTube's been around for years.""" start="00:39:27.316" video="qanda-p-search" id="subtitle"]] [[!template text="""Why does Emacs have a very good implementation""" start="00:39:30.140" video="qanda-p-search" id="subtitle"]] [[!template text="""that was duct taped together? So before I let you respond to""" start="00:39:33.360" video="qanda-p-search" id="subtitle"]] [[!template text="""that, Zac, let me just say we're coming up on eating up a""" start="00:39:37.160" video="qanda-p-search" id="subtitle"]] [[!template text="""whole half hour of your lunchtime and thank you for giving us""" start="00:39:40.440" video="qanda-p-search" id="subtitle"]] [[!template text="""that extra time. But let me just say, let's, you know, if I""" start="00:39:43.880" video="qanda-p-search" id="subtitle"]] [[!template text="""could ask you to take like up to another five minutes and then""" start="00:39:47.880" video="qanda-p-search" id="subtitle"]] [[!template text="""I'll try to kick us off here and make sure everybody does""" start="00:39:50.880" video="qanda-p-search" id="subtitle"]] [[!template text="""remember to eat.""" start="00:39:53.760" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, so yeah, it looks like there's one other question. So""" start="00:39:55.000" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms?""" start="00:40:04.120" video="qanda-p-search" id="subtitle"]]
[[!template text="""yeah, do you think Emacs being kind of slow will get in the way""" start="00:40:04.120" video="qanda-p-search" id="subtitle"]] [[!template text="""of being able to run a lot of scoring algorithms? So this is""" start="00:40:06.680" video="qanda-p-search" id="subtitle"]] [[!template text="""actually a thought I had. Yeah, Emacs, because the code""" start="00:40:11.320" video="qanda-p-search" id="subtitle"]] [[!template text="""currently kind of does, I mean, it kind of does, it's kind of""" start="00:40:15.040" video="qanda-p-search" id="subtitle"]] [[!template text="""dumb in a lot of places. a lot of times it just, it does just go""" start="00:40:19.920" video="qanda-p-search" id="subtitle"]] [[!template text="""through all the files and then just compute some score for""" start="00:40:24.040" video="qanda-p-search" id="subtitle"]] [[!template text="""them. But I'm surprised that it's, that part actually isn't""" start="00:40:27.600" video="qanda-p-search" id="subtitle"]] [[!template text="""that slow. Like, like it turns out like, okay, like if you""" start="00:40:30.680" video="qanda-p-search" id="subtitle"]] [[!template text="""take, for example, Emacs, like the Emacs directory or the""" start="00:40:34.800" video="qanda-p-search" id="subtitle"]] [[!template text="""Emacs Git repository, or maybe another big Git repository,""" start="00:40:40.760" video="qanda-p-search" id="subtitle"]] [[!template text="""like you could have an Elisp function enumerate those, and""" start="00:40:44.880" video="qanda-p-search" id="subtitle"]] [[!template text="""multiply some numbers, maybe multiply 10 numbers""" start="00:40:49.080" video="qanda-p-search" id="subtitle"]] [[!template text="""together. And that isn't that slow. And that's the bulk of""" start="00:40:52.600" video="qanda-p-search" id="subtitle"]] [[!template text="""what the only thing that Elisp has to do is just like multiply""" start="00:41:01.040" video="qanda-p-search" id="subtitle"]] [[!template text="""these numbers. Obviously, if you have to resort to Elisp to""" start="00:41:05.800" video="qanda-p-search" id="subtitle"]] [[!template text="""search all the files and you have like 10 or 100,000 files,""" start="00:41:11.600" video="qanda-p-search" id="subtitle"]] [[!template text="""then yeah, Emacs will be slow""" start="00:41:15.520" video="qanda-p-search" id="subtitle"]] [[!template text="""to manually search, like if you're not using ripgrep or any""" start="00:41:18.760" video="qanda-p-search" id="subtitle"]] [[!template text="""faster tool and you have, and you have millions of files and""" start="00:41:23.960" video="qanda-p-search" id="subtitle"]] [[!template text="""yeah, it will be slow. But what I noticed though is like, for""" start="00:41:26.840" video="qanda-p-search" id="subtitle"]] [[!template text="""example, let's say you want to search for, let's say you want""" start="00:41:30.960" video="qanda-p-search" id="subtitle"]] [[!template text="""to search like info directory, like info files for Emacs and""" start="00:41:35.120" video="qanda-p-search" id="subtitle"]] [[!template text="""the Emacs info file and the Elisp info file. So those are two""" start="00:41:40.200" video="qanda-p-search" id="subtitle"]] [[!template text="""decently sized kind of books, kind of like reference""" start="00:41:46.040" video="qanda-p-search" id="subtitle"]] [[!template text="""material on Emacs.""" start="00:41:49.280" video="qanda-p-search" id="subtitle"]] [[!template text="""Relying on Elisp to search both of those together, it's""" start="00:41:50.200" video="qanda-p-search" id="subtitle"]] [[!template text="""actually pretty, it's actually like almost instant. I""" start="00:41:56.000" video="qanda-p-search" id="subtitle"]] [[!template text="""mean, it's not slow enough. So I think that's""" start="00:41:58.080" video="qanda-p-search" id="subtitle"]] [[!template text="""another thing is like scale. Like I think on, on kind of like""" start="00:42:00.640" video="qanda-p-search" id="subtitle"]] [[!template text="""individual human level scales, I think Elisp can be good""" start="00:42:03.680" video="qanda-p-search" id="subtitle"]] [[!template text="""enough. if you're going on the scale of like enterprise,""" start="00:42:09.680" video="qanda-p-search" id="subtitle"]] [[!template text="""like all the repositories, all the Git repositories of an""" start="00:42:14.360" video="qanda-p-search" id="subtitle"]] [[!template text="""enterprise, then yeah, that scale might, it might, it might""" start="00:42:18.400" video="qanda-p-search" id="subtitle"]] [[!template text="""be too much. But I think on, on the scale of what most""" start="00:42:21.200" video="qanda-p-search" id="subtitle"]] [[!template text="""individuals have to deal with on a daily basis, like for""" start="00:42:26.040" video="qanda-p-search" id="subtitle"]] [[!template text="""example, maybe somebody has some, yeah, I mean, I think it""" start="00:42:30.520" video="qanda-p-search" id="subtitle"]] [[!template text="""should, I think it hopefully should be enough. And if not,""" start="00:42:34.720" video="qanda-p-search" id="subtitle"]] [[!template text="""there's always room for optimizations.""" start="00:42:36.960" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, so so I'll redirect you a little bit because based on a""" start="00:42:39.640" video="qanda-p-search" id="subtitle"]] [[!template text="""couple of things I got into, you know, or if you want to be done""" start="00:42:56.000" video="qanda-p-search" id="subtitle"]] [[!template text="""be like, you know, give me the hi sign by all means and we can""" start="00:43:00.280" video="qanda-p-search" id="subtitle"]] [[!template text="""we can shut up shop, but I'm curious, you know, what are what""" start="00:43:04.760" video="qanda-p-search" id="subtitle"]]
[[!template new="1" text="""Boundary conditions""" start="00:43:08.640" video="qanda-p-search" id="subtitle"]]
[[!template text="""are your boundary conditions? What what tends to cause you""" start="00:43:08.640" video="qanda-p-search" id="subtitle"]] [[!template text="""to to to write something more complicated and what what""" start="00:43:13.080" video="qanda-p-search" id="subtitle"]] [[!template text="""causes you to? So to work around it with more complex""" start="00:43:16.680" video="qanda-p-search" id="subtitle"]] [[!template text="""workflow in Emacs terms, like where do you break out the big""" start="00:43:20.960" video="qanda-p-search" id="subtitle"]] [[!template text="""guns? Just thinking about, like search, we talked about,""" start="00:43:23.560" video="qanda-p-search" id="subtitle"]] [[!template text="""maybe that's too abstract a question, but just general""" start="00:43:27.920" video="qanda-p-search" id="subtitle"]] [[!template text="""usage. Search is an example where almost all of us have""" start="00:43:31.440" video="qanda-p-search" id="subtitle"]] [[!template text="""probably written something to go find something, right?""" start="00:43:36.680" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, I mean, this is a good question. I'm actually of the""" start="00:43:39.600" video="qanda-p-search" id="subtitle"]] [[!template text="""idea, at my work, for example, I tried to get rid of all, I""" start="00:43:43.520" video="qanda-p-search" id="subtitle"]] [[!template text="""mean, this is probably a typical Emacs user thing, but like,""" start="00:43:52.000" video="qanda-p-search" id="subtitle"]] [[!template text="""I mean, I think that just like getting, just like having""" start="00:43:54.880" video="qanda-p-search" id="subtitle"]] [[!template text="""Emacs expand to whatever it can get into and whatever it can""" start="00:43:59.320" video="qanda-p-search" id="subtitle"]] [[!template text="""automate, like any task, any, like, just like the more you""" start="00:44:02.560" video="qanda-p-search" id="subtitle"]] [[!template text="""can kind of get that coded, I actually find that kind of like,""" start="00:44:08.840" video="qanda-p-search" id="subtitle"]] [[!template text="""I mean, it is kind of like a meme. Like, yeah, I have to""" start="00:44:13.720" video="qanda-p-search" id="subtitle"]] [[!template text="""configure my Emacs until it's fun, and then I'll do it. But I""" start="00:44:20.440" video="qanda-p-search" id="subtitle"]] [[!template text="""actually I actually think that maybe for like a normal""" start="00:44:24.200" video="qanda-p-search" id="subtitle"]] [[!template text="""software developer, if you invest, if you invest, maybe,""" start="00:44:27.960" video="qanda-p-search" id="subtitle"]] [[!template text="""maybe you have like some spare time after you've done all""" start="00:44:32.000" video="qanda-p-search" id="subtitle"]] [[!template text="""your tasks, if you invest all that time in, in just like kind""" start="00:44:34.840" video="qanda-p-search" id="subtitle"]] [[!template text="""of going through all the workflows, all the, you know, just,""" start="00:44:39.680" video="qanda-p-search" id="subtitle"]] [[!template text="""just getting all of that in, in Emacs, then I think that that,""" start="00:44:42.360" video="qanda-p-search" id="subtitle"]] [[!template text="""that acts as kind of like a, it kind of like a productivity""" start="00:44:46.280" video="qanda-p-search" id="subtitle"]] [[!template text="""multiplier. And so. So I found that, I mean, I found to not""" start="00:44:52.040" video="qanda-p-search" id="subtitle"]] [[!template text="""have those boundaries. I mean, obviously there's things""" start="00:44:56.760" video="qanda-p-search" id="subtitle"]] [[!template text="""you can't do, like web-based things. I mean, that's a hard""" start="00:44:59.520" video="qanda-p-search" id="subtitle"]] [[!template text="""boundary, but that's more because... Yeah, there's really""" start="00:45:04.600" video="qanda-p-search" id="subtitle"]] [[!template text="""not much to do about that. Nobody's written a front-end""" start="00:45:10.200" video="qanda-p-search" id="subtitle"]] [[!template text="""engine, and too much of the forebrain is occupied with""" start="00:45:13.720" video="qanda-p-search" id="subtitle"]] [[!template text="""things that should happen on the "end-users""" start="00:45:18.760" video="qanda-p-search" id="subtitle"]] [[!template text="""infrastructure", so to speak. So with like 40 seconds left, I""" start="00:45:22.560" video="qanda-p-search" id="subtitle"]] [[!template text="""was going to say a minute, but I guess, any final thoughts?""" start="00:45:29.840" video="qanda-p-search" id="subtitle"]] [[!template text="""Yeah, I mean, just thank you for listening, and And thank you""" start="00:45:33.520" video="qanda-p-search" id="subtitle"]] [[!template text="""for putting this on. It's a really nice conference to have,""" start="00:45:40.160" video="qanda-p-search" id="subtitle"]] [[!template text="""and I'm glad things like this exist. So thank you. Yeah, it's""" start="00:45:45.560" video="qanda-p-search" id="subtitle"]] [[!template text="""you and the other folks on this call. Thank you so much,""" start="00:45:50.680" video="qanda-p-search" id="subtitle"]] [[!template text="""PlasmaStrike, and all the rest of you for hopping on the BBB""" start="00:45:54.640" video="qanda-p-search" id="subtitle"]] [[!template text="""and having such an interesting discussion. Keeps it really""" start="00:45:58.640" video="qanda-p-search" id="subtitle"]] [[!template text="""fun for us as organizers. And thanks, everybody, for being""" start="00:46:03.120" video="qanda-p-search" id="subtitle"]] [[!template text="""here.""" start="00:46:08.240" video="qanda-p-search" id="subtitle"]]
Questions or comments? Please e-mail [zacromero@posteo.com](mailto:zacromero@posteo.com?subject=Comment%20for%20EmacsConf%202023%20p-search%3A%20p-search%3A%20a%20local%20search%20engine%20in%20Emacs)