diff options
Diffstat (limited to '')
27 files changed, 6688 insertions, 5493 deletions
diff --git a/2020/info/01.md b/2020/info/01.md index 65b37947..1d575b35 100644 --- a/2020/info/01.md +++ b/2020/info/01.md @@ -3,6 +3,7 @@ Sacha Chua [[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--01-emacs-news-highlights--sacha-chua.webm" subtitles="/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt" duration="3:58" download="Download with subtitles" size="11MB"]] [Download compressed .webm video (10M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--01-emacs-news-highlights--sacha-chua--vp9-q56-video-original-audio.webm) +[View transcript](https://github.com/sachac/emacsconf-2020-emacs-news-highlights) Quick highlights from Emacs News since the last EmacsConf @@ -10,7 +11,6 @@ Quick highlights from Emacs News since the last EmacsConf - <https://github.com/sachac/emacsconf-2020-emacs-news-highlights> - # Following up Got any cool Emacs links you'd like me to share? You can post diff --git a/2020/info/02.md b/2020/info/02.md index c6cac107..fab7aa9d 100644 --- a/2020/info/02.md +++ b/2020/info/02.md @@ -1,7 +1,7 @@ # An Emacs Developer Story: From User to Package Maintainer Leo Vivier -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm" size="296MB" subtitles="/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt" duration="24:15"]] +[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm" size="296MB" subtitles="/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt" duration="24:15"]] In light of the new development philosophy for Org-mode, I would like to present my developer story from discovering Org-mode in 2014 to @@ -81,343 +81,535 @@ development via emacs resources for learning; the people were SO generous with their time, to share comments and ideas to improve code. -<!-- transcript: 2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt --> +<a name="transcript"></a> # Transcript -(Amin: Alrighty, Leo Vivier, take it away.) Leo Vivier: Okay, well, thank you. I'm -in. So you've just had a little roundup of the news, and we're going -to get started now with some presentations. We're starting with user -developer stories. I was extremely interested in this section because -I wanted to get a chance, basically, to tell you a little more about -who I am and how I got from basically being a user of Emacs to being -nowadays a package maintainer, and maybe more in the future. I don't -know. - -So, just for the organizers, I'm planning to speak for 15 minutes, and -I'll have five more minutes of questions at the end. As I told you -before, if you want to have questions, you know you can use the pad, -and I'll be reading the questions from there. Okay. - -So hi there, as Amin introduced me before, my name is Leo Vivier. I'm -a freelance software engineer in France, and I have been using Emacs -now for i believe close to eight years. I can't believe it's been so -long. But yes, it's been a journey because, in a way, nothing made me -go for Emacs. You know I'm an-- sorry, I was about to say Emacs major, -but no, I'm an English major. I went to university to study English -literature and linguistics, and I just got started in Emacs because I -was looking for ways to take better notes. I was looking for ways to -[Applause] structure the way I was learning, structure the way I was -taking notes. I stumbled one day upon this weird piece of software -which was called Emacs, and I've been trapped forever since, -basically, because eight years ago, when I discovered Emacs I just -couldn't let go. There was just something very interesting about the -way you configured your setup, and I just wanted to dive deeper and -deeper. - -So the title is of this talk exactly is how I went from user to -package maintainer, and the package now that I'm maintaining is called -org-roam. I'm not the only one doing this. I'm helped with many lovely -people working on org-roam. I got started as a maintainer only this -year, so that means that for the eight years I've been an Emacs user, -seven of those years were spent merely being a user trying to be a -sponge for knowledge, trying to learn as much as I could. I believe it -would be interesting for me to share my story because I believe that -I'm far from being the only user who can make the jump to being a -maintainer. - -A lot of you have a lot of knowledge when it comes to Emacs. Some of -you are at different steps in your journey. Some of you, for instance, -are just starting to copy stuff out of StackExchange into your Emacs -configuration. let's say you want to do something very particular and -you haven't found a way to do so. You go on StackExchange. You find -something that's interesting. You add it to your Emacs configuration. -You barely understand anything that's going on. You know that it's -supposed to be Emacs Lisp. "I hardly know Emacs and I know even less -what is Lisp supposed to be." But you paste it in and it does what you -want it to do, and you say "Great, I'll move on to my work now." So -that's how I got started. I had a very spartan setup for Emacs, which -a lot of you must know... The first time you launch Emacs, you have -this feeling that you're jumping 20 years back in time, as far as the -user interface is concerned. But as you get to spend more time with -Emacs... Some would call it Stockholm syndrome insofar as you can't -see how spartan the entire thing is, but it actually is a lovely -prison so to speak. - -That's how I got started eight years ago. I just wanted to find a way -to do my research properly. I wanted to have a tool that I could use -to write my notes in plain text, because I was already fairly averse -to Microsoft solutions when it came to taking notes. So yeah, I got -started in Emacs. I read a little bit about what plain text was about. -Just to be clear, at the time, yes, I was very good with computers, -but I was not a computer science student. I had barely any experience -with programming and coding, and I was even less of a hacker back -then. It just goes to show you that at the beginning, I had close to -no knowledge, whether it be about the free software world, whether it -be about... - -Sacha, do you want to say something? (Sacha: just confirming, you're -not sharing anything on the screen at the moment, right?) No, I'm not -sharing anything, I'm just presenting. - -So when I started, I had no experience whatsoever. I was just a -literature major trying to get better at taking notes. I stumbled upon -LaTeX. As many people who stumble upon LaTeX know, you don't just -stumble upon LaTeX, you embroil yourself in the turmoil of suffering, -of late nights tweaking, so that your document is exactly in the -perfect shape you want it to be. - -Soon after, when I got started with Emacs and LaTeX, I discovered -something that truly changed my life, and it was Org Mode. As you'll -get a lot of presentations this afternoon about Org Mode, I won't be -spending too much time on it. But Org Mode, for me, was a revelation. -It's... There was something that, upon reading articles on how to use -Org Mode, especially one of the key article that I'd read which really -made a huge impact on me was the "Organize Your Life in Plain Text" -one which i'm sure many of you must have stumbled upon in your Emacs -journey... For me, when I stumbled upon this document, I was starting -to get interested in Getting Things Done and all the nitty-gritty -stuff about organization and self-organization. It just felt like -everything was under my fingertips to make the perfect workflow. There -was something incredibly satisfying about having a system that gave -you so many options to configure your experience exactly how you -wanted. You had this feeling that the people behind Org Mode had -thought of everything, whichever small adjustment that you needed in -workflow whether it be more states for your TODOs, whether it be, oh, -I want my weeks to start on Monday and not on Saturday, oh, it's half -past one and I need to... in the morning, I mean, and I need to make -sure that the item that i'm marking as done is done for the day before -and not for the current day. You see what I'm talking about. So many -details that were already present in Org Mode. At first you're really -impressed, because you think, wow, they thought of everything, but -then you realize that it's just a matter of experience, just a matter -of people contributing code, because the development of Org Mode, -Emacs, and everything is just open to the public. - -You know, it's like everything is being done with the garage -door opened. You can just go on Org Mode on Savannah and see -everything that is being developed. For me, the shift that occurred in -my mind was when I was reading all the options, I was looking at all -the variables that i could modify for Org Mode, and there came a time, -maybe two to three years ago, where I thought, oh wow, maybe for the -first time in a while, there is no option for me to do what I want to -be doing with Org Mode. I believe at the time the the key issue that -triggered this reflex for me was I wanted to do something with the -agenda. I wanted to have a super category so, you know, in the... for -those of you who know, in your agenda, you have the ability to have -many files, and you have the ability to have categories. I wanted -somehow to group my TODOs in smaller groups, or bigger groups, I -should say, so that, for instance, I could have one group for my -professional life, I could have a group for one work, the second -work... I could have something for university and all this. I thought, -yeah, I think I'd like this. After having spent so long working with -Emacs and working with Org Mode, I had some ideas about what was -within the realm of possibility and what wasn't. Here I thought to -myself, this is definitely something that I can do. And so thus -started my journey into the Org Mode libraries. - -I won't go too much into details right now, because right now, the -main objective that I have is just to show you how simple it is to -become a maintainer, how to become more involved with the development. -The libraries in Org Mode, they're written in Elisp, which is a -very... It might seem like an obscure language, and it certainly is, -but as soon as you get the logic of the language--and what i'm telling -you is coming from someone who's never studied programming-- it made -sense. Everything is so verbose when you get into the code. When you -learn the rudiments of Elisp, you start getting to the code, and you -start thinking, wow, okay that makes sense, and you start developing a -logic for all this. So, equipped as I was with this new knowledge, I -went on my project, i went into the Org agenda code, and I thought, -okay, is there anything that I can use to do my bidding? Fast forward -maybe two to three weeks of intense turmoil and many nights which were -spent single-mindedly working on this project, two weeks after, I had -something that was working, and I was pretty happy about it. That was -a key landmark for me, because when that happened, it just felt like, -okay, I can contribute something to Org Mode, and I can do something -that would benefit as many people as possible. And to me, that was the -click. That's when it occurred. That's when I went on my first project -and I did something that felt useful to the community. - -And nowadays, as I told you, I maintain packages, but really, nothing -has changed. The only thing, maybe, that has changed that I've turned -my mind onto other problems. Maybe I've got three more minutes and I'd -like to finish by maybe something a little different. - -I've told you my Emacs story and I hope I've stressed how little -effort it took me to move from steps to steps on the ladder. The -ladder implies a sense of hierarchy, but it really isn't. Whatever -your step on the journey of Emacs is... Some of you might be at the -step where you're really worried about learning Elisp because it feels -like such a monumental task to be undertaking and you have no -experience whatsoever, but the thing is, maybe you could try climbing -this first step on the ladder. Maybe you could try, if you have any -project, if you've been using Org Mode, maybe one day you thought, -"oh, yes, I wish I could do this but I can't," or maybe do try to do -this, maybe do try to change something in a major mode that you're -using and which you feel might be better. I think Emacs, Org Mode, and -all free software in general has this tendency to give you this idea -that I can be a hacker in the sense of the term that you're modifying -things to do your bidding. For me, I believe this to be a very healthy -attitude towards software. As Amin said in the very beginning, we are -doing this entire presentation-- sorry, this entire conference with -free software. Just see all the things we've been able to do in free -software. For me, Emacs was my gateway, so to speak, into how to -contribute to free software, about the philosophy that surrounds it. - -What I would like to do... I'll finish on this note and then I'll be -taking your questions. Just try. You've read on Reddit that you need -to go through the Elisp manual in Emacs. You might be scared, but just -do it. Just give it a shot. Just give it maybe one afternoon. Try to -read it. Try to see if this appeals to your mind. If you've been -interested enough in my presentation right now, and if you're -interested enough in any of the talks you're going to have during the -entire conference, do give it a shot. I'm pretty sure you will like -the journey on which you will be embarking upon. So - -I believe I'm finishing one minute early, but I see quite a bit of -questions already. I'm not sure. Sacha, should I just be reading the -questions, or do you want to be feeding me the questions? (Amin: It's -really up to you. it's completely up to you. If you've got the -questions open and can take them or read them, by all means please.) -Okay, well, I'm going to read them because I've got them on the side. -I'm going to start with the one at the bottom. - -"Do you feel that being a white male contributed to your experience?" -Yeah. I mean, I do believe... There's an idea of privilege. I mean, -I'm French. I live in... I'm lucky enough to be here at university, -okay, and I'm fairly aware of the discrepancies that happen, even in -France, according to this... So, yes, I believe my journey was heavily -influenced by this. If you would like to specify the question, please -do, but I don't have really all that much to ask on this. - -"What is your advice to start learning Elisp language? Any -particularly good resource or any other tips?" I finished um my -presentation by telling you about the Elisp introduction which is -built into Emacs. What I might do... I'm going to share my screen just -to show you how this works. I will be sharing this window. I believe -it's frozen on my end, so I can't see anything. i'm not sure if you -can see me or if my camera is moving. Okay, so my Firefox is frozen. -So i'll answer the question, but I won't be able to show you what I -wanted to show you. There's a built-in guide inside Emacs to learn -Elisp. Maybe the best chance that you have is just to go open these -info pages. I'm sure someone will be kind enough to mention this to -you in the #emacsconf channel on IRC but it's probably the best way to -get started with Elisp. You know, we tend to get obsessed, with -software and with programming, about what's the best way to get -started. You see so many people who are heavily interested in getting -started with programming but they never managed to get started because -there's so much choice. My advice would be to just get started. Don't -get so worried about the first step. Well, if I may still recommend -the first step, even after saying this, do try to start with the -built-in guides. I believe they're pretty pretty good. - -There was another question. It's the last question that I can read and -after that, you will have to read the questions for me because -everything is frozen on my end. I hope I'm not frozen in a very bad -position so please excuse me if my mouth is open or anything. (Amin: -no, we just completely lost the video feed, so no worries.) Oh, -splendid, so I won't have to make a fool out of myself. - -So the last question I wanted to answer was "Have you read Dirk -Gently's Holistic Detective Agency?" No, I haven't. I hope it's not a -jab at the way i'm dressing for the conference, but yeah, I haven't -read it. Was there any other question? - -(Amin: I see one other question. "Any recommendation for good -packaging guides or places to start? i get a bit overwhelmed by some -things. For example, the choice of different test frameworks.") Right. -Okay. So that's a very good question. I believe alphapapa is in the -chat right now. As myself a new lisp developer for org-roam, i'd -really recommend you to look into his package developers' guide -because you have a list of all the softwares that are extremely useful -to be using when you're getting started. If you're looking into a -first step for how to develop elast package, i'd really advise you to -look into edebug. It's one word, edebug, and you have a section in the -manual for this, because for me, it was the key step to getting to -develop good packages. It was understanding basically what the code -did and having us something like a REPL (read-evaluate-print-loop) -that allows you to step through the code and see exactly which states -the variables are at which at this point in the program. That's really -my biggest advice to you. Any other question? Thanks. Yeah, I -see one or two more. So there's one. - -They ask, "How did the freedom of Emacs help you on your way?" So the -freedom of Emacs... I mentioned that Emacs, for me, was my gateway -into free software and the freedom of Emacs was that you could -maybe... First and foremost, compared to other software, was that you -had behind Emacs, Elisp, which allows you to read the code, read -whatever is going on in the background. Surely, if you go deep enough, -you'll end up on C functions that you might not be able to read if you -do not have the experience. But for Org Mode, which was my gateway -into Emacs, most of it is written in Elisp, and all the commands have -a very verbose name, like something simple as org go to next subtree -or org go to a parent subtree. You know, things like this. It's so -elegant. It's verbose. That's a sense of freedom insofar as you can go -into the code and see, oh, okay, that's how it's implemented. I -believe in a way that's the freedom and the liberty that is given to -you to look into the code is something that invites you to do the same -with your life. As someone who does a little bit of philosophy on the -side, I believe it's a very healthy message to be gathering from a -piece of software. - -(Amin: Awesome, thank you. Let's see... So we have... I think I saw -another question pop up.) I'm not sure how we're doing as far as time -is concerned... I believe we have like one or two minutes more. (Amin: -Yeah, actually, we're quite a bit ahead of the schedule, so if we take -a little bit longer, we're fine. If you do have more questions, please -do.) I'm just sorry that my video is not working anymore. (Amin: No -problem. Someone was actually saying... What's the most recent... -Actually, yeah well before that. - -"Please show off your three-piece suit before you end your talk, which -requires fixing your frozen camera. if this is not possible, please -post suit selfies in an easily accessible location." Okay, I'll make -sure to do this. But yes, I wanted to hype things up for the -conference, so yes, I did get the three-piece suit out. I'm very glad -you like it. By the way when you get a chance to see me live again, do -appreciate that my tie has both the colors of Emacs purple and also -Org Mode green. It took me a while to find this one, so I hope you -will appreciate this. - -(Amin: Awesome. Let's see. We have one other question. "What's the -most recent Emacs package or tool that you've discovered that you've -added to your repertoire?") Very interesting question. The thing is, -when you've spent as long as I have on Emacs--and I know that I've -only spent eight years and some of you might have spent maybe 10, 20, -maybe even more years on Emacs-- but for me, I believe the the coolest -neat trick that I found in Emacs was a mode which is called -beacon-mode. It's something that allows you to show when you're -jumping between buffers or when you're dropping between windows, it -shows exactly where your point is in that buffer by making a slight -ray of light which looks like a beacon, hence the name. It really -helps you navigate buffers because it always shows in a very visual -way where your point is. I'll get a chance to show this to you later -today when i'll be presenting my other talks. - -(Amin: AWesome. We have one question from Jonas, the maintainer from -Magit. He asks, "When you touched your webcam, that blew a fuse at my -place. How did you do that?") Well, I'm very sorry, Jonas, that it -happened to you, but i'll make sure not to touch my webcam again. -(Amin: Do we have any other questions?) I have to trust you on this -one. I'm really sorry. Everything is frozen on my end. (Amin: No -problem.) - -Yeah I'm more talking to the audience, I guess. I hope my lack of -slides didn't bother you. I really wanted to have this verbose time -with people, to be able to... it's a message that i've been trying to -share with as many people as possible. In france we do have an Emacs -workshop that we have on a monthly basis. I've been learning a lot -with those people and I felt like doing the same with Emacs conference -would be good. That's why i'm really happy, and I'm really lucky to -have had the chance to do this today. I hope some of you I've -convinced you of climbing up a step on a ladder or making a step in a -journey. (Amin: Absolutely. Thank you so much, Leo. I happen to -completely agree with your not necessarily using a slide when it's not -really needed and to help give some face-to-face time with the -audience. Unfortunately your webcam cut out, but I mean before that.) -Yes, I'll make sure to fix the problems later on, so don't worry about -it. (Amin: Awesome. Alrighty. I guess we're wrapping up for your talk -and getting ready for the next talk.) Sure. Well, thank you so much. -I'll see you all later, I suppose! (Amin: Sounds good. Thank you -again, Leo. Bye-bye) - -<!-- /transcript --> +[[!template text="(Amin: Alrighty, Leo Vivier, take it away.)" start="00:00:00.000" video="mainVideo" id=subtitle]] +[[!template text="Okay, well, thank you. I'm in." start="00:00:03.760" video="mainVideo" id=subtitle]] +[[!template text="So you've just had a little roundup of the news," start="00:00:05.319" video="mainVideo" id=subtitle]] +[[!template text="and we're going to get started now with some presentations." start="00:00:08.393" video="mainVideo" id=subtitle]] +[[!template text="We're starting with user developer stories." start="00:00:11.120" video="mainVideo" id=subtitle]] +[[!template text="I was extremely interested in this section" start="00:00:15.920" video="mainVideo" id=subtitle]] +[[!template text="because I wanted to get a chance, basically," start="00:00:18.568" video="mainVideo" id=subtitle]] +[[!template text="to tell you a little more about who I am and" start="00:00:21.133" video="mainVideo" id=subtitle]] +[[!template text="how I got from basically being a user of Emacs" start="00:00:24.160" video="mainVideo" id=subtitle]] +[[!template text="to being nowadays a package maintainer," start="00:00:28.160" video="mainVideo" id=subtitle]] +[[!template text="and maybe more in the future. I don't know." start="00:00:31.279" video="mainVideo" id=subtitle]] +[[!template new="1" text="So, just for the organizers, I'm planning to speak for 15 minutes," start="00:00:34.156" video="mainVideo" id=subtitle]] +[[!template text="and I'll have five more minutes of questions at the end." start="00:00:36.954" video="mainVideo" id=subtitle]] +[[!template text="As I told you before, if you want to have questions," start="00:00:39.680" video="mainVideo" id=subtitle]] +[[!template text="you know you can use the pad," start="00:00:41.880" video="mainVideo" id=subtitle]] +[[!template text="and I'll be reading the questions from there." start="00:00:43.440" video="mainVideo" id=subtitle]] +[[!template new="1" text="Okay. So hi there, as Amin introduced me before," start="00:00:45.871" video="mainVideo" id=subtitle]] +[[!template text="my name is Leo Vivier." start="00:00:49.600" video="mainVideo" id=subtitle]] +[[!template text="I'm a freelance software engineer in France," start="00:00:51.280" video="mainVideo" id=subtitle]] +[[!template text="and I have been using Emacs now for" start="00:00:55.662" video="mainVideo" id=subtitle]] +[[!template text="I believe close to eight years." start="00:00:59.359" video="mainVideo" id=subtitle]] +[[!template text="I can't believe it's been so long." start="00:01:00.885" video="mainVideo" id=subtitle]] +[[!template text="But yes, it's been a journey because, in a way," start="00:01:03.039" video="mainVideo" id=subtitle]] +[[!template text="nothing made me go for Emacs." start="00:01:09.967" video="mainVideo" id=subtitle]] +[[!template text="You know I'm an-- sorry, I was about to say Emacs major," start="00:01:13.255" video="mainVideo" id=subtitle]] +[[!template text="but no, I'm an English major." start="00:01:17.011" video="mainVideo" id=subtitle]] +[[!template text="I went to university to study English literature and linguistics," start="00:01:18.638" video="mainVideo" id=subtitle]] +[[!template text="and I just got started in Emacs" start="00:01:23.990" video="mainVideo" id=subtitle]] +[[!template text="because I was looking for ways to take" start="00:01:26.159" video="mainVideo" id=subtitle]] +[[!template text="better notes. I was looking for ways to" start="00:01:28.240" video="mainVideo" id=subtitle]] +[[!template text="structure the way I was learning," start="00:01:32.640" video="mainVideo" id=subtitle]] +[[!template text="structure the way I was taking notes." start="00:01:34.640" video="mainVideo" id=subtitle]] +[[!template text="I stumbled one day" start="00:01:38.084" video="mainVideo" id=subtitle]] +[[!template text="upon this weird piece of software" start="00:01:40.079" video="mainVideo" id=subtitle]] +[[!template text="which was called Emacs," start="00:01:42.032" video="mainVideo" id=subtitle]] +[[!template text="and I've been trapped forever since," start="00:01:43.759" video="mainVideo" id=subtitle]] +[[!template text="basically, because eight years ago," start="00:01:46.479" video="mainVideo" id=subtitle]] +[[!template text="when I discovered Emacs," start="00:01:48.328" video="mainVideo" id=subtitle]] +[[!template text="I just couldn't let go." start="00:01:49.515" video="mainVideo" id=subtitle]] +[[!template text="There was just something very" start="00:01:50.632" video="mainVideo" id=subtitle]] +[[!template text="interesting about the way" start="00:01:52.720" video="mainVideo" id=subtitle]] +[[!template text="you configured your setup," start="00:01:54.487" video="mainVideo" id=subtitle]] +[[!template text="and I just wanted to dive deeper and deeper." start="00:01:56.320" video="mainVideo" id=subtitle]] +[[!template new="1" text="So the title is of this talk exactly is" start="00:01:59.759" video="mainVideo" id=subtitle]] +[[!template text="how I went from user to package maintainer," start="00:02:04.320" video="mainVideo" id=subtitle]] +[[!template text="and the package now that I'm maintaining" start="00:02:07.637" video="mainVideo" id=subtitle]] +[[!template text="is called org-roam. I'm not the only one doing this." start="00:02:09.686" video="mainVideo" id=subtitle]] +[[!template text="I'm helped with many lovely people working on org-roam." start="00:02:12.080" video="mainVideo" id=subtitle]] +[[!template text="I got started as a maintainer only this year," start="00:02:18.720" video="mainVideo" id=subtitle]] +[[!template text="so that means that for" start="00:02:22.149" video="mainVideo" id=subtitle]] +[[!template text="the eight years I've been" start="00:02:23.360" video="mainVideo" id=subtitle]] +[[!template text="an Emacs user, seven of those years were" start="00:02:24.720" video="mainVideo" id=subtitle]] +[[!template text="spent merely being a user" start="00:02:27.360" video="mainVideo" id=subtitle]] +[[!template text="trying to be a sponge for knowledge," start="00:02:29.200" video="mainVideo" id=subtitle]] +[[!template text="trying to learn as much as I could." start="00:02:31.040" video="mainVideo" id=subtitle]] +[[!template text="I believe it would be" start="00:02:33.920" video="mainVideo" id=subtitle]] +[[!template text="interesting for me to share my story" start="00:02:36.800" video="mainVideo" id=subtitle]] +[[!template text="because I believe that I'm far from" start="00:02:39.040" video="mainVideo" id=subtitle]] +[[!template text="being the only user" start="00:02:40.959" video="mainVideo" id=subtitle]] +[[!template text="who can make the jump to being a maintainer." start="00:02:42.160" video="mainVideo" id=subtitle]] +[[!template new="1" text="A lot of you have a lot of knowledge when it comes to Emacs." start="00:02:44.327" video="mainVideo" id=subtitle]] +[[!template text="Some of you are at different steps in your journey." start="00:02:47.572" video="mainVideo" id=subtitle]] +[[!template text="Some of you, for instance, are just" start="00:02:51.040" video="mainVideo" id=subtitle]] +[[!template text="starting to copy stuff out of" start="00:02:52.720" video="mainVideo" id=subtitle]] +[[!template text="StackExchange into your Emacs configuration." start="00:02:55.680" video="mainVideo" id=subtitle]] +[[!template text="Let's say you want to do something very particular" start="00:02:59.058" video="mainVideo" id=subtitle]] +[[!template text="and you haven't found a way to do so." start="00:03:01.599" video="mainVideo" id=subtitle]] +[[!template text="You go on StackExchange." start="00:03:04.480" video="mainVideo" id=subtitle]] +[[!template text="You find something that's interesting." start="00:03:05.527" video="mainVideo" id=subtitle]] +[[!template text="You add it to your Emacs configuration." start="00:03:07.930" video="mainVideo" id=subtitle]] +[[!template text="You barely understand anything that's going on." start="00:03:10.077" video="mainVideo" id=subtitle]] +[[!template text="You know that it's supposed to be Emacs Lisp." start="00:03:11.680" video="mainVideo" id=subtitle]] +[[!template text=""I hardly know Emacs and" start="00:03:14.800" video="mainVideo" id=subtitle]] +[[!template text="I know even less what is Lisp supposed to be."" start="00:03:17.200" video="mainVideo" id=subtitle]] +[[!template text="But you paste it in, and it does what you want it to do," start="00:03:19.440" video="mainVideo" id=subtitle]] +[[!template text="and you say "Great, I'll move on to my work now."" start="00:03:22.172" video="mainVideo" id=subtitle]] +[[!template text="So that's how I got started." start="00:03:26.682" video="mainVideo" id=subtitle]] +[[!template text="I had a very spartan setup for Emacs, which a lot of you must know..." start="00:03:28.821" video="mainVideo" id=subtitle]] +[[!template text="The first time you launch Emacs," start="00:03:33.888" video="mainVideo" id=subtitle]] +[[!template text="you have this feeling" start="00:03:36.000" video="mainVideo" id=subtitle]] +[[!template text="that you're jumping 20 years back in time," start="00:03:36.920" video="mainVideo" id=subtitle]] +[[!template text="as far as the user interface is concerned." start="00:03:38.852" video="mainVideo" id=subtitle]] +[[!template text="But as you get to spend more time with Emacs..." start="00:03:43.260" video="mainVideo" id=subtitle]] +[[!template text="Some would call it Stockholm syndrome" start="00:03:46.959" video="mainVideo" id=subtitle]] +[[!template text="insofar as you can't see" start="00:03:49.120" video="mainVideo" id=subtitle]] +[[!template text="how spartan the entire thing is," start="00:03:50.959" video="mainVideo" id=subtitle]] +[[!template text="but it actually is a lovely prison, so to speak." start="00:03:52.929" video="mainVideo" id=subtitle]] +[[!template new="1" text="That's how I got started eight years ago." start="00:03:58.400" video="mainVideo" id=subtitle]] +[[!template text="I just wanted to find a way to do my research properly." start="00:04:00.400" video="mainVideo" id=subtitle]] +[[!template text="I wanted to have a tool" start="00:04:04.319" video="mainVideo" id=subtitle]] +[[!template text="that I could use to write my notes" start="00:04:05.699" video="mainVideo" id=subtitle]] +[[!template text="in plain text, because I was already" start="00:04:07.280" video="mainVideo" id=subtitle]] +[[!template text="fairly averse to Microsoft solutions when it came to taking notes." start="00:04:08.959" video="mainVideo" id=subtitle]] +[[!template text="So yeah, I got started in Emacs." start="00:04:16.320" video="mainVideo" id=subtitle]] +[[!template text="I read a little bit about what plain text was about." start="00:04:19.180" video="mainVideo" id=subtitle]] +[[!template text="Just to be clear, at the time, yes," start="00:04:21.651" video="mainVideo" id=subtitle]] +[[!template text="I was very good with computers," start="00:04:24.364" video="mainVideo" id=subtitle]] +[[!template text="but I was not a computer science student." start="00:04:27.120" video="mainVideo" id=subtitle]] +[[!template text="I had barely any experience with programming and coding," start="00:04:30.160" video="mainVideo" id=subtitle]] +[[!template text="and I was even less of a hacker back then." start="00:04:34.302" video="mainVideo" id=subtitle]] +[[!template text="It just goes to show you that at the beginning," start="00:04:39.919" video="mainVideo" id=subtitle]] +[[!template text="I had close to no knowledge," start="00:04:43.052" video="mainVideo" id=subtitle]] +[[!template text="whether it be about" start="00:04:44.479" video="mainVideo" id=subtitle]] +[[!template text="the free software world," start="00:04:45.840" video="mainVideo" id=subtitle]] +[[!template text="whether it be about..." start="00:04:47.457" video="mainVideo" id=subtitle]] +[[!template new="1" text="Sacha, do you want to say something?" start="00:04:48.880" video="mainVideo" id=subtitle]] +[[!template text="(Sacha: just confirming, you're not sharing anything" start="00:04:50.290" video="mainVideo" id=subtitle]] +[[!template text="on the screen at the moment, right?)" start="00:04:52.479" video="mainVideo" id=subtitle]] +[[!template text="No, I'm not sharing anything," start="00:04:54.080" video="mainVideo" id=subtitle]] +[[!template text="I'm just presenting." start="00:04:55.204" video="mainVideo" id=subtitle]] +[[!template new="1" text="So when I started," start="00:04:59.040" video="mainVideo" id=subtitle]] +[[!template text="I had no experience whatsoever." start="00:05:01.173" video="mainVideo" id=subtitle]] +[[!template text="I was just a literature major" start="00:05:03.680" video="mainVideo" id=subtitle]] +[[!template text="trying to get better at taking notes." start="00:05:07.199" video="mainVideo" id=subtitle]] +[[!template text="I stumbled upon LaTeX." start="00:05:11.039" video="mainVideo" id=subtitle]] +[[!template text="As many people who stumble upon LaTeX know," start="00:05:12.466" video="mainVideo" id=subtitle]] +[[!template text="you don't just stumble upon LaTeX," start="00:05:15.280" video="mainVideo" id=subtitle]] +[[!template text="you embroil yourself in the turmoil of suffering," start="00:05:17.519" video="mainVideo" id=subtitle]] +[[!template text="of late nights tweaking," start="00:05:21.950" video="mainVideo" id=subtitle]] +[[!template text="so that your document is exactly" start="00:05:24.560" video="mainVideo" id=subtitle]] +[[!template text="in the perfect shape you want it to be." start="00:05:26.923" video="mainVideo" id=subtitle]] +[[!template new="1" text="Soon after, when I got started with Emacs and LaTeX," start="00:05:33.440" video="mainVideo" id=subtitle]] +[[!template text="I discovered something that truly changed my life," start="00:05:36.639" video="mainVideo" id=subtitle]] +[[!template text="and it was Org Mode." start="00:05:39.334" video="mainVideo" id=subtitle]] +[[!template text="As you'll get a lot of presentations" start="00:05:40.560" video="mainVideo" id=subtitle]] +[[!template text="this afternoon about Org Mode," start="00:05:44.479" video="mainVideo" id=subtitle]] +[[!template text="I won't be spending too much time on it." start="00:05:46.960" video="mainVideo" id=subtitle]] +[[!template text="But Org Mode, for me, was a revelation. It's..." start="00:05:49.360" video="mainVideo" id=subtitle]] +[[!template text="There was something that," start="00:05:53.680" video="mainVideo" id=subtitle]] +[[!template text="upon reading articles on how to use Org Mode," start="00:05:55.869" video="mainVideo" id=subtitle]] +[[!template text="especially one of the key articles" start="00:05:59.039" video="mainVideo" id=subtitle]] +[[!template text="that I'd read which really made" start="00:06:02.453" video="mainVideo" id=subtitle]] +[[!template text="a huge impact on me" start="00:06:04.160" video="mainVideo" id=subtitle]] +[[!template text="was the "Organize Your Life in Plain Text" one," start="00:06:06.000" video="mainVideo" id=subtitle]] +[[!template text="which I'm sure many of you must have stumbled upon" start="00:06:09.199" video="mainVideo" id=subtitle]] +[[!template text="in your Emacs journey..." start="00:06:12.240" video="mainVideo" id=subtitle]] +[[!template text="For me, when I stumbled upon this document," start="00:06:15.919" video="mainVideo" id=subtitle]] +[[!template text="I was starting to get interested" start="00:06:20.307" video="mainVideo" id=subtitle]] +[[!template text="in Getting Things Done and" start="00:06:22.488" video="mainVideo" id=subtitle]] +[[!template text="all the nitty-gritty stuff about" start="00:06:24.240" video="mainVideo" id=subtitle]] +[[!template text="organization and self-organization." start="00:06:26.560" video="mainVideo" id=subtitle]] +[[!template text="It just felt like everything was under my fingertips" start="00:06:29.199" video="mainVideo" id=subtitle]] +[[!template text="to make the perfect workflow." start="00:06:32.960" video="mainVideo" id=subtitle]] +[[!template text="There was something incredibly satisfying about" start="00:06:36.960" video="mainVideo" id=subtitle]] +[[!template text="having a system that gave you" start="00:06:44.080" video="mainVideo" id=subtitle]] +[[!template text="so many options to configure your experience" start="00:06:45.834" video="mainVideo" id=subtitle]] +[[!template text="exactly how you wanted." start="00:06:48.319" video="mainVideo" id=subtitle]] +[[!template text="You had this feeling that" start="00:06:50.160" video="mainVideo" id=subtitle]] +[[!template text="the people behind Org Mode had thought of everything," start="00:06:54.479" video="mainVideo" id=subtitle]] +[[!template text="whichever small adjustment" start="00:06:57.599" video="mainVideo" id=subtitle]] +[[!template text="that you needed in workflow" start="00:07:00.479" video="mainVideo" id=subtitle]] +[[!template text="whether it be more states for your TODOs," start="00:07:02.000" video="mainVideo" id=subtitle]] +[[!template text="whether it be, oh, I want my weeks to" start="00:07:05.440" video="mainVideo" id=subtitle]] +[[!template text="start on Monday and not on Saturday," start="00:07:07.520" video="mainVideo" id=subtitle]] +[[!template text="oh, it's half past one and I need to..." start="00:07:09.360" video="mainVideo" id=subtitle]] +[[!template text="in the morning, I mean, and I need to make" start="00:07:13.520" video="mainVideo" id=subtitle]] +[[!template text="sure that the item that I'm marking as done" start="00:07:15.280" video="mainVideo" id=subtitle]] +[[!template text="is done for the day before" start="00:07:17.680" video="mainVideo" id=subtitle]] +[[!template text="and not for the current day." start="00:07:18.759" video="mainVideo" id=subtitle]] +[[!template text="You see what I'm talking about." start="00:07:20.233" video="mainVideo" id=subtitle]] +[[!template text="So many details that were already" start="00:07:21.919" video="mainVideo" id=subtitle]] +[[!template text="present in Org Mode." start="00:07:25.280" video="mainVideo" id=subtitle]] +[[!template text="At first you're really impressed, because you think, wow," start="00:07:27.235" video="mainVideo" id=subtitle]] +[[!template text="they thought of everything," start="00:07:31.335" video="mainVideo" id=subtitle]] +[[!template text="but then you realize that it's just a matter of experience," start="00:07:33.470" video="mainVideo" id=subtitle]] +[[!template text="just a matter of people contributing code," start="00:07:36.378" video="mainVideo" id=subtitle]] +[[!template text="because the development of Org Mode, Emacs," start="00:07:39.712" video="mainVideo" id=subtitle]] +[[!template text="and everything is just open to the public." start="00:07:42.171" video="mainVideo" id=subtitle]] +[[!template new="1" text="You know, it's like" start="00:07:44.455" video="mainVideo" id=subtitle]] +[[!template text="everything is being done with the garage door opened." start="00:07:45.440" video="mainVideo" id=subtitle]] +[[!template text="You can just go on Org Mode on Savannah" start="00:07:47.685" video="mainVideo" id=subtitle]] +[[!template text="and see everything that is being developed." start="00:07:50.402" video="mainVideo" id=subtitle]] +[[!template text="For me, the shift that occurred in my mind was" start="00:07:54.800" video="mainVideo" id=subtitle]] +[[!template text="when I was reading all the options," start="00:08:01.586" video="mainVideo" id=subtitle]] +[[!template text="I was looking at all the variables" start="00:08:04.139" video="mainVideo" id=subtitle]] +[[!template text="that I could modify for Org Mode," start="00:08:05.881" video="mainVideo" id=subtitle]] +[[!template text="and there came a time, maybe two to three years ago," start="00:08:08.160" video="mainVideo" id=subtitle]] +[[!template text="where I thought, oh wow," start="00:08:12.560" video="mainVideo" id=subtitle]] +[[!template text="maybe for the first time in a while," start="00:08:15.599" video="mainVideo" id=subtitle]] +[[!template text="there is no option for me to do" start="00:08:17.759" video="mainVideo" id=subtitle]] +[[!template text="what I want to be doing with Org Mode." start="00:08:19.260" video="mainVideo" id=subtitle]] +[[!template text="I believe at the time," start="00:08:21.440" video="mainVideo" id=subtitle]] +[[!template text="the key issue that triggered this reflex for me was" start="00:08:23.668" video="mainVideo" id=subtitle]] +[[!template text="I wanted to do something with the agenda." start="00:08:29.199" video="mainVideo" id=subtitle]] +[[!template text="I wanted to have a super category so, you know, in the..." start="00:08:31.039" video="mainVideo" id=subtitle]] +[[!template text="for those of you who know, in your agenda," start="00:08:34.159" video="mainVideo" id=subtitle]] +[[!template text="you have the ability to have many files," start="00:08:36.606" video="mainVideo" id=subtitle]] +[[!template text="and you have the ability to have categories." start="00:08:38.376" video="mainVideo" id=subtitle]] +[[!template text="I wanted somehow to group my" start="00:08:41.200" video="mainVideo" id=subtitle]] +[[!template text="TODOs in smaller groups, or bigger" start="00:08:47.920" video="mainVideo" id=subtitle]] +[[!template text="groups, I should say," start="00:08:51.680" video="mainVideo" id=subtitle]] +[[!template text="so that, for instance, I could have" start="00:08:52.560" video="mainVideo" id=subtitle]] +[[!template text="one group for my professional life," start="00:08:53.780" video="mainVideo" id=subtitle]] +[[!template text="I could have a group for one work," start="00:08:55.131" video="mainVideo" id=subtitle]] +[[!template text="the second work..." start="00:08:57.462" video="mainVideo" id=subtitle]] +[[!template text="I could have something for university and all this." start="00:08:59.600" video="mainVideo" id=subtitle]] +[[!template text="I thought, yeah, I think I'd like this." start="00:09:02.800" video="mainVideo" id=subtitle]] +[[!template text="After having spent so long working" start="00:09:09.600" video="mainVideo" id=subtitle]] +[[!template text="with Emacs and working with Org Mode," start="00:09:12.959" video="mainVideo" id=subtitle]] +[[!template text="I had some ideas about" start="00:09:15.519" video="mainVideo" id=subtitle]] +[[!template text="what was within the realm of possibility and what wasn't." start="00:09:16.766" video="mainVideo" id=subtitle]] +[[!template text="Here I thought to myself," start="00:09:19.292" video="mainVideo" id=subtitle]] +[[!template text="this is definitely something that I can do." start="00:09:21.120" video="mainVideo" id=subtitle]] +[[!template text="And so thus started my journey" start="00:09:24.320" video="mainVideo" id=subtitle]] +[[!template text="into the Org Mode libraries." start="00:09:27.839" video="mainVideo" id=subtitle]] +[[!template new="1" text="I won't go too much into details right now," start="00:09:31.360" video="mainVideo" id=subtitle]] +[[!template text="because right now, the main objective" start="00:09:33.222" video="mainVideo" id=subtitle]] +[[!template text="that I have is just to show you" start="00:09:34.959" video="mainVideo" id=subtitle]] +[[!template text="how simple it is to become a maintainer," start="00:09:37.040" video="mainVideo" id=subtitle]] +[[!template text="how to become more involved with the development." start="00:09:40.240" video="mainVideo" id=subtitle]] +[[!template text="The libraries in Org Mode," start="00:09:42.800" video="mainVideo" id=subtitle]] +[[!template text="they're written in Elisp, which is a very..." start="00:09:46.320" video="mainVideo" id=subtitle]] +[[!template text="It might seem like an obscure language," start="00:09:50.320" video="mainVideo" id=subtitle]] +[[!template text="and it certainly is," start="00:09:52.080" video="mainVideo" id=subtitle]] +[[!template text="but as soon as you get the logic of the language--and" start="00:09:54.080" video="mainVideo" id=subtitle]] +[[!template text="what I'm telling you is coming from someone" start="00:09:57.279" video="mainVideo" id=subtitle]] +[[!template text="who's never studied programming--" start="00:10:00.136" video="mainVideo" id=subtitle]] +[[!template text="it made sense." start="00:10:01.760" video="mainVideo" id=subtitle]] +[[!template text="Everything is so verbose" start="00:10:04.399" video="mainVideo" id=subtitle]] +[[!template text="when you get into the code." start="00:10:05.534" video="mainVideo" id=subtitle]] +[[!template text="When you learn the rudiments of Elisp," start="00:10:07.279" video="mainVideo" id=subtitle]] +[[!template text="you start getting to the code," start="00:10:11.065" video="mainVideo" id=subtitle]] +[[!template text="and you start thinking, wow," start="00:10:13.360" video="mainVideo" id=subtitle]] +[[!template text="okay that makes sense," start="00:10:15.229" video="mainVideo" id=subtitle]] +[[!template text="and you start developing a logic for all this." start="00:10:17.120" video="mainVideo" id=subtitle]] +[[!template text="So, equipped as I was with this" start="00:10:21.360" video="mainVideo" id=subtitle]] +[[!template text="new knowledge, I went on my project," start="00:10:24.720" video="mainVideo" id=subtitle]] +[[!template text="I went into the Org agenda code," start="00:10:27.760" video="mainVideo" id=subtitle]] +[[!template text="and I thought, okay," start="00:10:30.000" video="mainVideo" id=subtitle]] +[[!template text="is there anything that I can use to do my bidding?" start="00:10:30.880" video="mainVideo" id=subtitle]] +[[!template text="Fast forward maybe two to three weeks of intense turmoil" start="00:10:34.640" video="mainVideo" id=subtitle]] +[[!template text="and many nights which were spent single-mindedly working on this project," start="00:10:39.733" video="mainVideo" id=subtitle]] +[[!template text="two weeks after, I had something that was working," start="00:10:46.079" video="mainVideo" id=subtitle]] +[[!template text="and I was pretty happy about it." start="00:10:48.781" video="mainVideo" id=subtitle]] +[[!template text="That was a key landmark for me," start="00:10:51.680" video="mainVideo" id=subtitle]] +[[!template text="because when that happened," start="00:10:54.849" video="mainVideo" id=subtitle]] +[[!template text="it just felt like, okay," start="00:10:56.800" video="mainVideo" id=subtitle]] +[[!template text="I can contribute something to Org Mode," start="00:10:58.860" video="mainVideo" id=subtitle]] +[[!template text="and I can do something that would benefit as many people as possible." start="00:11:01.335" video="mainVideo" id=subtitle]] +[[!template text="And to me, that was the click." start="00:11:07.600" video="mainVideo" id=subtitle]] +[[!template text="That's when it occurred." start="00:11:08.970" video="mainVideo" id=subtitle]] +[[!template text="That's when I went on my first project and I did something" start="00:11:10.530" video="mainVideo" id=subtitle]] +[[!template text="that felt useful to the community." start="00:11:14.640" video="mainVideo" id=subtitle]] +[[!template new="1" text="And nowadays, as I told you," start="00:11:18.079" video="mainVideo" id=subtitle]] +[[!template text="I maintain packages, but really, nothing has changed." start="00:11:19.945" video="mainVideo" id=subtitle]] +[[!template text="The only thing, maybe, that has changed" start="00:11:22.640" video="mainVideo" id=subtitle]] +[[!template text="is that I've turned my mind onto other problems." start="00:11:24.399" video="mainVideo" id=subtitle]] +[[!template text="Maybe I've got three more minutes," start="00:11:28.320" video="mainVideo" id=subtitle]] +[[!template text="and I'd like to finish by" start="00:11:32.000" video="mainVideo" id=subtitle]] +[[!template text="maybe something a little different." start="00:11:35.279" video="mainVideo" id=subtitle]] +[[!template new="1" text="I've told you my Emacs story" start="00:11:38.399" video="mainVideo" id=subtitle]] +[[!template text="and I hope I've stressed how little effort it took me" start="00:11:39.449" video="mainVideo" id=subtitle]] +[[!template text="to move from steps to steps on the ladder." start="00:11:42.924" video="mainVideo" id=subtitle]] +[[!template text="The ladder implies a sense of hierarchy, but it really isn't." start="00:11:46.560" video="mainVideo" id=subtitle]] +[[!template text="Whatever your step on the journey of Emacs is..." start="00:11:48.959" video="mainVideo" id=subtitle]] +[[!template text="Some of you might be at the step" start="00:11:53.920" video="mainVideo" id=subtitle]] +[[!template text="where you're really worried" start="00:11:55.830" video="mainVideo" id=subtitle]] +[[!template text="about learning Elisp because it feels" start="00:11:57.440" video="mainVideo" id=subtitle]] +[[!template text="like such a monumental task to be undertaking" start="00:11:59.360" video="mainVideo" id=subtitle]] +[[!template text="and you have no experience whatsoever," start="00:12:02.399" video="mainVideo" id=subtitle]] +[[!template text="but the thing is," start="00:12:04.720" video="mainVideo" id=subtitle]] +[[!template text="maybe you could try climbing this first" start="00:12:06.079" video="mainVideo" id=subtitle]] +[[!template text="step on the ladder. Maybe you could try," start="00:12:07.839" video="mainVideo" id=subtitle]] +[[!template text="if you have any project," start="00:12:09.600" video="mainVideo" id=subtitle]] +[[!template text="if you've been using Org Mode," start="00:12:11.200" video="mainVideo" id=subtitle]] +[[!template text="maybe one day you thought, "oh, yes," start="00:12:13.120" video="mainVideo" id=subtitle]] +[[!template text="I wish I could do this but I can't,"" start="00:12:15.600" video="mainVideo" id=subtitle]] +[[!template text="or maybe do try to do this," start="00:12:18.160" video="mainVideo" id=subtitle]] +[[!template text="maybe do try to change something" start="00:12:19.920" video="mainVideo" id=subtitle]] +[[!template text="in a major mode that you're using" start="00:12:21.442" video="mainVideo" id=subtitle]] +[[!template text="and which you feel might be better." start="00:12:23.279" video="mainVideo" id=subtitle]] +[[!template text="I think Emacs, Org Mode," start="00:12:26.560" video="mainVideo" id=subtitle]] +[[!template text="and all free software in general" start="00:12:28.722" video="mainVideo" id=subtitle]] +[[!template text="has this tendency to give you this idea" start="00:12:31.040" video="mainVideo" id=subtitle]] +[[!template text="that I can be a hacker" start="00:12:34.720" video="mainVideo" id=subtitle]] +[[!template text="in the sense of the term" start="00:12:38.720" video="mainVideo" id=subtitle]] +[[!template text="that you're modifying things" start="00:12:41.360" video="mainVideo" id=subtitle]] +[[!template text="to do your bidding." start="00:12:43.200" video="mainVideo" id=subtitle]] +[[!template text="For me, I believe this to be" start="00:12:46.320" video="mainVideo" id=subtitle]] +[[!template text="a very healthy attitude towards software." start="00:12:48.042" video="mainVideo" id=subtitle]] +[[!template text="As Amin said in the very beginning," start="00:12:50.320" video="mainVideo" id=subtitle]] +[[!template text="we are doing this entire presentation--" start="00:12:54.079" video="mainVideo" id=subtitle]] +[[!template text="sorry, this entire conference with free software." start="00:12:57.279" video="mainVideo" id=subtitle]] +[[!template text="Just see all the things" start="00:13:00.800" video="mainVideo" id=subtitle]] +[[!template text="we've been able to do in free software." start="00:13:01.686" video="mainVideo" id=subtitle]] +[[!template text="For me, Emacs was my gateway, so to speak," start="00:13:03.920" video="mainVideo" id=subtitle]] +[[!template text="into how to contribute to free software," start="00:13:10.399" video="mainVideo" id=subtitle]] +[[!template text="about the philosophy that surrounds it." start="00:13:14.399" video="mainVideo" id=subtitle]] +[[!template new="1" text="What I would like to do..." start="00:13:18.639" video="mainVideo" id=subtitle]] +[[!template text="I'll finish on this note and then" start="00:13:20.003" video="mainVideo" id=subtitle]] +[[!template text="I'll be taking your questions." start="00:13:21.375" video="mainVideo" id=subtitle]] +[[!template text="Just try." start="00:13:23.360" video="mainVideo" id=subtitle]] +[[!template text="You've read on Reddit" start="00:13:26.480" video="mainVideo" id=subtitle]] +[[!template text="that you need to go through the Elisp manual in Emacs." start="00:13:28.592" video="mainVideo" id=subtitle]] +[[!template text="You might be scared, but just do it. Just give it a shot." start="00:13:31.807" video="mainVideo" id=subtitle]] +[[!template text="Just give it maybe one afternoon." start="00:13:35.920" video="mainVideo" id=subtitle]] +[[!template text="Try to read it." start="00:13:38.560" video="mainVideo" id=subtitle]] +[[!template text="Try to see if this appeals to your mind." start="00:13:39.199" video="mainVideo" id=subtitle]] +[[!template text="If you've been interested enough" start="00:13:43.120" video="mainVideo" id=subtitle]] +[[!template text="in my presentation right now," start="00:13:44.230" video="mainVideo" id=subtitle]] +[[!template text="and if you're interested enough in any of the talks" start="00:13:45.241" video="mainVideo" id=subtitle]] +[[!template text="you're going to have during the entire conference," start="00:13:47.199" video="mainVideo" id=subtitle]] +[[!template text="do give it a shot." start="00:13:49.519" video="mainVideo" id=subtitle]] +[[!template text="I'm pretty sure you will like the journey" start="00:13:50.747" video="mainVideo" id=subtitle]] +[[!template text="on which you will be embarking upon." start="00:13:52.959" video="mainVideo" id=subtitle]] +[[!template new="1" text="So I believe I'm finishing one minute early," start="00:13:55.418" video="mainVideo" id=subtitle]] +[[!template text="but I see quite a bit of questions already." start="00:13:57.120" video="mainVideo" id=subtitle]] +[[!template text="I'm not sure. Sacha, should I" start="00:14:01.040" video="mainVideo" id=subtitle]] +[[!template text="just be reading the questions," start="00:14:04.320" video="mainVideo" id=subtitle]] +[[!template text="or do you want to be feeding me the questions?" start="00:14:05.847" video="mainVideo" id=subtitle]] +[[!template text="(Amin: It's really up to you." start="00:14:08.639" video="mainVideo" id=subtitle]] +[[!template text="It's completely up to you." start="00:14:10.755" video="mainVideo" id=subtitle]] +[[!template text="If you've got the questions" start="00:14:12.320" video="mainVideo" id=subtitle]] +[[!template text="open and can take them or read them," start="00:14:13.600" video="mainVideo" id=subtitle]] +[[!template text="by all means, please.)" start="00:14:15.839" video="mainVideo" id=subtitle]] +[[!template text="Okay, well, I'm going to read them" start="00:14:18.320" video="mainVideo" id=subtitle]] +[[!template text="because I've got them on the side." start="00:14:19.420" video="mainVideo" id=subtitle]] +[[!template text="I'm going to start with the one at the bottom." start="00:14:20.581" video="mainVideo" id=subtitle]] +[[!template new="1" text=""Do you feel that being a white male" start="00:14:22.800" video="mainVideo" id=subtitle]] +[[!template text="contributed to your experience?"" start="00:14:24.959" video="mainVideo" id=subtitle]] +[[!template text="Yeah. I mean, I do believe..." start="00:14:26.959" video="mainVideo" id=subtitle]] +[[!template text="There's an idea of privilege." start="00:14:29.165" video="mainVideo" id=subtitle]] +[[!template text="I mean, I'm French. I live in..." start="00:14:30.771" video="mainVideo" id=subtitle]] +[[!template text="I'm lucky enough to be here at university, okay," start="00:14:33.250" video="mainVideo" id=subtitle]] +[[!template text="and I'm fairly aware of the discrepancies that happen," start="00:14:36.959" video="mainVideo" id=subtitle]] +[[!template text="even in France," start="00:14:40.714" video="mainVideo" id=subtitle]] +[[!template text="according to this..." start="00:14:41.600" video="mainVideo" id=subtitle]] +[[!template text="So, yes, I believe my journey" start="00:14:42.880" video="mainVideo" id=subtitle]] +[[!template text="was heavily influenced by this." start="00:14:46.320" video="mainVideo" id=subtitle]] +[[!template text="If you would like to specify the question, please do," start="00:14:51.199" video="mainVideo" id=subtitle]] +[[!template text="but I don't have really all that much to ask on this." start="00:14:53.547" video="mainVideo" id=subtitle]] +[[!template new="1" text=""What is your advice to start learning" start="00:14:56.560" video="mainVideo" id=subtitle]] +[[!template text="Elisp language? Any particularly good" start="00:14:59.839" video="mainVideo" id=subtitle]] +[[!template text="resource or any other tips?"" start="00:15:01.279" video="mainVideo" id=subtitle]] +[[!template text="I finished my presentation by telling you about" start="00:15:03.421" video="mainVideo" id=subtitle]] +[[!template text="the Elisp introduction which is built into Emacs." start="00:15:07.760" video="mainVideo" id=subtitle]] +[[!template text="What I might do... I'm going to share my screen" start="00:15:10.937" video="mainVideo" id=subtitle]] +[[!template text="just to show you how this works." start="00:15:13.936" video="mainVideo" id=subtitle]] +[[!template text="I will be sharing this window." start="00:15:17.819" video="mainVideo" id=subtitle]] +[[!template text="I believe it's frozen on my end," start="00:15:22.880" video="mainVideo" id=subtitle]] +[[!template text="so I can't see anything." start="00:15:24.234" video="mainVideo" id=subtitle]] +[[!template text="I'm not sure if you can see me" start="00:15:27.199" video="mainVideo" id=subtitle]] +[[!template text="or if my camera is moving." start="00:15:28.597" video="mainVideo" id=subtitle]] +[[!template text="Okay, so my Firefox is frozen." start="00:15:32.560" video="mainVideo" id=subtitle]] +[[!template text="So I'll answer the question," start="00:15:34.387" video="mainVideo" id=subtitle]] +[[!template text="but I won't be able to show you what I wanted to show you." start="00:15:35.361" video="mainVideo" id=subtitle]] +[[!template text="There's a built-in guide inside Emacs to learn Elisp." start="00:15:40.000" video="mainVideo" id=subtitle]] +[[!template text="Maybe the best chance that you have" start="00:15:44.320" video="mainVideo" id=subtitle]] +[[!template text="is just to go open these info pages." start="00:15:46.880" video="mainVideo" id=subtitle]] +[[!template text="I'm sure someone will be kind enough to" start="00:15:49.040" video="mainVideo" id=subtitle]] +[[!template text="mention this to you in the #emacsconf channel on IRC" start="00:15:50.959" video="mainVideo" id=subtitle]] +[[!template text="but it's probably the best way" start="00:15:54.880" video="mainVideo" id=subtitle]] +[[!template text="to get started with Elisp." start="00:15:56.880" video="mainVideo" id=subtitle]] +[[!template text="You know, we tend to get obsessed," start="00:15:59.040" video="mainVideo" id=subtitle]] +[[!template text="with software and with programming," start="00:16:00.991" video="mainVideo" id=subtitle]] +[[!template text="about what's the best way to get started." start="00:16:03.013" video="mainVideo" id=subtitle]] +[[!template text="You see so many people who are heavily interested" start="00:16:04.880" video="mainVideo" id=subtitle]] +[[!template text="in getting started with programming" start="00:16:08.399" video="mainVideo" id=subtitle]] +[[!template text="but they never managed to get started" start="00:16:10.409" video="mainVideo" id=subtitle]] +[[!template text="because there's so much choice." start="00:16:12.320" video="mainVideo" id=subtitle]] +[[!template text="My advice would be to just get started." start="00:16:14.320" video="mainVideo" id=subtitle]] +[[!template text="Don't get so worried about the first step." start="00:16:16.320" video="mainVideo" id=subtitle]] +[[!template text="Well, if I may still recommend the first step," start="00:16:18.800" video="mainVideo" id=subtitle]] +[[!template text="even after saying this," start="00:16:22.493" video="mainVideo" id=subtitle]] +[[!template text="do try to start with the built-in guides." start="00:16:23.920" video="mainVideo" id=subtitle]] +[[!template text="I believe they're pretty, pretty good." start="00:16:27.073" video="mainVideo" id=subtitle]] +[[!template new="1" text="There was another question." start="00:16:29.600" video="mainVideo" id=subtitle]] +[[!template text="It's the last question that I can read" start="00:16:31.691" video="mainVideo" id=subtitle]] +[[!template text="and after that, you will have to" start="00:16:33.055" video="mainVideo" id=subtitle]] +[[!template text="read the questions for me because everything is frozen on my end." start="00:16:34.564" video="mainVideo" id=subtitle]] +[[!template text="I hope I'm not frozen in a very bad position," start="00:16:37.920" video="mainVideo" id=subtitle]] +[[!template text="so please excuse me if my mouth is open or anything." start="00:16:43.935" video="mainVideo" id=subtitle]] +[[!template text="(Amin: no, we just completely lost the video feed, so no worries.)" start="00:16:47.406" video="mainVideo" id=subtitle]] +[[!template text="Oh, splendid, so I won't have to make a fool out of myself." start="00:16:51.120" video="mainVideo" id=subtitle]] +[[!template new="1" text="So the last question I wanted to answer was" start="00:16:54.800" video="mainVideo" id=subtitle]] +[[!template text=""Have you read Dirk Gently's Holistic Detective Agency?"" start="00:16:56.800" video="mainVideo" id=subtitle]] +[[!template text="No, I haven't. I hope it's not a jab at the way I'm dressing for the conference," start="00:16:59.199" video="mainVideo" id=subtitle]] +[[!template text="but yeah, I haven't read it. Was there any other question?" start="00:17:05.741" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: I see one other question." start="00:17:10.559" video="mainVideo" id=subtitle]] +[[!template text=""Any recommendation for good packaging guides or places to start?" start="00:17:15.919" video="mainVideo" id=subtitle]] +[[!template text="I get a bit overwhelmed by some things." start="00:17:19.679" video="mainVideo" id=subtitle]] +[[!template text="For example, the choice of different test frameworks.")" start="00:17:23.199" video="mainVideo" id=subtitle]] +[[!template text="Right. Okay. So that's a very good question." start="00:17:26.799" video="mainVideo" id=subtitle]] +[[!template text="I believe alphapapa is in the chat right now." start="00:17:29.263" video="mainVideo" id=subtitle]] +[[!template text="As myself a new Lisp developer for org-roam," start="00:17:33.840" video="mainVideo" id=subtitle]] +[[!template text="I'd really recommend you to look into" start="00:17:36.314" video="mainVideo" id=subtitle]] +[[!template text="his package developers' guide," start="00:17:38.320" video="mainVideo" id=subtitle]] +[[!template text="because you have a list of all the softwares" start="00:17:40.032" video="mainVideo" id=subtitle]] +[[!template text="that are extremely useful to be using when" start="00:17:42.507" video="mainVideo" id=subtitle]] +[[!template text="you're getting started." start="00:17:44.559" video="mainVideo" id=subtitle]] +[[!template text="If you're looking into a first step" start="00:17:45.760" video="mainVideo" id=subtitle]] +[[!template text="for how to develop elisp packages," start="00:17:48.347" video="mainVideo" id=subtitle]] +[[!template text="I'd really advise you to" start="00:17:50.947" video="mainVideo" id=subtitle]] +[[!template text="look into edebug." start="00:17:52.640" video="mainVideo" id=subtitle]] +[[!template text="It's one word, edebug," start="00:17:53.520" video="mainVideo" id=subtitle]] +[[!template text="and you have a section in the manual for this," start="00:17:56.559" video="mainVideo" id=subtitle]] +[[!template text="because for me, it was the key step to" start="00:17:58.400" video="mainVideo" id=subtitle]] +[[!template text="getting to develop good packages." start="00:18:00.799" video="mainVideo" id=subtitle]] +[[!template text="It was understanding basically what the code did" start="00:18:03.791" video="mainVideo" id=subtitle]] +[[!template text="and having us something like" start="00:18:06.160" video="mainVideo" id=subtitle]] +[[!template text="a REPL (read-evaluate-print-loop)" start="00:18:08.866" video="mainVideo" id=subtitle]] +[[!template text="that allows you to step through the code" start="00:18:09.919" video="mainVideo" id=subtitle]] +[[!template text="and see exactly which states" start="00:18:11.760" video="mainVideo" id=subtitle]] +[[!template text="the variables are at which at this point" start="00:18:13.210" video="mainVideo" id=subtitle]] +[[!template text="in the program. That's really my biggest advice to you." start="00:18:15.643" video="mainVideo" id=subtitle]] +[[!template text="Any other question? Thanks. Yeah, I see one or two more." start="00:18:21.200" video="mainVideo" id=subtitle]] +[[!template new="1" text="So there's one. They ask, "How did the freedom of Emacs help you on your way?"" start="00:18:26.160" video="mainVideo" id=subtitle]] +[[!template text="So the freedom of Emacs..." start="00:18:33.120" video="mainVideo" id=subtitle]] +[[!template text="I mentioned that Emacs, for me, was my gateway" start="00:18:35.507" video="mainVideo" id=subtitle]] +[[!template text="into free software" start="00:18:38.080" video="mainVideo" id=subtitle]] +[[!template text="and the freedom of Emacs" start="00:18:39.216" video="mainVideo" id=subtitle]] +[[!template text="was that you could maybe..." start="00:18:40.652" video="mainVideo" id=subtitle]] +[[!template text="First and foremost," start="00:18:42.551" video="mainVideo" id=subtitle]] +[[!template text="compared to other software," start="00:18:43.840" video="mainVideo" id=subtitle]] +[[!template text="was that you had behind Emacs, Elisp," start="00:18:46.385" video="mainVideo" id=subtitle]] +[[!template text="which allows you to read the code," start="00:18:49.003" video="mainVideo" id=subtitle]] +[[!template text="read whatever is going on in the background." start="00:18:51.039" video="mainVideo" id=subtitle]] +[[!template text="Surely, if you go deep enough," start="00:18:53.039" video="mainVideo" id=subtitle]] +[[!template text="you'll end up in C functions that you might not be able to read" start="00:18:54.380" video="mainVideo" id=subtitle]] +[[!template text="if you do not have the experience." start="00:18:58.172" video="mainVideo" id=subtitle]] +[[!template text="But for Org Mode, which was my gateway into Emacs," start="00:18:59.679" video="mainVideo" id=subtitle]] +[[!template text="most of it is written in Elisp," start="00:19:03.520" video="mainVideo" id=subtitle]] +[[!template text="and all the commands have a very verbose name," start="00:19:05.883" video="mainVideo" id=subtitle]] +[[!template text="like something simple as" start="00:19:08.546" video="mainVideo" id=subtitle]] +[[!template text="org go to next subtree or" start="00:19:10.080" video="mainVideo" id=subtitle]] +[[!template text="org go to a parent subtree. You know, things like this." start="00:19:13.440" video="mainVideo" id=subtitle]] +[[!template text="It's so elegant. It's verbose." start="00:19:16.880" video="mainVideo" id=subtitle]] +[[!template text="That's a sense of freedom" start="00:19:20.240" video="mainVideo" id=subtitle]] +[[!template text="insofar as you can go into the code and see," start="00:19:22.799" video="mainVideo" id=subtitle]] +[[!template text="oh, okay, that's how it's implemented." start="00:19:24.491" video="mainVideo" id=subtitle]] +[[!template text="I believe in a way that's the freedom" start="00:19:26.160" video="mainVideo" id=subtitle]] +[[!template text="and the liberty that is given to you" start="00:19:28.640" video="mainVideo" id=subtitle]] +[[!template text="to look into the code" start="00:19:30.264" video="mainVideo" id=subtitle]] +[[!template text="is something that invites you" start="00:19:31.600" video="mainVideo" id=subtitle]] +[[!template text="to do the same with your life." start="00:19:32.670" video="mainVideo" id=subtitle]] +[[!template text="As someone who does a little bit of philosophy on the side," start="00:19:34.460" video="mainVideo" id=subtitle]] +[[!template text="I believe it's a very healthy message" start="00:19:36.776" video="mainVideo" id=subtitle]] +[[!template text="to be gathering from a piece of software." start="00:19:38.799" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: Awesome, thank you." start="00:19:42.320" video="mainVideo" id=subtitle]] +[[!template text="Let's see... So we have..." start="00:19:45.440" video="mainVideo" id=subtitle]] +[[!template text="I think I saw another question pop up.)" start="00:19:50.960" video="mainVideo" id=subtitle]] +[[!template text="I'm not sure how we're doing as far" start="00:19:57.200" video="mainVideo" id=subtitle]] +[[!template text="as time is concerned... I believe we" start="00:19:58.559" video="mainVideo" id=subtitle]] +[[!template text="have like one or two minutes more." start="00:19:59.760" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Yeah, actually, we're quite a bit" start="00:20:02.080" video="mainVideo" id=subtitle]] +[[!template text="ahead of the schedule, so if we take a" start="00:20:04.240" video="mainVideo" id=subtitle]] +[[!template text="little bit longer, we're fine." start="00:20:05.679" video="mainVideo" id=subtitle]] +[[!template text="If you do have more questions, please do.)" start="00:20:07.840" video="mainVideo" id=subtitle]] +[[!template text="I'm just sorry that my video is not working anymore." start="00:20:10.225" video="mainVideo" id=subtitle]] +[[!template text="(Amin: No problem. Someone was actually saying..." start="00:20:12.880" video="mainVideo" id=subtitle]] +[[!template text="What's the most recent... Actually, yeah well before that." start="00:20:17.120" video="mainVideo" id=subtitle]] +[[!template new="1" text=""Please show off your three-piece suit before you end your talk," start="00:20:24.159" video="mainVideo" id=subtitle]] +[[!template text="which requires fixing your frozen camera." start="00:20:27.440" video="mainVideo" id=subtitle]] +[[!template text="If this is not possible," start="00:20:30.080" video="mainVideo" id=subtitle]] +[[!template text="please post suit selfies in an easily accessible location."" start="00:20:31.306" video="mainVideo" id=subtitle]] +[[!template text="Okay, I'll make sure to do this." start="00:20:36.240" video="mainVideo" id=subtitle]] +[[!template text="But yes, I wanted to hype things up for the conference," start="00:20:38.143" video="mainVideo" id=subtitle]] +[[!template text="so yes, I did get the three-piece suit out." start="00:20:41.200" video="mainVideo" id=subtitle]] +[[!template text="I'm very glad you like it." start="00:20:43.039" video="mainVideo" id=subtitle]] +[[!template text="By the way, when you get" start="00:20:44.563" video="mainVideo" id=subtitle]] +[[!template text="a chance to see me live again," start="00:20:45.919" video="mainVideo" id=subtitle]] +[[!template text="do appreciate that my tie has both the" start="00:20:47.760" video="mainVideo" id=subtitle]] +[[!template text="colors of Emacs purple" start="00:20:50.080" video="mainVideo" id=subtitle]] +[[!template text="and also Org Mode green." start="00:20:51.280" video="mainVideo" id=subtitle]] +[[!template text="It took me a while to find this one," start="00:20:53.679" video="mainVideo" id=subtitle]] +[[!template text="so I hope you will appreciate this." start="00:20:55.556" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: Awesome. Let's see." start="00:21:00.840" video="mainVideo" id=subtitle]] +[[!template text="We have one other question. "What's the" start="00:21:03.094" video="mainVideo" id=subtitle]] +[[!template text="most recent Emacs package or tool that" start="00:21:06.880" video="mainVideo" id=subtitle]] +[[!template text="you've discovered that you've added to your repertoire?")" start="00:21:08.960" video="mainVideo" id=subtitle]] +[[!template text="Very interesting question." start="00:21:14.480" video="mainVideo" id=subtitle]] +[[!template text="The thing is, when you've spent as long as I have on Emacs--" start="00:21:17.600" video="mainVideo" id=subtitle]] +[[!template text="and I know that I've only spent" start="00:21:22.614" video="mainVideo" id=subtitle]] +[[!template text="eight years and some of you" start="00:21:23.919" video="mainVideo" id=subtitle]] +[[!template text="might have spent maybe 10, 20," start="00:21:25.120" video="mainVideo" id=subtitle]] +[[!template text="maybe even more years on Emacs--" start="00:21:27.901" video="mainVideo" id=subtitle]] +[[!template text="but for me, I believe the coolest neat trick that I found in Emacs" start="00:21:30.000" video="mainVideo" id=subtitle]] +[[!template text="was a mode which is called beacon-mode." start="00:21:34.926" video="mainVideo" id=subtitle]] +[[!template text="It's something that allows you to show" start="00:21:40.080" video="mainVideo" id=subtitle]] +[[!template text="when you're jumping between buffers" start="00:21:43.679" video="mainVideo" id=subtitle]] +[[!template text="or when you're dropping between windows," start="00:21:45.006" video="mainVideo" id=subtitle]] +[[!template text="it shows exactly where your point is in that buffer" start="00:21:46.960" video="mainVideo" id=subtitle]] +[[!template text="by making a slight ray of light which looks like a beacon, hence the name." start="00:21:50.681" video="mainVideo" id=subtitle]] +[[!template text="It really helps you navigate buffers" start="00:21:55.440" video="mainVideo" id=subtitle]] +[[!template text="because it always shows" start="00:21:57.760" video="mainVideo" id=subtitle]] +[[!template text="in a very visual way where your point is." start="00:21:58.986" video="mainVideo" id=subtitle]] +[[!template text="I'll get a chance to show this to you later today" start="00:22:01.760" video="mainVideo" id=subtitle]] +[[!template text="when I'll be presenting my other talks." start="00:22:04.640" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: Awesome. We have one question from Jonas, the maintainer of Magit." start="00:22:10.159" video="mainVideo" id=subtitle]] +[[!template text="He asks, "When you touched your webcam," start="00:22:20.880" video="mainVideo" id=subtitle]] +[[!template text="that blew a fuse at my place." start="00:22:25.128" video="mainVideo" id=subtitle]] +[[!template text="How did you do that?")" start="00:22:26.880" video="mainVideo" id=subtitle]] +[[!template text="Well, I'm very sorry, Jonas," start="00:22:29.760" video="mainVideo" id=subtitle]] +[[!template text="that it happened to you, but I'll make sure not to touch my webcam again." start="00:22:31.242" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Do we have any other questions?)" start="00:22:36.960" video="mainVideo" id=subtitle]] +[[!template text="I have to trust you on this one." start="00:22:41.600" video="mainVideo" id=subtitle]] +[[!template text="I'm really sorry. Everything is frozen on my end." start="00:22:43.919" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: No problem.) Yeah I'm more talking to the audience, I guess." start="00:22:46.960" video="mainVideo" id=subtitle]] +[[!template text="I hope my lack of slides didn't bother you." start="00:22:51.520" video="mainVideo" id=subtitle]] +[[!template text="I really wanted to have this verbose time with people," start="00:22:56.018" video="mainVideo" id=subtitle]] +[[!template text="to be able to..." start="00:23:00.481" video="mainVideo" id=subtitle]] +[[!template text="It's a message that I've been trying" start="00:23:01.600" video="mainVideo" id=subtitle]] +[[!template text="to share with as many people as possible." start="00:23:04.880" video="mainVideo" id=subtitle]] +[[!template text="In France, we do have an Emacs workshop" start="00:23:08.640" video="mainVideo" id=subtitle]] +[[!template text="that we have on a monthly basis." start="00:23:11.760" video="mainVideo" id=subtitle]] +[[!template text="I've been learning a lot" start="00:23:14.159" video="mainVideo" id=subtitle]] +[[!template text="with those people and I felt like" start="00:23:16.000" video="mainVideo" id=subtitle]] +[[!template text="doing the same with Emacs conference" start="00:23:18.960" video="mainVideo" id=subtitle]] +[[!template text="would be good. That's why I'm really happy," start="00:23:20.400" video="mainVideo" id=subtitle]] +[[!template text="and I'm really lucky to have had" start="00:23:22.713" video="mainVideo" id=subtitle]] +[[!template text="the chance to do this today." start="00:23:24.000" video="mainVideo" id=subtitle]] +[[!template text="I hope some of you, I've convinced you" start="00:23:26.418" video="mainVideo" id=subtitle]] +[[!template text="of climbing up a step on a ladder" start="00:23:29.200" video="mainVideo" id=subtitle]] +[[!template text="or making a step in a journey." start="00:23:31.472" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Absolutely. Thank you so much, Leo." start="00:23:34.480" video="mainVideo" id=subtitle]] +[[!template text="I happen to completely agree" start="00:23:38.080" video="mainVideo" id=subtitle]] +[[!template text="with your not necessarily using a slide" start="00:23:41.279" video="mainVideo" id=subtitle]] +[[!template text="when it's not really needed" start="00:23:43.600" video="mainVideo" id=subtitle]] +[[!template text="and to help give some face-to-face time" start="00:23:45.600" video="mainVideo" id=subtitle]] +[[!template text="with the audience." start="00:23:49.200" video="mainVideo" id=subtitle]] +[[!template text="Unfortunately, your webcam cut out," start="00:23:50.685" video="mainVideo" id=subtitle]] +[[!template text="but I mean before that.)" start="00:23:52.923" video="mainVideo" id=subtitle]] +[[!template text="Yes, I'll make sure to fix the problems later on," start="00:23:55.200" video="mainVideo" id=subtitle]] +[[!template text="so don't worry about it." start="00:23:57.914" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Awesome. Alrighty. I guess we're" start="00:23:59.679" video="mainVideo" id=subtitle]] +[[!template text="wrapping up for your talk and getting ready for the next talk.)" start="00:24:02.240" video="mainVideo" id=subtitle]] +[[!template text="Sure. Well, thank you so much." start="00:24:08.000" video="mainVideo" id=subtitle]] +[[!template text="I'll see you all later, I suppose!" start="00:24:09.538" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Sounds good. Thank you again, Leo. Bye-bye)" start="00:24:11.760" video="mainVideo" id=subtitle]] diff --git a/2020/info/03.md b/2020/info/03.md index 07ae6b4f..2eaa404e 100644 --- a/2020/info/03.md +++ b/2020/info/03.md @@ -4,8 +4,9 @@ Bala Ramadurai [[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.webm" subtitles="/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt"]] [Download compressed .webm video (8.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--vp9-q56-video-original-audio.webm) -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm" download="Download Q&A .webm video, 720p"]] -[Download compressed Q&A .webm video (10.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--vp9-q56-video-original-audio.webm) +[[!template id=vid vidid="qnaVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm" download="Download Q&A .webm video, 720p" subtitles="/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt"]] +[Download compressed Q&A .webm video (10.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--vp9-q56-video-original-audio.webm) +[View transcript](#transcript-questions) You want to write a novel, but you don't know how to create an outline. You have a seed idea for a novel, and you intend to expand @@ -99,3 +100,151 @@ We will use: - Uses pandoc to export from org - Author of Karmic Design Thinking (<https://dt.balaramadurai.net/>) - Uses Spacemacs + +<a name="transcript-questions"></a> +# Transcript (questions) + +[[!template new="1" id=subtitle video="qnaVideo" start="00:00:00.000" text="I have the pad open. So, I can start."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:00:05.333" text="Do you have occasions to use Emacs for multilingual text composition?"]] +[[!template id=subtitle video="qnaVideo" start="00:00:11.333" text="How do you deal with spell-checking?"]] +[[!template id=subtitle video="qnaVideo" start="00:00:15.333" text="I have written only in English. For English, Emacs works great."]] +[[!template id=subtitle video="qnaVideo" start="00:00:15.333" text="Spell-check works great."]] +[[!template id=subtitle video="qnaVideo" start="00:00:23.767" text="I have not used it for any other languages."]] +[[!template id=subtitle video="qnaVideo" start="00:00:29.300" text="I have indeed tried local South Indian language, but only the script"]] +[[!template id=subtitle video="qnaVideo" start="00:00:40.333" text="I could get, but not the spell-checker, really. I've not really figured it out."]] +[[!template id=subtitle video="qnaVideo" start="00:00:47.567" text="So that was my trial to answer the first question."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:00:51.067" text="The second question is: "is it possible to align the subcolumns"]] +[[!template id=subtitle video="qnaVideo" start="00:00:57.031" text="and headings and subheadings?""]] +[[!template id=subtitle video="qnaVideo" start="00:00:59.967" text="Oh boy. That's a good one. I actually felt the lack of having the..."]] +[[!template id=subtitle video="qnaVideo" start="00:01:04.967" text="The theme I had was great for... It looked like a novel"]] +[[!template id=subtitle video="qnaVideo" start="00:01:11.100" text="when I'm typing on the novel itself,"]] +[[!template id=subtitle video="qnaVideo" start="00:01:14.533" text="but when I expand into the subtrees,"]] +[[!template id=subtitle video="qnaVideo" start="00:01:19.800" text="it sort of goes haywire. It's a bit hacky."]] +[[!template id=subtitle video="qnaVideo" start="00:01:22.233" text="You can probably switch to a monospace font,"]] +[[!template id=subtitle video="qnaVideo" start="00:01:24.900" text="and that works better than"]] +[[!template id=subtitle video="qnaVideo" start="00:01:27.133" text="the font that I have demoed it."]] +[[!template id=subtitle video="qnaVideo" start="00:01:30.967" text="You can perhaps try monospace font"]] +[[!template id=subtitle video="qnaVideo" start="00:01:36.033" text="and it should work, I think,"]] +[[!template id=subtitle video="qnaVideo" start="00:01:37.700" text="as far as I know."]] +[[!template id=subtitle video="qnaVideo" start="00:01:39.600" text="So, that's the second question."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:01:42.667" text="The third question is maybe there should be an Emacs for Writing"]] +[[!template id=subtitle video="qnaVideo" start="00:01:47.600" text="mailing list, an online writer's workshop?"]] +[[!template id=subtitle video="qnaVideo" start="00:01:50.433" text="This is a great one."]] +[[!template id=subtitle video="qnaVideo" start="00:01:51.300" text="I have conducted an online writer's workshop"]] +[[!template id=subtitle video="qnaVideo" start="00:01:54.433" text="here in India. Of course, it wasn't"]] +[[!template id=subtitle video="qnaVideo" start="00:01:58.000" text="an Emacs-focused workshop. We used Notion as the tool. It worked pretty good."]] +[[!template id=subtitle video="qnaVideo" start="00:02:05.467" text="for people who are not aware of Emacs and how to use Emacs, the keystrokes,"]] +[[!template id=subtitle video="qnaVideo" start="00:02:12.633" text="the fact that I wasn't using the mouse unnerved them."]] +[[!template id=subtitle video="qnaVideo" start="00:02:16.200" text="It was a scary experience for most people."]] +[[!template id=subtitle video="qnaVideo" start="00:02:19.267" text="I had to switch to Notion."]] +[[!template id=subtitle video="qnaVideo" start="00:02:22.333" text="People used that as a template"]] +[[!template id=subtitle video="qnaVideo" start="00:02:23.567" text="and then they could type it out."]] +[[!template id=subtitle video="qnaVideo" start="00:02:28.233" text="It wasn't my perfect experience. I liked the Emacs Org Mode experience much better."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:02:33.633" text="The next question is, "How do you share drafts of your novel?"]] +[[!template id=subtitle video="qnaVideo" start="00:02:41.300" text="If you use pandoc to export to Word, etc., how do you incorporate feedback"]] +[[!template id=subtitle video="qnaVideo" start="00:02:44.867" text="on the document back into Org?""]] +[[!template id=subtitle video="qnaVideo" start="00:02:46.867" text="Thank you for the kind words."]] +[[!template id=subtitle video="qnaVideo" start="00:02:50.767" text="Yes, it is a problem."]] +[[!template id=subtitle video="qnaVideo" start="00:02:53.100" text="This is my ??, and I have a dedication to Spacemacs also and the Emacs Org Mode"]] +[[!template id=subtitle video="qnaVideo" start="00:03:02.033" text="community in there. I don't know if you can see it."]] +[[!template id=subtitle video="qnaVideo" start="00:03:04.433" text="Probably not."]] +[[!template id=subtitle video="qnaVideo" start="00:03:05.467" text="I did export it to Word."]] +[[!template id=subtitle video="qnaVideo" start="00:03:10.600" text="My editor did complain that there were a whole bunch of things,"]] +[[!template id=subtitle video="qnaVideo" start="00:03:13.333" text="that it wasn't convenient for her."]] +[[!template id=subtitle video="qnaVideo" start="00:03:16.633" text="So I tried having the raw Org Mode itself in a DOC embedded,"]] +[[!template id=subtitle video="qnaVideo" start="00:03:20.933" text="and I will do a copy and paste."]] +[[!template id=subtitle video="qnaVideo" start="00:03:26.067" text="Didn't work so well either."]] +[[!template id=subtitle video="qnaVideo" start="00:03:27.867" text="So I'm still on the edge on how do I do this."]] +[[!template id=subtitle video="qnaVideo" start="00:03:31.267" text="Should I train my editor to use Org Mode"]] +[[!template id=subtitle video="qnaVideo" start="00:03:34.933" text="in Gitlab or one of those"]] +[[!template id=subtitle video="qnaVideo" start="00:03:37.167" text="other tools, which is not a great experience?"]] +[[!template id=subtitle video="qnaVideo" start="00:03:39.833" text="But... I don't know. It could be tricky for working with people"]] +[[!template id=subtitle video="qnaVideo" start="00:03:47.633" text="who are not well-versed with Emacs."]] +[[!template id=subtitle video="qnaVideo" start="00:03:50.867" text="Pandoc is very, very useful in converting it to PDF"]] +[[!template id=subtitle video="qnaVideo" start="00:04:02.000" text="and integrating it with LaTeX, the styling, formatting into e-reader,"]] +[[!template id=subtitle video="qnaVideo" start="00:04:02.000" text="EPUB format. For all that, Pandoc works great. You can customize it"]] +[[!template id=subtitle video="qnaVideo" start="00:04:13.133" text="and of course there's a lot of support in the community"]] +[[!template id=subtitle video="qnaVideo" start="00:04:16.233" text="for any style changes that you want to make, any images that you want to add."]] +[[!template id=subtitle video="qnaVideo" start="00:04:20.133" text="It works great."]] +[[!template id=subtitle video="qnaVideo" start="00:04:22.967" text="That was my trial to answer the pandoc question."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:04:28.367" text=""Can you show exported PDF of any of your novels?""]] +[[!template id=subtitle video="qnaVideo" start="00:04:35.100" text="Unfortunately, it's still not published, so I'm..."]] +[[!template id=subtitle video="qnaVideo" start="00:04:38.600" text="I will put it and share it on the community,"]] +[[!template id=subtitle video="qnaVideo" start="00:04:42.067" text="or part of this in the schedule itself. Thank you for the question."]] +[[!template id=subtitle video="qnaVideo" start="00:04:48.067" text="Unfortunately, it's not yet published, so I'm unable to publish the exported PDF."]] +[[!template id=subtitle video="qnaVideo" start="00:04:55.000" text="But I'll make a test of an open-source novel that I'm working on"]] +[[!template id=subtitle video="qnaVideo" start="00:05:01.300" text="I will definitely publish that so that you can see"]] +[[!template id=subtitle video="qnaVideo" start="00:05:05.767" text="how it works also."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:05:10.433" text="Can you text-wrap in the columns?"]] +[[!template id=subtitle video="qnaVideo" start="00:05:13.167" text="I have not found a way to do text-wrap in the columns."]] +[[!template id=subtitle video="qnaVideo" start="00:05:19.667" text="That only shows my limitation in config setup,"]] +[[!template id=subtitle video="qnaVideo" start="00:05:23.633" text="but I'm sure people can figure this out"]] +[[!template id=subtitle video="qnaVideo" start="00:05:27.033" text="That's a good one. I would have loved to have it."]] +[[!template id=subtitle video="qnaVideo" start="00:05:29.900" text="Every time I want to write more on the headline,"]] +[[!template id=subtitle video="qnaVideo" start="00:05:34.000" text="I would get out of the column-view mode and I would do the typing and expand it,"]] +[[!template id=subtitle video="qnaVideo" start="00:05:42.467" text="and then come back into the column view when I want to set the other meta parameters."]] +[[!template id=subtitle video="qnaVideo" start="00:05:46.700" text="So that's how I manage without the text-wrapping feature built into column."]] +[[!template id=subtitle video="qnaVideo" start="00:05:54.133" text="But I think it's a great idea to have text wrap."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:05:58.000" text="Did I leave out any questions? I don't think so."]] +[[!template id=subtitle video="qnaVideo" start="00:06:05.333" text="Amin: I think there's at least one question on IRC,"]] +[[!template id=subtitle video="qnaVideo" start="00:06:10.600" text="which I shall read to you."]] +[[!template id=subtitle video="qnaVideo" start="00:06:14.500" text="Bala: Please, can you do that? Thank you."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:06:17.300" text="Amin: So they asked, "How do you collaborate with others while writing your novel?"]] +[[!template id=subtitle video="qnaVideo" start="00:06:21.278" text="For example, sharing your file and getting feedback.""]] +[[!template id=subtitle video="qnaVideo" start="00:06:28.100" text="Okay. Good question. So far, I have used... Let's see..."]] +[[!template id=subtitle video="qnaVideo" start="00:06:37.100" text="What did I use... This is a crazy hack."]] +[[!template id=subtitle video="qnaVideo" start="00:06:40.833" text="But it's a long-winded way of..."]] +[[!template id=subtitle video="qnaVideo" start="00:06:44.667" text="Right now we're working on an e-book for sustainability"]] +[[!template id=subtitle video="qnaVideo" start="00:06:50.300" text="and kids contribute their stories into this long Org Mode file"]] +[[!template id=subtitle video="qnaVideo" start="00:06:57.767" text="and I want my editors to see it"]] +[[!template id=subtitle video="qnaVideo" start="00:07:00.233" text="so what we have done, actually, is with the tags and all that, I have actually"]] +[[!template id=subtitle video="qnaVideo" start="00:07:05.333" text="pasted it into Google Docs"]] +[[!template id=subtitle video="qnaVideo" start="00:07:08.167" text="so that my collaborators and"]] +[[!template id=subtitle video="qnaVideo" start="00:07:11.833" text="editors can see it."]] +[[!template id=subtitle video="qnaVideo" start="00:07:14.000" text="That's my current solution. It's not elegant."]] +[[!template id=subtitle video="qnaVideo" start="00:07:16.667" text="I'm trying to see if I can use Python code to make the copy and paste work,"]] +[[!template id=subtitle video="qnaVideo" start="00:07:23.900" text="but it's not so elegant for now."]] +[[!template id=subtitle video="qnaVideo" start="00:07:26.900" text="I don't know how to work this out,"]] +[[!template id=subtitle video="qnaVideo" start="00:07:28.933" text="but this is my hack. That is,"]] +[[!template id=subtitle video="qnaVideo" start="00:07:31.100" text="the entire Org Mode text, I would paste it into"]] +[[!template id=subtitle video="qnaVideo" start="00:07:34.300" text="Google Docs"]] +[[!template id=subtitle video="qnaVideo" start="00:07:35.433" text="so that my collaborators and editors"]] +[[!template id=subtitle video="qnaVideo" start="00:07:37.700" text="can see it. Whenever they edit it, I ask them not to make any changes"]] +[[!template id=subtitle video="qnaVideo" start="00:07:41.667" text="to the Org Mode tags."]] +[[!template id=subtitle video="qnaVideo" start="00:07:43.500" text="So just copy the entire text"]] +[[!template id=subtitle video="qnaVideo" start="00:07:45.633" text="and put it back into my Org Mode file"]] +[[!template id=subtitle video="qnaVideo" start="00:07:51.167" text="and export it using Pandoc into a PDF"]] +[[!template id=subtitle video="qnaVideo" start="00:07:53.300" text="and since it's synced to Google Drive"]] +[[!template id=subtitle video="qnaVideo" start="00:07:56.000" text="it shows up in the Google Drive"]] +[[!template id=subtitle video="qnaVideo" start="00:07:58.600" text="and then the collaborators can see the PDF/EPUB"]] +[[!template id=subtitle video="qnaVideo" start="00:08:03.633" text="if they want to open it up"]] +[[!template id=subtitle video="qnaVideo" start="00:08:05.333" text="in their own space."]] +[[!template id=subtitle video="qnaVideo" start="00:08:06.200" text="It's very very hacky and I think primitive, Stone Age sort of solution."]] +[[!template id=subtitle video="qnaVideo" start="00:08:11.467" text="I did see a Python solution."]] +[[!template id=subtitle video="qnaVideo" start="00:08:15.567" text="to at least help me with the copying and paste."]] +[[!template id=subtitle video="qnaVideo" start="00:08:18.967" text="I'm still working on how do I convert this."]] +[[!template id=subtitle video="qnaVideo" start="00:08:21.574" text="Interconvertability is driving me nuts."]] +[[!template id=subtitle video="qnaVideo" start="00:08:24.300" text="I think most of the questions"]] +[[!template id=subtitle video="qnaVideo" start="00:08:26.533" text="are around interconvertability."]] +[[!template id=subtitle video="qnaVideo" start="00:08:29.333" text="This is sort of what I have right now."]] + +[[!template new="1" id=subtitle video="qnaVideo" start="00:08:34.767" text="Any other questions, Amin,"]] +[[!template id=subtitle video="qnaVideo" start="00:08:37.567" text="on IRC or not?"]] +[[!template id=subtitle video="qnaVideo" start="00:08:40.233" text="Amin: Let's see. I think that's about it."]] +[[!template id=subtitle video="qnaVideo" start="00:08:46.433" text="Bala: Okay. Cool. That was fun."]] +[[!template id=subtitle video="qnaVideo" start="00:08:50.033" text="Thank you so much to"]] +[[!template id=subtitle video="qnaVideo" start="00:08:51.833" text="the organizers of Emacs conference,"]] +[[!template id=subtitle video="qnaVideo" start="00:08:54.577" text="and the community at large,"]] +[[!template id=subtitle video="qnaVideo" start="00:08:57.100" text="the Org Mode community and the Emacs community for helping me out."]] +[[!template id=subtitle video="qnaVideo" start="00:09:01.303" text="Thank you so much."]] +[[!template id=subtitle video="qnaVideo" start="00:09:02.900" text="Thanks for the opportunity as well."]] +[[!template id=subtitle video="qnaVideo" start="00:09:05.233" text="Amin: And thank you, Bala, for your awesome talk."]] +[[!template id=subtitle video="qnaVideo" start="00:09:07.300" text="Bala: Thanks. Thanks a lot, Amin."]] diff --git a/2020/info/04.md b/2020/info/04.md index 303cb2a0..e80e7518 100644 --- a/2020/info/04.md +++ b/2020/info/04.md @@ -1,7 +1,7 @@ # Music in Plain Text Jonathan Gregory -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.webm" subtitles="/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt"]] +[[!template id=vid vidid=mainVideo src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.webm" subtitles="/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt"]] [Download compressed .webm video (13.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--vp9-q56-video-original-audio.webm) [View transcript](#transcript) @@ -68,113 +68,171 @@ No. <a name="transcript"></a> # Transcript -Hello, everyone, and welcome to the EmacsConf. I am Jonathan. In this -talk, I'm going to demonstrate ways of producing sheet music in Emacs -using Lilypond, and maybe also convince you to use Emacs for writing -your scores. I'll start with an overview of the syntax for those who -are new to using text-based notation as a shallow dive into the deep -pond of lilies and Lilypond, and move on to showcase some of its -functionalities using Org Mode and lilypond-mode. One disclaimer, -however: I am not a Lilypond developer. - -(00:40) So what is Lilypond? Lilypond is a file format and music engraving -system for producing high-quality sheet music. It translates textual -representations of music to graphical objects. It's similar to LaTeX -in that its input format describes the visual layouts of the score, -using commands to define musical expressions. Commands begin with a -backslash. For example, the formatter command, as shown on the left, -yields its graphical equivalents on the right, the fermata symbol over -the low B and so on and so forth. It's also fully extensible, like -Emacs, allowing users to extend and override Lilypond's -functionalities using the Scheme scripting language. It can be used -for early and contemporary music tablature, vocal music lead sheets, -and so on. Above all, it works with Emacs. In fact, Lilypond ships -with Emacs Lisp libraries, including a major mode for editing Lilypond -files. - -(01:47) So the input files are similar to source files. They contain -expressions formed with curly braces, comments that start with the -percent sign, and the code is indented. Notes are entered using -lowercase letters, and rests with the letter r. In this case, the -lowercase r or r4 is the equivalence of a crotchet or quarter note -rest. Durations are entered using numbers and dots after the note -name. If you do not specify one, the previous duration is used. You -can also tie notes together using the tilde symbol (~). In fact, you -can input chords, lyrics, embellishments, and a lot more. I encourage -you to read the manual for more information. Now let's switch to a -terminal window. With Lilypond installed, let's create a test file -with the extension .ly and open it in Emacs. - -(02:50) At the top of the file is the version statement, which tells Lilypond -which version to use when compiling the file. Here I'm using version -2.20.0. I've added the clef and time signature. Let's add some notes. -I'm going to close this now and compile the file by running lilypond -followed by the file name. So now let's view the output. Okay. - -(03:27) So here's a more complex example for randomizing note sequences. The -idea is to create new reading materials each time the code blocks are -evaluated. As usual, we begin with a header. I've added the title and -composer. Then we add the note sequences to use in the composition. In -this case, sn is a note name just like a b c d and so on, and stands -for snare drum, the percussion instruments. Now here's a function -that's going to shuffle the notes in the table. Finally, we expand the -notes inside the Lilypond source block. So whatever the function -returns is expanded inside the drums block. Now let's press C-c C-c to -view the results. Okay. And if I run this again, it should create a -new composition. Great. You can also audition a piece using the midi -command, which creates a midi file of the score. - -(04:34) Note also that the ob library-- sorry, the ob-lilypond library comes -with two modes. The one I'm using now is called arrange mode and is -useful for assembling complete scores. The basic mode on the other -hand allows you to mix text and music by embedding Lilypond snippets -and export them using typical Org Mode commands. - -(05:00) Now to demonstrate the basic mode in action. I'm going to export this -document to a PDF file. In this case, the :file header argument is -required, so you have to provide one and include the file name. Again, -you can run the code and view the results. Here it is. So now let's -export this to a PDF file. And here it is, what it generates. - -(05:39) Now I'm going to show you the workflow I used to produce music books -in Emacs, combining Lilypond and LaTeX for a perfect marriage. I begin -by sketching the first draft of the manuscript using pencil and paper. -Then I move to Emacs to input the notes in a git repository. This is a -typical source file. It begins with a stylesheet where I set variables -and layout settings, although in general, there's no need for tweaking -the layout unless you have specific requirements to do so. The easiest -way to compile the file from Emacs is by pressing C-c C-l, so let's do -this now, and the compilation buffer will tell you if there were any -errors in the file. Now to automate the process of compiling several -files and building the PDF, I use GNU Make, so all I have to do is -open the shell and run the make command. Don't worry, I'll provide a -link to the source code on the last slide. - -(06:41) As I moved forward with the project, I found at least two things -missing. One, I had no access to a metronome, at least not from the -editor, so I built one for casual use and made it available in the -MELPA repository. I also missed bar numbers in the source file. This -is useful when going back and forth between input and output files -without getting lost. So I wrote a command for toggling bar numbers, -which I hope you can see on the left. Also, some expressions are -difficult or slow to write on the keyboard-- accents and tuplets, for -example--so I use template expansion extensively for this purpose, -mainly yasnippet. - -(07:23) So what do I think? Well, I think Lilypond can be a -sharp paradigm shift for people used to GUI alternatives, but the -results are impressive. You don't have to dive too deeply to start -using Lilypond. Likewise, the ability to extend the software, I think, -is especially appealing for music professionals, enthusiasts, -composers, and the academic community: for example, allowing users to -create alternative notation systems required in non-Western music -traditions and other non-conventional requirements. Also, Lilypond and -Emacs both have extensive and well-written manuals and active -communities of users. But if you're still not sure where to start and -when to wedge your feet in the deep but warm pond of lilies, Lilypond, -and Lilypond users, I invite you to contribute to my Lilypond -projects, which you can do so from the links on the screen. So, thank -you all. I look forward to your comments, and I hope you enjoy the -rest of the conference. - -<!-- /transcript --> +[[!template new="1" text="Hello, everyone, and welcome to the EmacsConf." start="00:00:02.000" video="mainVideo" id=subtitle]] +[[!template text="I am Jonathan. In this talk," start="00:00:04.799" video="mainVideo" id=subtitle]] +[[!template text="I'm going to demonstrate ways of producing sheet music in Emacs" start="00:00:06.631" video="mainVideo" id=subtitle]] +[[!template text="using Lilypond, and maybe also convince you" start="00:00:10.880" video="mainVideo" id=subtitle]] +[[!template text="to use Emacs for writing your scores." start="00:00:14.636" video="mainVideo" id=subtitle]] +[[!template text="I'll start with an overview of the syntax" start="00:00:18.640" video="mainVideo" id=subtitle]] +[[!template text="for those who are new to using" start="00:00:20.698" video="mainVideo" id=subtitle]] +[[!template text="text-based notation" start="00:00:22.240" video="mainVideo" id=subtitle]] +[[!template text="as a shallow dive into the deep pond" start="00:00:24.400" video="mainVideo" id=subtitle]] +[[!template text="of lilies and Lilypond," start="00:00:26.615" video="mainVideo" id=subtitle]] +[[!template text="and move on to showcase" start="00:00:28.800" video="mainVideo" id=subtitle]] +[[!template text="some of its functionalities using Org Mode and lilypond-mode." start="00:00:30.171" video="mainVideo" id=subtitle]] +[[!template text="One disclaimer, however:" start="00:00:34.723" video="mainVideo" id=subtitle]] +[[!template text="I am not a Lilypond developer." start="00:00:37.173" video="mainVideo" id=subtitle]] +[[!template new="1" text="So what is Lilypond?" start="00:00:40.480" video="mainVideo" id=subtitle]] +[[!template text="Lilypond is a file format and music engraving system" start="00:00:42.841" video="mainVideo" id=subtitle]] +[[!template text="for producing high-quality sheet music." start="00:00:46.800" video="mainVideo" id=subtitle]] +[[!template text="It translates textual representations" start="00:00:50.000" video="mainVideo" id=subtitle]] +[[!template text="of music to graphical objects." start="00:00:52.442" video="mainVideo" id=subtitle]] +[[!template text="It's similar to LaTeX in that" start="00:00:55.120" video="mainVideo" id=subtitle]] +[[!template text="its input format describes" start="00:00:57.520" video="mainVideo" id=subtitle]] +[[!template text="the visual layouts of the score," start="00:00:59.329" video="mainVideo" id=subtitle]] +[[!template text="using commands to define musical expressions." start="00:01:01.600" video="mainVideo" id=subtitle]] +[[!template text="Commands begin with a backslash." start="00:01:05.119" video="mainVideo" id=subtitle]] +[[!template text="For example, the formatter command, as shown on the left," start="00:01:07.760" video="mainVideo" id=subtitle]] +[[!template text="yields its graphical equivalents on the right," start="00:01:10.791" video="mainVideo" id=subtitle]] +[[!template text="the fermata symbol over the low B" start="00:01:13.920" video="mainVideo" id=subtitle]] +[[!template text="and so on and so forth." start="00:01:16.345" video="mainVideo" id=subtitle]] +[[!template text="It's also fully extensible, like Emacs," start="00:01:19.119" video="mainVideo" id=subtitle]] +[[!template text="allowing users to extend" start="00:01:21.600" video="mainVideo" id=subtitle]] +[[!template text="and override Lilypond's functionalities" start="00:01:23.119" video="mainVideo" id=subtitle]] +[[!template text="using the Scheme scripting language." start="00:01:25.600" video="mainVideo" id=subtitle]] +[[!template text="It can be used for early and contemporary music tablature," start="00:01:28.452" video="mainVideo" id=subtitle]] +[[!template text="vocal music lead sheets, and so on." start="00:01:32.422" video="mainVideo" id=subtitle]] +[[!template text="Above all, it works with Emacs." start="00:01:35.200" video="mainVideo" id=subtitle]] +[[!template text="In fact, Lilypond ships with Emacs Lisp libraries," start="00:01:38.000" video="mainVideo" id=subtitle]] +[[!template text="including a major mode for editing Lilypond files." start="00:01:41.040" video="mainVideo" id=subtitle]] +[[!template new="1" text="So the input files are similar to source files." start="00:01:47.360" video="mainVideo" id=subtitle]] +[[!template text="They contain expressions formed with curly braces," start="00:01:50.560" video="mainVideo" id=subtitle]] +[[!template text="comments that start with the percent sign," start="00:01:54.079" video="mainVideo" id=subtitle]] +[[!template text="and the code is indented." start="00:01:56.549" video="mainVideo" id=subtitle]] +[[!template text="Notes are entered using lowercase letters," start="00:02:00.240" video="mainVideo" id=subtitle]] +[[!template text="and rests with the letter r." start="00:02:02.903" video="mainVideo" id=subtitle]] +[[!template text="In this case, the lowercase r or r4" start="00:02:05.600" video="mainVideo" id=subtitle]] +[[!template text="is the equivalence of a crotchet or" start="00:02:08.800" video="mainVideo" id=subtitle]] +[[!template text="quarter note rest." start="00:02:11.039" video="mainVideo" id=subtitle]] +[[!template text="Durations are entered using numbers" start="00:02:14.000" video="mainVideo" id=subtitle]] +[[!template text="and dots after the note name." start="00:02:15.938" video="mainVideo" id=subtitle]] +[[!template text="If you do not specify one," start="00:02:18.480" video="mainVideo" id=subtitle]] +[[!template text="the previous duration is used." start="00:02:20.196" video="mainVideo" id=subtitle]] +[[!template text="You can also tie notes together using the tilde symbol (~)." start="00:02:22.640" video="mainVideo" id=subtitle]] +[[!template text="In fact, you can input chords, lyrics," start="00:02:27.360" video="mainVideo" id=subtitle]] +[[!template text="embellishments, and a lot more." start="00:02:30.000" video="mainVideo" id=subtitle]] +[[!template text="I encourage you to read the manual for more information." start="00:02:32.080" video="mainVideo" id=subtitle]] +[[!template text="Now let's switch to a terminal window." start="00:02:36.160" video="mainVideo" id=subtitle]] +[[!template text="With Lilypond installed," start="00:02:39.680" video="mainVideo" id=subtitle]] +[[!template text="let's create a test file with the extension .ly and open it in Emacs." start="00:02:41.247" video="mainVideo" id=subtitle]] +[[!template new="1" text="At the top of the file is the version statement," start="00:02:50.560" video="mainVideo" id=subtitle]] +[[!template text="which tells Lilypond" start="00:02:53.048" video="mainVideo" id=subtitle]] +[[!template text="which version to use when compiling the file." start="00:02:54.395" video="mainVideo" id=subtitle]] +[[!template text="Here I'm using version 2.20.0." start="00:02:57.440" video="mainVideo" id=subtitle]] +[[!template text="I've added the clef and time signature." start="00:03:00.959" video="mainVideo" id=subtitle]] +[[!template text="Let's add some notes." start="00:03:04.159" video="mainVideo" id=subtitle]] +[[!template text="I'm going to close this now" start="00:03:09.280" video="mainVideo" id=subtitle]] +[[!template text="and compile the file" start="00:03:12.098" video="mainVideo" id=subtitle]] +[[!template text="by running lilypond followed by the file name." start="00:03:13.765" video="mainVideo" id=subtitle]] +[[!template text="So now let's view the output." start="00:03:19.760" video="mainVideo" id=subtitle]] +[[!template new="1" text="Okay. So here's a more complex example" start="00:03:27.360" video="mainVideo" id=subtitle]] +[[!template text="for randomizing note sequences." start="00:03:29.760" video="mainVideo" id=subtitle]] +[[!template text="The idea is to create" start="00:03:32.239" video="mainVideo" id=subtitle]] +[[!template text="new reading materials each time the code blocks are evaluated." start="00:03:33.410" video="mainVideo" id=subtitle]] +[[!template text="As usual, we begin with a header." start="00:03:37.760" video="mainVideo" id=subtitle]] +[[!template text="I've added the title and composer." start="00:03:40.640" video="mainVideo" id=subtitle]] +[[!template text="Then we add the note sequences to use in the composition." start="00:03:43.541" video="mainVideo" id=subtitle]] +[[!template text="In this case, sn is a note name just like" start="00:03:47.920" video="mainVideo" id=subtitle]] +[[!template text="a b c d and so on, and stands for snare drum," start="00:03:51.200" video="mainVideo" id=subtitle]] +[[!template text="the percussion instruments." start="00:03:54.959" video="mainVideo" id=subtitle]] +[[!template text="Now here's a function that's going to" start="00:03:58.879" video="mainVideo" id=subtitle]] +[[!template text="shuffle the notes in the table." start="00:04:00.720" video="mainVideo" id=subtitle]] +[[!template text="Finally, we expand the notes inside" start="00:04:04.080" video="mainVideo" id=subtitle]] +[[!template text="the Lilypond source block." start="00:04:06.560" video="mainVideo" id=subtitle]] +[[!template text="So whatever the function returns" start="00:04:08.799" video="mainVideo" id=subtitle]] +[[!template text="is expanded inside the drums block." start="00:04:10.684" video="mainVideo" id=subtitle]] +[[!template text="Now let's press C-c C-c to view the results." start="00:04:13.680" video="mainVideo" id=subtitle]] +[[!template text="Okay. And if I run this again, it should create a new composition." start="00:04:20.079" video="mainVideo" id=subtitle]] +[[!template text="Great. You can also audition a piece using the midi command," start="00:04:26.840" video="mainVideo" id=subtitle]] +[[!template text="which creates a midi file of the score." start="00:04:31.360" video="mainVideo" id=subtitle]] +[[!template new="1" text="Note also that the ob library--" start="00:04:34.320" video="mainVideo" id=subtitle]] +[[!template text="sorry, the ob-lilypond library comes" start="00:04:36.560" video="mainVideo" id=subtitle]] +[[!template text="with two modes." start="00:04:39.040" video="mainVideo" id=subtitle]] +[[!template text="The one I'm using now is called arrange mode" start="00:04:40.400" video="mainVideo" id=subtitle]] +[[!template text="and is useful for assembling complete scores." start="00:04:43.440" video="mainVideo" id=subtitle]] +[[!template text="The basic mode, on the other hand," start="00:04:47.120" video="mainVideo" id=subtitle]] +[[!template text="allows you to mix text and music" start="00:04:49.015" video="mainVideo" id=subtitle]] +[[!template text="by embedding Lilypond snippets and" start="00:04:51.199" video="mainVideo" id=subtitle]] +[[!template text="export them using typical Org Mode commands." start="00:04:53.360" video="mainVideo" id=subtitle]] +[[!template new="1" text="Now to demonstrate the basic mode in action." start="00:05:00.240" video="mainVideo" id=subtitle]] +[[!template text="I'm going to export this document" start="00:05:02.661" video="mainVideo" id=subtitle]] +[[!template text="to a PDF file." start="00:05:04.320" video="mainVideo" id=subtitle]] +[[!template text="In this case, the :file header argument is required," start="00:05:05.120" video="mainVideo" id=subtitle]] +[[!template text="so you have to provide one" start="00:05:10.077" video="mainVideo" id=subtitle]] +[[!template text="and include the file name." start="00:05:11.919" video="mainVideo" id=subtitle]] +[[!template text="Again, you can run the code and view the results." start="00:05:15.600" video="mainVideo" id=subtitle]] +[[!template text="Here it is. So now let's export this to a PDF file." start="00:05:22.160" video="mainVideo" id=subtitle]] +[[!template text="And here it is, what it generates." start="00:05:33.680" video="mainVideo" id=subtitle]] +[[!template new="1" text="Now I'm going to show you the workflow I used" start="00:05:39.680" video="mainVideo" id=subtitle]] +[[!template text="to produce music books in Emacs," start="00:05:41.716" video="mainVideo" id=subtitle]] +[[!template text="combining Lilypond and LaTeX for a" start="00:05:44.000" video="mainVideo" id=subtitle]] +[[!template text="perfect marriage." start="00:05:46.160" video="mainVideo" id=subtitle]] +[[!template text="I begin by sketching the first draft" start="00:05:48.000" video="mainVideo" id=subtitle]] +[[!template text="of the manuscript using pencil and paper." start="00:05:49.858" video="mainVideo" id=subtitle]] +[[!template text="Then I move to Emacs to input the notes" start="00:05:53.039" video="mainVideo" id=subtitle]] +[[!template text="in a git repository." start="00:05:55.039" video="mainVideo" id=subtitle]] +[[!template text="This is a typical source file." start="00:05:57.440" video="mainVideo" id=subtitle]] +[[!template text="It begins with a stylesheet" start="00:05:59.486" video="mainVideo" id=subtitle]] +[[!template text="where I set variables and layout settings," start="00:06:01.360" video="mainVideo" id=subtitle]] +[[!template text="although in general," start="00:06:03.690" video="mainVideo" id=subtitle]] +[[!template text="there's no need for tweaking the layout" start="00:06:04.875" video="mainVideo" id=subtitle]] +[[!template text="unless you have specific requirements to do so." start="00:06:07.039" video="mainVideo" id=subtitle]] +[[!template text="The easiest way to compile the file from Emacs is by pressing C-c C-l," start="00:06:11.199" video="mainVideo" id=subtitle]] +[[!template text="so let's do this now," start="00:06:15.520" video="mainVideo" id=subtitle]] +[[!template text="and the compilation buffer will tell you" start="00:06:19.280" video="mainVideo" id=subtitle]] +[[!template text="if there were any errors in the file." start="00:06:21.199" video="mainVideo" id=subtitle]] +[[!template text="Now to automate the process of" start="00:06:23.759" video="mainVideo" id=subtitle]] +[[!template text="compiling several files and building the PDF," start="00:06:25.439" video="mainVideo" id=subtitle]] +[[!template text="I use GNU Make, so all I have to do is" start="00:06:28.560" video="mainVideo" id=subtitle]] +[[!template text="open the shell and run the make command. Don't worry," start="00:06:31.280" video="mainVideo" id=subtitle]] +[[!template text="I'll provide a link to the source code" start="00:06:36.000" video="mainVideo" id=subtitle]] +[[!template text="on the last slide." start="00:06:37.840" video="mainVideo" id=subtitle]] +[[!template new="1" text="As I moved forward with the project," start="00:06:41.600" video="mainVideo" id=subtitle]] +[[!template text="I found at least two things missing." start="00:06:43.494" video="mainVideo" id=subtitle]] +[[!template text="One, I had no access to a metronome," start="00:06:46.000" video="mainVideo" id=subtitle]] +[[!template text="at least not from the editor," start="00:06:48.720" video="mainVideo" id=subtitle]] +[[!template text="so I built one for casual use" start="00:06:50.479" video="mainVideo" id=subtitle]] +[[!template text="and made it available in the MELPA repository." start="00:06:52.437" video="mainVideo" id=subtitle]] +[[!template text="I also missed bar numbers in the source file." start="00:06:55.919" video="mainVideo" id=subtitle]] +[[!template text="This is useful when going back and forth" start="00:06:59.039" video="mainVideo" id=subtitle]] +[[!template text="between input and output files without getting lost." start="00:07:00.880" video="mainVideo" id=subtitle]] +[[!template text="So I wrote a command for toggling bar numbers," start="00:07:04.479" video="mainVideo" id=subtitle]] +[[!template text="which I hope you can see on the left." start="00:07:07.290" video="mainVideo" id=subtitle]] +[[!template text="Also, some expressions are difficult or" start="00:07:10.000" video="mainVideo" id=subtitle]] +[[!template text="slow to write on the keyboard--" start="00:07:12.080" video="mainVideo" id=subtitle]] +[[!template text="accents and tuplets, for example--" start="00:07:14.160" video="mainVideo" id=subtitle]] +[[!template text="so I use template expansion extensively for this purpose," start="00:07:16.490" video="mainVideo" id=subtitle]] +[[!template text="mainly yasnippet." start="00:07:20.160" video="mainVideo" id=subtitle]] +[[!template new="1" text="So what do I think?" start="00:07:23.440" video="mainVideo" id=subtitle]] +[[!template text="Well, I think Lilypond can be a sharp paradigm shift" start="00:07:24.797" video="mainVideo" id=subtitle]] +[[!template text="for people used to GUI alternatives," start="00:07:28.080" video="mainVideo" id=subtitle]] +[[!template text="but the results are impressive." start="00:07:30.817" video="mainVideo" id=subtitle]] +[[!template text="You don't have to dive too deeply to" start="00:07:32.720" video="mainVideo" id=subtitle]] +[[!template text="start using Lilypond." start="00:07:34.639" video="mainVideo" id=subtitle]] +[[!template text="Likewise, the ability to extend the software, I think," start="00:07:36.960" video="mainVideo" id=subtitle]] +[[!template text="is especially appealing for music professionals," start="00:07:39.635" video="mainVideo" id=subtitle]] +[[!template text="enthusiasts, composers, and the academic community:" start="00:07:42.400" video="mainVideo" id=subtitle]] +[[!template text="for example, allowing users to create" start="00:07:46.560" video="mainVideo" id=subtitle]] +[[!template text="alternative notation systems" start="00:07:48.400" video="mainVideo" id=subtitle]] +[[!template text="required in non-Western music traditions" start="00:07:50.187" video="mainVideo" id=subtitle]] +[[!template text="and other non-conventional requirements." start="00:07:53.120" video="mainVideo" id=subtitle]] +[[!template text="Also, Lilypond and Emacs both have" start="00:07:56.160" video="mainVideo" id=subtitle]] +[[!template text="extensive and well-written manuals" start="00:07:58.400" video="mainVideo" id=subtitle]] +[[!template text="and active communities of users." start="00:08:00.720" video="mainVideo" id=subtitle]] +[[!template text="But if you're still not sure" start="00:08:04.639" video="mainVideo" id=subtitle]] +[[!template text="where to start and when to wedge your feet in the deep but warm pond" start="00:08:05.971" video="mainVideo" id=subtitle]] +[[!template text="of lilies, Lilypond, and Lilypond users," start="00:08:10.475" video="mainVideo" id=subtitle]] +[[!template text="I invite you to contribute to my Lilypond projects," start="00:08:13.680" video="mainVideo" id=subtitle]] +[[!template text="which you can do so from the links on the screen." start="00:08:16.960" video="mainVideo" id=subtitle]] +[[!template text="So, thank you all. I look forward to your comments," start="00:08:20.720" video="mainVideo" id=subtitle]] +[[!template text="and I hope you enjoy the rest of the conference." start="00:08:23.271" video="mainVideo" id=subtitle]] diff --git a/2020/info/05.md b/2020/info/05.md index 852caff3..30aaf561 100644 --- a/2020/info/05.md +++ b/2020/info/05.md @@ -112,390 +112,546 @@ screenshots from within Emacs as SVG (if compiled `--with-cairo`). <a name="transcript"></a> # Transcript -Hello, my name is Grant Shangreaux. This is my talk titled Bard -Bivou(m)acs: Publishing Music with Emacs. I'm a software developer -with Unabridged Software in Lincoln, Nebraska. Long time Emacs user, -relatively new Emacs hacker. Hopefully, I'll be able to show you my -workflow, with how I publish music with Emacs. All right. - -(<a href="#mainVideo" class="time-link">00:30</a>) -So as a musician, I would like to publish my music online. I could -publish with popular online music services, but I'm more of a -DIY-type, so I chose to go ahead and publish with Emacs. What's the -motivation behind this? A lot of it comes down to some fundamental -freedoms that Emacs and GNU software represent to me, as well as my -ideas on culture and my background. I don't believe that music is a -consumer good. It's a form of knowledge, like an algorithm. And it's -just such a part of culture, like in tribal cultures, music was seen -as a gift from the cosmos or the gods. It was a gift maybe through an -individual vessel, but was shared with the people and shared with -everyone, kept alive by the culture itself. So to me, music is -something that should be shared and should be freely enjoyed by -everyone. Of course, artists should be compensated as well, but that's -a whole different topic. - -(<a href="#mainVideo" class="time-link" data-timestamp="99">01:39</a>) -So when I want to share my music, I want to do it without -impacting anyone's freedom. Using GNU software like Emacs is a good -way that I can ensure that I won't be requiring people to sign away -their freedoms for anything. There's a lot more I could say about this -but I don't have time. Feel free to reach out to me by email or IRC. -Part of the motivation for me, personally, is that Emacs is super -magical. It's an all-in-one solution. Like I said, the GNU software -aligns with Creative Commons' ideas. I can do file management. I can -author HTML, all the web stuff I need even, literate-style. I can -handle media and metadata. I've got version control, remote server -access... All the tools I need are right under my fingertips with this -tool that I use every day for a long time. I don't need to look -elsewhere. - -(<a href="#mainVideo" class="time-link">02:31</a>) -It was a challenge. I wanted to see if I could do this all -within Emacs itself. So, how do you use Emacs to publish music? Well, -for me, I needed a couple of things. I needed to be able to audition -and label unlabeled audio tracks. I have a lot of files that I don't -know where they came from. I don't know what they are. I need to be -able to listen to them, and I need to be able to add metadata to -whatever audio format it is and rename the files based on that -metadata, potentially. And in the end, I wanted to take those files -and programmatically produce a web page for people to consume. - -(<a href="#mainVideo" class="time-link">03:08</a>) -I found out that Emacs scores a hundred percent on all of -these requirements that I had for this, and a lot of that came from -EMMS, the Emacs multimedia system. EMMS is great. If you haven't -checked it out, please do. It's a little bit unintuitive, but once you -get into it, you know it works. Basically, what EMMS gave me was the -ability to listen to the tracks, organize playlists. On top of that, -it gave me super-powered metadata authoring. - -(<a href="#mainVideo" class="time-link">03:42</a>) -I'm going to demonstrate that to you. So in order to do this, -you have to require markable playlists, so (require 'emms-mark). I'm -going to go through, and I'm going to open the red... I've got this. -These files here. So you can see these files are mp3s. They're -recorded on a digital recorder. If I had the choice, I would have a -recorder that used a different format, but so be it. I can mark all -these files and I can do EMMS add to .., and now they've been loaded -into a playlist. So you can see the playlist here. There's some -leftover files. - -(<a href="#mainVideo" class="time-link">04:30</a>) -So I've got these three files in my playlist, and as -you can see, it's just the file name, the path. I don't have any -metadata associated with them. In this playlist, I can hit E, and -it'll bring up a buffer showing the tag information that I have. I -could edit these here. I could edit them one at a time, but that's not -really great. I want superpower metadata authoring. So, by marking -them, I can then hit E, and I have all three of the tracks loaded up -in this tags buffer. On top of that, I can do EMMS tag editor, set -all, C-c C-r, and I want to set the artist. so these are some -recordings of my family. So, Shangreaux, set all three of them. I want -to set the album: Spring Walk with Lap Harp. I want to set the year. -And then I'm going to go ahead and put these in manually, but with the -power of Emacs keyboard macros and registers and so on. I could do -this programmatically as well, which would make it a lot easier if I -had much more than three files to do this with. Submit the changes -with C-c C-c, and now we've got the playlist. You can see the artist -and track number have been updated here. - -(<a href="#mainVideo" class="time-link">6:15</a>) -And then the final piece of this is that if you look at this, -you can see that the file name is still the same. So if I were looking -at the directory, I would still have this file name. When packaging -these up for a release, for people to download, it's nice to be able -to have that filename reflect the track number and the artist and so -on. So there's another command, EMMS rename tag editor, rename, so it -could be just capital R. I think I need to mark all of these, hit -capital R, and then it's going to ask me to confirm and say yes to all -of them. And now, if you look in the-- whoops I have to update -it--you'll see it's been updated with the artist, track number and -track name. This format is a format string, so it's customizable of -course. I just decided to go with the default. - -(<a href="#mainVideo" class="time-link">7:21</a>) -So that's pretty great, this workflow just with EMMS. I didn't -have to do anything. This is all there. It's all built in. It gave me -exactly what I was looking for in terms of being able to process a lot -of raw audio files add metadata to them and get them ready for -publishing. And this is for publishing for playback in any media -player. It'll be useful. Not just for the web page that I'm building. - -(<a href="#mainVideo" class="time-link">7:48</a>) -So the final part, of course, is to build the web page. Emacs -makes authoring HTML trivial. As I was going through this, I wanted to -challenge myself and just be, like, can I do this just all with Emacs? -Can I just make this? I don't need a... I don't need Ruby. I don't -need Rails. I don't need Node. I don't need any of this other stuff. I -have my tool right here. It's a fully... It's a whole operating -system, basically, plus programming languages. So the first thing I -started with was buffer scripting for manipulating text. That's kind -of the easiest way to do it. Basically, anything you can do in a -buffer, you can do programmatically with Elisp. So this might be a -good example for beginners. If you haven't done any Elisp yet, a -simple example is to create this this div output here. You can use -this with-temp-buffer, so basically creating an imaginary buffer. -insert is just like typing, so you put strings in, you put new lines -in, you can build some strings together. Here you can see I'm doing a -random number, so every time I execute this, my content change. I -can generate dynamic content in HTML blocks with Elisp. - -(<a href="#mainVideo" class="time-link">9:04</a>) -For my web page builder, It's a little more complex. I'm -pulling data out using EMMS data structures, so it's pulling that out -from the track data. And then I'm using some program to generate list -elements, so each track is going to have the title and track number, -and then a button for playing it, plus the source of the audio file, -which will get added here. Right now, this is hard coded for Opus, so -it won't work for my MP3s. I'm going to skip over snippets. Turns out -format strings were good enough for me. Snippets could be useful, but -format is super powerful, and I didn't really even need all that much -power, basically, just doing string interpolation. So if you haven't -seen format before, you basically put these control strings or control -characters inside of a string, and you can generate an output string -that you want. So in my generator code, basically, it's down here, I'm -calling format with this Bard Bivou(m)acs template, and that's -basically a big a big string of HTML. It's just my whole page of HTML -with those control characters in just four places. One of them -populates the track list. That's really the meat of the program. -Again, this is a combination of using buffer scripting, using HTML -mode, inserting text format strings, and then I can indent-region so -the HTML actually looks pretty when it comes out of it as well. I will -show that, just really quick actually. So you can see, this is the -HTML that got generated. I've got my template. I inserted the title -here, the style, the font was all inserted, and then this whole list -of of tracks here. It's kind of messy to look at, but this track list, -this whole div here, is all generated by my generator code, and it -works. It's great. Okay, moving on. - -(<a href="#mainVideo" class="time-link">11:27</a>) -So the other thing was that as I was developing this, I -decided to use Org Babel and some of his its features for -multi-language things because I needed to style it with CSS and and -put actions in Javascript, and also I used SVG for authoring stuff. It -was a little bit complicated. It probably would have been simpler had -I not used Org Babel, but it's also really fun. I think it's a cool, -cool idea to use literate programming. My idea was to create HTML -components. I could name it like this, put a format string inside it, -and build a function in Elisp to format it and spit out the HTML that -I want. By doing this, then, I can just change things in my Org file -which, not getting a whole lot of time to work on it, I can come back -to it and I have a lot of notes. I can kind of generate things as I'm -going and keep notes for myself, and keep the... I don't know. It's -cool. Literate programming is fun. So I don't need to go into that too -much, but you can see if I execute this here, I get the the div that I -want. It's a little bit funny. You'll see I have the string like this, -the way that noweb expands, I can't do this on a single line. It looks -funny when you do that, so that might be something to work out later. -CSS blocks can either be tangled out and referenced in the HTML source -or inlined. Here's an example I have of inlining it. So I've got my -little CSS block named style, Javascript named script, and then I've -got this HTML source block with noweb expansion. These double angle -brackets here are where I'm going to expand the block named style. I'm -actually calling a function, so I want the result of the function -here, and then the script will just get expanded here. So -org-babel-expand-src-block, you can see what it looks like. I've got -my style here. I've got my title. I've got that main content class I -showed before, and the script as well. So that's kind of cool. I could -just run org-babel-tangle and get my thing out and just edit one file -instead of multiple files. Not for everyone, but I thought it was kind -of fun. All right. - -(<a href="#mainVideo" class="time-link">13:45</a>) -Oh, and the final thing is that in Emacs, you can author and -view SVG. So this is just an Org. This SVG, I used to make the play -and pause buttons. I didn't know this, but if you edit an SVG file, -you can toggle back and forth between the code and the image. It's -pretty sweet. So I can iteratively work through this because of how -Emacs is. - -(<a href="#mainVideo" class="time-link">14:20</a>) -Final considerations here, like when doing this, I want it to -be all free, so I want to use fonts that use a free license. I found -GNU Unifont. It's kind of cool. The content license... I chose -Creative Commons Attribution ShareAlike, which is kind of like the -GPL. Ideally, I could serve it with Emacs. I'd like to remove -idiosyncrasy so other people can use it. It's pretty much just my tool -right now. Not requiring the web browser... I can ship playlists so -that you can just click or link to a playlist on your favorite player, -even EMMS if you want, and then packing up those albums in like a ZIP -or .tar file. - -(<a href="#mainVideo" class="time-link">15:04</a>) -So you can go to churls.world . It just has a link to this -album. I'll display it here in just a second. You can contact me. I'm -shoshin on #emacs in IRC and on sourcehut. You can email me -grant@churls.world, personal, or grant@unabridgedsoftware.com. All -right, now. Let's see about this... This is up online, so if you want -to listen to my college band's album from 20 years ago, here it is: -Casiopeia Basement Days. Whoops. I made this art in Krita. You can -press play. You can skip around. I do have the playlist up here too. -So yeah, thanks for listening. I hope you enjoyed it, and enjoy the -rest of EmacsConf. Goodbye! - -<!-- /transcript --> +[[!template text="Hello, my name is Grant Shangreaux." start="00:00:01.360" video="mainVideo" id=subtitle]] +[[!template text="This is my talk titled Bard Bivou(m)acs: Publishing Music with Emacs." start="00:00:04.480" video="mainVideo" id=subtitle]] +[[!template text="I'm a software developer with Unabridged Software in Lincoln, Nebraska." start="00:00:09.519" video="mainVideo" id=subtitle]] +[[!template text="Long time Emacs user, relatively new Emacs hacker." start="00:00:14.400" video="mainVideo" id=subtitle]] +[[!template text="Hopefully, I'll be able to show you my workflow," start="00:00:18.720" video="mainVideo" id=subtitle]] +[[!template text="with how I publish music with Emacs." start="00:00:22.487" video="mainVideo" id=subtitle]] +[[!template new="1" text="All right. So as a musician, I would like to publish my music online." start="00:00:30.480" video="mainVideo" id=subtitle]] +[[!template text="I could publish with popular online music services," start="00:00:35.520" video="mainVideo" id=subtitle]] +[[!template text="but I'm more of a DIY-type," start="00:00:39.040" video="mainVideo" id=subtitle]] +[[!template text="so I chose to go ahead and publish with Emacs." start="00:00:41.061" video="mainVideo" id=subtitle]] +[[!template text="What's the motivation behind this?" start="00:00:44.719" video="mainVideo" id=subtitle]] +[[!template text="A lot of it comes down to some fundamental freedoms" start="00:00:48.160" video="mainVideo" id=subtitle]] +[[!template text="that Emacs and GNU software represent to me," start="00:00:51.600" video="mainVideo" id=subtitle]] +[[!template text="as well as my ideas on culture and my background." start="00:00:57.178" video="mainVideo" id=subtitle]] +[[!template text="I don't believe that music is a consumer good." start="00:01:01.840" video="mainVideo" id=subtitle]] +[[!template text="It's a form of knowledge, like an algorithm." start="00:01:04.080" video="mainVideo" id=subtitle]] +[[!template text="And it's just such a part of culture," start="00:01:08.320" video="mainVideo" id=subtitle]] +[[!template text="like in tribal cultures," start="00:01:11.036" video="mainVideo" id=subtitle]] +[[!template text="music was seen as a gift from the cosmos or the gods." start="00:01:12.780" video="mainVideo" id=subtitle]] +[[!template text="It was a gift maybe through an individual vessel," start="00:01:17.405" video="mainVideo" id=subtitle]] +[[!template text="but was shared with the people" start="00:01:20.288" video="mainVideo" id=subtitle]] +[[!template text="and shared with everyone," start="00:01:21.920" video="mainVideo" id=subtitle]] +[[!template text="kept alive by the culture itself." start="00:01:23.520" video="mainVideo" id=subtitle]] +[[!template text="So to me, music is something that" start="00:01:26.799" video="mainVideo" id=subtitle]] +[[!template text="should be shared and should be" start="00:01:29.840" video="mainVideo" id=subtitle]] +[[!template text="freely enjoyed by everyone." start="00:01:31.520" video="mainVideo" id=subtitle]] +[[!template text="Of course, artists should be compensated as well," start="00:01:33.818" video="mainVideo" id=subtitle]] +[[!template text="but that's a whole different topic." start="00:01:36.560" video="mainVideo" id=subtitle]] +[[!template new="1" text="So when I want to share my music," start="00:01:39.040" video="mainVideo" id=subtitle]] +[[!template text="I want to do it without impacting anyone's freedom." start="00:01:41.040" video="mainVideo" id=subtitle]] +[[!template text="Using GNU software like Emacs" start="00:01:43.520" video="mainVideo" id=subtitle]] +[[!template text="is a good way that I can ensure that" start="00:01:45.425" video="mainVideo" id=subtitle]] +[[!template text="I won't be requiring people" start="00:01:49.200" video="mainVideo" id=subtitle]] +[[!template text="to sign away their freedoms for anything." start="00:01:52.597" video="mainVideo" id=subtitle]] +[[!template text="There's a lot more I could say about this" start="00:01:55.840" video="mainVideo" id=subtitle]] +[[!template text="but I don't have time." start="00:01:57.367" video="mainVideo" id=subtitle]] +[[!template text="Feel free to reach out to me by email or IRC." start="00:01:58.799" video="mainVideo" id=subtitle]] +[[!template text="Part of the motivation for me," start="00:02:03.439" video="mainVideo" id=subtitle]] +[[!template text="personally, is that Emacs is super magical." start="00:02:06.479" video="mainVideo" id=subtitle]] +[[!template text="It's an all-in-one solution." start="00:02:08.775" video="mainVideo" id=subtitle]] +[[!template text="Like I said, the GNU software aligns with" start="00:02:10.720" video="mainVideo" id=subtitle]] +[[!template text="Creative Commons' ideas." start="00:02:12.720" video="mainVideo" id=subtitle]] +[[!template text="I can do file management." start="00:02:14.480" video="mainVideo" id=subtitle]] +[[!template text="I can author HTML, all the web stuff I need even, literate-style." start="00:02:16.067" video="mainVideo" id=subtitle]] +[[!template text="I can handle media and metadata." start="00:02:20.239" video="mainVideo" id=subtitle]] +[[!template text="I've got version control, remote server access..." start="00:02:22.171" video="mainVideo" id=subtitle]] +[[!template text="All the tools I need are right under my fingertips with this tool" start="00:02:24.640" video="mainVideo" id=subtitle]] +[[!template text="that I use every day for a long time." start="00:02:28.080" video="mainVideo" id=subtitle]] +[[!template text="I don't need to look elsewhere." start="00:02:30.000" video="mainVideo" id=subtitle]] +[[!template new="1" text="It was a challenge." start="00:02:31.440" video="mainVideo" id=subtitle]] +[[!template text="I wanted to see if I could do this" start="00:02:34.319" video="mainVideo" id=subtitle]] +[[!template text="all within Emacs itself." start="00:02:36.319" video="mainVideo" id=subtitle]] +[[!template text="So, how do you use Emacs to publish music?" start="00:02:39.440" video="mainVideo" id=subtitle]] +[[!template text="Well, for me, I needed" start="00:02:41.680" video="mainVideo" id=subtitle]] +[[!template text="a couple of things." start="00:02:43.440" video="mainVideo" id=subtitle]] +[[!template text="I needed to be able to audition and label unlabeled audio tracks." start="00:02:44.258" video="mainVideo" id=subtitle]] +[[!template text="I have a lot of files that I don't know where they came from." start="00:02:47.564" video="mainVideo" id=subtitle]] +[[!template text="I don't know what they are." start="00:02:50.320" video="mainVideo" id=subtitle]] +[[!template text="I need to be able to listen to them," start="00:02:51.213" video="mainVideo" id=subtitle]] +[[!template text="and I need to be able to add metadata to" start="00:02:53.840" video="mainVideo" id=subtitle]] +[[!template text="whatever audio format it is" start="00:02:56.800" video="mainVideo" id=subtitle]] +[[!template text="and rename the files based on that" start="00:02:58.480" video="mainVideo" id=subtitle]] +[[!template text="metadata, potentially." start="00:03:00.800" video="mainVideo" id=subtitle]] +[[!template text="And in the end, I wanted to take those" start="00:03:03.200" video="mainVideo" id=subtitle]] +[[!template text="files and programmatically produce a web page" start="00:03:05.120" video="mainVideo" id=subtitle]] +[[!template text="for people to consume." start="00:03:08.319" video="mainVideo" id=subtitle]] +[[!template new="1" text="I found out that Emacs scores a hundred percent on all of" start="00:03:10.442" video="mainVideo" id=subtitle]] +[[!template text="these requirements that I had for this," start="00:03:14.879" video="mainVideo" id=subtitle]] +[[!template text="and a lot of that came from EMMS, the Emacs multimedia system." start="00:03:17.709" video="mainVideo" id=subtitle]] +[[!template text="EMMS is great." start="00:03:22.640" video="mainVideo" id=subtitle]] +[[!template text="If you haven't checked it out, please do." start="00:03:26.080" video="mainVideo" id=subtitle]] +[[!template text="It's a little bit unintuitive," start="00:03:27.760" video="mainVideo" id=subtitle]] +[[!template text="but once you get into it, you know it works." start="00:03:29.736" video="mainVideo" id=subtitle]] +[[!template text="Basically, what EMMS gave me was" start="00:03:34.000" video="mainVideo" id=subtitle]] +[[!template text="the ability to listen to the tracks," start="00:03:36.420" video="mainVideo" id=subtitle]] +[[!template text="organize playlists." start="00:03:38.720" video="mainVideo" id=subtitle]] +[[!template text="On top of that, it gave me" start="00:03:39.680" video="mainVideo" id=subtitle]] +[[!template text="super-powered metadata authoring." start="00:03:41.280" video="mainVideo" id=subtitle]] +[[!template new="1" text="I'm going to demonstrate that to you." start="00:03:42.959" video="mainVideo" id=subtitle]] +[[!template text="So in order to do this," start="00:03:45.040" video="mainVideo" id=subtitle]] +[[!template text="you have to require markable playlists," start="00:03:47.200" video="mainVideo" id=subtitle]] +[[!template text="so (require 'emms-mark). I'm going to" start="00:03:50.879" video="mainVideo" id=subtitle]] +[[!template text="go through, and I'm going to open the red..." start="00:03:54.879" video="mainVideo" id=subtitle]] +[[!template text="I've got this. These files here." start="00:03:59.680" video="mainVideo" id=subtitle]] +[[!template text="So you can see these files are mp3s." start="00:04:02.092" video="mainVideo" id=subtitle]] +[[!template text="They're recorded on a digital recorder." start="00:04:04.480" video="mainVideo" id=subtitle]] +[[!template text="If I had the choice, I would have a" start="00:04:07.599" video="mainVideo" id=subtitle]] +[[!template text="recorder that used a different format," start="00:04:09.920" video="mainVideo" id=subtitle]] +[[!template text="but so be it. I can mark all these files" start="00:04:12.319" video="mainVideo" id=subtitle]] +[[!template text="and I can do EMMS add to .., and now they've been loaded into a playlist." start="00:04:14.640" video="mainVideo" id=subtitle]] +[[!template text="So you can see the playlist here." start="00:04:27.040" video="mainVideo" id=subtitle]] +[[!template text="There's some leftover files." start="00:04:28.698" video="mainVideo" id=subtitle]] +[[!template new="1" text="So I've got these three files" start="00:04:30.400" video="mainVideo" id=subtitle]] +[[!template text="in my playlist, and as you can see," start="00:04:31.771" video="mainVideo" id=subtitle]] +[[!template text="it's just the file name, the path." start="00:04:33.361" video="mainVideo" id=subtitle]] +[[!template text="I don't have any metadata associated with them." start="00:04:35.194" video="mainVideo" id=subtitle]] +[[!template text="In this playlist, I can hit E," start="00:04:38.560" video="mainVideo" id=subtitle]] +[[!template text="and it'll bring up a buffer showing" start="00:04:41.360" video="mainVideo" id=subtitle]] +[[!template text="the tag information that I have." start="00:04:43.440" video="mainVideo" id=subtitle]] +[[!template text="I could edit these here." start="00:04:47.360" video="mainVideo" id=subtitle]] +[[!template text="I could edit them one at a time," start="00:04:49.840" video="mainVideo" id=subtitle]] +[[!template text="but that's not really great. I want superpower metadata authoring." start="00:04:51.129" video="mainVideo" id=subtitle]] +[[!template text="So, by marking them, I can then hit E," start="00:05:03.101" video="mainVideo" id=subtitle]] +[[!template text="and I have all three of the tracks loaded up in this tags buffer." start="00:05:07.159" video="mainVideo" id=subtitle]] +[[!template text="On top of that, I can do EMMS tag editor," start="00:05:12.639" video="mainVideo" id=subtitle]] +[[!template text="set all, C-c C-r, and I want to set the artist." start="00:05:16.912" video="mainVideo" id=subtitle]] +[[!template text="so these are some recordings of my family." start="00:05:22.840" video="mainVideo" id=subtitle]] +[[!template text="So, Shangreaux, set all three of them." start="00:05:26.320" video="mainVideo" id=subtitle]] +[[!template text="I want to set the album:" start="00:05:31.039" video="mainVideo" id=subtitle]] +[[!template text="Spring Walk with Lap Harp." start="00:05:35.600" video="mainVideo" id=subtitle]] +[[!template text="I want to set the year." start="00:05:40.160" video="mainVideo" id=subtitle]] +[[!template text="And then I'm going to go ahead and put these in manually," start="00:05:45.520" video="mainVideo" id=subtitle]] +[[!template text="but with the power of Emacs keyboard macros" start="00:05:53.759" video="mainVideo" id=subtitle]] +[[!template text="and registers and so on. I could do this" start="00:05:56.759" video="mainVideo" id=subtitle]] +[[!template text="programmatically as well," start="00:05:59.600" video="mainVideo" id=subtitle]] +[[!template text="which would make it a lot easier" start="00:06:02.319" video="mainVideo" id=subtitle]] +[[!template text="if I had much more than three files to do this with." start="00:06:03.818" video="mainVideo" id=subtitle]] +[[!template text="Submit the changes with C-c C-c," start="00:06:07.440" video="mainVideo" id=subtitle]] +[[!template text="and now we've got the playlist." start="00:06:09.919" video="mainVideo" id=subtitle]] +[[!template text="You can see the artist and track number have been updated here." start="00:06:11.232" video="mainVideo" id=subtitle]] +[[!template new="1" text="And then the final piece of this is that" start="00:06:15.039" video="mainVideo" id=subtitle]] +[[!template text="if you look at this, you can see that" start="00:06:17.360" video="mainVideo" id=subtitle]] +[[!template text="the file name is still the same." start="00:06:18.875" video="mainVideo" id=subtitle]] +[[!template text="So if I were looking at the directory," start="00:06:20.479" video="mainVideo" id=subtitle]] +[[!template text="I would still have this file name." start="00:06:22.639" video="mainVideo" id=subtitle]] +[[!template text="When packaging these up for a release," start="00:06:24.560" video="mainVideo" id=subtitle]] +[[!template text="for people to download," start="00:06:26.479" video="mainVideo" id=subtitle]] +[[!template text="it's nice to be able to have that" start="00:06:28.000" video="mainVideo" id=subtitle]] +[[!template text="filename reflect the track number" start="00:06:30.319" video="mainVideo" id=subtitle]] +[[!template text="and the artist and so on." start="00:06:32.044" video="mainVideo" id=subtitle]] +[[!template text="So there's another command," start="00:06:33.609" video="mainVideo" id=subtitle]] +[[!template text="EMMS rename tag editor, rename," start="00:06:40.250" video="mainVideo" id=subtitle]] +[[!template text="so it could be just capital R." start="00:06:42.970" video="mainVideo" id=subtitle]] +[[!template text="I think I need to mark all of these," start="00:06:45.120" video="mainVideo" id=subtitle]] +[[!template text="hit capital R, and then it's going to ask me to confirm" start="00:06:46.991" video="mainVideo" id=subtitle]] +[[!template text="and say yes to all of them." start="00:06:50.000" video="mainVideo" id=subtitle]] +[[!template text="And now, if you look in the--" start="00:06:54.400" video="mainVideo" id=subtitle]] +[[!template text="whoops I have to update it--you'll see" start="00:07:02.720" video="mainVideo" id=subtitle]] +[[!template text="it's been updated with the artist," start="00:07:04.319" video="mainVideo" id=subtitle]] +[[!template text="track number and track name." start="00:07:06.319" video="mainVideo" id=subtitle]] +[[!template text="This format is a format string," start="00:07:11.120" video="mainVideo" id=subtitle]] +[[!template text="so it's customizable of course." start="00:07:14.432" video="mainVideo" id=subtitle]] +[[!template text="I just decided to go with the default." start="00:07:17.360" video="mainVideo" id=subtitle]] +[[!template new="1" text="So that's pretty great, this workflow just with EMMS." start="00:07:21.039" video="mainVideo" id=subtitle]] +[[!template text="I didn't have to do anything. This is all there." start="00:07:24.948" video="mainVideo" id=subtitle]] +[[!template text="It's all built in. It gave me exactly what I was looking for" start="00:07:27.585" video="mainVideo" id=subtitle]] +[[!template text="in terms of being able to process a lot of raw audio files," start="00:07:31.673" video="mainVideo" id=subtitle]] +[[!template text="add metadata to them, and get them ready for publishing." start="00:07:35.599" video="mainVideo" id=subtitle]] +[[!template text="And this is for publishing for playback" start="00:07:39.280" video="mainVideo" id=subtitle]] +[[!template text="in any media player. It'll be useful." start="00:07:41.599" video="mainVideo" id=subtitle]] +[[!template text="Not just for the web page that I'm building." start="00:07:44.026" video="mainVideo" id=subtitle]] +[[!template new="1" text="So the final part, of course, is to build the web page." start="00:07:47.639" video="mainVideo" id=subtitle]] +[[!template text="Emacs makes authoring HTML trivial." start="00:07:51.440" video="mainVideo" id=subtitle]] +[[!template text="As I was going through this," start="00:07:54.960" video="mainVideo" id=subtitle]] +[[!template text="I wanted to challenge myself and just be, like," start="00:07:57.357" video="mainVideo" id=subtitle]] +[[!template text="can I do this just all with Emacs? Can I just make this?" start="00:07:59.701" video="mainVideo" id=subtitle]] +[[!template text="I don't need a... I don't need Ruby." start="00:08:03.520" video="mainVideo" id=subtitle]] +[[!template text="I don't need Rails. I don't need Node." start="00:08:05.134" video="mainVideo" id=subtitle]] +[[!template text="I don't need any of this other stuff." start="00:08:06.707" video="mainVideo" id=subtitle]] +[[!template text="I have my tool right here. It's a fully..." start="00:08:08.528" video="mainVideo" id=subtitle]] +[[!template text="It's a whole operating system, basically," start="00:08:10.560" video="mainVideo" id=subtitle]] +[[!template text="plus programming languages." start="00:08:12.560" video="mainVideo" id=subtitle]] +[[!template text="So the first thing I started with" start="00:08:15.039" video="mainVideo" id=subtitle]] +[[!template text="was buffer scripting for manipulating text." start="00:08:17.171" video="mainVideo" id=subtitle]] +[[!template text="That's kind of the easiest way to do it." start="00:08:19.919" video="mainVideo" id=subtitle]] +[[!template text="Basically, anything you can do in a buffer," start="00:08:22.560" video="mainVideo" id=subtitle]] +[[!template text="you can do programmatically with Elisp." start="00:08:24.692" video="mainVideo" id=subtitle]] +[[!template text="So this might be a good example for beginners." start="00:08:27.834" video="mainVideo" id=subtitle]] +[[!template text="If you haven't done any Elisp yet," start="00:08:30.217" video="mainVideo" id=subtitle]] +[[!template text="a simple example is to create this div output here." start="00:08:33.919" video="mainVideo" id=subtitle]] +[[!template text="You can use this with-temp-buffer," start="00:08:39.557" video="mainVideo" id=subtitle]] +[[!template text="so basically creating an imaginary buffer." start="00:08:41.581" video="mainVideo" id=subtitle]] +[[!template text="insert is just like typing," start="00:08:44.240" video="mainVideo" id=subtitle]] +[[!template text="so you put strings in, you put new lines in," start="00:08:45.945" video="mainVideo" id=subtitle]] +[[!template text="you can build some strings together." start="00:08:48.800" video="mainVideo" id=subtitle]] +[[!template text="Here you can see I'm doing a random number," start="00:08:50.959" video="mainVideo" id=subtitle]] +[[!template text="so every time I execute this," start="00:08:53.551" video="mainVideo" id=subtitle]] +[[!template text="my content changes." start="00:08:55.360" video="mainVideo" id=subtitle]] +[[!template text="I can generate dynamic content in HTML blocks with Elisp." start="00:08:56.790" video="mainVideo" id=subtitle]] +[[!template new="1" text="For my web page builder, it's a little more complex." start="00:09:03.685" video="mainVideo" id=subtitle]] +[[!template text="I'm pulling data out" start="00:09:06.493" video="mainVideo" id=subtitle]] +[[!template text="using EMMS data structures," start="00:09:08.000" video="mainVideo" id=subtitle]] +[[!template text="so it's pulling that out from the track data." start="00:09:12.080" video="mainVideo" id=subtitle]] +[[!template text="And then I'm using some program to" start="00:09:16.080" video="mainVideo" id=subtitle]] +[[!template text="generate list elements, so each track is" start="00:09:19.440" video="mainVideo" id=subtitle]] +[[!template text="going to have the title and track number," start="00:09:21.440" video="mainVideo" id=subtitle]] +[[!template text="and then a button for playing it," start="00:09:24.086" video="mainVideo" id=subtitle]] +[[!template text="plus the source of the audio file," start="00:09:25.869" video="mainVideo" id=subtitle]] +[[!template text="which will get added here." start="00:09:28.206" video="mainVideo" id=subtitle]] +[[!template text="Right now, this is hard coded for Opus," start="00:09:30.480" video="mainVideo" id=subtitle]] +[[!template text="so it won't work for my MP3s." start="00:09:32.485" video="mainVideo" id=subtitle]] +[[!template text="I'm going to skip over snippets." start="00:09:37.200" video="mainVideo" id=subtitle]] +[[!template text="Turns out format strings were good enough for me." start="00:09:38.867" video="mainVideo" id=subtitle]] +[[!template text="Snippets could be useful," start="00:09:42.017" video="mainVideo" id=subtitle]] +[[!template text="but format is super powerful," start="00:09:45.035" video="mainVideo" id=subtitle]] +[[!template text="and I didn't really even need all that much power," start="00:09:47.267" video="mainVideo" id=subtitle]] +[[!template text="basically, just doing string interpolation." start="00:09:49.839" video="mainVideo" id=subtitle]] +[[!template text="So if you haven't seen format before," start="00:09:52.187" video="mainVideo" id=subtitle]] +[[!template text="you basically put these control strings" start="00:09:54.560" video="mainVideo" id=subtitle]] +[[!template text="or control characters inside of a string," start="00:09:56.720" video="mainVideo" id=subtitle]] +[[!template text="and you can generate an output string that you want." start="00:09:59.120" video="mainVideo" id=subtitle]] +[[!template text="So in my generator code, basically," start="00:10:05.040" video="mainVideo" id=subtitle]] +[[!template text="it's down here," start="00:10:07.344" video="mainVideo" id=subtitle]] +[[!template text="I'm calling format with this Bard Bivou(m)acs template," start="00:10:08.720" video="mainVideo" id=subtitle]] +[[!template text="and that's basically a big string of HTML." start="00:10:12.800" video="mainVideo" id=subtitle]] +[[!template text="It's just my whole page of HTML" start="00:10:17.491" video="mainVideo" id=subtitle]] +[[!template text="with those control characters in just four places." start="00:10:21.200" video="mainVideo" id=subtitle]] +[[!template text="One of them populates the track list." start="00:10:24.399" video="mainVideo" id=subtitle]] +[[!template text="That's really the meat of the program." start="00:10:26.399" video="mainVideo" id=subtitle]] +[[!template text="Again, this is a combination of using buffer scripting, using HTML mode," start="00:10:29.760" video="mainVideo" id=subtitle]] +[[!template text="inserting text format strings," start="00:10:34.746" video="mainVideo" id=subtitle]] +[[!template text="and then I can indent-region" start="00:10:37.279" video="mainVideo" id=subtitle]] +[[!template text="so the HTML actually looks pretty" start="00:10:39.251" video="mainVideo" id=subtitle]] +[[!template text="when it comes out of it as well." start="00:10:41.920" video="mainVideo" id=subtitle]] +[[!template text="I will show that, just really quick actually." start="00:10:45.200" video="mainVideo" id=subtitle]] +[[!template text="So you can see, this is the HTML that got generated." start="00:10:54.000" video="mainVideo" id=subtitle]] +[[!template text="I've got my template." start="00:10:57.540" video="mainVideo" id=subtitle]] +[[!template text="I inserted the title here, the style," start="00:10:58.800" video="mainVideo" id=subtitle]] +[[!template text="the font was all inserted," start="00:11:02.193" video="mainVideo" id=subtitle]] +[[!template text="and then this whole list of of tracks here." start="00:11:05.760" video="mainVideo" id=subtitle]] +[[!template text="It's kind of messy to look at," start="00:11:07.920" video="mainVideo" id=subtitle]] +[[!template text="but this track list, this whole div here," start="00:11:11.200" video="mainVideo" id=subtitle]] +[[!template text="is all generated by my generator code, and it works. It's great." start="00:11:14.399" video="mainVideo" id=subtitle]] +[[!template text="Okay, moving on." start="00:11:22.480" video="mainVideo" id=subtitle]] +[[!template new="1" text="So the other thing was that as I was developing this," start="00:11:27.120" video="mainVideo" id=subtitle]] +[[!template text="I decided to use Org Babel" start="00:11:30.945" video="mainVideo" id=subtitle]] +[[!template text="and some of its features for multi-language things" start="00:11:32.547" video="mainVideo" id=subtitle]] +[[!template text="because I needed to style it with CSS" start="00:11:35.588" video="mainVideo" id=subtitle]] +[[!template text="and put actions in Javascript," start="00:11:37.839" video="mainVideo" id=subtitle]] +[[!template text="and also I used SVG for authoring stuff." start="00:11:39.835" video="mainVideo" id=subtitle]] +[[!template text="It was a little bit complicated." start="00:11:42.480" video="mainVideo" id=subtitle]] +[[!template text="It probably would have been simpler" start="00:11:46.079" video="mainVideo" id=subtitle]] +[[!template text="had I not used Org Babel," start="00:11:47.484" video="mainVideo" id=subtitle]] +[[!template text="but it's also really fun." start="00:11:48.680" video="mainVideo" id=subtitle]] +[[!template text="I think it's a cool, cool idea to use literate programming." start="00:11:49.894" video="mainVideo" id=subtitle]] +[[!template text="My idea was to create HTML components." start="00:11:53.663" video="mainVideo" id=subtitle]] +[[!template text="I could name it like this," start="00:11:57.001" video="mainVideo" id=subtitle]] +[[!template text="put a format string inside it," start="00:11:59.519" video="mainVideo" id=subtitle]] +[[!template text="and build a function" start="00:12:00.959" video="mainVideo" id=subtitle]] +[[!template text="in Elisp to format it" start="00:12:02.800" video="mainVideo" id=subtitle]] +[[!template text="and spit out the HTML that I want." start="00:12:04.302" video="mainVideo" id=subtitle]] +[[!template text="By doing this, then," start="00:12:07.120" video="mainVideo" id=subtitle]] +[[!template text="I can just change things in my Org file," start="00:12:09.581" video="mainVideo" id=subtitle]] +[[!template text="which, not getting a whole lot of time to work on it," start="00:12:12.388" video="mainVideo" id=subtitle]] +[[!template text="I can come back to it" start="00:12:14.814" video="mainVideo" id=subtitle]] +[[!template text="and I have a lot of notes." start="00:12:16.615" video="mainVideo" id=subtitle]] +[[!template text="I can kind of generate things as I'm going" start="00:12:19.335" video="mainVideo" id=subtitle]] +[[!template text="and keep notes for myself, and keep the..." start="00:12:21.695" video="mainVideo" id=subtitle]] +[[!template text="I don't know. It's cool." start="00:12:24.399" video="mainVideo" id=subtitle]] +[[!template text="Literate programming is fun." start="00:12:25.308" video="mainVideo" id=subtitle]] +[[!template text="So I don't need to" start="00:12:26.672" video="mainVideo" id=subtitle]] +[[!template text="go into that too much, but you can see if" start="00:12:27.519" video="mainVideo" id=subtitle]] +[[!template text="I execute this here," start="00:12:29.279" video="mainVideo" id=subtitle]] +[[!template text="I get the the div that I want." start="00:12:31.040" video="mainVideo" id=subtitle]] +[[!template text="It's a little bit funny." start="00:12:32.983" video="mainVideo" id=subtitle]] +[[!template text="You'll see I have the string like this," start="00:12:34.013" video="mainVideo" id=subtitle]] +[[!template text="the way that noweb expands, I can't do this on a single line." start="00:12:35.786" video="mainVideo" id=subtitle]] +[[!template text="It looks funny when you do that," start="00:12:40.000" video="mainVideo" id=subtitle]] +[[!template text="so that might be something to work out later." start="00:12:43.839" video="mainVideo" id=subtitle]] +[[!template text="CSS blocks can either be tangled out" start="00:12:45.931" video="mainVideo" id=subtitle]] +[[!template text="and referenced in the HTML source, or inlined." start="00:12:48.959" video="mainVideo" id=subtitle]] +[[!template text="Here's an example I have of inlining it." start="00:12:52.639" video="mainVideo" id=subtitle]] +[[!template text="So I've got my little CSS block named style," start="00:12:54.639" video="mainVideo" id=subtitle]] +[[!template text="Javascript named script," start="00:12:57.609" video="mainVideo" id=subtitle]] +[[!template text="and then I've got this HTML source block" start="00:13:00.320" video="mainVideo" id=subtitle]] +[[!template text="with noweb expansion." start="00:13:03.040" video="mainVideo" id=subtitle]] +[[!template text="These double angle brackets here" start="00:13:04.839" video="mainVideo" id=subtitle]] +[[!template text="are where I'm going to expand" start="00:13:07.920" video="mainVideo" id=subtitle]] +[[!template text="the block named style. I'm actually calling a function," start="00:13:09.396" video="mainVideo" id=subtitle]] +[[!template text="so I want the result of the function here," start="00:13:12.639" video="mainVideo" id=subtitle]] +[[!template text="and then the script will just get expanded here." start="00:13:14.737" video="mainVideo" id=subtitle]] +[[!template text="So org-babel-expand-src-block," start="00:13:18.881" video="mainVideo" id=subtitle]] +[[!template text="you can see what it looks like." start="00:13:22.959" video="mainVideo" id=subtitle]] +[[!template text="I've got my style here. I've got my title." start="00:13:25.360" video="mainVideo" id=subtitle]] +[[!template text="I've got that main content class I showed before," start="00:13:28.160" video="mainVideo" id=subtitle]] +[[!template text="and the script as well. So that's kind of cool." start="00:13:31.279" video="mainVideo" id=subtitle]] +[[!template text="I could just run org-babel-tangle and get my thing out" start="00:13:34.480" video="mainVideo" id=subtitle]] +[[!template text="and just edit one file instead of multiple files." start="00:13:37.527" video="mainVideo" id=subtitle]] +[[!template text="Not for everyone, but I thought it was kind of fun. All right." start="00:13:40.480" video="mainVideo" id=subtitle]] +[[!template new="1" text="Oh, and the final thing is that in Emacs," start="00:13:46.455" video="mainVideo" id=subtitle]] +[[!template text="you can author and view SVG." start="00:13:48.807" video="mainVideo" id=subtitle]] +[[!template text="So this is just an Org. This SVG, I used to make the play and pause buttons." start="00:13:51.320" video="mainVideo" id=subtitle]] +[[!template text="I didn't know this," start="00:13:58.297" video="mainVideo" id=subtitle]] +[[!template text="but if you edit an SVG file," start="00:13:59.519" video="mainVideo" id=subtitle]] +[[!template text="you can toggle back and forth" start="00:14:02.162" video="mainVideo" id=subtitle]] +[[!template text="between the code and the image." start="00:14:08.800" video="mainVideo" id=subtitle]] +[[!template text="It's pretty sweet. So I can iteratively" start="00:14:13.199" video="mainVideo" id=subtitle]] +[[!template text="work through this because of how Emacs is." start="00:14:17.360" video="mainVideo" id=subtitle]] +[[!template new="1" text="Final considerations here," start="00:14:20.560" video="mainVideo" id=subtitle]] +[[!template text="like when doing this," start="00:14:24.959" video="mainVideo" id=subtitle]] +[[!template text="I want it to be all free," start="00:14:26.247" video="mainVideo" id=subtitle]] +[[!template text="so I want to use fonts that use a free license." start="00:14:27.606" video="mainVideo" id=subtitle]] +[[!template text="I found GNU Unifont. It's kind of cool." start="00:14:30.079" video="mainVideo" id=subtitle]] +[[!template text="The content license..." start="00:14:32.800" video="mainVideo" id=subtitle]] +[[!template text="I chose Creative Commons Attribution ShareAlike," start="00:14:34.333" video="mainVideo" id=subtitle]] +[[!template text="which is kind of like the GPL." start="00:14:37.600" video="mainVideo" id=subtitle]] +[[!template text="Ideally, I could serve it with Emacs." start="00:14:39.920" video="mainVideo" id=subtitle]] +[[!template text="I'd like to remove idiosyncrasy so other people can use it." start="00:14:42.663" video="mainVideo" id=subtitle]] +[[!template text="It's pretty much just my tool right now." start="00:14:46.320" video="mainVideo" id=subtitle]] +[[!template text="Not requiring the web browser..." start="00:14:48.720" video="mainVideo" id=subtitle]] +[[!template text="I can ship playlists so that you can just click or link to a playlist" start="00:14:50.734" video="mainVideo" id=subtitle]] +[[!template text="on your favorite player, even EMMS if you want," start="00:14:56.648" video="mainVideo" id=subtitle]] +[[!template text="and then packing up those albums in like a ZIP or .tar file." start="00:15:00.068" video="mainVideo" id=subtitle]] +[[!template new="1" text="So you can go to churls.world ." start="00:15:04.320" video="mainVideo" id=subtitle]] +[[!template text="It just has a link to this album." start="00:15:08.639" video="mainVideo" id=subtitle]] +[[!template text="I'll display it here in just a second." start="00:15:10.644" video="mainVideo" id=subtitle]] +[[!template text="You can contact me. I'm shoshin on #emacs" start="00:15:14.000" video="mainVideo" id=subtitle]] +[[!template text="in IRC and on sourcehut. You can email me:" start="00:15:17.519" video="mainVideo" id=subtitle]] +[[!template text="grant@churls.world, personal, or" start="00:15:21.040" video="mainVideo" id=subtitle]] +[[!template text="grant@unabridgedsoftware.com. All right, now." start="00:15:23.680" video="mainVideo" id=subtitle]] +[[!template text="Let's see about this..." start="00:15:26.800" video="mainVideo" id=subtitle]] +[[!template text="This is up online, so if you want to listen" start="00:15:32.079" video="mainVideo" id=subtitle]] +[[!template text="to my college band's album from 20 years ago," start="00:15:34.316" video="mainVideo" id=subtitle]] +[[!template text="here it is: Cassiopeia Basement Days." start="00:15:39.199" video="mainVideo" id=subtitle]] +[[!template text="Whoops. I made this art in Krita." start="00:15:43.040" video="mainVideo" id=subtitle]] +[[!template text="You can press play. You can skip around." start="00:15:46.887" video="mainVideo" id=subtitle]] +[[!template text="I do have the playlist up here too." start="00:15:51.199" video="mainVideo" id=subtitle]] +[[!template text="So yeah, thanks for listening." start="00:15:55.040" video="mainVideo" id=subtitle]] +[[!template text="I hope you enjoyed it, and enjoy the rest of EmacsConf. Goodbye!" start="00:15:58.560" video="mainVideo" id=subtitle]] <!-- transcript: 2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt --> <a name="transcript-questions"></a> -# Transcript: Q&A - -So first question, what does Bard Bivou(m)acs mean? Good question. In -one version of my talk, I spent too long explaining it, and decided to -cut it out. It's basically a bad pun on band camp. A bivouac--I don't -even know if I'm pronouncing that correctly--it's like a tent or a -camp that you put up hastily, and a bard is a musician, of course. -Yeah, I don't know. I like puns. I'm a dad. That's the best I could -come up with. I'll probably find a different name for it but I liked -that "bivoaucs," if you stick an m in there, it becomes Bivou(m)acs. -It's kind of like editor macros for generating some HTML. Yes, it is -confusing, chatting on IRC at the same time. Great question. (Amin: -Grant, so right now, you're sharing your screen. Are you planning on -showing something with it, or for example, should I maximize you?) I -don't know. I can turn it off for now. Okay. (Amin: You can turn on -the webcam.) Yeah, okay. (Amin: I'll maximize your webcam.) Okay, -thanks. I'll get to the answer for my color theme here in a bit in -IRC. - -(<a href="#qnaVideo" class="time-link">1:31</a>) -Next question on the Etherpad, does this metadata workflow also -support unsynchronized lyrics within ID3 tags, multi-line metadata? I -don't know, actually. It's funny because I was trying out different -things with metadata, and really the biggest thing was to figure out -how to do mass tag editing. And that was like... It wasn't very -intuitive, like I said, with EMMS. I think EMMS is really great, but -its interface is huge. like if you do M-x and type emms, you get I -don't know, 270-some candidates. There's a lot of functions going on. -I basically found the features that I needed to get this workflow -working. I would guess that you probably can do it, and if you don't, -if you can't do it out of the box, I think you could script EMMS to do -that. I'd like to know more, and I'm certainly going to be -investigating it. I will try and post my findings somewhere online. - -(<a href="#qnaVideo" class="time-link">2:39</a>) -Is it possible to import batch metadata? I'm not sure. I would -guess yes is the answer. EMMS can connect to metadata services. I -haven't done that because I was just using audio files that I created -myself. I know that on the back end, it calls out to shell programs -for tagging things. there's a lot of different options that can shell -out too. I was using the the vorbis tools to tag the particular files -I was working with. You can also use tiny tag, and there's some -other... That might be the python library. I can't remember. There's -two other libraries that I can shell out to for doing metadata. - -(<a href="#qnaVideo" class="time-link">3:24</a>) -My current workflow for tagging music is to first apply replay -gain in fubar 2000, fix egregious mistakes, use beats to apply -metadata from music brains, or discogs, go over remaining albums with -fubar 2000 again. Is there a chance textual tagging could allow doing -it all in one program? Have I experimented with mass tag update -queries? I have not. Again, I was just doing this workflow, taking raw -files with no tags and doing that. I believe because it calls out to -the programs in the back end, I'm sure you could work that out. I -think EMMS would benefit from having something like that because we -work with text, and being able to use Emacs as a front end for those -updates would be really fantastic. So really, it's just a matter of -writing the interface to the external tool. - -(<a href="#qnaVideo" class="time-link">4:22</a>) -Is there a link to some info expanding philosophy of how to -compensate musicians? No, I don't really have a lot of philosophy -around that. I guess the first thing I could say would be something -like a universal income. I feel like that would solve a lot of -problems, if musicians could just be musicians and not have to worry -about their pay. I will think about it more. This is one of my first -forays into getting public with some of these ideas, so I will try to -do more and let the community know. - -(<a href="#qnaVideo" class="time-link">4:54</a>) -What Emacs theme am I using? Can't remember. It's one of the -Kaolin themes. I think it was Aurora or or Bubble Gum, maybe, but the -Kaolin themes are nice. I recommend them. Not using Doom Emacs, Doom -mode line though. It's very pretty. - -(<a href="#qnaVideo" class="time-link">5:17</a>) -SVG support built into Emacs? I'm using Emacs 27.1, and yes, -SVG support is built in. I may have had to compile it with some Cairo -support. I don't remember for sure. But yes, you can even take -screenshots of your Emacs from within Emacs in SVG. It's pretty great. -I don't know how much more time we have left for questions. That's -most of the things on the etherpad. (Amin: I think we have like 10 -more minutes to catch up with the schedule. If there are more -questions, feel free to answer them.) I'll start looking through IRC. -(Amin: And keep an eye on the pad too.) Thank you all for listening -and for enjoying the talk. I'm glad it turned out well. Awesome. Yeah, -it's been fun so far. How did I manage? I can post a snippet of that, -or actually I can share my screen, can't I... Okay. I actually have it -up right here. - -(<a href="#qnaVideo" class="time-link">6:49</a>) -So I think I got this from alphapapa, to be honest. I define -screenshot-svg. It's an interactive command. Oh yeah, there's -alphae.papa Okay, there we go. I would like to change this so that I -can get it into the copy-paste buffer so I don't have to copy the file -in, but I haven't really hacked on it yet. - -(<a href="#qnaVideo" class="time-link">7:20</a>) -Okay, org heading colors. That might be a good question. I know, the -presentation... Sorry, it's hard to think and type at the same time. -Think and talk and type. - -(<a href="#qnaVideo" class="time-link">7:41</a>) -So the presentation is just a normal org file, right, so I have my -headers, and the author--you can even stick your email and other -headers in there. But there's a package called org-tree-slide. Whoops, -why is it not... I must have not required it. Good question. (Amin: -Grant, can you try sharing your screen maybe?) Oh, is it not shared? -I'm sorry. (Amin: Thank you.) There we go, should be coming up. (Amin: -It's coming up. Yep, we see it.) Awesome. All right. Okay. I don't -know why this isn't working. It was working. Okay, you want to see the -screenshot. Whoops. Okay, I just took a screenshot. So, org-tree-slide. -I don't know why it's not launching. I thought that I had required it, -but I must not have. Maybe I'll try. Okay. So there we go. So -org-tree-slide is a way that basically uses narrowing and some kind of -font tricks to... it changes your titles or your metadata into this -banner for the title here, and it automatically sets the faces for -you. You can customize that, of course. And then, as you go through -the Org file, you get these kind of nice animations and-- what's it -called--breadcrumbs up at the top. So org-tree-slide. I highly -recommend it. It's really nice because you can give your presentation -and practice it, and while you're practicing it, you can edit things -as well, because it's still just an Org document using narrowing, you -know. It doesn't actually change anything. Definitely recommend -org-tree-slide mode. Okay, let's see, what else... - -(<a href="#qnaVideo" class="time-link">10:29</a>) -Share my screen to demo. Oh, that's the SVG. Let's see. Okay, so I -don't know if you can see this now, but I'm actually viewing the SVG -screenshot that I took with Emacs. See here's the source of it. So -Emacs made that. And here's the image. It's cool because you can even -do it again and again, and open more screenshots of screenshots. Yeah, -definitely Emacsception. Fun stuff. Anything else in chat? Heading -colors? Oh, yeah. I talked about the themes. This is another Kaolin -theme. I think the one in the talk was maybe this one, Aurora. Oh, -here, there's something funny when you start org-tree-slide with a -different theme. This top header bar gets the faces from that previous -theme. I have not figured out how to fix that yet. Did I have to -compile to get the screenshot? I think maybe I did. Yes, if I'm -remembering correctly. I got Emacs 27. I'm not on a Mac. I saw -alphapapa's comment on reddit, and then I recompiled it with Cairo -support. Yes. - -(<a href="#qnaVideo" class="time-link">12:18</a>) -Okay, lots of good conversation on here. Yep, I have like one or two -more minutes. Okay I guess while I'm here, I might as well say thank -you to the organizers. I really appreciate everybody's work on this. -It's fun to be a part of this community. I'm enjoying the other talks -I've seen so far today, and I'm looking forward to to the rest. It's -really interesting, just from being on Emacs in IRC for a few months, -I've already connected with a lot of interesting people and have a lot -of cool connections already. (Amin: Thank you for being a part of the -community, Grant.) That's good to be here. I have another talk -tomorrow as well. Oh, thanks for everyone in the Etherpad for putting -more comments on these questions here and taking the notes. (Amin: I -think that's about all the time that we have for the Q&A. Okay. Thank -you again so much, Grant, for your awesome talk and for popping in for -questions.) Yeah, thanks again for hosting. See you later. Cheers! - -<!-- /transcript --> +# Transcript (questions) + +[[!template new="1" text="So first question, what does Bard Bivou(m)acs mean? Good question." start="00:00:03.360" video="qnaVideo" id=subtitle]] +[[!template text="In one version of my talk, I spent too long explaining it," start="00:00:07.440" video="qnaVideo" id=subtitle]] +[[!template text="and decided to cut it out." start="00:00:10.800" video="qnaVideo" id=subtitle]] +[[!template text="It's basically a bad pun on band camp." start="00:00:14.559" video="qnaVideo" id=subtitle]] +[[!template text="A bivouac--I don't even know if I'm" start="00:00:20.960" video="qnaVideo" id=subtitle]] +[[!template text="pronouncing that correctly--it's like" start="00:00:22.480" video="qnaVideo" id=subtitle]] +[[!template text="a tent or a camp that you put up hastily," start="00:00:25.199" video="qnaVideo" id=subtitle]] +[[!template text="and a bard is a musician, of course." start="00:00:29.199" video="qnaVideo" id=subtitle]] +[[!template text="Yeah, I don't know. I like puns. I'm a dad." start="00:00:32.239" video="qnaVideo" id=subtitle]] +[[!template text="That's the best I could come up with." start="00:00:36.480" video="qnaVideo" id=subtitle]] +[[!template text="I'll probably find a different name for" start="00:00:40.960" video="qnaVideo" id=subtitle]] +[[!template text="it but I liked that "bivoaucs,"" start="00:00:42.879" video="qnaVideo" id=subtitle]] +[[!template text="if you stick an m in there, it becomes Bivou(m)acs." start="00:00:45.039" video="qnaVideo" id=subtitle]] +[[!template text="It's kind of like editor macros for generating some HTML." start="00:00:48.719" video="qnaVideo" id=subtitle]] +[[!template text="Yes, it is confusing, chatting on IRC at the same time. Great question." start="00:01:00.160" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: Grant, so right now, you're sharing your screen." start="00:01:07.782" video="qnaVideo" id=subtitle]] +[[!template text="Are you planning on showing something with it, or for example," start="00:01:11.398" video="qnaVideo" id=subtitle]] +[[!template text="should I maximize you?)" start="00:01:14.479" video="qnaVideo" id=subtitle]] +[[!template text="I don't know. I can turn it off for now. Okay." start="00:01:16.036" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: You can turn on the webcam.)" start="00:01:20.400" video="qnaVideo" id=subtitle]] +[[!template text="Yeah, okay." start="00:01:22.299" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: I'll maximize your webcam.)" start="00:01:22.880" video="qnaVideo" id=subtitle]] +[[!template text="Okay, thanks." start="00:01:25.694" video="qnaVideo" id=subtitle]] +[[!template text="I'll get to the answer for my color" start="00:01:28.240" video="qnaVideo" id=subtitle]] +[[!template text="theme here in a bit in IRC." start="00:01:30.000" video="qnaVideo" id=subtitle]] +[[!template new="1" text="Next question on the Etherpad," start="00:01:31.360" video="qnaVideo" id=subtitle]] +[[!template text="does this metadata workflow also support" start="00:01:35.105" video="qnaVideo" id=subtitle]] +[[!template text="unsynchronized lyrics within ID3 tags," start="00:01:38.479" video="qnaVideo" id=subtitle]] +[[!template text="multi-line metadata?" start="00:01:41.360" video="qnaVideo" id=subtitle]] +[[!template text="I don't know, actually." start="00:01:42.720" video="qnaVideo" id=subtitle]] +[[!template text="It's funny because I was trying out" start="00:01:45.920" video="qnaVideo" id=subtitle]] +[[!template text="different things with metadata," start="00:01:47.920" video="qnaVideo" id=subtitle]] +[[!template text="and really the biggest thing was to" start="00:01:49.280" video="qnaVideo" id=subtitle]] +[[!template text="figure out how to do mass tag editing." start="00:01:52.640" video="qnaVideo" id=subtitle]] +[[!template text="And that was like..." start="00:01:55.360" video="qnaVideo" id=subtitle]] +[[!template text="It wasn't very intuitive, like I said, with EMMS." start="00:01:56.399" video="qnaVideo" id=subtitle]] +[[!template text="I think EMMS is really great, but its interface is huge." start="00:01:59.600" video="qnaVideo" id=subtitle]] +[[!template text="like if you do M-x and type emms, you get," start="00:02:03.040" video="qnaVideo" id=subtitle]] +[[!template text="I don't know, 270-some candidates." start="00:02:07.040" video="qnaVideo" id=subtitle]] +[[!template text="There's a lot of functions going on." start="00:02:10.160" video="qnaVideo" id=subtitle]] +[[!template text="I basically found the features that I needed to get this workflow working." start="00:02:13.200" video="qnaVideo" id=subtitle]] +[[!template text="I would guess that you probably can do it, and if you don't," start="00:02:18.879" video="qnaVideo" id=subtitle]] +[[!template text="if you can't do it out of the box," start="00:02:22.160" video="qnaVideo" id=subtitle]] +[[!template text="I think you could script EMMS to do that." start="00:02:24.026" video="qnaVideo" id=subtitle]] +[[!template text="I'd like to know more, and I'm certainly going to be investigating it." start="00:02:28.160" video="qnaVideo" id=subtitle]] +[[!template text="I will try and post my findings somewhere online." start="00:02:33.268" video="qnaVideo" id=subtitle]] +[[!template new="1" text="Is it possible to import batch metadata?" start="00:02:39.519" video="qnaVideo" id=subtitle]] +[[!template text="I'm not sure. I would guess yes is the answer." start="00:02:42.080" video="qnaVideo" id=subtitle]] +[[!template text="EMMS can connect to metadata services." start="00:02:46.496" video="qnaVideo" id=subtitle]] +[[!template text="I haven't done that because I was just" start="00:02:50.712" video="qnaVideo" id=subtitle]] +[[!template text="using audio files that I created myself." start="00:02:53.040" video="qnaVideo" id=subtitle]] +[[!template text="I know that on the back end, it calls out" start="00:02:56.959" video="qnaVideo" id=subtitle]] +[[!template text="to shell programs for tagging things." start="00:03:00.165" video="qnaVideo" id=subtitle]] +[[!template text="There's a lot of different options that can shell out too." start="00:03:02.319" video="qnaVideo" id=subtitle]] +[[!template text="I was using the vorbis tools to tag the particular files I was working with." start="00:03:06.165" video="qnaVideo" id=subtitle]] +[[!template text="You can also use tiny tag, and there's some other..." start="00:03:12.239" video="qnaVideo" id=subtitle]] +[[!template text="That might be the python library." start="00:03:15.840" video="qnaVideo" id=subtitle]] +[[!template text="I can't remember. There's two other libraries that I can shell out to" start="00:03:17.498" video="qnaVideo" id=subtitle]] +[[!template text="for doing metadata." start="00:03:20.971" video="qnaVideo" id=subtitle]] +[[!template new="1" text="My current workflow for tagging music is" start="00:03:24.400" video="qnaVideo" id=subtitle]] +[[!template text="to first apply replay gain in fubar 2000," start="00:03:26.400" video="qnaVideo" id=subtitle]] +[[!template text="fix egregious mistakes," start="00:03:29.040" video="qnaVideo" id=subtitle]] +[[!template text="use beats to apply metadata from music brains or discogs," start="00:03:31.119" video="qnaVideo" id=subtitle]] +[[!template text="go over remaining albums with fubar 2000 again." start="00:03:35.118" video="qnaVideo" id=subtitle]] +[[!template text="Is there a chance textual tagging could allow doing it all in one program?" start="00:03:38.400" video="qnaVideo" id=subtitle]] +[[!template text="Have I experimented with mass tag update queries?" start="00:03:43.280" video="qnaVideo" id=subtitle]] +[[!template text="I have not." start="00:03:46.400" video="qnaVideo" id=subtitle]] +[[!template text="Again, I was just doing this workflow," start="00:03:47.280" video="qnaVideo" id=subtitle]] +[[!template text="taking raw files with no tags and doing that." start="00:03:49.120" video="qnaVideo" id=subtitle]] +[[!template text="I believe because it calls out to" start="00:03:54.799" video="qnaVideo" id=subtitle]] +[[!template text="the programs in the back end," start="00:03:58.159" video="qnaVideo" id=subtitle]] +[[!template text="I'm sure you could work that out." start="00:04:00.811" video="qnaVideo" id=subtitle]] +[[!template text="I think EMMS would benefit from" start="00:04:03.040" video="qnaVideo" id=subtitle]] +[[!template text="having something like that because" start="00:04:06.159" video="qnaVideo" id=subtitle]] +[[!template text="we work with text, and being able" start="00:04:08.239" video="qnaVideo" id=subtitle]] +[[!template text="to use Emacs as a front end for those" start="00:04:11.280" video="qnaVideo" id=subtitle]] +[[!template text="updates would be really fantastic." start="00:04:14.000" video="qnaVideo" id=subtitle]] +[[!template text="So really, it's just a matter of" start="00:04:16.647" video="qnaVideo" id=subtitle]] +[[!template text="writing the interface to the external tool." start="00:04:18.560" video="qnaVideo" id=subtitle]] +[[!template new="1" text="Is there a link to some info expanding" start="00:04:22.720" video="qnaVideo" id=subtitle]] +[[!template text="philosophy of how to compensate musicians?" start="00:04:24.560" video="qnaVideo" id=subtitle]] +[[!template text="No, I don't really have a lot of" start="00:04:28.479" video="qnaVideo" id=subtitle]] +[[!template text="philosophy around that." start="00:04:31.199" video="qnaVideo" id=subtitle]] +[[!template text="I guess the first thing I could say would be" start="00:04:32.052" video="qnaVideo" id=subtitle]] +[[!template text="something like a universal income." start="00:04:33.919" video="qnaVideo" id=subtitle]] +[[!template text="I feel like that would solve a lot of problems," start="00:04:36.378" video="qnaVideo" id=subtitle]] +[[!template text="if musicians could just be musicians" start="00:04:38.960" video="qnaVideo" id=subtitle]] +[[!template text="and not have to worry about their pay." start="00:04:41.772" video="qnaVideo" id=subtitle]] +[[!template text="I will think about it more." start="00:04:44.742" video="qnaVideo" id=subtitle]] +[[!template text="This is one of my first forays into getting public with some of these ideas," start="00:04:46.240" video="qnaVideo" id=subtitle]] +[[!template text="so I will try to do more" start="00:04:52.015" video="qnaVideo" id=subtitle]] +[[!template text="and let the community know." start="00:04:53.360" video="qnaVideo" id=subtitle]] +[[!template new="1" text="What Emacs theme am I using?" start="00:04:55.187" video="qnaVideo" id=subtitle]] +[[!template text="Can't remember. It's one of the Kaolin themes." start="00:04:57.199" video="qnaVideo" id=subtitle]] +[[!template text="I think it was Aurora" start="00:05:02.240" video="qnaVideo" id=subtitle]] +[[!template text="or Bubble Gum, maybe, but the" start="00:05:05.680" video="qnaVideo" id=subtitle]] +[[!template text="Kaolin themes are nice. I recommend them." start="00:05:09.120" video="qnaVideo" id=subtitle]] +[[!template text="Not using Doom Emacs, Doom mode line though." start="00:05:12.880" video="qnaVideo" id=subtitle]] +[[!template text="It's very pretty." start="00:05:16.000" video="qnaVideo" id=subtitle]] +[[!template new="1" text="SVG support built into Emacs?" start="00:05:17.296" video="qnaVideo" id=subtitle]] +[[!template text="I'm using Emacs 27.1, and yes, SVG support is built in." start="00:05:20.080" video="qnaVideo" id=subtitle]] +[[!template text="I may have had to compile it with some Cairo support." start="00:05:25.520" video="qnaVideo" id=subtitle]] +[[!template text="I don't remember for sure." start="00:05:30.639" video="qnaVideo" id=subtitle]] +[[!template text="But yes, you can even take screenshots of your Emacs from within Emacs, in SVG." start="00:05:33.840" video="qnaVideo" id=subtitle]] +[[!template text="It's pretty great." start="00:05:41.199" video="qnaVideo" id=subtitle]] +[[!template text="I don't know how much more time we have" start="00:05:44.320" video="qnaVideo" id=subtitle]] +[[!template text="left for questions." start="00:05:46.160" video="qnaVideo" id=subtitle]] +[[!template text="That's most of the things on the etherpad." start="00:05:48.000" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: I think we have like 10 more minutes to" start="00:05:52.639" video="qnaVideo" id=subtitle]] +[[!template text="catch up with the schedule." start="00:05:54.320" video="qnaVideo" id=subtitle]] +[[!template text="If there are more questions," start="00:05:56.479" video="qnaVideo" id=subtitle]] +[[!template text="feel free to answer them.)" start="00:05:59.120" video="qnaVideo" id=subtitle]] +[[!template text="I'll start looking through IRC." start="00:06:01.919" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: And keep an eye on the pad too.)" start="00:06:05.440" video="qnaVideo" id=subtitle]] +[[!template text="Thank you all for listening" start="00:06:09.680" video="qnaVideo" id=subtitle]] +[[!template text="and for enjoying the talk. I'm glad it turned out well." start="00:06:12.688" video="qnaVideo" id=subtitle]] +[[!template text="Awesome. Yeah, it's been fun so far." start="00:06:19.440" video="qnaVideo" id=subtitle]] +[[!template text="How did I manage? I can post a snippet of that," start="00:06:36.000" video="qnaVideo" id=subtitle]] +[[!template text="or actually I can share my screen, can't I..." start="00:06:40.015" video="qnaVideo" id=subtitle]] +[[!template text="Okay. I actually have it up right here." start="00:06:46.319" video="qnaVideo" id=subtitle]] +[[!template new="1" text="So I think I got this from alphapapa, to be honest." start="00:06:49.599" video="qnaVideo" id=subtitle]] +[[!template text="I define screenshot-svg." start="00:06:53.440" video="qnaVideo" id=subtitle]] +[[!template text="It's an interactive command. Oh yeah, there's alphapapa." start="00:07:00.960" video="qnaVideo" id=subtitle]] +[[!template text="Okay, there we go." start="00:07:04.960" video="qnaVideo" id=subtitle]] +[[!template text="I would like to change this so that I can get it into the copy-paste buffer" start="00:07:08.560" video="qnaVideo" id=subtitle]] +[[!template text="so I don't have to copy the file in, but I haven't really hacked on it yet." start="00:07:13.249" video="qnaVideo" id=subtitle]] +[[!template new="1" text="Okay, org heading colors." start="00:07:20.560" video="qnaVideo" id=subtitle]] +[[!template text="That might be a good question." start="00:07:24.400" video="qnaVideo" id=subtitle]] +[[!template text="I know, the presentation..." start="00:07:26.319" video="qnaVideo" id=subtitle]] +[[!template text="Sorry, it's hard to think and type at" start="00:07:33.199" video="qnaVideo" id=subtitle]] +[[!template text="the same time." start="00:07:35.520" video="qnaVideo" id=subtitle]] +[[!template text="Think and talk and type." start="00:07:36.479" video="qnaVideo" id=subtitle]] +[[!template new="1" text="So the presentation is just a" start="00:07:41.680" video="qnaVideo" id=subtitle]] +[[!template text="normal org file, right, so I have my headers," start="00:07:45.120" video="qnaVideo" id=subtitle]] +[[!template text="and the author--you can even stick" start="00:07:48.960" video="qnaVideo" id=subtitle]] +[[!template text="your email and other headers in there." start="00:07:50.466" video="qnaVideo" id=subtitle]] +[[!template text="But there's a package called org-tree-slide." start="00:07:52.560" video="qnaVideo" id=subtitle]] +[[!template text="Whoops, why is it not..." start="00:07:57.599" video="qnaVideo" id=subtitle]] +[[!template text="I must have not required it." start="00:08:01.440" video="qnaVideo" id=subtitle]] +[[!template text="Good question." start="00:08:03.618" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: Grant, can you try sharing your screen maybe?)" start="00:08:04.594" video="qnaVideo" id=subtitle]] +[[!template text="Oh, is it not shared? I'm sorry." start="00:08:09.599" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: Thank you.)" start="00:08:13.199" video="qnaVideo" id=subtitle]] +[[!template text="There we go, should be coming up." start="00:08:17.039" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: It's coming up. Yep, we see it.)" start="00:08:22.000" video="qnaVideo" id=subtitle]] +[[!template text="Awesome. All right. Okay. I don't know why this isn't working." start="00:08:26.720" video="qnaVideo" id=subtitle]] +[[!template text="It was working." start="00:08:38.800" video="qnaVideo" id=subtitle]] +[[!template text="Okay, you want to see the screenshot." start="00:08:56.080" video="qnaVideo" id=subtitle]] +[[!template text="Whoops. Okay, I just took a screenshot." start="00:09:01.839" video="qnaVideo" id=subtitle]] +[[!template text="So, org-tree-slide." start="00:09:06.839" video="qnaVideo" id=subtitle]] +[[!template text="I don't know why it's not launching." start="00:09:09.760" video="qnaVideo" id=subtitle]] +[[!template text="I thought that I had required it, but I must not have." start="00:09:12.800" video="qnaVideo" id=subtitle]] +[[!template text="Maybe I'll try. Okay." start="00:09:16.000" video="qnaVideo" id=subtitle]] +[[!template text="So there we go. So org-tree-slide is a way that basically uses" start="00:09:30.959" video="qnaVideo" id=subtitle]] +[[!template text="narrowing and some kind of font tricks to..." start="00:09:34.560" video="qnaVideo" id=subtitle]] +[[!template text="it changes your titles or your metadata into" start="00:09:38.880" video="qnaVideo" id=subtitle]] +[[!template text="this banner for the title here," start="00:09:42.640" video="qnaVideo" id=subtitle]] +[[!template text="and it automatically sets the faces for you." start="00:09:44.560" video="qnaVideo" id=subtitle]] +[[!template text="You can customize that, of course. And then, as you go through the Org file," start="00:09:46.560" video="qnaVideo" id=subtitle]] +[[!template text="you get these kind of nice animations and--" start="00:09:53.938" video="qnaVideo" id=subtitle]] +[[!template text="what's it called--breadcrumbs up at the top." start="00:09:59.600" video="qnaVideo" id=subtitle]] +[[!template text="So org-tree-slide. I highly recommend it." start="00:10:04.160" video="qnaVideo" id=subtitle]] +[[!template text="It's really nice because you can give your presentation and practice it," start="00:10:06.399" video="qnaVideo" id=subtitle]] +[[!template text="and while you're practicing it, you can edit things as well," start="00:10:10.024" video="qnaVideo" id=subtitle]] +[[!template text="because it's still just an Org document using narrowing, you know." start="00:10:12.560" video="qnaVideo" id=subtitle]] +[[!template text="It doesn't actually change anything." start="00:10:16.160" video="qnaVideo" id=subtitle]] +[[!template text="Definitely recommend org-tree-slide mode." start="00:10:20.079" video="qnaVideo" id=subtitle]] +[[!template text="Okay, let's see, what else..." start="00:10:24.079" video="qnaVideo" id=subtitle]] +[[!template new="1" text="Share my screen to demo. Oh, that's the SVG." start="00:10:29.760" video="qnaVideo" id=subtitle]] +[[!template text="Let's see." start="00:10:32.880" video="qnaVideo" id=subtitle]] +[[!template text="Okay, so I don't know if you can see this now," start="00:10:39.519" video="qnaVideo" id=subtitle]] +[[!template text="but I'm actually viewing the SVG screenshot that I took with Emacs." start="00:10:41.279" video="qnaVideo" id=subtitle]] +[[!template text="See here's the source of it. So Emacs made that." start="00:10:49.360" video="qnaVideo" id=subtitle]] +[[!template text="And here's the image." start="00:10:52.720" video="qnaVideo" id=subtitle]] +[[!template text="It's cool because you can even do it again and again," start="00:10:58.160" video="qnaVideo" id=subtitle]] +[[!template text="and open more screenshots of screenshots." start="00:11:01.570" video="qnaVideo" id=subtitle]] +[[!template text="Yeah, definitely Emacsception. Fun stuff." start="00:11:05.360" video="qnaVideo" id=subtitle]] +[[!template text="Anything else in chat?" start="00:11:14.880" video="qnaVideo" id=subtitle]] +[[!template text="Heading colors? Oh, yeah. I talked about the" start="00:11:18.079" video="qnaVideo" id=subtitle]] +[[!template text="themes. This is another Kaolin theme." start="00:11:20.160" video="qnaVideo" id=subtitle]] +[[!template text="I think the one in the talk was maybe this one, Aurora." start="00:11:24.800" video="qnaVideo" id=subtitle]] +[[!template text="Oh, here, there's something funny when" start="00:11:34.959" video="qnaVideo" id=subtitle]] +[[!template text="you start org-tree-slide" start="00:11:36.560" video="qnaVideo" id=subtitle]] +[[!template text="with a different theme." start="00:11:37.785" video="qnaVideo" id=subtitle]] +[[!template text="This top header bar gets the faces" start="00:11:38.880" video="qnaVideo" id=subtitle]] +[[!template text="from that previous theme." start="00:11:41.823" video="qnaVideo" id=subtitle]] +[[!template text="I have not figured out how to fix that yet." start="00:11:43.395" video="qnaVideo" id=subtitle]] +[[!template text="Did I have to compile to get the" start="00:11:47.760" video="qnaVideo" id=subtitle]] +[[!template text="screenshot? I think maybe I did." start="00:11:49.200" video="qnaVideo" id=subtitle]] +[[!template text="Yes, if I'm remembering correctly." start="00:11:51.120" video="qnaVideo" id=subtitle]] +[[!template text="I got Emacs 27. I'm not on a Mac." start="00:11:54.480" video="qnaVideo" id=subtitle]] +[[!template text="I saw alphapapa's comment on reddit," start="00:11:58.399" video="qnaVideo" id=subtitle]] +[[!template text="and then I recompiled it with Cairo support." start="00:12:01.424" video="qnaVideo" id=subtitle]] +[[!template text="Yes." start="00:12:08.839" video="qnaVideo" id=subtitle]] +[[!template new="1" text="Okay, lots of good conversation on here." start="00:12:18.000" video="qnaVideo" id=subtitle]] +[[!template text="Yep, I have like one or two more minutes." start="00:12:21.920" video="qnaVideo" id=subtitle]] +[[!template text="Okay. I guess while I'm here, I might as" start="00:12:25.839" video="qnaVideo" id=subtitle]] +[[!template text="well say thank you to the organizers." start="00:12:34.240" video="qnaVideo" id=subtitle]] +[[!template text="I really appreciate everybody's work on this." start="00:12:36.993" video="qnaVideo" id=subtitle]] +[[!template text="It's fun to be a part of this community." start="00:12:40.320" video="qnaVideo" id=subtitle]] +[[!template text="I'm enjoying the other talks I've seen so far today," start="00:12:42.720" video="qnaVideo" id=subtitle]] +[[!template text="and I'm looking forward to to the rest." start="00:12:45.929" video="qnaVideo" id=subtitle]] +[[!template text="It's really interesting, just from being on Emacs in IRC for a few months," start="00:12:48.560" video="qnaVideo" id=subtitle]] +[[!template text="I've already connected" start="00:12:53.570" video="qnaVideo" id=subtitle]] +[[!template text="with a lot of interesting people" start="00:12:54.720" video="qnaVideo" id=subtitle]] +[[!template text="and have a lot of cool connections already." start="00:12:56.959" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: Thank you for being a part of the community, Grant.)" start="00:13:04.079" video="qnaVideo" id=subtitle]] +[[!template text="That's good to be here." start="00:13:07.519" video="qnaVideo" id=subtitle]] +[[!template text="I have another talk tomorrow as well." start="00:13:08.883" video="qnaVideo" id=subtitle]] +[[!template text="Oh, thanks for everyone in the Etherpad" start="00:13:16.560" video="qnaVideo" id=subtitle]] +[[!template text="for putting more comments on these questions here" start="00:13:18.399" video="qnaVideo" id=subtitle]] +[[!template text="and taking the notes." start="00:13:21.680" video="qnaVideo" id=subtitle]] +[[!template text="(Amin: I think that's about all the time" start="00:13:29.360" video="qnaVideo" id=subtitle]] +[[!template text="that we have for the Q&A." start="00:13:31.680" video="qnaVideo" id=subtitle]] +[[!template text="Okay. Thank you again so much, Grant," start="00:13:33.040" video="qnaVideo" id=subtitle]] +[[!template text="for your awesome talk and for popping in for questions.)" start="00:13:36.720" video="qnaVideo" id=subtitle]] +[[!template text="Yeah, thanks again for hosting. See you later. Cheers!" start="00:13:39.920" video="qnaVideo" id=subtitle]] diff --git a/2020/info/06.md b/2020/info/06.md index b9cc0a27..98be1573 100644 --- a/2020/info/06.md +++ b/2020/info/06.md @@ -1,16 +1,15 @@ # Trivial Emacs Kits Corwin Brust -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm" size="114M" duration="13:41" subtitles="/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt"]] -[Download compressed .webm video (12M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--vp9-q56-video-original-audio.webm) +[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm" size="114M" duration="13:41" subtitles="/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt"]] +[Download compressed .webm video (12M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--vp9-q56-video-original-audio.webm) +[View transcript](#transcript) Techniques to help new users bootstrap a more gentle introduction to Emacs, one (short) init.el file at a time. [[!inline pages="internal(2020/info/dm-notes)" raw="yes"]] -[[!inline pages="internal(2020/info/06-transcription)" raw="yes"]] - <!-- from the pad ---> - Actual start and end time (EST): Start: 2020-11-28T10.45.48; Q&A @@ -56,184 +55,240 @@ important problem space in free software, FWIW. <a name="transcript"></a> # Transcript -Following is a somewhat hasty self-transcription of my talk. Please -don't hesitate to [mailto:corwin@bru.st](ask for clarification) or to -add any clarifications you feel helpful back into the EmacsConf wiki. - There is a visual gimmick underlaying the initial remarks. We are looking at the first (first-slide ("Welcome") showing how the org markdown looks on other editors, including cygwin emacs, Notepad++, Sublime, VS Code, and cygwin vim. As each is closed we see the next, until we reveal GUI Emacs running org-mode in a full-both frame. -My name is Corwin Brust and I will be talking about getting started -with Emacs Today. I have been an Emacs user for a long time- - -First of all thanks and a huge welcome to the conference..(_15s_) - -On behalf of and back to the other organizers. It has been cool to -have a peek backstage. - -So. I've used a lot of different editors in my time. That's about 25 -years as a professional software engineer. And most of that -time I've been using Emacs. (~54s_) - -I'll talk a little bit in a minute (if I can ever find my slides) -about how I got into Emacs, but if you've used Emacs and a lot of -other editors for a long time, something that you notice right away is -that you get good with it in a way that stays meaningful. You learn -new things, those things stick with you. You learn how to- how to -make it do new tricks and then keep doing those tricks. (~1m26s_) - -I want to mention this conference isn't about (whoops: "this talk") -how to adjust your configuration specifically. I don't have a bunch -of good code samples in here. There are a bunch of other great talks, -especially Andrew's that I think may be aimed more at that "hey, I'm -just getting started with Emacs what are some things to try to make it -more comfortable for me starting?" [subject/audience? cezb]. (~2m07s_) - -This is about how to think about the problem space more. (_2m10s_) - -Hopefully a good way to warm up as we start thinking about some of the -lightning talks later on. (I'm going to bring up my IRC buffer -[offscreen] in case I run into time- I didn't get my stopwatch started -for this one.) (_2m25s_) - -So, alright: let's dive in. (_2m30s_) - -We assume that we want to install packages, and maybe configure some -features. This is particularly from the perspective of where we're -working with a bunch of others on a team and we want to get something -done. (_2m42s_) - -Some of us probably have mature Emacs workflows, others may be -installing it for the first time. (_2m50s_) - -So the first questions is, you know- in that context: what's the value -proposition? Why should I mess with my machine, my mature Emacs -configuration, impose my way of thinking and ideas over the way -somebody else is learning Emacs? (_3m09m_) - -It can be [laugh] I'm off my slides here a little bit.. (_3m13s_) - -It can be a little tricky to learn Emacs. One thing that helps us a -lot is if people that we are working with can tell us, kinda, -keystroke-for-keystroke at times what to do and explain what -everything is doing. (_3m30s_) - -And using the same packages as others can really help us working -together on a project. (_3m36s_) - -Speaking from my personal experience, it took me decades to get to the -point where I was excited to program in Emacs Lisp. (_3m26s_) - -I've programed in a lot of programming languages, but Lisp wasn't on -my list. I looked at my config, that I was copy-pasting around from -generation after generation of .emacs file or re-crafting it by hand -and from Internet searches, to get things that I needed when I would -quickly go install Emacs to start some new job or contract, and -quickly get though that work-flow that caused me to go install the -program. (_4m15s_) - -You know, just simple little one-liners that got committed to memory -over decades eventually just lead [me] to a sort of "hey, what's going -on here". (_4m27s_) - -And I credit my good friend Jeff Goff who died earlier in 2020 for my -lifelong love of Emacs. Perhaps Erik and I will talk a little more -about that at another talk we have scheduled but Jeff was a huge -influence on us in a number of ways and a huge contributer to the Raku -programming language which is very cool. (_4m52s_) - -So, understanding how to make a good decision about splitting up -configuration in a way to share it with people with really different -uses of Emacs. That's actually a complicated topic, and I want to off -and stare at it for a second: (_5m11s_) - -I think Emacs is about people, so that means it is about community. -And community means we're going to invite disagreement. In fact that -disagreement isn't necessarily a road-block to our project, in fact -that some of the work our project can invite us to do is to get closer -to each other by inviting those disagreements, by learning from people -of different styles, and from how they argue, and thinking about why -they have that perspective and what technical benefits that perhaps -radical point of view might carry away. Some people are really -aggressive arguers others are very passive and really couch their -ideas in distancing terms, "well probably this is a good idea" or -"please double check me". Those don't always indicate how certain a -person is. Because we're different. We have different ways of -communicating ideas such as certainty or excitement. (_6m23s_) - -When we thinking about a bunch of really diverse programmers -approaching Emacs probably one of our first really big challenges is -just to pick what we're going to go after. There are a number of -existing kit installs and things like this. My argument is that you -can get pretty far just trading files around. And maybe the more -value conversation to have is making the hard decisions, e.g. "should -we have vertical completion", should that be out of the box and those -that want the traditional splayed-out over a sing line such as the -mode line will have to add a line to their configuration. (_7m26s) - -The way to get there? - -How do we find out what works? - -We don't want to slow down the people who are super productive with -Emacs, and ask them to completely break their workflows to make it -easier for new folks, at the same time we do want to make sure those -new people. (_7m42s_) - -At the same time, we do want to make sure those new people arre -excited by Emacs and not turned off by having to learn the entire -jungle of Emacs history in the form of it's unique technical stylings -in terms of frames, buffers, and other unique Emacs viewpoints on -interface concepts, especially. (_8m15s_) - -The encouragement here is to keep using the project team as a -crucible. Rather than following the defaults of, um, finding the -simplest customizations that generally work, what if we tried to look -for fairly specific configuration that we'll expect basically all of -our developers to be using, at least when the submit bug -reports. (_8m48s_) - -In particular with this, I think that degree of experimentation can -drive back into the Emacs development process. In the development -mailing list.. [] In the context of Emacs development as a greater -entity, we see this struggle. We have the sense that some things can -"never" be change. I think one thing that can help us get there is -evidence that says "hey, my 30-40 person team is using this set of -bindings and here is what we learned about new Emacs users coming in -and trying that". (10m) - -So let's just recap real quick: in theory Emacs works out of the -box. That means we are free to throw it all away and start over. -[trouble with slides, again] - -Our goal is to enable users- to unlock our computers, to do as much -with them as possible. My work of encouragement is experiment with it. -And think really specifically about how the development users may be -different from each other, as you are configuring the development -environment of emacs for developing on a project. - -That's my talk, etc, answer any questions.(_12m09s_) - -Do you use Emacs as a Community Building Tool? (_13m15s_) - -Do /i/ use Emacs a community building tool? Or *how* do I use Emacs as a -community building tool. [amin: "it doesn't say"] - -Yes, absolutely. I think Emacs is an ambassador to the gnu -tool-chain. in the fullness of time we will see an Emacs that will -make others, Android and iOS, dream. That's why that mock us and say -that Emacs is an operating system. It's because it could be, if cared -for it to be. It's quite a threatening product in terms of the number -of problem spaces it can address, how many types of users it can -satisfy. (_13m01s_) - -And the things that we can do to make it robust in those environments. -We're always thinking about the weak points but is Emacs a community -building tool? Heck yeah. (_13m13s_) - -[we agree that I'll write my answers to the remaining questions, I say -thanks more, and we're done. ps, I'll get to your question or -comments I can find a response to within the next week, I expect] +[[!template new="1" text="My name is Corwin Brust" start="00:00:00.399" video="mainVideo" id=subtitle]] +[[!template text="and I will be talking about getting started with Emacs today." start="00:00:02.683" video="mainVideo" id=subtitle]] +[[!template text="I have been an Emacs user for a long time." start="00:00:08.960" video="mainVideo" id=subtitle]] +[[!template new="1" text="First of all, thanks and a huge welcome to the conference" start="00:00:11.448" video="mainVideo" id=subtitle]] +[[!template text="from me and and on behalf" start="00:00:15.360" video="mainVideo" id=subtitle]] +[[!template text="and back to the other people" start="00:00:22.400" video="mainVideo" id=subtitle]] +[[!template text="that have been helping to organize." start="00:00:24.368" video="mainVideo" id=subtitle]] +[[!template text="It's been amazing just to be involved" start="00:00:26.080" video="mainVideo" id=subtitle]] +[[!template text="with that and just, kind of, see backstage." start="00:00:30.480" video="mainVideo" id=subtitle]] +[[!template new="1" text="I've used a lot of different editors in my time." start="00:00:36.399" video="mainVideo" id=subtitle]] +[[!template text="That's about 25 years as a professional software engineer." start="00:00:42.281" video="mainVideo" id=subtitle]] +[[!template text="And most of that time I've been using Emacs." start="00:00:52.399" video="mainVideo" id=subtitle]] +[[!template new="1" text="I'll talk a little bit in a minute" start="00:00:54.247" video="mainVideo" id=subtitle]] +[[!template text="(if I can ever find my slides)" start="00:00:56.160" video="mainVideo" id=subtitle]] +[[!template text="about how I got into Emacs," start="00:01:00.960" video="mainVideo" id=subtitle]] +[[!template text="but I think if you've used Emacs and a" start="00:01:04.479" video="mainVideo" id=subtitle]] +[[!template text="lot of other editors for a long time," start="00:01:07.200" video="mainVideo" id=subtitle]] +[[!template text="something that you notice right away" start="00:01:10.240" video="mainVideo" id=subtitle]] +[[!template text="is that you get good with it in a way that stays meaningful." start="00:01:14.410" video="mainVideo" id=subtitle]] +[[!template text="You learn new things. Those things stick with you." start="00:01:18.560" video="mainVideo" id=subtitle]] +[[!template text="You learn how to make it do new tricks and then keep doing those tricks." start="00:01:24.199" video="mainVideo" id=subtitle]] +[[!template new="1" text="I want to mention that this conference--oops," start="00:01:33.759" video="mainVideo" id=subtitle]] +[[!template text="this talk isn't about how to adjust" start="00:01:39.439" video="mainVideo" id=subtitle]] +[[!template text="your configuration specifically." start="00:01:44.829" video="mainVideo" id=subtitle]] +[[!template text="I don't have a bunch of good code samples in here." start="00:01:46.802" video="mainVideo" id=subtitle]] +[[!template text="There are other great talks at the conference," start="00:01:50.000" video="mainVideo" id=subtitle]] +[[!template text="particularly Andrew's, that I looked at," start="00:01:52.451" video="mainVideo" id=subtitle]] +[[!template text="that looked like they might be more aimed at that" start="00:01:56.411" video="mainVideo" id=subtitle]] +[[!template text=""hey, I'm just getting started with Emacs," start="00:01:59.920" video="mainVideo" id=subtitle]] +[[!template text="what are some things to try to make" start="00:02:02.240" video="mainVideo" id=subtitle]] +[[!template text="it more comfortable for me starting?"" start="00:02:05.280" video="mainVideo" id=subtitle]] +[[!template new="1" text="This is about how to think about the problem space." start="00:02:07.017" video="mainVideo" id=subtitle]] +[[!template new="1" text="Hopefully, a good warm up as we start thinking about" start="00:02:09.759" video="mainVideo" id=subtitle]] +[[!template text="some of the lightning talks a little later on." start="00:02:13.337" video="mainVideo" id=subtitle]] +[[!template text="I'm just gonna quickly make sure" start="00:02:17.200" video="mainVideo" id=subtitle]] +[[!template text="I can see my IRC buffer in case" start="00:02:19.835" video="mainVideo" id=subtitle]] +[[!template text="I run into time. I didn't get my stopwatch started for this one." start="00:02:21.789" video="mainVideo" id=subtitle]] +[[!template new="1" text="So all right, let's dive in." start="00:02:25.680" video="mainVideo" id=subtitle]] +[[!template new="1" text="We assume that we want to install packages" start="00:02:29.680" video="mainVideo" id=subtitle]] +[[!template text="and maybe configure some features." start="00:02:33.840" video="mainVideo" id=subtitle]] +[[!template text="This is particularly from the perspective of" start="00:02:36.281" video="mainVideo" id=subtitle]] +[[!template text="where we're working" start="00:02:38.319" video="mainVideo" id=subtitle]] +[[!template text="with a bunch of people on a team" start="00:02:39.120" video="mainVideo" id=subtitle]] +[[!template text="and we want to get something done." start="00:02:40.541" video="mainVideo" id=subtitle]] +[[!template new="1" text="Some of us probably already have mature" start="00:02:42.160" video="mainVideo" id=subtitle]] +[[!template text="Emacs workflows." start="00:02:44.800" video="mainVideo" id=subtitle]] +[[!template text="Others are installing it for the first time." start="00:02:46.560" video="mainVideo" id=subtitle]] +[[!template new="1" text="So the first question is, you know, in that context:" start="00:02:53.519" video="mainVideo" id=subtitle]] +[[!template text="what's the value proposition?" start="00:02:57.889" video="mainVideo" id=subtitle]] +[[!template text="Why should I mess with my machine," start="00:02:59.784" video="mainVideo" id=subtitle]] +[[!template text="my mature Emacs configuration," start="00:03:01.532" video="mainVideo" id=subtitle]] +[[!template text="and impose my ideas over the way somebody else is learning Emacs?" start="00:03:04.219" video="mainVideo" id=subtitle]] +[[!template new="1" text="Well, it can be.. I'm off my slides here a little bit." start="00:03:09.815" video="mainVideo" id=subtitle]] +[[!template new="1" text="It can be a little bit tricky" start="00:03:13.840" video="mainVideo" id=subtitle]] +[[!template text="to learn Emacs. One thing that helps us a lot" start="00:03:16.959" video="mainVideo" id=subtitle]] +[[!template text="is if people that we're working with" start="00:03:21.440" video="mainVideo" id=subtitle]] +[[!template text="can tell us, kinda, keystroke for keystroke at times," start="00:03:24.720" video="mainVideo" id=subtitle]] +[[!template text="what to do and explain what everything is doing." start="00:03:27.301" video="mainVideo" id=subtitle]] +[[!template new="1" text="Using the same packages can really help us working together on a project." start="00:03:30.480" video="mainVideo" id=subtitle]] +[[!template new="1" text="Speaking from my personal experience," start="00:03:35.840" video="mainVideo" id=subtitle]] +[[!template text="it took me decades to get to the point" start="00:03:40.720" video="mainVideo" id=subtitle]] +[[!template text="where I was excited to program in Emacs Lisp." start="00:03:42.959" video="mainVideo" id=subtitle]] +[[!template new="1" text="I've programmed in a lot of programming languages," start="00:03:45.226" video="mainVideo" id=subtitle]] +[[!template text="but Lisp wasn't on my list." start="00:03:47.840" video="mainVideo" id=subtitle]] +[[!template text="I looked at my config that I was copy-pasting around" start="00:03:50.252" video="mainVideo" id=subtitle]] +[[!template text="from generation after generation of .emacs file," start="00:03:53.680" video="mainVideo" id=subtitle]] +[[!template text="or recrafting it from hand and from Internet searches," start="00:03:57.279" video="mainVideo" id=subtitle]] +[[!template text="to get the things that I needed when" start="00:04:00.799" video="mainVideo" id=subtitle]] +[[!template text="I would quickly go install Emacs at some" start="00:04:03.519" video="mainVideo" id=subtitle]] +[[!template text="new job or contract," start="00:04:05.680" video="mainVideo" id=subtitle]] +[[!template text="and be able to to quickly get through that workflow" start="00:04:07.680" video="mainVideo" id=subtitle]] +[[!template text="that caused me to install the program." start="00:04:14.016" video="mainVideo" id=subtitle]] +[[!template new="1" text="You know, just little simple one-liners that got committed to memory" start="00:04:17.440" video="mainVideo" id=subtitle]] +[[!template text="over decades eventually just led me to a sort of "hey what's going on here."" start="00:04:24.049" video="mainVideo" id=subtitle]] +[[!template new="1" text="And I credit Jeff Goff, my good friend who died earlier in 2020," start="00:04:27.675" video="mainVideo" id=subtitle]] +[[!template text="for my lifelong love of Emacs." start="00:04:33.520" video="mainVideo" id=subtitle]] +[[!template text="Perhaps Erik and I will talk about that" start="00:04:37.759" video="mainVideo" id=subtitle]] +[[!template text="a little bit more in another talk we have scheduled," start="00:04:39.280" video="mainVideo" id=subtitle]] +[[!template text="but Jeff was a huge influence on us" start="00:04:42.000" video="mainVideo" id=subtitle]] +[[!template text="in a number of ways," start="00:04:44.400" video="mainVideo" id=subtitle]] +[[!template text="and a huge contributor" start="00:04:46.027" video="mainVideo" id=subtitle]] +[[!template text="to the Raku programming language, which is very cool." start="00:04:47.732" video="mainVideo" id=subtitle]] +[[!template new="1" text="So, understanding how to make a good decision" start="00:04:54.840" video="mainVideo" id=subtitle]] +[[!template text="about splitting up configuration in a way to share it across" start="00:05:00.153" video="mainVideo" id=subtitle]] +[[!template text="people with really different uses of Emacs..." start="00:05:03.680" video="mainVideo" id=subtitle]] +[[!template text="That's actually a complicated topic" start="00:05:06.292" video="mainVideo" id=subtitle]] +[[!template text="and I want to sort of back off and stare at it for a second." start="00:05:08.546" video="mainVideo" id=subtitle]] +[[!template new="1" text="I think Emacs is about people, so that means it's about community." start="00:05:12.639" video="mainVideo" id=subtitle]] +[[!template text="And community means we're going to invite disagreement." start="00:05:18.720" video="mainVideo" id=subtitle]] +[[!template text="In fact, that disagreement isn't necessarily a road-block to our project." start="00:05:24.960" video="mainVideo" id=subtitle]] +[[!template text="In fact, some of the work that a community project can invite us to do" start="00:05:32.687" video="mainVideo" id=subtitle]] +[[!template text="is to get closer to each other" start="00:05:37.759" video="mainVideo" id=subtitle]] +[[!template text="by inviting those disagreements," start="00:05:39.505" video="mainVideo" id=subtitle]] +[[!template text="by learning from them--learning from" start="00:05:40.840" video="mainVideo" id=subtitle]] +[[!template text="different people's styles and from how they argue," start="00:05:42.080" video="mainVideo" id=subtitle]] +[[!template text="and thinking about why they have that perspective" start="00:05:46.880" video="mainVideo" id=subtitle]] +[[!template text="and what technical benefits" start="00:05:50.058" video="mainVideo" id=subtitle]] +[[!template text="that perhaps radical point of view might carry away." start="00:05:53.227" video="mainVideo" id=subtitle]] +[[!template text="Some people are really aggressive arguers," start="00:05:55.800" video="mainVideo" id=subtitle]] +[[!template text="and others are very passive and really" start="00:05:58.266" video="mainVideo" id=subtitle]] +[[!template text="couch their ideas in distancing terms, to say," start="00:06:01.919" video="mainVideo" id=subtitle]] +[[!template text=""well probably, this is a good idea"" start="00:06:05.824" video="mainVideo" id=subtitle]] +[[!template text="or "please double check me."" start="00:06:07.906" video="mainVideo" id=subtitle]] +[[!template text="Those don't always necessarily indicate" start="00:06:12.479" video="mainVideo" id=subtitle]] +[[!template text="how certain a person is, because we're different." start="00:06:15.520" video="mainVideo" id=subtitle]] +[[!template text="We have different ways of communicating" start="00:06:17.497" video="mainVideo" id=subtitle]] +[[!template text="ideas like certainty or excitement." start="00:06:19.520" video="mainVideo" id=subtitle]] +[[!template new="1" text="When we think about a bunch of" start="00:06:24.560" video="mainVideo" id=subtitle]] +[[!template text="really diverse programmers approaching Emacs," start="00:06:26.235" video="mainVideo" id=subtitle]] +[[!template text="probably one of our first really big challenges is just" start="00:06:30.000" video="mainVideo" id=subtitle]] +[[!template text="to pick what we're going to go after." start="00:06:36.479" video="mainVideo" id=subtitle]] +[[!template text="There are a lot of existing kit installs and things like this." start="00:06:40.085" video="mainVideo" id=subtitle]] +[[!template text="My argument is that you could actually get pretty far" start="00:06:49.599" video="mainVideo" id=subtitle]] +[[!template text="just trading files around." start="00:06:54.400" video="mainVideo" id=subtitle]] +[[!template text="Maybe the more valuable conversation to have" start="00:06:56.020" video="mainVideo" id=subtitle]] +[[!template text="is making the hard decisions about, well," start="00:07:03.698" video="mainVideo" id=subtitle]] +[[!template text=""should we have vertical completion,"" start="00:07:06.080" video="mainVideo" id=subtitle]] +[[!template text="should that be the out of the box," start="00:07:08.000" video="mainVideo" id=subtitle]] +[[!template text="and the people that want" start="00:07:10.080" video="mainVideo" id=subtitle]] +[[!template text="the traditional splayed out over a single line completion," start="00:07:11.759" video="mainVideo" id=subtitle]] +[[!template text="for example in the mode line," start="00:07:17.440" video="mainVideo" id=subtitle]] +[[!template text="those people are going to add a line of config to their own setup?" start="00:07:19.428" video="mainVideo" id=subtitle]] +[[!template new="1" text="The way to get there?" start="00:07:29.039" video="mainVideo" id=subtitle]] +[[!template text="I mean, how do we find out what works?" start="00:07:30.979" video="mainVideo" id=subtitle]] +[[!template new="1" text="We don't want to slow down the people that are super productive with Emacs" start="00:07:33.344" video="mainVideo" id=subtitle]] +[[!template text="by asking them to completely break their workflows" start="00:07:38.587" video="mainVideo" id=subtitle]] +[[!template text="and make it easier for new folks." start="00:07:40.879" video="mainVideo" id=subtitle]] +[[!template new="1" text="At the same time, we do want to make sure those new people" start="00:07:42.560" video="mainVideo" id=subtitle]] +[[!template text="are excited by Emacs and not turned off by having to learn" start="00:07:48.673" video="mainVideo" id=subtitle]] +[[!template text="the entire jungle of Emacs history in the form of its unique" start="00:07:52.720" video="mainVideo" id=subtitle]] +[[!template text="technical stylings for things like frames, buffers," start="00:08:00.363" video="mainVideo" id=subtitle]] +[[!template text="and other unique Emacs viewpoints" start="00:08:07.610" video="mainVideo" id=subtitle]] +[[!template text="on important interface concepts, especially." start="00:08:11.668" video="mainVideo" id=subtitle]] +[[!template new="1" text="The encouragement here is to keep" start="00:08:16.240" video="mainVideo" id=subtitle]] +[[!template text="the initialization for a project team" start="00:08:19.520" video="mainVideo" id=subtitle]] +[[!template text="together as a crucible." start="00:08:21.680" video="mainVideo" id=subtitle]] +[[!template text="Rather than necessarily following" start="00:08:23.280" video="mainVideo" id=subtitle]] +[[!template text="our defaults of finding the simplest configurations" start="00:08:25.117" video="mainVideo" id=subtitle]] +[[!template text="that generally work and letting people customize it," start="00:08:33.279" video="mainVideo" id=subtitle]] +[[!template text="what if we tried to look" start="00:08:37.440" video="mainVideo" id=subtitle]] +[[!template text="for fairly specific configurations" start="00:08:40.479" video="mainVideo" id=subtitle]] +[[!template text="that we'll expect essentially all of our" start="00:08:42.346" video="mainVideo" id=subtitle]] +[[!template text="developers to be using," start="00:08:44.159" video="mainVideo" id=subtitle]] +[[!template text="at least when they submit bug reports." start="00:08:46.320" video="mainVideo" id=subtitle]] +[[!template new="1" text="In particular, with this," start="00:08:52.839" video="mainVideo" id=subtitle]] +[[!template text="I think that degree of experimentation" start="00:08:55.920" video="mainVideo" id=subtitle]] +[[!template text="can drive back into the Emacs development process." start="00:08:59.839" video="mainVideo" id=subtitle]] +[[!template text="In the development mailing list..." start="00:09:02.584" video="mainVideo" id=subtitle]] +[[!template text="I'm hoping I'll get a timing cue here." start="00:09:04.800" video="mainVideo" id=subtitle]] +[[!template text="In the context of Emacs development as a greater entity," start="00:09:15.120" video="mainVideo" id=subtitle]] +[[!template text="we see some of these struggles." start="00:09:18.835" video="mainVideo" id=subtitle]] +[[!template text="Should we change this default?" start="00:09:20.959" video="mainVideo" id=subtitle]] +[[!template text="Sometimes we can have the sense that defaults in Emacs will never change." start="00:09:22.399" video="mainVideo" id=subtitle]] +[[!template text="The conversation is too difficult." start="00:09:27.146" video="mainVideo" id=subtitle]] +[[!template text="I think one thing that can help us get there is evidence" start="00:09:29.279" video="mainVideo" id=subtitle]] +[[!template text="that says, "hey my 30- to 40-person project" start="00:09:32.560" video="mainVideo" id=subtitle]] +[[!template text="is using this set of bindings," start="00:09:36.160" video="mainVideo" id=subtitle]] +[[!template text="and here's what we learned" start="00:09:38.560" video="mainVideo" id=subtitle]] +[[!template text="about brand new Emacs users trying to come in" start="00:09:40.111" video="mainVideo" id=subtitle]] +[[!template text="and get work done with that."" start="00:09:42.240" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Yeah you still have" start="00:09:46.800" video="mainVideo" id=subtitle]] +[[!template text="a couple more minutes.)" start="00:09:49.360" video="mainVideo" id=subtitle]] +[[!template text="Oh, beautiful. Okay, great." start="00:09:50.720" video="mainVideo" id=subtitle]] +[[!template text="I will try to get through my last few slides that I cut" start="00:09:51.984" video="mainVideo" id=subtitle]] +[[!template text="in my last walkthrough, but I think I'm" start="00:09:54.720" video="mainVideo" id=subtitle]] +[[!template text="going quicker today, thank you." start="00:09:56.320" video="mainVideo" id=subtitle]] +[[!template text="Thank you." start="00:09:58.320" video="mainVideo" id=subtitle]] +[[!template new="1" text="So let's just recap real quick:" start="00:10:02.000" video="mainVideo" id=subtitle]] +[[!template text="in theory, Emacs works out of the box." start="00:10:05.120" video="mainVideo" id=subtitle]] +[[!template text="That means we're free to experiment." start="00:10:08.760" video="mainVideo" id=subtitle]] +[[!template text="We can throw it all away and start over." start="00:10:12.853" video="mainVideo" id=subtitle]] +[[!template text="As an organizational principle..." start="00:10:17.120" video="mainVideo" id=subtitle]] +[[!template text="I don't know what I was thinking on that slide, excuse me." start="00:10:26.000" video="mainVideo" id=subtitle]] +[[!template new="1" text="Bringing it back around to the free" start="00:10:30.079" video="mainVideo" id=subtitle]] +[[!template text="and open source software community," start="00:10:33.440" video="mainVideo" id=subtitle]] +[[!template text="our goal is to enable users" start="00:10:35.680" video="mainVideo" id=subtitle]] +[[!template text="to unlock their computers, to do as much" start="00:10:39.519" video="mainVideo" id=subtitle]] +[[!template text="with them as possible." start="00:10:41.440" video="mainVideo" id=subtitle]] +[[!template text="That's the context to take with project initialization, but sometimes" start="00:10:43.040" video="mainVideo" id=subtitle]] +[[!template text="it could make sense" start="00:10:47.680" video="mainVideo" id=subtitle]] +[[!template text="to put some gloves on." start="00:10:50.800" video="mainVideo" id=subtitle]] +[[!template text="I've thrown up on the screen here" start="00:10:52.032" video="mainVideo" id=subtitle]] +[[!template text="just a couple of other ideas," start="00:10:53.766" video="mainVideo" id=subtitle]] +[[!template text="ways to maybe think outside of the box." start="00:10:55.276" video="mainVideo" id=subtitle]] +[[!template text="As you're putting together project nets," start="00:10:57.920" video="mainVideo" id=subtitle]] +[[!template text="my words of encouragement are to experiment with it," start="00:11:01.440" video="mainVideo" id=subtitle]] +[[!template text="try different things, and think really specifically" start="00:11:05.519" video="mainVideo" id=subtitle]] +[[!template text="about how different the development users might be from each other" start="00:11:09.941" video="mainVideo" id=subtitle]] +[[!template text="as you define standards for configuring" start="00:11:17.010" video="mainVideo" id=subtitle]] +[[!template text="the user environment of Emacs" start="00:11:21.680" video="mainVideo" id=subtitle]] +[[!template text="specifically for developing on a project." start="00:11:23.519" video="mainVideo" id=subtitle]] +[[!template new="1" text="That's pretty much my talk." start="00:11:26.552" video="mainVideo" id=subtitle]] +[[!template text="If there's any time, I would take a couple questions." start="00:11:29.120" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Thank you for your awesome talk, Corwin." start="00:11:32.959" video="mainVideo" id=subtitle]] +[[!template text="I think we have one or two minutes for a few questions." start="00:11:36.480" video="mainVideo" id=subtitle]] +[[!template text="Do you have the pad open or would you" start="00:11:49.519" video="mainVideo" id=subtitle]] +[[!template text="like me to read the questions for you?)" start="00:11:52.000" video="mainVideo" id=subtitle]] +[[!template text="Corwin: Oh, I managed to close the pad" start="00:11:53.839" video="mainVideo" id=subtitle]] +[[!template text="and I am trying to open it again." start="00:11:58.000" video="mainVideo" id=subtitle]] +[[!template text="All right, there it opened." start="00:12:00.352" video="mainVideo" id=subtitle]] +[[!template text="Bringing it onto a screen where I can see it." start="00:12:03.519" video="mainVideo" id=subtitle]] +[[!template text="Will you read me the first question while I drag windows around, please?" start="00:12:05.500" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: Sure. It says, "do you use Emacs as a community building tool?")" start="00:12:09.360" video="mainVideo" id=subtitle]] +[[!template text="Do I use Emacs as a community building tool, or how do I?" start="00:12:15.600" video="mainVideo" id=subtitle]] +[[!template text="(Amin: It just says do you.) Yes, absolutely." start="00:12:19.760" video="mainVideo" id=subtitle]] +[[!template text="I think Emacs is an ambassador to the GNU tool chain." start="00:12:23.519" video="mainVideo" id=subtitle]] +[[!template text="I think that in the fullness of time," start="00:12:29.920" video="mainVideo" id=subtitle]] +[[!template text="we will see an Emacs" start="00:12:33.027" video="mainVideo" id=subtitle]] +[[!template text="that makes iOS and Android and other closed-source tools dream." start="00:12:36.558" video="mainVideo" id=subtitle]] +[[!template text="That's why they mock us and call Emacs" start="00:12:43.760" video="mainVideo" id=subtitle]] +[[!template text="an operating system. It's because" start="00:12:46.689" video="mainVideo" id=subtitle]] +[[!template text="it could be, if we cared for it to be." start="00:12:49.200" video="mainVideo" id=subtitle]] +[[!template text="It's quite a threatening product" start="00:12:51.440" video="mainVideo" id=subtitle]] +[[!template text="from the perspective of how many problem" start="00:12:55.680" video="mainVideo" id=subtitle]] +[[!template text="spaces it can address," start="00:12:57.440" video="mainVideo" id=subtitle]] +[[!template text="how many types of users it can satisfy," start="00:12:58.540" video="mainVideo" id=subtitle]] +[[!template text="the things that we can do to make" start="00:13:01.519" video="mainVideo" id=subtitle]] +[[!template text="it robust in those environments." start="00:13:04.399" video="mainVideo" id=subtitle]] +[[!template text="I mean, we're always thinking about the weak points," start="00:13:06.456" video="mainVideo" id=subtitle]] +[[!template text="but is Emacs a community building tool? Heck yeah." start="00:13:09.524" video="mainVideo" id=subtitle]] +[[!template new="1" text="(Amin: There's like one or two more questions." start="00:13:14.639" video="mainVideo" id=subtitle]] +[[!template text="I think they're more long-form so it might be better" start="00:13:18.480" video="mainVideo" id=subtitle]] +[[!template text="if you took them off stream so you could keep the schedule on time.)" start="00:13:22.480" video="mainVideo" id=subtitle]] +[[!template text="I would love to take those questions offline." start="00:13:26.880" video="mainVideo" id=subtitle]] +[[!template text="I will respond to you" start="00:13:29.463" video="mainVideo" id=subtitle]] +[[!template text="in writing if we don't get to it" start="00:13:30.908" video="mainVideo" id=subtitle]] +[[!template text="in a breakout room." start="00:13:32.237" video="mainVideo" id=subtitle]] +[[!template text="Thanks so much for joining us." start="00:13:33.360" video="mainVideo" id=subtitle]] +[[!template text="I can't wait to see the rest of the" start="00:13:35.451" video="mainVideo" id=subtitle]] +[[!template text="conference. See you there!" start="00:13:36.639" video="mainVideo" id=subtitle]] +[[!template text="(Amin: Awesome. Thank you again so much, Corwin.)" start="00:13:38.000" video="mainVideo" id=subtitle]] diff --git a/2020/info/07.md b/2020/info/07.md index f4f793e7..1b9e0939 100644 --- a/2020/info/07.md +++ b/2020/info/07.md @@ -1,8 +1,9 @@ # Beyond Vim and Emacs: A Scalable UI Paradigm Sid Kasivajhula -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt" size="161MB"]] -[Download compressed .webm video (45.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm) +[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt" size="161MB"]] +[Download compressed .webm video (45.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm) +[View transcript](#transcript) [[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt" size="40MB"]] [Download compressed .webm video (5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--vp9-q56-video-original-audio.webm) @@ -196,3 +197,323 @@ green phosphor. epistemic-mode, now called rigpa (concept in Tibetan Buddhism, in Dzogchen teaching, or the great completion). - Similar idea from <http://emacs-versor.sourceforge.net> + +<a name="transcript"></a> +# Transcript + +[[!template new="1" text=""Far away in the heavenly abode" start="00:00:02.960" video="mainVideo" id=subtitle]] +[[!template text="of the great god Indra," start="00:00:04.644" video="mainVideo" id=subtitle]] +[[!template text="there is a wonderful net" start="00:00:06.560" video="mainVideo" id=subtitle]] +[[!template text="which has been hung by some cunning artificer" start="00:00:07.688" video="mainVideo" id=subtitle]] +[[!template text="in such a manner that it stretches out" start="00:00:10.160" video="mainVideo" id=subtitle]] +[[!template text="infinitely in all directions." start="00:00:12.080" video="mainVideo" id=subtitle]] +[[!template text="In accordance with the extravagant tastes of deities," start="00:00:14.320" video="mainVideo" id=subtitle]] +[[!template text="the artificer has hung" start="00:00:16.938" video="mainVideo" id=subtitle]] +[[!template text="a single glittering jewel" start="00:00:18.240" video="mainVideo" id=subtitle]] +[[!template text="in each eye of the net," start="00:00:20.277" video="mainVideo" id=subtitle]] +[[!template text="and since the net itself is infinite," start="00:00:22.080" video="mainVideo" id=subtitle]] +[[!template text="the jewels are infinite in number." start="00:00:23.859" video="mainVideo" id=subtitle]] +[[!template text="There hang the jewels," start="00:00:26.480" video="mainVideo" id=subtitle]] +[[!template text="glittering like stars in the first magnitude," start="00:00:27.642" video="mainVideo" id=subtitle]] +[[!template text="a wonderful sight to behold." start="00:00:30.480" video="mainVideo" id=subtitle]] +[[!template text="Were we to select one of these jewels for inspection," start="00:00:32.681" video="mainVideo" id=subtitle]] +[[!template text="we would discover that in its polished surface" start="00:00:35.680" video="mainVideo" id=subtitle]] +[[!template text="there are reflected" start="00:00:38.216" video="mainVideo" id=subtitle]] +[[!template text="all the other jewels in the net," start="00:00:39.520" video="mainVideo" id=subtitle]] +[[!template text="infinite in number." start="00:00:41.451" video="mainVideo" id=subtitle]] +[[!template text="If we look still more closely," start="00:00:43.360" video="mainVideo" id=subtitle]] +[[!template text="we would see that each of the jewels reflected in this one jewel" start="00:00:45.140" video="mainVideo" id=subtitle]] +[[!template text="reflects all the others."" start="00:00:48.960" video="mainVideo" id=subtitle]] +[[!template text="This is the metaphor of Indra's Net," start="00:00:51.264" video="mainVideo" id=subtitle]] +[[!template text="which is told in some schools of philosophy." start="00:00:54.000" video="mainVideo" id=subtitle]] +[[!template text="Let's keep this metaphor in mind," start="00:00:57.615" video="mainVideo" id=subtitle]] +[[!template text="because it'll help us understand" start="00:01:00.160" video="mainVideo" id=subtitle]] +[[!template text="the Emacs extension that we're about to discuss." start="00:01:01.773" video="mainVideo" id=subtitle]] +[[!template new="1" text="In editing text, there's two main paradigms:" start="00:01:06.960" video="mainVideo" id=subtitle]] +[[!template text="one is editing at the ground level," start="00:01:12.810" video="mainVideo" id=subtitle]] +[[!template text="where the characters that we type" start="00:01:16.880" video="mainVideo" id=subtitle]] +[[!template text="actually appear on the screen," start="00:01:19.439" video="mainVideo" id=subtitle]] +[[!template text="the changes we make actually occur." start="00:01:22.159" video="mainVideo" id=subtitle]] +[[!template text="The other editing paradigm" start="00:01:28.479" video="mainVideo" id=subtitle]] +[[!template text="is where we escape to a higher level" start="00:01:30.126" video="mainVideo" id=subtitle]] +[[!template text="and now the characters that we type are not..." start="00:01:33.439" video="mainVideo" id=subtitle]] +[[!template text="They don't actually appear on the screen" start="00:01:36.479" video="mainVideo" id=subtitle]] +[[!template text="because we're not at the ground level with the text," start="00:01:39.040" video="mainVideo" id=subtitle]] +[[!template text="we are at a higher level" start="00:01:42.748" video="mainVideo" id=subtitle]] +[[!template text="looking down at the text" start="00:01:44.799" video="mainVideo" id=subtitle]] +[[!template text="and regarding the text," start="00:01:48.479" video="mainVideo" id=subtitle]] +[[!template text="referring to this world of text in terms of a language." start="00:01:50.773" video="mainVideo" id=subtitle]] +[[!template new="1" text="For instance, we could describe this" start="00:01:56.159" video="mainVideo" id=subtitle]] +[[!template text="world as having words and paragraphs and sentences and lines and so on." start="00:01:57.920" video="mainVideo" id=subtitle]] +[[!template text="We could reason about this text" start="00:02:03.404" video="mainVideo" id=subtitle]] +[[!template text="in terms of these textual entities and this textual language." start="00:02:05.985" video="mainVideo" id=subtitle]] +[[!template text="This is the second paradigm of text editing." start="00:02:13.120" video="mainVideo" id=subtitle]] +[[!template text="When we're in the second paradigm," start="00:02:18.640" video="mainVideo" id=subtitle]] +[[!template text="there is a way to go down to ground level." start="00:02:22.800" video="mainVideo" id=subtitle]] +[[!template text="You hit Enter now--or we'll hit Enter to go down to the ground level," start="00:02:25.304" video="mainVideo" id=subtitle]] +[[!template text="and you can hit Escape" start="00:02:28.997" video="mainVideo" id=subtitle]] +[[!template text="to go back out to the referential level." start="00:02:30.480" video="mainVideo" id=subtitle]] +[[!template text="Enter to go down to ground level" start="00:02:33.200" video="mainVideo" id=subtitle]] +[[!template text="and Escape to go up to the referential level." start="00:02:35.200" video="mainVideo" id=subtitle]] +[[!template new="1" text="Now, in Vim, the nouns in this world of text" start="00:02:40.160" video="mainVideo" id=subtitle]] +[[!template text="all share the same referential plane which we call normal mode." start="00:02:47.565" video="mainVideo" id=subtitle]] +[[!template text="So in normal mode, all of the nouns" start="00:02:52.319" video="mainVideo" id=subtitle]] +[[!template text="of the world of text are available," start="00:02:54.959" video="mainVideo" id=subtitle]] +[[!template text="whether it's words or sentences or paragraphs," start="00:02:57.360" video="mainVideo" id=subtitle]] +[[!template text="and they all share this same referential plane." start="00:03:00.959" video="mainVideo" id=subtitle]] +[[!template text="They compete for space on the keyboard." start="00:03:08.319" video="mainVideo" id=subtitle]] +[[!template new="1" text="An alternative way to structure these modes is" start="00:03:12.720" video="mainVideo" id=subtitle]] +[[!template text="instead of having a single mode where all the nouns coexist," start="00:03:17.037" video="mainVideo" id=subtitle]] +[[!template text="peacefully or otherwise," start="00:03:21.840" video="mainVideo" id=subtitle]] +[[!template text="you instead have a dedicated mode for every noun." start="00:03:24.005" video="mainVideo" id=subtitle]] +[[!template text="In that case, what happens is" start="00:03:30.400" video="mainVideo" id=subtitle]] +[[!template text="because your modal spaces are now much smaller," start="00:03:32.540" video="mainVideo" id=subtitle]] +[[!template text="you're just talking about words or paragraphs or lines or something," start="00:03:35.440" video="mainVideo" id=subtitle]] +[[!template text="the keys that you use" start="00:03:40.593" video="mainVideo" id=subtitle]] +[[!template text="can be much more targeted." start="00:03:42.560" video="mainVideo" id=subtitle]] +[[!template text="You can use the same keystrokes" start="00:03:45.760" video="mainVideo" id=subtitle]] +[[!template text="in all of your modes and they would have" start="00:03:48.560" video="mainVideo" id=subtitle]] +[[!template text="the same ideas behind them," start="00:03:50.400" video="mainVideo" id=subtitle]] +[[!template text="but they would have different effects" start="00:03:51.845" video="mainVideo" id=subtitle]] +[[!template text="depending on which context you're using." start="00:03:53.280" video="mainVideo" id=subtitle]] +[[!template text="It's the same keystrokes, different contexts." start="00:03:55.519" video="mainVideo" id=subtitle]] +[[!template text="The advantage of that is it's often easier to change context" start="00:03:59.120" video="mainVideo" id=subtitle]] +[[!template text="than it is to learn new key bindings." start="00:04:04.244" video="mainVideo" id=subtitle]] +[[!template new="1" text="So let's see an example of how that works." start="00:04:07.888" video="mainVideo" id=subtitle]] +[[!template text="We go into character mode, and if you look at the mode line" start="00:04:11.289" video="mainVideo" id=subtitle]] +[[!template text="at the bottom of the screen there," start="00:04:14.039" video="mainVideo" id=subtitle]] +[[!template text="you'll see that we're in character mode." start="00:04:15.439" video="mainVideo" id=subtitle]] +[[!template text="Now, when we move up, down, left, and right," start="00:04:18.720" video="mainVideo" id=subtitle]] +[[!template text="we're moving by character." start="00:04:21.955" video="mainVideo" id=subtitle]] +[[!template text="We can also transform the text," start="00:04:23.919" video="mainVideo" id=subtitle]] +[[!template text="and the transformations occur in terms of character." start="00:04:28.088" video="mainVideo" id=subtitle]] +[[!template text="You can also go into word mode." start="00:04:32.400" video="mainVideo" id=subtitle]] +[[!template text="In word mode, the transformations that you do are on words." start="00:04:34.207" video="mainVideo" id=subtitle]] +[[!template text="and you try... Your movement is also in terms of words." start="00:04:40.000" video="mainVideo" id=subtitle]] +[[!template text="So that's the level of granularity that you have." start="00:04:43.440" video="mainVideo" id=subtitle]] +[[!template text="You could also go to line mode." start="00:04:46.560" video="mainVideo" id=subtitle]] +[[!template text="When you're in line mode," start="00:04:49.191" video="mainVideo" id=subtitle]] +[[!template text="you go up and down by line," start="00:04:50.720" video="mainVideo" id=subtitle]] +[[!template text="and you can move lines" start="00:04:52.901" video="mainVideo" id=subtitle]] +[[!template text="up and down left and right and so on." start="00:04:54.240" video="mainVideo" id=subtitle]] +[[!template text="The transformations you do are in" start="00:04:59.120" video="mainVideo" id=subtitle]] +[[!template text="terms of lines." start="00:05:00.880" video="mainVideo" id=subtitle]] +[[!template text="You could also go to window mode," start="00:05:02.800" video="mainVideo" id=subtitle]] +[[!template text="where now the objects that you're referring to are windows." start="00:05:07.682" video="mainVideo" id=subtitle]] +[[!template text="You can move spatially amongst the windows" start="00:05:11.695" video="mainVideo" id=subtitle]] +[[!template text="or do transformations on the windows" start="00:05:15.578" video="mainVideo" id=subtitle]] +[[!template text="using the same keystrokes." start="00:05:17.520" video="mainVideo" id=subtitle]] +[[!template text="So let's go to..." start="00:05:25.360" video="mainVideo" id=subtitle]] +[[!template new="1" text="Right. One of the things," start="00:05:28.720" video="mainVideo" id=subtitle]] +[[!template text="the principles at play here" start="00:05:32.800" video="mainVideo" id=subtitle]] +[[!template text="is something called the Rumpelstiltskin principle," start="00:05:35.114" video="mainVideo" id=subtitle]] +[[!template text="which is something that's known in computer science." start="00:05:37.266" video="mainVideo" id=subtitle]] +[[!template text="If you can name something," start="00:05:40.720" video="mainVideo" id=subtitle]] +[[!template text="then you have power over it." start="00:05:42.113" video="mainVideo" id=subtitle]] +[[!template text="This is kind of an adaptation of that principle" start="00:05:45.824" video="mainVideo" id=subtitle]] +[[!template text="which says that if you can name something" start="00:05:48.560" video="mainVideo" id=subtitle]] +[[!template text="and if you can talk about it," start="00:05:51.123" video="mainVideo" id=subtitle]] +[[!template text="then it's a noun in your editing language." start="00:05:52.572" video="mainVideo" id=subtitle]] +[[!template text="If it's a noun, then it has..." start="00:05:56.334" video="mainVideo" id=subtitle]] +[[!template text="It's a mode. So if we can talk about it, it's a noun." start="00:05:58.960" video="mainVideo" id=subtitle]] +[[!template text="If it's a noun, then it's a mode." start="00:06:02.319" video="mainVideo" id=subtitle]] +[[!template new="1" text="One of the things we've been talking a lot about is modes." start="00:06:04.818" video="mainVideo" id=subtitle]] +[[!template text="In fact, by this principle," start="00:06:08.919" video="mainVideo" id=subtitle]] +[[!template text="modes also should be a mode." start="00:06:12.699" video="mainVideo" id=subtitle]] +[[!template text="You should have a mode that can reason" start="00:06:17.280" video="mainVideo" id=subtitle]] +[[!template text="in terms of modes as objects," start="00:06:19.039" video="mainVideo" id=subtitle]] +[[!template text="just like you have modes" start="00:06:20.639" video="mainVideo" id=subtitle]] +[[!template text="where you can reason in terms of" start="00:06:22.300" video="mainVideo" id=subtitle]] +[[!template text="words or lines as objects." start="00:06:23.759" video="mainVideo" id=subtitle]] +[[!template new="1" text="So let's do that. Let's go to mode mode." start="00:06:26.560" video="mainVideo" id=subtitle]] +[[!template text="When you go to mode mode, you see that" start="00:06:30.479" video="mainVideo" id=subtitle]] +[[!template text="the objects that are depicted here" start="00:06:34.000" video="mainVideo" id=subtitle]] +[[!template text="are the modes that are present in the buffer," start="00:06:35.915" video="mainVideo" id=subtitle]] +[[!template text="which we knew about because" start="00:06:40.960" video="mainVideo" id=subtitle]] +[[!template text="the style of editing that we had in this buffer" start="00:06:44.500" video="mainVideo" id=subtitle]] +[[!template text="was the Vim style of editing" start="00:06:46.797" video="mainVideo" id=subtitle]] +[[!template text="where there's an insert mode at the ground level" start="00:06:48.720" video="mainVideo" id=subtitle]] +[[!template text="and a normal mode that you can escape to." start="00:06:51.143" video="mainVideo" id=subtitle]] +[[!template text="You insert, enter the ground level." start="00:06:53.039" video="mainVideo" id=subtitle]] +[[!template text="Enter to the insert mode and escape to normal mode." start="00:06:57.280" video="mainVideo" id=subtitle]] +[[!template text="When you look at the mode mode representation," start="00:07:01.352" video="mainVideo" id=subtitle]] +[[!template text="you see that in fact that" start="00:07:04.647" video="mainVideo" id=subtitle]] +[[!template text="is the structure that's depicted." start="00:07:06.160" video="mainVideo" id=subtitle]] +[[!template text="But in different situations, you might find" start="00:07:10.479" video="mainVideo" id=subtitle]] +[[!template text="that these modes are not the" start="00:07:14.080" video="mainVideo" id=subtitle]] +[[!template text="ones that you want." start="00:07:16.080" video="mainVideo" id=subtitle]] +[[!template text="You want something more tailored for the specific application." start="00:07:16.922" video="mainVideo" id=subtitle]] +[[!template text="For instance, if you're editing Lisp code" start="00:07:20.880" video="mainVideo" id=subtitle]] +[[!template text="(or code in general, but" start="00:07:25.065" video="mainVideo" id=subtitle]] +[[!template text="Lisp code is a particular example)," start="00:07:27.360" video="mainVideo" id=subtitle]] +[[!template text="you might want to take advantage" start="00:07:30.880" video="mainVideo" id=subtitle]] +[[!template text="of the structure of the code." start="00:07:32.640" video="mainVideo" id=subtitle]] +[[!template text="For Lisp code in particular," start="00:07:34.852" video="mainVideo" id=subtitle]] +[[!template text="we have a mode called symex-mode" start="00:07:37.599" video="mainVideo" id=subtitle]] +[[!template text="which is able to reason about your code" start="00:07:40.960" video="mainVideo" id=subtitle]] +[[!template text="in terms of its tree structure." start="00:07:45.414" video="mainVideo" id=subtitle]] +[[!template text="So you can use the same keystrokes: hjkl goes left, right, up, and down," start="00:07:47.919" video="mainVideo" id=subtitle]] +[[!template text="but you also have other keystrokes that are more specialized to the application." start="00:07:52.397" video="mainVideo" id=subtitle]] +[[!template text="You can run the code." start="00:07:58.080" video="mainVideo" id=subtitle]] +[[!template text="We'll see that happen here in a minute." start="00:08:01.520" video="mainVideo" id=subtitle]] +[[!template text="You can make changes to it really quickly" start="00:08:06.960" video="mainVideo" id=subtitle]] +[[!template text="and see the effects of those changes." start="00:08:12.240" video="mainVideo" id=subtitle]] +[[!template text="You're doing this all in a mode" start="00:08:18.000" video="mainVideo" id=subtitle]] +[[!template text="that's convenient for this particular application," start="00:08:19.440" video="mainVideo" id=subtitle]] +[[!template text="which is editing Lisp code," start="00:08:22.625" video="mainVideo" id=subtitle]] +[[!template text="and that is, in this case, symex-mode." start="00:08:25.039" video="mainVideo" id=subtitle]] +[[!template new="1" text="Typically, when you're editing code like this," start="00:08:28.960" video="mainVideo" id=subtitle]] +[[!template text="you'd want to be in insert mode" start="00:08:31.631" video="mainVideo" id=subtitle]] +[[!template text="actually typing out the code," start="00:08:33.435" video="mainVideo" id=subtitle]] +[[!template text="and then you'd want to escape to symex mode rather than normal mode," start="00:08:36.640" video="mainVideo" id=subtitle]] +[[!template text="and then you could escape again" start="00:08:40.959" video="mainVideo" id=subtitle]] +[[!template text="and you'd end up in normal mode." start="00:08:42.021" video="mainVideo" id=subtitle]] +[[!template text="So this, if we go to mode mode, we see is depicted" start="00:08:44.080" video="mainVideo" id=subtitle]] +[[!template text="as this tower where insert is at the" start="00:08:48.000" video="mainVideo" id=subtitle]] +[[!template text="bottom and normal is at the top," start="00:08:51.040" video="mainVideo" id=subtitle]] +[[!template text="but symex-mode is in between the two." start="00:08:52.604" video="mainVideo" id=subtitle]] +[[!template text="You could also change that if you like." start="00:08:55.305" video="mainVideo" id=subtitle]] +[[!template text="If you don't want symex-mode to be there," start="00:08:57.551" video="mainVideo" id=subtitle]] +[[!template text="you could just move it to the top." start="00:08:59.566" video="mainVideo" id=subtitle]] +[[!template text="Now you find symex is at the top" start="00:09:02.187" video="mainVideo" id=subtitle]] +[[!template text="and you enter down to normal." start="00:09:04.392" video="mainVideo" id=subtitle]] +[[!template text="You can see it on the status bar at the bottom there." start="00:09:06.160" video="mainVideo" id=subtitle]] +[[!template text="Enter to insert, escape to normal, escape to symex." start="00:09:08.848" video="mainVideo" id=subtitle]] +[[!template text="In fact, you can even add more modes" start="00:09:13.839" video="mainVideo" id=subtitle]] +[[!template text="if you don't like the existing ones." start="00:09:16.344" video="mainVideo" id=subtitle]] +[[!template text="Now we have an additional mode here." start="00:09:21.519" video="mainVideo" id=subtitle]] +[[!template text="We have window mode. It goes down to symex," start="00:09:23.839" video="mainVideo" id=subtitle]] +[[!template text="it goes down to normal." start="00:09:25.855" video="mainVideo" id=subtitle]] +[[!template text="Enter the insert, escape to normal," start="00:09:27.519" video="mainVideo" id=subtitle]] +[[!template text="escape to symex, escape to window." start="00:09:29.919" video="mainVideo" id=subtitle]] +[[!template new="1" text="So we've talked... Okay, so another thing actually to note here" start="00:09:33.600" video="mainVideo" id=subtitle]] +[[!template text="is that in editing modes," start="00:09:41.232" video="mainVideo" id=subtitle]] +[[!template text="if you look at the mode line" start="00:09:45.360" video="mainVideo" id=subtitle]] +[[!template text="at the bottom of the screen," start="00:09:46.486" video="mainVideo" id=subtitle]] +[[!template text="you'll see that we are currently," start="00:09:48.399" video="mainVideo" id=subtitle]] +[[!template text="in this buffer," start="00:09:50.257" video="mainVideo" id=subtitle]] +[[!template text="we are currently in line mode." start="00:09:51.519" video="mainVideo" id=subtitle]] +[[!template text="I'm going to hit Enter now" start="00:09:54.560" video="mainVideo" id=subtitle]] +[[!template text="and you'll see that when I hit Enter," start="00:09:57.296" video="mainVideo" id=subtitle]] +[[!template text="nothing is happening." start="00:09:59.119" video="mainVideo" id=subtitle]] +[[!template text="It's still in line mode." start="00:10:00.627" video="mainVideo" id=subtitle]] +[[!template text="If you hit Escape, it's still in line mode." start="00:10:02.160" video="mainVideo" id=subtitle]] +[[!template text="You can find out the reason for that" start="00:10:05.120" video="mainVideo" id=subtitle]] +[[!template text="by taking another meta jump out of this." start="00:10:07.200" video="mainVideo" id=subtitle]] +[[!template text="You'll see that, in fact, the reason" start="00:10:10.640" video="mainVideo" id=subtitle]] +[[!template text="is that we're currently in line mode," start="00:10:12.800" video="mainVideo" id=subtitle]] +[[!template text="and line mode is the only one available" start="00:10:15.279" video="mainVideo" id=subtitle]] +[[!template text="in this tower" start="00:10:17.360" video="mainVideo" id=subtitle]] +[[!template text="for editing the modes that are" start="00:10:19.519" video="mainVideo" id=subtitle]] +[[!template text="in operation in your ground level." start="00:10:21.556" video="mainVideo" id=subtitle]] +[[!template text="In fact, line mode is all you need here," start="00:10:24.880" video="mainVideo" id=subtitle]] +[[!template text="because this is just the nature of how these modes are laid out is in rows." start="00:10:26.898" video="mainVideo" id=subtitle]] +[[!template text="So line mode is the most appropriate thing here." start="00:10:32.796" video="mainVideo" id=subtitle]] +[[!template text="But you could change it to something else if you like." start="00:10:36.399" video="mainVideo" id=subtitle]] +[[!template new="1" text="Now we've seen two towers." start="00:10:40.959" video="mainVideo" id=subtitle]] +[[!template text="We've seen the Vim tower and we've seen also the symex tower, the Lisp tower." start="00:10:43.659" video="mainVideo" id=subtitle]] +[[!template text="It turns out that, because we've been talking about towers now," start="00:10:53.680" video="mainVideo" id=subtitle]] +[[!template text="by the Rumpelstiltskin principle, towers also can be talked about," start="00:10:58.880" video="mainVideo" id=subtitle]] +[[!template text="and therefore they also are a mode." start="00:11:06.399" video="mainVideo" id=subtitle]] +[[!template text="So how do we go to tower mode?" start="00:11:09.127" video="mainVideo" id=subtitle]] +[[!template text="The way we go to tower mode is" start="00:11:11.200" video="mainVideo" id=subtitle]] +[[!template text="we go in a slightly different direction," start="00:11:14.640" video="mainVideo" id=subtitle]] +[[!template text="and we find that we are now in tower mode." start="00:11:19.200" video="mainVideo" id=subtitle]] +[[!template text="We see that there are many towers available. We're now..." start="00:11:23.360" video="mainVideo" id=subtitle]] +[[!template text="We're seeing several possible towers" start="00:11:29.279" video="mainVideo" id=subtitle]] +[[!template text="that we have written to be available and for use in different buffers." start="00:11:33.440" video="mainVideo" id=subtitle]] +[[!template text="You can edit them on the fly." start="00:11:40.344" video="mainVideo" id=subtitle]] +[[!template text="For instance, let's enter this tower." start="00:11:42.110" video="mainVideo" id=subtitle]] +[[!template text="Now you see that in the bottom of the..." start="00:11:48.000" video="mainVideo" id=subtitle]] +[[!template text="In the mode line, you see that we're" start="00:11:50.180" video="mainVideo" id=subtitle]] +[[!template text="going across all of these different modes" start="00:11:51.519" video="mainVideo" id=subtitle]] +[[!template text="that were in the tower." start="00:11:53.944" video="mainVideo" id=subtitle]] +[[!template text="You could escape and you could even move things around." start="00:11:56.480" video="mainVideo" id=subtitle]] +[[!template text="You could put window mode" start="00:11:59.724" video="mainVideo" id=subtitle]] +[[!template text="all the way at the bottom," start="00:12:00.880" video="mainVideo" id=subtitle]] +[[!template text="right above insert mode." start="00:12:02.573" video="mainVideo" id=subtitle]] +[[!template text="Let's see that happen. There it is," start="00:12:04.079" video="mainVideo" id=subtitle]] +[[!template text="window is right above insert, and so on." start="00:12:06.479" video="mainVideo" id=subtitle]] +[[!template text="The tower always reflects your current position," start="00:12:10.444" video="mainVideo" id=subtitle]] +[[!template text="so if you're in buffer mode here and you go down to line mode," start="00:12:14.240" video="mainVideo" id=subtitle]] +[[!template text="when you go back to mode mode, you see that we are in line mode." start="00:12:17.600" video="mainVideo" id=subtitle]] +[[!template text="But in practice, you wouldn't have a tower this elaborate" start="00:12:22.480" video="mainVideo" id=subtitle]] +[[!template text="because you'd rather have several smaller towers you enter," start="00:12:25.620" video="mainVideo" id=subtitle]] +[[!template text="that you alternate between." start="00:12:29.440" video="mainVideo" id=subtitle]] +[[!template new="1" text="Okay. So one other thing of interest here is that" start="00:12:33.360" video="mainVideo" id=subtitle]] +[[!template text="when you're in tower mode," start="00:12:39.839" video="mainVideo" id=subtitle]] +[[!template text="if you look at the status line at the bottom there," start="00:12:42.240" video="mainVideo" id=subtitle]] +[[!template text="we are currently in buffer mode while we are in tower mode." start="00:12:44.740" video="mainVideo" id=subtitle]] +[[!template text="Tower mode actually isn't a mode really. Neither is mode mode." start="00:12:49.839" video="mainVideo" id=subtitle]] +[[!template text="They're really referential planes or meta planes." start="00:12:53.151" video="mainVideo" id=subtitle]] +[[!template text="In any case, you can see that we're in buffer mode." start="00:12:58.000" video="mainVideo" id=subtitle]] +[[!template text="We can take a meta jump out of this" start="00:13:01.679" video="mainVideo" id=subtitle]] +[[!template text="to confirm that buffer mode is the only mode available" start="00:13:03.840" video="mainVideo" id=subtitle]] +[[!template text="when we're editing towers" start="00:13:08.000" video="mainVideo" id=subtitle]] +[[!template text="because that's the one we need," start="00:13:09.664" video="mainVideo" id=subtitle]] +[[!template text="given that our towers are represented in individual buffers." start="00:13:11.915" video="mainVideo" id=subtitle]] +[[!template new="1" text="Right. So let's see where we're at." start="00:13:23.200" video="mainVideo" id=subtitle]] +[[!template text="Rumpelstiltskin principle..." start="00:13:26.320" video="mainVideo" id=subtitle]] +[[!template text="We talked about mode mode." start="00:13:27.785" video="mainVideo" id=subtitle]] +[[!template text="We talked about the strange loop" start="00:13:30.160" video="mainVideo" id=subtitle]] +[[!template text="application of ground level modes in meta levels." start="00:13:32.240" video="mainVideo" id=subtitle]] +[[!template text="We saw the different towers," start="00:13:39.600" video="mainVideo" id=subtitle]] +[[!template text="and in fact, we're currently in Vim tower," start="00:13:41.992" video="mainVideo" id=subtitle]] +[[!template text="where you can go to Emacs tower." start="00:13:50.720" video="mainVideo" id=subtitle]] +[[!template text="Now, with a single keystroke, you can" start="00:13:52.860" video="mainVideo" id=subtitle]] +[[!template text="alternate between Emacs and Vim," start="00:13:54.720" video="mainVideo" id=subtitle]] +[[!template text="which are represented--" start="00:13:59.695" video="mainVideo" id=subtitle]] +[[!template text="which are modeled as towers." start="00:14:01.638" video="mainVideo" id=subtitle]] +[[!template new="1" text="So there's... One thing" start="00:14:13.360" video="mainVideo" id=subtitle]] +[[!template text="that we've sort of alluded to is that there are two directions" start="00:14:14.760" video="mainVideo" id=subtitle]] +[[!template text="that you can travel in" start="00:14:18.160" video="mainVideo" id=subtitle]] +[[!template text="when you're going through this framework." start="00:14:19.494" video="mainVideo" id=subtitle]] +[[!template text="One direction is--and we'll visualize it like so..." start="00:14:22.399" video="mainVideo" id=subtitle]] +[[!template text="There's two directions you can travel," start="00:14:33.760" video="mainVideo" id=subtitle]] +[[!template text="and you can either go sideways or you" start="00:14:35.120" video="mainVideo" id=subtitle]] +[[!template text="can go up and down." start="00:14:37.040" video="mainVideo" id=subtitle]] +[[!template text="If you go sideways, you're changing your perspective." start="00:14:38.399" video="mainVideo" id=subtitle]] +[[!template text="So normal mode, word mode, line mode," start="00:14:41.680" video="mainVideo" id=subtitle]] +[[!template text="window mode, and so on" start="00:14:45.440" video="mainVideo" id=subtitle]] +[[!template text="are all different perspectives on your ground editing experience." start="00:14:46.544" video="mainVideo" id=subtitle]] +[[!template text="The other direction you can travel in" start="00:14:51.680" video="mainVideo" id=subtitle]] +[[!template text="is up or down, which takes you through meta levels." start="00:14:53.265" video="mainVideo" id=subtitle]] +[[!template text="So you go from the ground level editing experience," start="00:14:56.811" video="mainVideo" id=subtitle]] +[[!template text="up to mode mode, and then up to the tower plane, and so on, and so on." start="00:14:59.600" video="mainVideo" id=subtitle]] +[[!template new="1" text="So this all sounds very complex," start="00:15:07.040" video="mainVideo" id=subtitle]] +[[!template text="but the truth is it's not really that complicated," start="00:15:12.568" video="mainVideo" id=subtitle]] +[[!template text="even though it feels that way." start="00:15:18.160" video="mainVideo" id=subtitle]] +[[!template text="The reason it isn't that complicated" start="00:15:20.699" video="mainVideo" id=subtitle]] +[[!template text="is because no matter how many levels" start="00:15:22.959" video="mainVideo" id=subtitle]] +[[!template text="up or down you go and no matter where you are," start="00:15:26.480" video="mainVideo" id=subtitle]] +[[!template text="whether you're in at the ground level" start="00:15:30.160" video="mainVideo" id=subtitle]] +[[!template text="editing the actual text" start="00:15:32.399" video="mainVideo" id=subtitle]] +[[!template text="or whether you're at a meta level," start="00:15:34.079" video="mainVideo" id=subtitle]] +[[!template text="some unknown meta level and you don't know where you are," start="00:15:35.802" video="mainVideo" id=subtitle]] +[[!template text="no matter where you are," start="00:15:39.279" video="mainVideo" id=subtitle]] +[[!template text="the way in which you interact with it" start="00:15:41.133" video="mainVideo" id=subtitle]] +[[!template text="is the same at every level." start="00:15:44.399" video="mainVideo" id=subtitle]] +[[!template text="That is the great power of this approach:" start="00:15:47.519" video="mainVideo" id=subtitle]] +[[!template text="that all of the different levels are the same." start="00:15:54.751" video="mainVideo" id=subtitle]] +[[!template text="In fact, the complexity of the whole" start="00:16:00.880" video="mainVideo" id=subtitle]] +[[!template text="is exactly identical to" start="00:16:03.839" video="mainVideo" id=subtitle]] +[[!template text="the complexity of each part," start="00:16:05.545" video="mainVideo" id=subtitle]] +[[!template text="so if you know how to edit words" start="00:16:07.657" video="mainVideo" id=subtitle]] +[[!template text="in the ground level buffer" start="00:16:10.000" video="mainVideo" id=subtitle]] +[[!template text="and you know how to move lines around using line mode," start="00:16:12.048" video="mainVideo" id=subtitle]] +[[!template text="then you know how to edit any aspect of your editing experience at any level." start="00:16:15.378" video="mainVideo" id=subtitle]] +[[!template new="1" text="So this is a pre-release demo." start="00:16:30.079" video="mainVideo" id=subtitle]] +[[!template text="This doesn't exist on MELPA yet, but you can follow updates at this repo on github." start="00:16:31.780" video="mainVideo" id=subtitle]] +[[!template text="If you can also be a beta tester" start="00:16:40.079" video="mainVideo" id=subtitle]] +[[!template text="or something like that, if you like, that would be very helpful." start="00:16:43.850" video="mainVideo" id=subtitle]] +[[!template text="You can learn more about this at" start="00:16:46.775" video="mainVideo" id=subtitle]] +[[!template text="drym.org, which is where I house" start="00:16:50.560" video="mainVideo" id=subtitle]] +[[!template text="the research that I work on." start="00:16:53.920" video="mainVideo" id=subtitle]] +[[!template text="In particular, the research on epistemic levels" start="00:16:55.726" video="mainVideo" id=subtitle]] +[[!template text="is what inspired this particular Emacs extension." start="00:17:00.154" video="mainVideo" id=subtitle]] +[[!template text="You can also learn about" start="00:17:03.600" video="mainVideo" id=subtitle]] +[[!template text="dialectical inheritance attribution, which is the basis of" start="00:17:05.600" video="mainVideo" id=subtitle]] +[[!template text="a new economic system that could be fair" start="00:17:10.880" video="mainVideo" id=subtitle]] +[[!template text="and could lead to a prosperous and happy world." start="00:17:14.559" video="mainVideo" id=subtitle]] +[[!template text="You can follow me on Twitter at @countvajhula." start="00:17:19.439" video="mainVideo" id=subtitle]] +[[!template text="That's it! Thank you." start="00:17:26.319" video="mainVideo" id=subtitle]] diff --git a/2020/info/15.md b/2020/info/15.md index 98c711e1..297b6cfe 100644 --- a/2020/info/15.md +++ b/2020/info/15.md @@ -53,100 +53,27 @@ website. <a name="transcript"></a> # Transcript -00:00:00.080 --> 00:00:03.120 -Adolfo: Okay, excellent. - -00:00:03.120 --> 00:00:06.960 -Hello, everyone and - -00:00:06.960 --> 00:00:10.080 -nice meeting you. Let me - -00:00:10.080 --> 00:00:12.400 -thank the the organizer for all the - -00:00:12.400 --> 00:00:13.920 -organization and all the work they are - -00:00:13.920 --> 00:00:15.200 -doing to support us. - -00:00:15.200 --> 00:00:18.400 -My name is Adolfo Villafiorita. - -00:00:18.400 --> 00:00:20.733 -I'm teaching at the University of -Trento. - -00:00:20.733 --> 00:00:24.480 -I will shortly be working at - -00:00:24.480 --> 00:00:26.240 -shared.tech, which is - -00:00:26.240 --> 00:00:29.359 -a non-profit organization developing - -00:00:29.359 --> 00:00:30.530 -applications to - -00:00:32.399 --> 00:00:35.680 -recover surplus food. - -00:00:35.680 --> 00:00:38.600 -The reason of the talk today - -00:00:38.600 --> 00:00:40.079 -and the reason I'm here today - -00:00:40.079 --> 00:00:42.719 -is to talk about my experience in moving - -00:00:42.719 --> 00:00:47.200 -from Jekyll static website generator to -Org Mode. - -00:00:47.200 --> 00:00:50.700 -The reason I moved to Org Mode - -00:00:50.700 --> 00:00:53.100 -is to have better support for - -00:00:53.100 --> 00:00:56.800 -literate programming on the websites - -00:00:56.800 --> 00:00:58.399 -at the University of Trento, where we - -00:00:58.399 --> 00:01:00.480 -make available the content for the - -00:01:00.480 --> 00:01:04.720 -the students. - -00:01:04.720 --> 00:01:08.900 -First of all, what is a static -website generator? - -00:01:08.900 --> 00:01:10.080 -It is basically a tool which - -00:01:10.080 --> 00:01:11.360 -allows you to - -00:01:11.360 --> 00:01:15.360 -generate HTML files out of text files - -00:01:15.360 --> 00:01:17.439 -containing basically two types of - -00:01:17.439 --> 00:01:20.700 -information: metadata and content. +00:00:00.080 --> 00:00:03.120 Adolfo: Okay, excellent. Hello, everyone +and nice meeting you. Let me thank the the organizer for all the +organization and all the work they are doing to support us. My name is +Adolfo Villafiorita. I'm teaching at the University of Trento. I will +shortly be working at shared.tech, which is a non-profit organization +developing applications to recover surplus food. + +00:00:35.680 --> 00:00:38.600 The reason of the talk today and the +reason I'm here today is to talk about my experience in moving from +Jekyll static website generator to Org Mode. The reason I moved to Org +Mode is to have better support for literate programming on the +websites at the University of Trento, where we make available the +content for the the students. + +00:01:04.720 --> 00:01:08.900 First of all, what is a static website +generator? It is basically a tool which allows you to generate HTML +files out of text files containing basically two types of information: +metadata and content. 00:01:20.700 --> 00:01:23.119 Metadata is a - -00:01:23.119 --> 00:01:26.159 set of key pairs describing the 00:01:26.159 --> 00:01:28.560 diff --git a/2020/info/20.md b/2020/info/20.md index 4e346503..51024c41 100644 --- a/2020/info/20.md +++ b/2020/info/20.md @@ -1,8 +1,9 @@ # OMG Macros Corwin Brust -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]] -[Download compressed .webm video (24.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm) +[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]] +[Download compressed .webm video (24.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm) +[View transcript](#transcript) Macros are a powerful tool. In the context of Emacs Lisp programming they can also provide us with a "foot-gun" of immense proportions. @@ -47,3 +48,486 @@ Macros are powerful and necessary. Consider how you use them? ## Do you mind if I use your macro code as inspiration for an elisp uglifier? Have At! It's GPLv3 and you are welcome; let me know if you have any trouble finding fruit to throw. + +<a name="transcript"></a> +# Transcript + +[[!template id=subtitle video="mainVideo" start="00:00:00.480" text="Good evening again. I think"]] +[[!template id=subtitle video="mainVideo" start="00:00:02.796" text="I have a little time here"]] +[[!template id=subtitle video="mainVideo" start="00:00:04.319" text="to talk about macros."]] +[[!template id=subtitle video="mainVideo" start="00:00:06.447" text="Is there still room in our schedule for that,"]] +[[!template id=subtitle video="mainVideo" start="00:00:09.440" text="or should I just jump to some of"]] +[[!template id=subtitle video="mainVideo" start="00:00:11.440" text="my thoughts on the day?"]] +[[!template id=subtitle video="mainVideo" start="00:00:12.559" text="(Amin: Pretty sure we"]] +[[!template id=subtitle video="mainVideo" start="00:00:15.920" text="have some time.)"]] +[[!template id=subtitle video="mainVideo" start="00:00:17.039" text="Corwin: All right. Great. (Amin: Yeah, go for it.)"]] +[[!template id=subtitle video="mainVideo" start="00:00:19.039" text="Well, I'll just dive into my"]] +[[!template id=subtitle video="mainVideo" start="00:00:20.720" text="prepared thing here then."]] +[[!template id=subtitle video="mainVideo" start="00:00:22.384" text="(Amin: yeah, actually, you're right on time, so...)"]] +[[!template id=subtitle video="mainVideo" start="00:00:24.720" text="Corwin: oh what an amazing thing."]] +[[!template id=subtitle video="mainVideo" start="00:00:27.664" text="I just... You know, I have been trying to do what I..."]] +[[!template id=subtitle video="mainVideo" start="00:00:31.199" text="I've got a big thank you planned"]] +[[!template id=subtitle video="mainVideo" start="00:00:33.040" text="at the end, but let me just say,"]] +[[!template id=subtitle video="mainVideo" start="00:00:36.239" text="it's been really cool to watch the"]] +[[!template id=subtitle video="mainVideo" start="00:00:39.200" text="way that people work together."]] +[[!template id=subtitle video="mainVideo" start="00:00:42.160" text="(Amin: Absolutely. It's... This whole event today has been"]] +[[!template id=subtitle video="mainVideo" start="00:00:46.800" text="nothing but awesome, and"]] +[[!template id=subtitle video="mainVideo" start="00:00:50.879" text="no little part thanks to all of the help"]] +[[!template id=subtitle video="mainVideo" start="00:00:53.120" text="from all of you guys and everyone."]] +[[!template id=subtitle video="mainVideo" start="00:00:56.909" text="Yeah, it's awesome."]] +[[!template id=subtitle video="mainVideo" start="00:00:59.120" text="With that, I'll just shut up for now."]] +[[!template id=subtitle video="mainVideo" start="00:01:03.065" text="Take it away, Corwin.)"]] +[[!template id=subtitle video="mainVideo" start="00:01:04.891" text="Corwin: Who knows how to make"]] +[[!template id=subtitle video="mainVideo" start="00:01:06.479" text="make that the default in good old smex?"]] + +[[!template id=subtitle video="mainVideo" start="00:01:09.840" text="All right. So I'm gonna try to continue"]] +[[!template id=subtitle video="mainVideo" start="00:01:12.799" text="my theme from the previous talk."]] +[[!template id=subtitle video="mainVideo" start="00:01:14.551" text="I'm a longtime Emacs user,"]] +[[!template id=subtitle video="mainVideo" start="00:01:16.393" text="but I'm a pretty new person"]] +[[!template id=subtitle video="mainVideo" start="00:01:20.240" text="to trying to really understand"]] +[[!template id=subtitle video="mainVideo" start="00:01:22.380" text="what's going on within Emacs and make"]] +[[!template id=subtitle video="mainVideo" start="00:01:24.960" text="my customizations to it--simple for"]] +[[!template id=subtitle video="mainVideo" start="00:01:28.240" text="what I tend to just think of will work."]] +[[!template id=subtitle video="mainVideo" start="00:01:30.960" text="And maybe that's a nice bow"]] +[[!template id=subtitle video="mainVideo" start="00:01:33.566" text="to put on that earlier talk."]] +[[!template id=subtitle video="mainVideo" start="00:01:40.479" text="Let's see here now. It's C-x M-i."]] +[[!template id=subtitle video="mainVideo" start="00:01:44.981" text="That's right."]] +[[!template id=subtitle video="mainVideo" start="00:01:48.159" text="And let's try that again. Okay, good."]] +[[!template id=subtitle video="mainVideo" start="00:01:52.960" text="So demoing is fun,"]] +[[!template id=subtitle video="mainVideo" start="00:01:55.240" text="but I will save most of that"]] +[[!template id=subtitle video="mainVideo" start="00:01:57.192" text="for tomorrow where my"]] +[[!template id=subtitle video="mainVideo" start="00:01:59.759" text="dear friend and co-collaborator"]] +[[!template id=subtitle video="mainVideo" start="00:02:02.750" text="in bringing you the dungeon-mode project,"]] +[[!template id=subtitle video="mainVideo" start="00:02:04.799" text="which is sort of the exciting thing"]] +[[!template id=subtitle video="mainVideo" start="00:02:07.261" text="that we hope you'll be interested in,"]] +[[!template id=subtitle video="mainVideo" start="00:02:10.800" text="gets a little more of a reveal."]] + +[[!template id=subtitle video="mainVideo" start="00:02:15.680" text="Tonight, I'll just close saying"]] +[[!template id=subtitle video="mainVideo" start="00:02:19.360" text="a few things about the process of"]] +[[!template id=subtitle video="mainVideo" start="00:02:22.640" text="making it and continuing my theme of community."]] +[[!template id=subtitle video="mainVideo" start="00:02:25.680" text="First of all, a specific and upfront shout out"]] +[[!template id=subtitle video="mainVideo" start="00:02:29.760" text="to tv's wasamasa who"]] +[[!template id=subtitle video="mainVideo" start="00:02:33.120" text="absolutely shaped and guided this"]] +[[!template id=subtitle video="mainVideo" start="00:02:36.239" text="this program. I may have taken out"]] +[[!template id=subtitle video="mainVideo" start="00:02:38.582" text="a slide with your name on it,"]] +[[!template id=subtitle video="mainVideo" start="00:02:39.898" text="but thank you."]] + +[[!template id=subtitle video="mainVideo" start="00:02:43.599" text="So when we think about Emacs macros"]] +[[!template id=subtitle video="mainVideo" start="00:02:46.479" text="and the power that they give us,"]] +[[!template id=subtitle video="mainVideo" start="00:02:53.280" text="I think about them as a really"]] +[[!template id=subtitle video="mainVideo" start="00:02:54.720" text="deep rabbit hole. They confuse"]] +[[!template id=subtitle video="mainVideo" start="00:02:56.400" text="people a lot. And so, to try to center"]] +[[!template id=subtitle video="mainVideo" start="00:03:00.239" text="myself on that, I remember first that"]] +[[!template id=subtitle video="mainVideo" start="00:03:03.599" text="they're going to be talking to us about code."]] +[[!template id=subtitle video="mainVideo" start="00:03:09.599" text="Excuse me, I realize I hadn't set my timer."]] +[[!template id=subtitle video="mainVideo" start="00:03:13.519" text="Here we are."]] + +[[!template id=subtitle video="mainVideo" start="00:03:18.000" text="So a simple macro syntax is"]] +[[!template id=subtitle video="mainVideo" start="00:03:20.543" text="going to generate"]] +[[!template id=subtitle video="mainVideo" start="00:03:22.239" text="something that is implicitly confusing"]] +[[!template id=subtitle video="mainVideo" start="00:03:25.920" text="to somebody that knows the syntax"]] +[[!template id=subtitle video="mainVideo" start="00:03:27.657" text="of Emacs Lisp well."]] +[[!template id=subtitle video="mainVideo" start="00:03:28.988" text="We see something like this"]] +[[!template id=subtitle video="mainVideo" start="00:03:30.785" text="and a veteran eye says"]] +[[!template id=subtitle video="mainVideo" start="00:03:32.784" text=""That x isn't quoted. What's going on?""]] +[[!template id=subtitle video="mainVideo" start="00:03:36.239" text="but it can be hard to miss."]] +[[!template id=subtitle video="mainVideo" start="00:03:39.840" text="A lot of the functions (as we'll talk"]] +[[!template id=subtitle video="mainVideo" start="00:03:43.040" text="about in a moment) that are built into Emacs"]] +[[!template id=subtitle video="mainVideo" start="00:03:46.640" text="really are macros, so a lot of"]] +[[!template id=subtitle video="mainVideo" start="00:03:48.572" text="Emacs features work this way."]] +[[!template id=subtitle video="mainVideo" start="00:03:50.480" text="It might be scary, but we have to look at"]] +[[!template id=subtitle video="mainVideo" start="00:03:53.040" text="it closely if we really want to get"]] +[[!template id=subtitle video="mainVideo" start="00:03:54.640" text="friendly with Emacs."]] + +[[!template id=subtitle video="mainVideo" start="00:03:58.400" text="Let's just jump right into defmacro,"]] +[[!template id=subtitle video="mainVideo" start="00:04:01.439" text="which is our key entry point."]] +[[!template id=subtitle video="mainVideo" start="00:04:04.720" text="The notes from this talk"]] +[[!template id=subtitle video="mainVideo" start="00:04:05.833" text="include the link to that,"]] +[[!template id=subtitle video="mainVideo" start="00:04:09.420" text="which... Definitely"]] +[[!template id=subtitle video="mainVideo" start="00:04:12.000" text="read through a couple of times."]] +[[!template id=subtitle video="mainVideo" start="00:04:14.640" text="That may take you through"]] +[[!template id=subtitle video="mainVideo" start="00:04:16.000" text="into the cl-def macro, which adds"]] +[[!template id=subtitle video="mainVideo" start="00:04:19.440" text="the Common Lisp extensions."]] +[[!template id=subtitle video="mainVideo" start="00:04:23.440" text="Definitely challenging."]] +[[!template id=subtitle video="mainVideo" start="00:04:28.080" text="I've struggled there,"]] +[[!template id=subtitle video="mainVideo" start="00:04:30.560" text="as we'll take a look at"]] +[[!template id=subtitle video="mainVideo" start="00:04:31.759" text="in a moment."]] +[[!template id=subtitle video="mainVideo" start="00:04:34.800" text="So I haven't played too much with"]] +[[!template id=subtitle video="mainVideo" start="00:04:36.266" text="cl-maclet. Perhaps success in"]] +[[!template id=subtitle video="mainVideo" start="00:04:38.320" text="in that keyword space"]] +[[!template id=subtitle video="mainVideo" start="00:04:40.804" text="and figuring out what the right balance is there"]] +[[!template id=subtitle video="mainVideo" start="00:04:44.320" text="will give me the confidence to try"]] +[[!template id=subtitle video="mainVideo" start="00:04:46.000" text="some more lexical macros."]] + +[[!template id=subtitle video="mainVideo" start="00:04:51.680" text="Let me also briefly introduce"]] +[[!template id=subtitle video="mainVideo" start="00:04:53.402" text="the comma (,) and back quote (`)."]] +[[!template id=subtitle video="mainVideo" start="00:04:55.134" text="If you have allowed your eyes"]] +[[!template id=subtitle video="mainVideo" start="00:04:57.389" text="to cross when you see these,"]] +[[!template id=subtitle video="mainVideo" start="00:04:59.321" text="that's not a shameful, shameful thing."]] +[[!template id=subtitle video="mainVideo" start="00:05:03.113" text="It's confusing, and we should be"]] +[[!template id=subtitle video="mainVideo" start="00:05:06.080" text="alerting each other"]] +[[!template id=subtitle video="mainVideo" start="00:05:07.543" text="when we stick macros in,"]] +[[!template id=subtitle video="mainVideo" start="00:05:09.520" text="often by putting them in"]] +[[!template id=subtitle video="mainVideo" start="00:05:11.199" text="different library spaces"]] +[[!template id=subtitle video="mainVideo" start="00:05:12.255" text="for complicated projects,"]] +[[!template id=subtitle video="mainVideo" start="00:05:14.160" text="or otherwise warning people"]] +[[!template id=subtitle video="mainVideo" start="00:05:17.520" text="that this is not an interactive function,"]] +[[!template id=subtitle video="mainVideo" start="00:05:19.520" text="even if you get away with using it like one."]] +[[!template id=subtitle video="mainVideo" start="00:05:22.639" text="Watch your back."]] + +[[!template id=subtitle video="mainVideo" start="00:05:26.000" text="The manual itself talks about macros"]] +[[!template id=subtitle video="mainVideo" start="00:05:32.800" text="as being a way of evaluating,"]] +[[!template id=subtitle video="mainVideo" start="00:05:35.840" text="as being an evaluator that will take"]] +[[!template id=subtitle video="mainVideo" start="00:05:39.993" text="our Emacs Lisp expression"]] +[[!template id=subtitle video="mainVideo" start="00:05:42.800" text="and the set of forms that"]] +[[!template id=subtitle video="mainVideo" start="00:05:44.800" text="will feed to it our code,"]] +[[!template id=subtitle video="mainVideo" start="00:05:48.960" text="but it also provides us with"]] +[[!template id=subtitle video="mainVideo" start="00:05:50.792" text="this concept of an environment."]] +[[!template id=subtitle video="mainVideo" start="00:05:53.467" text="That's really where the power comes in."]] +[[!template id=subtitle video="mainVideo" start="00:05:57.027" text="Through that, we can have"]] +[[!template id=subtitle video="mainVideo" start="00:05:58.240" text="lexical variables and"]] +[[!template id=subtitle video="mainVideo" start="00:06:00.080" text="think about--bring in some of the"]] +[[!template id=subtitle video="mainVideo" start="00:06:03.199" text="capabilities that"]] +[[!template id=subtitle video="mainVideo" start="00:06:06.400" text="can be harder to reach with"]] +[[!template id=subtitle video="mainVideo" start="00:06:09.759" text="a pure declarative statement that"]] +[[!template id=subtitle video="mainVideo" start="00:06:13.840" text="doesn't allow for top level"]] +[[!template id=subtitle video="mainVideo" start="00:06:21.440" text="asynchronous... Asynchronicity..."]] +[[!template id=subtitle video="mainVideo" start="00:06:28.639" text="I'm gonna basically"]] +[[!template id=subtitle video="mainVideo" start="00:06:33.520" text="ignore the byte-compilation phase"]] +[[!template id=subtitle video="mainVideo" start="00:06:35.577" text="for this talk"]] +[[!template id=subtitle video="mainVideo" start="00:06:36.880" text="in order to have any prayer"]] +[[!template id=subtitle video="mainVideo" start="00:06:38.463" text="of getting through it in the"]] +[[!template id=subtitle video="mainVideo" start="00:06:39.919" text="remaining 9 or 11 minutes or whatever."]] +[[!template id=subtitle video="mainVideo" start="00:06:43.600" text="But suffice to say, that's a scary space,"]] +[[!template id=subtitle video="mainVideo" start="00:06:50.441" text="and that's really"]] +[[!template id=subtitle video="mainVideo" start="00:06:52.240" text="the thing that you want to"]] +[[!template id=subtitle video="mainVideo" start="00:06:53.800" text="start learning about"]] +[[!template id=subtitle video="mainVideo" start="00:06:55.277" text="as you think about"]] +[[!template id=subtitle video="mainVideo" start="00:06:57.199" text="taking macros on in earnest."]] + +[[!template id=subtitle video="mainVideo" start="00:07:02.160" text="Coming back to the comma syntax,"]] +[[!template id=subtitle video="mainVideo" start="00:07:05.919" text="then, having given ourselves a"]] +[[!template id=subtitle video="mainVideo" start="00:07:09.759" text="working definition for the Emacs Lisp"]] +[[!template id=subtitle video="mainVideo" start="00:07:12.479" text="runtime environment, then we can say that"]] +[[!template id=subtitle video="mainVideo" start="00:07:14.479" text="macros are going to"]] +[[!template id=subtitle video="mainVideo" start="00:07:15.840" text="inject code back into that stream,"]] +[[!template id=subtitle video="mainVideo" start="00:07:21.120" text="whereas backquote (`)"]] +[[!template id=subtitle video="mainVideo" start="00:07:25.280" text="is going to give code back."]] +[[!template id=subtitle video="mainVideo" start="00:07:28.479" text="to the stream--or interject, sorry,"]] +[[!template id=subtitle video="mainVideo" start="00:07:31.919" text="it's going to interject"]] +[[!template id=subtitle video="mainVideo" start="00:07:33.632" text="back into the stream."]] +[[!template id=subtitle video="mainVideo" start="00:07:35.360" text="Sort of an exclamatory "Excuse me,"]] +[[!template id=subtitle video="mainVideo" start="00:07:39.840" text="I'd like to have a value here." We can take that value"]] +[[!template id=subtitle video="mainVideo" start="00:07:46.966" text="from the environment as it exists"]] +[[!template id=subtitle video="mainVideo" start="00:07:48.639" text="when our macro is evaluated."]] +[[!template id=subtitle video="mainVideo" start="00:07:54.160" text="Backquote, on the other hand,"]] +[[!template id=subtitle video="mainVideo" start="00:07:56.003" text="takes the result from that"]] +[[!template id=subtitle video="mainVideo" start="00:08:00.560" text="and returns it back to the stream"]] +[[!template id=subtitle video="mainVideo" start="00:08:02.201" text="for evaluation at the"]] +[[!template id=subtitle video="mainVideo" start="00:08:03.467" text="processing level that invoked us."]] +[[!template id=subtitle video="mainVideo" start="00:08:05.680" text="So in other words, perhaps back up to"]] +[[!template id=subtitle video="mainVideo" start="00:08:08.720" text="a top-level eval expression where our"]] +[[!template id=subtitle video="mainVideo" start="00:08:10.960" text="macro is invoked."]] + +[[!template id=subtitle video="mainVideo" start="00:08:20.080" text="I'm going to briefly bring"]] +[[!template id=subtitle video="mainVideo" start="00:08:22.560" text="you back to the game"]] +[[!template id=subtitle video="mainVideo" start="00:08:23.759" text="for just a moment."]] +[[!template id=subtitle video="mainVideo" start="00:08:30.240" text="I won't linger on this slide,"]] +[[!template id=subtitle video="mainVideo" start="00:08:32.479" text="but briefly: this is a"]] +[[!template id=subtitle video="mainVideo" start="00:08:37.039" text="role-playing, pen and pencil,"]] +[[!template id=subtitle video="mainVideo" start="00:08:41.615" text="physical dice tradition"]] +[[!template id=subtitle video="mainVideo" start="00:08:43.829" text="that dates back a long time"]] +[[!template id=subtitle video="mainVideo" start="00:08:46.320" text="from a technology perspective."]] +[[!template id=subtitle video="mainVideo" start="00:08:48.080" text="It's old in the same way"]] +[[!template id=subtitle video="mainVideo" start="00:08:50.727" text="that other tools that I like are old."]] +[[!template id=subtitle video="mainVideo" start="00:08:58.560" text="It's simple to understand."]] +[[!template id=subtitle video="mainVideo" start="00:09:00.185" text="I can communicate a lot with it"]] +[[!template id=subtitle video="mainVideo" start="00:09:01.873" text="with a simple amount of typing"]] +[[!template id=subtitle video="mainVideo" start="00:09:03.952" text="or scribbling something on a piece of paper."]] +[[!template id=subtitle video="mainVideo" start="00:09:09.120" text="It has a complicated problem space of its own."]] + +[[!template id=subtitle video="mainVideo" start="00:09:13.500" text="Again, I don't want to"]] +[[!template id=subtitle video="mainVideo" start="00:09:15.519" text="get too much into the game here,"]] +[[!template id=subtitle video="mainVideo" start="00:09:18.212" text="but in this talk,"]] +[[!template id=subtitle video="mainVideo" start="00:09:20.177" text="for the last five minutes,"]] +[[!template id=subtitle video="mainVideo" start="00:09:22.590" text="I'll focus on the process"]] +[[!template id=subtitle video="mainVideo" start="00:09:24.751" text="that we took to"]] +[[!template id=subtitle video="mainVideo" start="00:09:26.640" text="automate getting data out of"]] +[[!template id=subtitle video="mainVideo" start="00:09:29.190" text="the Org Mode tables which eventually"]] +[[!template id=subtitle video="mainVideo" start="00:09:31.564" text="(as we'll talk about more tomorrow)"]] +[[!template id=subtitle video="mainVideo" start="00:09:33.855" text="are used to draw"]] +[[!template id=subtitle video="mainVideo" start="00:09:36.000" text="game maps and other things."]] +[[!template id=subtitle video="mainVideo" start="00:09:39.440" text="Here I talk about why we did that."]] +[[!template id=subtitle video="mainVideo" start="00:09:42.543" text="I'm going to skip briefly past that,"]] +[[!template id=subtitle video="mainVideo" start="00:09:45.279" text="and say instead that at a high level,"]] +[[!template id=subtitle video="mainVideo" start="00:09:49.360" text="it's symbolic informatics."]] +[[!template id=subtitle video="mainVideo" start="00:09:51.440" text="We're giving a symbolic name"]] +[[!template id=subtitle video="mainVideo" start="00:09:53.519" text="to a tile set,"]] +[[!template id=subtitle video="mainVideo" start="00:10:02.000" text="and then assigning that tile set some"]] +[[!template id=subtitle video="mainVideo" start="00:10:04.000" text="some characteristics"]] +[[!template id=subtitle video="mainVideo" start="00:10:04.840" text="like physical speeds, screen space"]] +[[!template id=subtitle video="mainVideo" start="00:10:06.820" text="(a variable that we might"]] +[[!template id=subtitle video="mainVideo" start="00:10:08.399" text="want to swap in), and so forth."]] +[[!template id=subtitle video="mainVideo" start="00:10:12.800" text="You know, our project rests heavily on"]] +[[!template id=subtitle video="mainVideo" start="00:10:15.200" text="Org Mode and its fundamental capabilities."]] +[[!template id=subtitle video="mainVideo" start="00:10:21.040" text="The code I'm going to show here"]] +[[!template id=subtitle video="mainVideo" start="00:10:28.320" text="is focused around a sticky"]] +[[!template id=subtitle video="mainVideo" start="00:10:31.360" text="problem space in"]] +[[!template id=subtitle video="mainVideo" start="00:10:32.380" text="information technology."]] +[[!template id=subtitle video="mainVideo" start="00:10:33.861" text="I'm a professional software engineer"]] +[[!template id=subtitle video="mainVideo" start="00:10:38.240" text="turned technology architect."]] +[[!template id=subtitle video="mainVideo" start="00:10:40.362" text="I support the websites for"]] +[[!template id=subtitle video="mainVideo" start="00:10:43.495" text="a recognizable financial services brand"]] +[[!template id=subtitle video="mainVideo" start="00:10:46.533" text="that I don't identify"]] +[[!template id=subtitle video="mainVideo" start="00:10:48.500" text="just so I don't accidentally end up"]] +[[!template id=subtitle video="mainVideo" start="00:10:50.720" text="inadvertently misrepresenting my firm"]] +[[!template id=subtitle video="mainVideo" start="00:10:54.399" text="in some financial perspective"]] +[[!template id=subtitle video="mainVideo" start="00:10:56.456" text="if I let some other"]] +[[!template id=subtitle video="mainVideo" start="00:10:57.760" text="companies' name slip, or my own."]] +[[!template id=subtitle video="mainVideo" start="00:11:03.300" text="It's certainly no representation"]] +[[!template id=subtitle video="mainVideo" start="00:11:07.700" text="of an opinion other than my own."]] +[[!template id=subtitle video="mainVideo" start="00:11:18.800" text="So ETL has to do with moving data around."]] +[[!template id=subtitle video="mainVideo" start="00:11:22.720" text="We have the idea of"]] +[[!template id=subtitle video="mainVideo" start="00:11:26.240" text="a pipeline where we'll be able to verify"]] +[[!template id=subtitle video="mainVideo" start="00:11:29.200" text="certain assumptions,"]] +[[!template id=subtitle video="mainVideo" start="00:11:30.560" text="nominally about data quality,"]] +[[!template id=subtitle video="mainVideo" start="00:11:32.106" text="but it could be about anything."]] +[[!template id=subtitle video="mainVideo" start="00:11:33.600" text="Before the pipeline starts, okay,"]] +[[!template id=subtitle video="mainVideo" start="00:11:35.630" text="we've got a state where we think"]] +[[!template id=subtitle video="mainVideo" start="00:11:36.886" text="it should work if we run it."]] +[[!template id=subtitle video="mainVideo" start="00:11:38.560" text="We have some extraction where we'll"]] +[[!template id=subtitle video="mainVideo" start="00:11:41.920" text="get our sources, and we may have"]] +[[!template id=subtitle video="mainVideo" start="00:11:43.973" text="the opportunity to"]] +[[!template id=subtitle video="mainVideo" start="00:11:45.040" text="make some assertions there."]] +[[!template id=subtitle video="mainVideo" start="00:11:47.327" text="In the transform stage, as well as the load,"]] +[[!template id=subtitle video="mainVideo" start="00:11:50.510" text="things get a little dicer,"]] +[[!template id=subtitle video="mainVideo" start="00:11:52.720" text="to the point where we come out of the"]] +[[!template id=subtitle video="mainVideo" start="00:11:54.079" text="load stage and we should have some"]] +[[!template id=subtitle video="mainVideo" start="00:11:55.360" text="really solid assertions again"]] +[[!template id=subtitle video="mainVideo" start="00:11:56.676" text="that we can even go back"]] +[[!template id=subtitle video="mainVideo" start="00:11:57.724" text="and compare to the extract stage."]] +[[!template id=subtitle video="mainVideo" start="00:11:59.680" text="From this, we have the rudimentaries"]] +[[!template id=subtitle video="mainVideo" start="00:12:02.639" text="of a data quality practice."]] +[[!template id=subtitle video="mainVideo" start="00:12:04.959" text="In this case, we have a number of"]] +[[!template id=subtitle video="mainVideo" start="00:12:08.120" text="Org Mode files that will all"]] +[[!template id=subtitle video="mainVideo" start="00:12:09.360" text="be distributed across a"]] +[[!template id=subtitle video="mainVideo" start="00:12:12.639" text="number of players' computers,"]] +[[!template id=subtitle video="mainVideo" start="00:12:16.720" text="so we might not want to update every"]] +[[!template id=subtitle video="mainVideo" start="00:12:18.959" text="part of every buffer."]] +[[!template id=subtitle video="mainVideo" start="00:12:20.320" text="I think it's a complicated problem space."]] +[[!template id=subtitle video="mainVideo" start="00:12:22.720" text="So we tried to take"]] +[[!template id=subtitle video="mainVideo" start="00:12:24.560" text="a long-term view of"]] +[[!template id=subtitle video="mainVideo" start="00:12:27.839" text="the solution that we needed."]] +[[!template id=subtitle video="mainVideo" start="00:12:30.321" text="So I'll go ahead"]] +[[!template id=subtitle video="mainVideo" start="00:12:32.160" text="and open up the function that..."]] +[[!template id=subtitle video="mainVideo" start="00:12:36.279" text="Let's actually start with the one"]] +[[!template id=subtitle video="mainVideo" start="00:12:39.020" text="that's pretty easy to read."]] +[[!template id=subtitle video="mainVideo" start="00:12:41.680" text="I'm gonna go ahead and just crank it up huge,"]] +[[!template id=subtitle video="mainVideo" start="00:12:46.800" text="in case anybody's watching in 480."]] + +[[!template id=subtitle video="mainVideo" start="00:12:51.680" text="This program is not a work of art."]] +[[!template id=subtitle video="mainVideo" start="00:12:57.733" text="It's a simple implementation of the idea that"]] +[[!template id=subtitle video="mainVideo" start="00:13:01.120" text="an alist of functions"]] +[[!template id=subtitle video="mainVideo" start="00:13:04.000" text="that return maybe some data,"]] +[[!template id=subtitle video="mainVideo" start="00:13:06.633" text="maybe some data and an entry back into that alist,"]] +[[!template id=subtitle video="mainVideo" start="00:13:10.399" text="can be done quite extensively with"]] +[[!template id=subtitle video="mainVideo" start="00:13:13.040" text="very few lines of code."]] +[[!template id=subtitle video="mainVideo" start="00:13:15.680" text="Neither is it an especially tight"]] +[[!template id=subtitle video="mainVideo" start="00:13:17.586" text="or thrifty implementation."]] +[[!template id=subtitle video="mainVideo" start="00:13:19.600" text="It's just trying to get the job done"]] +[[!template id=subtitle video="mainVideo" start="00:13:22.000" text="with a doc statement for everything."]] +[[!template id=subtitle video="mainVideo" start="00:13:25.056" text="At the heart, we see a call to"]] +[[!template id=subtitle video="mainVideo" start="00:13:28.595" text="this macro called dm-coalesce-hash,"]] +[[!template id=subtitle video="mainVideo" start="00:13:32.067" text="and that's what I'd like to focus in on."]] +[[!template id=subtitle video="mainVideo" start="00:13:33.714" text="You can see... I think"]] +[[!template id=subtitle video="mainVideo" start="00:13:35.360" text="that something unpleasant is happening here."]] +[[!template id=subtitle video="mainVideo" start="00:13:38.800" text="I've got an eval in what is..."]] + +[[!template id=subtitle video="mainVideo" start="00:13:43.991" text="I will share a fairly central function"]] +[[!template id=subtitle video="mainVideo" start="00:13:49.519" text="that those implementing this ETL pattern are"]] +[[!template id=subtitle video="mainVideo" start="00:13:52.160" text="welcome to derive from."]] +[[!template id=subtitle video="mainVideo" start="00:13:54.933" text="That is, this is a default transform"]] +[[!template id=subtitle video="mainVideo" start="00:13:57.680" text="that you can get when loading certain kinds of"]] +[[!template id=subtitle video="mainVideo" start="00:14:00.959" text="org-mode tables that have been"]] +[[!template id=subtitle video="mainVideo" start="00:14:04.560" text="properly adorned. Again, we'll get"]] +[[!template id=subtitle video="mainVideo" start="00:14:06.399" text="into that all tomorrow."]] +[[!template id=subtitle video="mainVideo" start="00:14:09.120" text="So, keeping an eye on time. Couple minutes left."]] + +[[!template id=subtitle video="mainVideo" start="00:14:11.900" text="Let's look at the macro itself."]] +[[!template id=subtitle video="mainVideo" start="00:14:13.760" text="I have a slide on this,"]] +[[!template id=subtitle video="mainVideo" start="00:14:15.000" text="but let's go ahead and risk getting off page."]] +[[!template id=subtitle video="mainVideo" start="00:14:24.639" text="Oh boy. Here we go. So this is my"]] +[[!template id=subtitle video="mainVideo" start="00:14:27.199" text="utilities bucket."]] +[[!template id=subtitle video="mainVideo" start="00:14:28.959" text="It has such basic features as "give me a"]] +[[!template id=subtitle video="mainVideo" start="00:14:31.920" text="hash table with some defaults, I'll think"]] +[[!template id=subtitle video="mainVideo" start="00:14:34.000" text="about that later,""]] +[[!template id=subtitle video="mainVideo" start="00:14:36.000" text="and "add to list," a special version"]] +[[!template id=subtitle video="mainVideo" start="00:14:44.720" text="that enables us to be a little cavalier"]] +[[!template id=subtitle video="mainVideo" start="00:14:47.600" text="in experimenting with alist versus"]] +[[!template id=subtitle video="mainVideo" start="00:14:49.360" text="hashes versus plists."]] +[[!template id=subtitle video="mainVideo" start="00:14:50.967" text="We've made a right mess for ourselves"]] +[[!template id=subtitle video="mainVideo" start="00:14:53.178" text="in the proof of concept area,"]] +[[!template id=subtitle video="mainVideo" start="00:14:54.399" text="and it's ripe for someone to write a"]] +[[!template id=subtitle video="mainVideo" start="00:14:57.433" text="whitepaper about"]] +[[!template id=subtitle video="mainVideo" start="00:14:58.560" text="when to prefer these things."]] +[[!template id=subtitle video="mainVideo" start="00:15:04.800" text="The merge alist..."]] +[[!template id=subtitle video="mainVideo" start="00:15:08.000" text="Same work here. Let's get down to business."]] + +[[!template id=subtitle video="mainVideo" start="00:15:12.959" text="This function has quite a..."]] +[[!template id=subtitle video="mainVideo" start="00:15:14.667" text="This macro has quite a doc string."]] +[[!template id=subtitle video="mainVideo" start="00:15:17.467" text="I think I mentioned earlier that I got myself into"]] +[[!template id=subtitle video="mainVideo" start="00:15:20.720" text="trouble with the keyword properties."]] +[[!template id=subtitle video="mainVideo" start="00:15:22.088" text="You can see that we have"]] +[[!template id=subtitle video="mainVideo" start="00:15:23.519" text="not only quite a number of them,"]] +[[!template id=subtitle video="mainVideo" start="00:15:27.359" text="but a lot of default values,"]] +[[!template id=subtitle video="mainVideo" start="00:15:31.155" text="many of which may be relying on"]] +[[!template id=subtitle video="mainVideo" start="00:15:35.446" text="the values that are passed in here."]] +[[!template id=subtitle video="mainVideo" start="00:15:37.264" text="This is complicated. As it turns out,"]] +[[!template id=subtitle video="mainVideo" start="00:15:40.000" text="I wasn't brave enough in most cases"]] +[[!template id=subtitle video="mainVideo" start="00:15:44.000" text="to try to write a lambda"]] +[[!template id=subtitle video="mainVideo" start="00:15:45.485" text="that could understand and"]] +[[!template id=subtitle video="mainVideo" start="00:15:47.279" text="replace its own local variable."]] +[[!template id=subtitle video="mainVideo" start="00:15:49.300" text="I just didn't..."]] +[[!template id=subtitle video="mainVideo" start="00:15:50.399" text="It didn't save me enough time. This was"]] +[[!template id=subtitle video="mainVideo" start="00:15:53.519" text="really easy to read and write and understand"]] +[[!template id=subtitle video="mainVideo" start="00:15:56.532" text="as I thought through my problem,"]] +[[!template id=subtitle video="mainVideo" start="00:15:58.240" text="but now, as I use it,"]] +[[!template id=subtitle video="mainVideo" start="00:16:00.000" text="I've lost a little ground with this."]] +[[!template id=subtitle video="mainVideo" start="00:16:02.486" text="I'm not even sure"]] +[[!template id=subtitle video="mainVideo" start="00:16:04.079" text="I like what I got from"]] +[[!template id=subtitle video="mainVideo" start="00:16:06.453" text="the many keyword properties when it..."]] +[[!template id=subtitle video="mainVideo" start="00:16:09.341" text="And we can look, perhaps if we have"]] +[[!template id=subtitle video="mainVideo" start="00:16:11.920" text="the time, at what that looks like in"]] +[[!template id=subtitle video="mainVideo" start="00:16:19.920" text="Oh, all right, I have to separately"]] +[[!template id=subtitle video="mainVideo" start="00:16:22.720" text="dismiss and restart that."]] + +[[!template id=subtitle video="mainVideo" start="00:16:24.480" text="So that's just about my time."]] +[[!template id=subtitle video="mainVideo" start="00:16:27.519" text="Being respectful of that, I want"]] +[[!template id=subtitle video="mainVideo" start="00:16:29.600" text="to invite presenters to just jump in at"]] +[[!template id=subtitle video="mainVideo" start="00:16:31.920" text="any of the many large pauses I leave."]] +[[!template id=subtitle video="mainVideo" start="00:16:35.519" text="I'll just leave up the doc string"]] +[[!template id=subtitle video="mainVideo" start="00:16:38.079" text="for a moment and maybe split the screen"]] +[[!template id=subtitle video="mainVideo" start="00:16:40.160" text="and pull open an item."]] +[[!template id=subtitle video="mainVideo" start="00:16:45.199" text="(Amin: Thank you very"]] +[[!template id=subtitle video="mainVideo" start="00:16:48.720" text="much for your talk, Corwin."]] +[[!template id=subtitle video="mainVideo" start="00:16:50.720" text="I think you still have"]] +[[!template id=subtitle video="mainVideo" start="00:16:53.839" text="maybe three or four more minutes,"]] +[[!template id=subtitle video="mainVideo" start="00:16:55.027" text="if you want to quickly wrap up.)"]] +[[!template id=subtitle video="mainVideo" start="00:16:57.680" text="Corwin: Okay, so three or four more minutes"]] +[[!template id=subtitle video="mainVideo" start="00:17:00.644" text="I can easily spend on thank yous."]] +[[!template id=subtitle video="mainVideo" start="00:17:05.439" text="I might switch to that if there aren't"]] +[[!template id=subtitle video="mainVideo" start="00:17:07.280" text="questions on the pad."]] +[[!template id=subtitle video="mainVideo" start="00:17:10.160" text="(Amin: Would you like me to pull up the pad,"]] +[[!template id=subtitle video="mainVideo" start="00:17:12.559" text="or are you looking at it?)"]] +[[!template id=subtitle video="mainVideo" start="00:17:14.079" text="Corwin: I am. I bookmarked it."]] +[[!template id=subtitle video="mainVideo" start="00:17:16.777" text="I am pulling the tab and I'll bring it in."]] +[[!template id=subtitle video="mainVideo" start="00:17:30.840" text="Okay. All right. This is the wrong Etherpad."]] +[[!template id=subtitle video="mainVideo" start="00:17:38.799" text="Thanks for the link."]] +[[!template id=subtitle video="mainVideo" start="00:17:44.480" text="All right. So I think I'm looking for macros."]] + +[[!template id=subtitle video="mainVideo" start="00:17:54.880" text="Okay. Key message. Sure."]] +[[!template id=subtitle video="mainVideo" start="00:17:57.630" text="So, the key message is that it's"]] +[[!template id=subtitle video="mainVideo" start="00:18:01.679" text="a jungle out there."]] +[[!template id=subtitle video="mainVideo" start="00:18:02.960" text="Macros, along with any other design,"]] +[[!template id=subtitle video="mainVideo" start="00:18:05.912" text="can leave you in a position"]] +[[!template id=subtitle video="mainVideo" start="00:18:08.559" text="where you have a nice API. I can show"]] +[[!template id=subtitle video="mainVideo" start="00:18:11.919" text="you other examples (you can find them in"]] +[[!template id=subtitle video="mainVideo" start="00:18:13.600" text="the dungeon-mode source)"]] +[[!template id=subtitle video="mainVideo" start="00:18:14.960" text="of many, many other places where I use"]] +[[!template id=subtitle video="mainVideo" start="00:18:18.480" text="this exact same formula,"]] +[[!template id=subtitle video="mainVideo" start="00:18:20.820" text="quickly sketching out how a character sheet"]] +[[!template id=subtitle video="mainVideo" start="00:18:23.840" text="or another big data set"]] +[[!template id=subtitle video="mainVideo" start="00:18:26.180" text="needs to figure out what tables are"]] +[[!template id=subtitle video="mainVideo" start="00:18:28.480" text="going to be interesting"]] +[[!template id=subtitle video="mainVideo" start="00:18:29.320" text="from the collection of files,"]] +[[!template id=subtitle video="mainVideo" start="00:18:30.720" text="and then load up the tile set,"]] +[[!template id=subtitle video="mainVideo" start="00:18:33.967" text="and the layout file from that."]] +[[!template id=subtitle video="mainVideo" start="00:18:38.880" text="And I mean, it works."]] +[[!template id=subtitle video="mainVideo" start="00:18:40.542" text="The project is moving forward with this."]] +[[!template id=subtitle video="mainVideo" start="00:18:42.677" text="I have the flexibility that I need."]] +[[!template id=subtitle video="mainVideo" start="00:18:44.799" text="But here I am evaling my own code"]] +[[!template id=subtitle video="mainVideo" start="00:18:46.559" text="to make darn sure even if I get"]] +[[!template id=subtitle video="mainVideo" start="00:18:48.640" text="byte-compiled, this macro"]] +[[!template id=subtitle video="mainVideo" start="00:18:52.400" text="does get evaluated in the user's real"]] +[[!template id=subtitle video="mainVideo" start="00:18:55.440" text="run time. Clearly a design fail."]] +[[!template id=subtitle video="mainVideo" start="00:18:57.684" text="So that would be..."]] + +[[!template id=subtitle video="mainVideo" start="00:18:58.890" text="The key point of my talk is to"]] +[[!template id=subtitle video="mainVideo" start="00:19:00.880" text="present this design fail and"]] +[[!template id=subtitle video="mainVideo" start="00:19:05.600" text="thank the community, but especially"]] +[[!template id=subtitle video="mainVideo" start="00:19:08.320" text="wasamasa for some patience."]] +[[!template id=subtitle video="mainVideo" start="00:19:10.942" text="Let me add at this moment that"]] +[[!template id=subtitle video="mainVideo" start="00:19:13.280" text="he was so frustrated with me."]] +[[!template id=subtitle video="mainVideo" start="00:19:13.333" text="They were sort of frustrated with me"]] +[[!template id=subtitle video="mainVideo" start="00:19:17.115" text="(I think I didn't qualify pronouns)"]] +[[!template id=subtitle video="mainVideo" start="00:19:24.240" text="with doing this. The first..."]] +[[!template id=subtitle video="mainVideo" start="00:19:26.287" text="This was one of our first interactions,"]] +[[!template id=subtitle video="mainVideo" start="00:19:27.985" text="and the feedback was,"]] +[[!template id=subtitle video="mainVideo" start="00:19:29.919" text=""Why is this a macro. Full stop.""]] +[[!template id=subtitle video="mainVideo" start="00:19:34.240" text="And that's a great message, actually."]] +[[!template id=subtitle video="mainVideo" start="00:19:36.640" text="I hope that maybe this can encourage"]] +[[!template id=subtitle video="mainVideo" start="00:19:39.520" text="further talks across the subject about,"]] +[[!template id=subtitle video="mainVideo" start="00:19:42.720" text="you know, "Hey, wait a minute,"]] +[[!template id=subtitle video="mainVideo" start="00:19:43.808" text="macros are really fantastic,""]] +[[!template id=subtitle video="mainVideo" start="00:19:45.549" text="as I hope I made clear."]] +[[!template id=subtitle video="mainVideo" start="00:19:47.018" text="You can do a tremendous amount"]] +[[!template id=subtitle video="mainVideo" start="00:19:48.559" text="with them, and we rely on them"]] +[[!template id=subtitle video="mainVideo" start="00:19:51.039" text="for almost all the fun goodies,"]] +[[!template id=subtitle video="mainVideo" start="00:19:55.200" text="from defun, setq..."]] +[[!template id=subtitle video="mainVideo" start="00:20:02.159" text="I want to get to my thank yous."]] + +[[!template id=subtitle video="mainVideo" start="00:20:04.639" text="Let me just peek back at the pad."]] +[[!template id=subtitle video="mainVideo" start="00:20:20.000" text="Well, that was actually a scratch buffer,"]] +[[!template id=subtitle video="mainVideo" start="00:20:22.080" text="so I'll have to read it cold off my notes."]] +[[!template id=subtitle video="mainVideo" start="00:20:27.919" text="But I'll switch to... I'll also..."]] +[[!template id=subtitle video="mainVideo" start="00:20:30.320" text="I'll say a couple of thank-yous if you"]] +[[!template id=subtitle video="mainVideo" start="00:20:31.600" text="don't mind, Amin."]] +[[!template id=subtitle video="mainVideo" start="00:20:34.320" text="In addition to the big thank you that I"]] +[[!template id=subtitle video="mainVideo" start="00:20:36.080" text="hope was implied by my shout out to wasamasa,"]] +[[!template id=subtitle video="mainVideo" start="00:20:39.360" text="I also want to thank you, Amin, for"]] +[[!template id=subtitle video="mainVideo" start="00:20:42.720" text="your kindness in extending"]] +[[!template id=subtitle video="mainVideo" start="00:20:46.640" text="to the project as well as to me, the"]] +[[!template id=subtitle video="mainVideo" start="00:20:51.360" text="the chance to present here."]] +[[!template id=subtitle video="mainVideo" start="00:20:54.320" text="You've also done a lot of great stuff"]] +[[!template id=subtitle video="mainVideo" start="00:20:56.358" text="for our project. Thank you very much for that."]] +[[!template id=subtitle video="mainVideo" start="00:20:59.360" text="Sacha Chua (I'll get there),"]] +[[!template id=subtitle video="mainVideo" start="00:21:03.400" text="thank you so much for"]] +[[!template id=subtitle video="mainVideo" start="00:21:15.919" text="the inspiration that you are to our"]] +[[!template id=subtitle video="mainVideo" start="00:21:17.200" text="whole community."]] +[[!template id=subtitle video="mainVideo" start="00:21:18.320" text="I also want to thank the presenters"]] +[[!template id=subtitle video="mainVideo" start="00:21:22.400" text="for just being so flexible and"]] +[[!template id=subtitle video="mainVideo" start="00:21:25.600" text="nagging back through the whole thing,"]] +[[!template id=subtitle video="mainVideo" start="00:21:27.600" text="and especially to Leo"]] +[[!template id=subtitle video="mainVideo" start="00:21:29.120" text="who has done so much to drive the show today."]] +[[!template id=subtitle video="mainVideo" start="00:21:32.159" text="This is a fractious tent at times,"]] +[[!template id=subtitle video="mainVideo" start="00:21:37.242" text="and sometimes it is indeed"]] +[[!template id=subtitle video="mainVideo" start="00:21:39.800" text="a little bit of a circus,"]] +[[!template id=subtitle video="mainVideo" start="00:21:41.360" text="but I am learning so much so fast."]] +[[!template id=subtitle video="mainVideo" start="00:21:44.746" text="I'm just inspired by how much"]] +[[!template id=subtitle video="mainVideo" start="00:21:46.880" text="Emacs can teach us."]] +[[!template id=subtitle video="mainVideo" start="00:21:49.333" text="(Amin: thank you, Corwin, for your kind words"]] +[[!template id=subtitle video="mainVideo" start="00:21:52.901" text="about me, of course,"]] +[[!template id=subtitle video="mainVideo" start="00:21:54.960" text="about all of us"]] +[[!template id=subtitle video="mainVideo" start="00:21:56.000" text="and the conference..."]] +[[!template id=subtitle video="mainVideo" start="00:21:58.000" text="Indeed, thanks to everyone who's helped,"]] +[[!template id=subtitle video="mainVideo" start="00:22:02.400" text="including the speakers, of course,"]] +[[!template id=subtitle video="mainVideo" start="00:22:04.159" text="without whom EmacsConf really"]] +[[!template id=subtitle video="mainVideo" start="00:22:05.840" text="wouldn't have been a EmacsConf."]] +[[!template id=subtitle video="mainVideo" start="00:22:08.960" text="It's been a pleasure"]] +[[!template id=subtitle video="mainVideo" start="00:22:10.640" text="knowing you and working with you,"]] +[[!template id=subtitle video="mainVideo" start="00:22:12.366" text="from afar for the most part"]] +[[!template id=subtitle video="mainVideo" start="00:22:15.743" text="on dungeon-mode,"]] +[[!template id=subtitle video="mainVideo" start="00:22:17.360" text="helping with small things here and there"]] +[[!template id=subtitle video="mainVideo" start="00:22:19.937" text="but yeah, it's been my pleasure,"]] +[[!template id=subtitle video="mainVideo" start="00:22:21.796" text="and it's great to have you and"]] +[[!template id=subtitle video="mainVideo" start="00:22:23.840" text="everyone else part of the community,"]] +[[!template id=subtitle video="mainVideo" start="00:22:26.582" text="and for me to be part of the community."]] +[[!template id=subtitle video="mainVideo" start="00:22:29.180" text="It's been a lot of fun."]] +[[!template id=subtitle video="mainVideo" start="00:22:30.559" text="Thank you.)"]] +[[!template id=subtitle video="mainVideo" start="00:22:33.679" text="Corwin: It's an honor."]] +[[!template id=subtitle video="mainVideo" start="00:22:35.206" text="I don't use that word an awful lot"]] +[[!template id=subtitle video="mainVideo" start="00:22:37.428" text="because I sort of smirk at it."]] +[[!template id=subtitle video="mainVideo" start="00:22:39.867" text="It gets us in a lot of trouble, honor does,"]] +[[!template id=subtitle video="mainVideo" start="00:22:43.941" text="but this will be a sure time to use it."]] +[[!template id=subtitle video="mainVideo" start="00:22:46.904" text="(Amin: Thank you.)"]] +[[!template id=subtitle video="mainVideo" start="00:22:48.840" text="Corwin: Likewise."]] diff --git a/2020/info/35.md b/2020/info/35.md index 2901eee9..276d24aa 100644 --- a/2020/info/35.md +++ b/2020/info/35.md @@ -1,11 +1,13 @@ # WAVEing at Repetitive Repetitive Repetitive Music Zachary Kanfer -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm"]] +[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm" size="122M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt" duration="9:44"]] [Download compressed .webm video (12.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--vp9-q56-video-original-audio.webm) +[View transcript](#transcript) -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video"]] +[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video" size="89M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt" duration="6:18"]] [Download compressed Q&A .webm video (6.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--vp9-q56-video-original-audio.webm) +[View transcript for Q&A](#transcript-questions) During quarantine, I found myself spending time with an Android app. One of the features this app has is composing music that loops @@ -77,3 +79,231 @@ something worth looking into. # Notes Notes, references, and links at <https://zck.org/emacsconf2020> + + +<!-- transcript: 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt --> + +<a name="transcript"></a> +# Transcript + +(00:04) Hi. I'm Zachary Kanfer, and this is waving at repetitive +repetitive repetitive music. Over quarantine, I've been bored, and I +found this Android app that has a bunch of mini-games, one of which +lets you compose music. And it works, but I want a little bit more +functionality than it offers, it's not very flexible. So, I thought +what if I made this, and what programs could I make this in that are +really flexible, are really customizable. Emacs. So, I looked into +it, and Emacs can play sounds, right? If you hit control g a couple of +times, you'll hear like an error tone, and it turns out that, that is +actually playing a WAVE file, but what's a WAVE file? + +(00:58) Well, it turns out that WAVE is a musical file format, or +really an annoying file format. So, data in it can be an unsigned +integer or a signed integer, it's not consistent, and it's +little-endian by default which is not the way I like to think about +it. Now, you can set a WAVE file to be big-endian, but if you do +that, Emacs can't play it. So, little-endian it is. There's also +duplicate data fields. Here are some fields that are fine, but then +there's a fourth field that's calculated based on multiplying two of +the other ones together, and then there's another data field that's… +you multiply those three ones together. So, it's just repetitive and +unnecessary, but you have to do it, or it's not a valid WAVE file. +Also, the last part of the file is described as data or as one website +I found said, the actual sound data. + +(02:04) Now, I don't know about you but when I see that, I think, what +is data? It turns out that sound is just a wave, and the data is just +a bunch of measurements of the height of that wave forming each +sample. So, this wave starts at 8 goes 9, 11, 13, 14, 15, and then +back down. If you just take those measurements, those numbers, put +them in a file, that's all your data is. + +(02:35) All right. Let's go to a demo of my program. So, this is what +zmusic looks like. The blue highlighted row is a single beat, there's +16 of them in this zmusic file, and each dash in the row is a single +note increasing…, starting really low all the way on the left and +going up as we go to the right. So, if we started playing, we won't +hear anything, but we'll see the highlighted beat is the currently +playing one, and we see that it loops. So, we can stop it, and now we +can click to add some notes. [Music] Even more than one note at the +same time works. [Music] And we can even add notes while it's +playing. [Music] + +(04:08) Okay, here are some other features that I didn't have time to +demo. So, you can save the music to a file, and this is interesting +because normally if there's no note in a beat, we just don't play that +beat, but if you're writing to a file you have to put something in, so +when it's playing it knows to not make a sound there. We can also use +different scales. We're using the minor pentatonic in the demo, but +you can use the major scale the minor scale or anything else. And +there's also keyboard support, but it sounds really bad, and I'll +explain why later. + +(04:48) Here are some things I learned while writing zmusic. Emacs +has buttons which are great as long as you don't put two of them right +next to each other. So, if you do that, mousing over one of them +highlights both of them. Now, that's because a button is really just +a series of characters with a text property to highlight them. So, +the fix is, you put another character between the two buttons, then +mousing over one of them only highlights the one you want, but even +this doesn't work really great for zmusic, because zmusic has a lot of +very small buttons in a row. So, it's really easy to accidentally put +your cursor over the space and click on that instead of the button. +So, I looked into unicode, and I found this character called a +zero-width space. So, we should be able to put that between buttons +and not be able to accidentally click on it. Unfortunately, a +zero-width space isn't actually zero width. If we put a hundred of +them between two other characters, you can see there's space there, +and I think what's happening is, the space is zero width but then +Emacs `put` uses one pixel between each pair of characters for the +cursor, so it's almost zero width. Some ways to play sound that don't +quite work! `play-sound` plays music, but it blocks, you can't do +things like, set other notes or even pause the music. And if you +throw it into async.el, it's silent, and I don't know why. So, the +solution I went with is taking that WAVE file, ran into the file +system, and then shelling out to a native executable to play the +sound. And that works fine as long as you only do it once, because if +you do it a couple of times at the same time like if you have a chord, +and you want to play three notes simultaneously, you get this weird +interference, and that's actually why the keyboard from before didn't +work. Also, side effects have this unexpected impact, when you saw +the demo it was running pretty smoothly, but if I just add one message +statement every beat for debugging purposes, I was getting lag and +jitter. + +(07:03) Here's the one thing I learned about music theory, music +theory is not easy to program. I was looking around to see what +concepts we can use to code the scales, to code the notes, the first +thing that I saw is scale degrees, and this when I looked into it, you +don't want to program in scale degrees. So, you see we have the +first, second, third, fourth, fifth, sixth, seventh but then it wraps +around. That octave up is also a first, and that's because both of +those notes are C, so that didn't work, and also you couldn't really +easily specify a flat or sharp. You could say a sharp third or you +know, a flat seventh or whatever, but then you kind of have these two +pieces of data that indicate the note, and I didn't love that. + +(07:55) So, I looked again, and I found intervals, and then I thought +about it, and you don't really want to program in intervals either. +It fixes some of the problems with scale degrees, you see, all the way +on the right you have an octave, so you wrap to 8, and you go 9, 10 +and that works. But you solve the same problem, you see you have a +major third but below we also have a minor third, so you saw that +problem of having two pieces of information. + +(08:20) So, I thought about it. Music is really frequencies. Like an A +is 440 hertz. So, at a low level that's what we're going to do, we're +just going to use frequencies. And then at the one level above that, +that's a little bit easier for humans to think about, we're going to +use semitones up from the root, which is kind of like scale degrees, +but instead of just counting each note as one more, we're going to say +how many semitones up it is. So, if there's a sharp between two +notes, that's going to be two steps up instead of just one. And then +we translate those two frequencies, so your A is 440 hertz, another +note might be 613.5, or whatever, and that's we use the low level to +play. + +(09:02) Some future work I have, I want to add some drums. I want to +make that keyboard actually work, and computers and synthesizers are +the only place you hear a pure sine wave like the one we have here, so +I want to add overtones or other octaves above it just to make it +sound a little bit more realistic. I've put notes references and the +source code up at <https://zck.org/emacsconf2020> [updated]. I'm one +of the organizers of EmacsNYC check that out. And if you take a look +or have any thoughts, I'd love to hear them, and thanks so much for +coming to my talk. + +<!-- /transcript --> + + +<!-- transcript: 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt --> + +<a name="transcript-questions"></a> +# Transcript: Q&A + +(00:09) Okay, yeah, so I'm Zachary Kanfer, let's go to the +questions. The first question, "Why do we go top to bottom for time +progression, and left to right for low to high?" Interesting, I +think…, so the initial thing I was copying, that initial app work this +way, and yeah, I mean, certainly traditional music, you know, on a +staff does go left to right like this. I mean, going top to bottom +does make it easier to add more beats without having to wrap, but +certainly that could be managed. Yeah, I had not really thought about +it, but it is definitely something worth looking into. + +(01:21) Two, "Will you play us another song?" Not now, I can make some +recordings of it, or certainly you can try it. I couldn't quite get +the microphone and the webcam and everything to work with the sound +playing now. So, I can record some. Also, I have put a link in the +Etherpad, <https://zck.org/emacsconf2020> [updated], where you can go +and get the source, and you can try it yourself. There's no +dependencies needed, so it's just all in Emacs. So, please, you know, +try it yourself. + +(01:57) "Any chance for an Emacs tracker or mod player?" I don't +really know what a mod player or tracker are, but I mean, I'm sure +that would be cool, maybe there's one on now, but I don't know. + +(02:11) My musical background. So, I've played various instruments +since about the third grade. Started recorder, play cello, I play +guitar now. But yeah, so just kind of random instruments, and I guess +kind of some of those things influence how I think about music. + +(02:33) "Are there any open source musical management sample libraries +that could be used?" Good question, I'm sure there are, I don't know +any of that integrate really well with Emacs. One of the cool things +that I liked about this is that there are no dependencies, you know, +you don't need any external program to generate the music. I mean, it +does shell out to to play, but that should be able to be done on any +operating system, as always, you have something that can play WAVE +files, but yeah, it is interesting to kind of try the different sounds +and different tones that you could get with different instruments. + +(03:14) Have I written any actual songs? Nothing super well put +together, I kind of just been playing around with this. It's kind of… +making this was one of those things where once I made it, I was like, +okay, now I can play with it, and I did a little bit, and was like, I +don't know if I feel like it right now. You know, which I've found +that to be the case with some things that I've implemented in Emacs +where it's… I make it, and then it's the kind of some of the desire to +use it all the time goes away, but I'm sure I'll circle back around at +some point especially kind of maybe once I add in different tones or +something. + +(03:54) I guess a similar question for pre-recorded sounds. Yeah, I +mean, if it's… part of what I did, what I wrote was a WAVE generation +library, so, if you kind of have the data, you could use those and +chop them up and take certain lengths of them and make a WAVE file, so +it's not plug and play right now, but you could certainly add those +notes to do it. + +(04:19) "Any MIDI mapping possibilities?" I haven't looked into it, +but I'm sure you definitely could output to MIDI which is another +benefit of having that multiple layers with the top layer is just, you +know, if the root note is this, we're just two semitones up or seven +semitones up or whatever it is. It should be relatively simple to +kind of switch out that layer underneath from WAVE to MIDI or other +things. + +(04:44) "What were some of the challenges with writing a special mode +for Emacs?" Interested in getting into this, not sure where to start. +This isn't the first mode I've written, so that's right…, certainly +that helps. I actually… I have a video that we recorded it as part of +EmacsNYC on making a major mode. That's basically starts from +nothing, and kind of builds up to an implementation of tic-tac-toe, +but so it kind of goes into printing things out and buttons and making +the mode. I mean, one of the best parts about Emacs is, because it's +so configurable and so introspectible, you can start pretty simply, +and just kind of ask Emacs about things, and then make one little +change. It's really… it's not that bad, so, I'll try to throw a link +up on that page I put up, or please email me for whoever asked this +question to get a link to that video, or just look at the source code +of this or any other major mode. Emacs makes it pretty easy to extend +major modes. + +(05:54) And I think that's the last question in the Etherpad, so, +thanks so much everybody for coming. (Amin: Thank you so much to +Zachary for your awesome talk, and for doing live questions. Thank +you.) Thank you. (Amin: Cheers.) + +<!-- /transcript --> diff --git a/2020/info/39.md b/2020/info/39.md index 303f553a..4ca2f49d 100644 --- a/2020/info/39.md +++ b/2020/info/39.md @@ -1,7 +1,7 @@ # NonGNU ELPA Richard Stallman -[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman.webm" size="282M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt" duration="6:56"]] +[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman.webm" size="282M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt" duration="6:56"]] [Download compressed .webm video (20.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--richard-stallman--vp9-q56-video-original-audio.webm) [View transcript](#transcript) @@ -238,83 +238,131 @@ them fit in. <a name="transcript"></a> # Transcript -Hello, I'm Richard Stallman, founder of the GNU project. In 1976, I -developed the first Emacs editor with some help from Guy Steele. -Then, shortly after starting to develop the GNU operating system in -1984, I wanted an Emacs editor for it. So I started writing GNU Emacs -in September 1984. - -(00:29) Several years ago we decided to move many of the Emacs Lisp -packages outside the core Emacs distribution into a separate package -archive that we call the Emacs Lisp package archive ELPA. There were -two main reasons for this. One is to make the Emacs distribution -smaller so every user wouldn't have to get all the packages and -install all the packages. And the other reason was to make it possible -to release individual packages separately from Emacs releases. - -(01:08) Now, at that point somehow we decided to support loading -packages from a variety of different Emacs Lisp package archives and -ours would be called the GNU ELPA, but ELPA could be any other. Now, I -think that naming was a mistake. We should have meant, we should have -decided that ELPA referred to our package archive and any other -package archive should be called some other name. Oh, well! Uh this is -a mistake I believe, because it leads to a lot of confusion it would -have been clearer if we had uh used the other naming. - -(01:55) Because the difference between having a package in core Emacs -and having it in GNU ELPA, is purely a practical convenience matter. -Convenience of distribution and convenience of maintenance. We wanted -to be able to move packages between the two whenever that was -convenient. So, to make that possible we insisted on getting copyright -assignments for packages in GNU ELPA just the same way we do for -packages in core Emacs. - -(02:31) Having the facility for installing packages from package -archives, led to a tremendous boost in the development and release of -Emacs packages. Unfortunately there was a problem with the way that -was done. For the most part, the developers of these packages wouldn't -even tell us about them. They posted them in another package archive -where we didn't know about them and (where they) no attempt was made -to try to fit them into Emacs so that they could make sense as parts -of the Emacs distribution. This led to both moral problems, packages -that depended on non-free software in order to be usable and technical -problems because the developers of those packages didn't coordinate -with us about how to make it useful and convenient and clean to have -them in Emacs. - -(03:36) So, the idea of NonGNU ELPA is an effort to smooth these -things out. The fundamental plan of NonGNU ELPA is that, we won't ask -for copyright assignments for those packages. So, we won't be able to -put them into core Emacs; at least not easily, but we will have some -control over how we distribute them. We can put any package into -NonGNU ELPA as long as it's free software. If we like it we can set up -that way for users to get it. We could put the package in exactly as -it is if there's no problem at all with it. We can make an arrangement -with the package's developers to work on it with us and maintain it -directly for distribution by NonGNU ELPA but if they are not -interested we can put it in ourselves and if we need to make any -changes we can do so. - -(04:52) So, NonGNU ELPA is not meant to be just a way that others can -distribute their packages. It's meant at least in a minimal technical -sense to work with GNU Emacs, and we'll make changes if necessary so -that it works smoothly with Emacs. And this means that we're going to -maintain it differently from GNU ELPA. Well, GNU ELPA is hosted in a -way that is actually rather inconvenient. It is one single Git -repository. And so anybody that has access to write it can write any -part of it. There are many different packages in there maintained by -different people, and we have no way to give each one of them access -to per own package and not to the others. Well, with NonGNU ELPA we -plan to fix that. The idea is to have a single Git repository where -you can download various packages from. But, they won't be maintained -there. Each of those packages will be copied automatically from some -other place. Probably some other repository where the right people -have access to work on it. And this way we can avoid giving a gigantic -number of people access to every part of it. So far NonGNU ELPA is -just a plan, we need people to implement the plan. So, if you would -like to help please write to me. I think this is a very important step -for progress and it's got to be implemented. Thanks and happy hacking! - +[[!template new="1" text="Hello, I'm Richard Stallman," start="00:00:00.320" video="mainVideo" id=subtitle]] +[[!template text="founder of the GNU project." start="00:00:03.280" video="mainVideo" id=subtitle]] +[[!template text="In 1976, I developed the first" start="00:00:07.816" video="mainVideo" id=subtitle]] +[[!template text="Emacs editor with some help" start="00:00:09.200" video="mainVideo" id=subtitle]] +[[!template text="from Guy Steele." start="00:00:12.320" video="mainVideo" id=subtitle]] +[[!template text="Then, shortly after starting to develop" start="00:00:13.440" video="mainVideo" id=subtitle]] +[[!template text="the GNU operating system in 1984," start="00:00:15.839" video="mainVideo" id=subtitle]] +[[!template text="I wanted an Emacs editor for it." start="00:00:19.119" video="mainVideo" id=subtitle]] +[[!template text="So I started writing GNU Emacs in September 1984." start="00:00:22.240" video="mainVideo" id=subtitle]] +[[!template new="1" text="Several years ago we decided to move" start="00:00:29.519" video="mainVideo" id=subtitle]] +[[!template text="many of the Emacs Lisp packages outside" start="00:00:32.640" video="mainVideo" id=subtitle]] +[[!template text="the core Emacs distribution into" start="00:00:35.920" video="mainVideo" id=subtitle]] +[[!template text="a separate package archive that we call the Emacs Lisp package archive ELPA." start="00:00:39.866" video="mainVideo" id=subtitle]] +[[!template text="There were two main reasons for this." start="00:00:46.480" video="mainVideo" id=subtitle]] +[[!template text="One is to make the Emacs distribution smaller" start="00:00:49.555" video="mainVideo" id=subtitle]] +[[!template text="so every user wouldn't have to" start="00:00:51.520" video="mainVideo" id=subtitle]] +[[!template text="get all the packages" start="00:00:54.870" video="mainVideo" id=subtitle]] +[[!template text="and install all the packages." start="00:00:55.680" video="mainVideo" id=subtitle]] +[[!template text="And the other reason was to make it possible to" start="00:00:58.820" video="mainVideo" id=subtitle]] +[[!template text="release individual packages" start="00:01:00.480" video="mainVideo" id=subtitle]] +[[!template text="separately from Emacs releases." start="00:01:03.485" video="mainVideo" id=subtitle]] +[[!template new="1" text="Now, at that point somehow we decided to" start="00:01:08.880" video="mainVideo" id=subtitle]] +[[!template text="support loading packages from" start="00:01:13.119" video="mainVideo" id=subtitle]] +[[!template text="a variety of different Emacs Lisp package archives" start="00:01:17.040" video="mainVideo" id=subtitle]] +[[!template text="and ours would be called the GNU ELPA," start="00:01:21.119" video="mainVideo" id=subtitle]] +[[!template text="but ELPA could be any other." start="00:01:25.520" video="mainVideo" id=subtitle]] +[[!template text="Now, I think that naming was a mistake." start="00:01:29.280" video="mainVideo" id=subtitle]] +[[!template text="We should have meant, we should have decided that ELPA" start="00:01:32.945" video="mainVideo" id=subtitle]] +[[!template text="referred to our package archive" start="00:01:35.119" video="mainVideo" id=subtitle]] +[[!template text="and any other package archive" start="00:01:37.759" video="mainVideo" id=subtitle]] +[[!template text="should be called some other name." start="00:01:39.297" video="mainVideo" id=subtitle]] +[[!template text="Oh, well! Uh this is a mistake," start="00:01:42.479" video="mainVideo" id=subtitle]] +[[!template text="I believe, because it leads" start="00:01:46.128" video="mainVideo" id=subtitle]] +[[!template text="to a lot of confusion." start="00:01:48.320" video="mainVideo" id=subtitle]] +[[!template text="It would have been clearer" start="00:01:49.397" video="mainVideo" id=subtitle]] +[[!template text="if we had used the other naming." start="00:01:51.119" video="mainVideo" id=subtitle]] +[[!template new="1" text="Because the difference between" start="00:01:55.759" video="mainVideo" id=subtitle]] +[[!template text="having a package in core Emacs and having it in GNU ELPA," start="00:01:59.812" video="mainVideo" id=subtitle]] +[[!template text="is purely a practical convenience matter." start="00:02:04.159" video="mainVideo" id=subtitle]] +[[!template text="Convenience of distribution" start="00:02:07.840" video="mainVideo" id=subtitle]] +[[!template text="and convenience of maintenance." start="00:02:10.501" video="mainVideo" id=subtitle]] +[[!template text="We wanted to be able to move packages" start="00:02:12.000" video="mainVideo" id=subtitle]] +[[!template text="between the two" start="00:02:14.879" video="mainVideo" id=subtitle]] +[[!template text="whenever that was convenient." start="00:02:16.800" video="mainVideo" id=subtitle]] +[[!template text="So, to make that possible" start="00:02:19.258" video="mainVideo" id=subtitle]] +[[!template text="we insisted on getting copyright" start="00:02:21.200" video="mainVideo" id=subtitle]] +[[!template text="assignments for packages in GNU ELPA" start="00:02:23.200" video="mainVideo" id=subtitle]] +[[!template text="just the same way we do for packages in core Emacs." start="00:02:26.319" video="mainVideo" id=subtitle]] +[[!template new="1" text="Having the facility for installing" start="00:02:31.360" video="mainVideo" id=subtitle]] +[[!template text="packages from package archives," start="00:02:33.760" video="mainVideo" id=subtitle]] +[[!template text="led to a tremendous boost in the" start="00:02:36.239" video="mainVideo" id=subtitle]] +[[!template text="development and release of Emacs packages." start="00:02:39.440" video="mainVideo" id=subtitle]] +[[!template text="Unfortunately there was a problem with" start="00:02:42.239" video="mainVideo" id=subtitle]] +[[!template text="the way that was done." start="00:02:44.879" video="mainVideo" id=subtitle]] +[[!template text="For the most part, the developers of these packages" start="00:02:46.560" video="mainVideo" id=subtitle]] +[[!template text="wouldn't even tell us about them." start="00:02:50.000" video="mainVideo" id=subtitle]] +[[!template text="They posted them in another package archive" start="00:02:52.218" video="mainVideo" id=subtitle]] +[[!template text="where we didn't know about them" start="00:02:56.027" video="mainVideo" id=subtitle]] +[[!template text="and no attempt was made to try to fit them" start="00:02:58.480" video="mainVideo" id=subtitle]] +[[!template text="into Emacs so that they could make sense" start="00:03:03.120" video="mainVideo" id=subtitle]] +[[!template text="as parts of the Emacs distribution." start="00:03:06.560" video="mainVideo" id=subtitle]] +[[!template text="This led to both moral problems," start="00:03:10.879" video="mainVideo" id=subtitle]] +[[!template text="(packages that depended on" start="00:03:14.480" video="mainVideo" id=subtitle]] +[[!template text="non-free software in order to be usable)" start="00:03:16.375" video="mainVideo" id=subtitle]] +[[!template text="and technical problems," start="00:03:19.599" video="mainVideo" id=subtitle]] +[[!template text="because the developers of those packages" start="00:03:21.354" video="mainVideo" id=subtitle]] +[[!template text="didn't coordinate with us" start="00:03:24.877" video="mainVideo" id=subtitle]] +[[!template text="about how to make it useful and" start="00:03:26.159" video="mainVideo" id=subtitle]] +[[!template text="convenient and clean to have them in Emacs." start="00:03:29.519" video="mainVideo" id=subtitle]] +[[!template new="1" text="So, the idea of NonGNU ELPA" start="00:03:36.560" video="mainVideo" id=subtitle]] +[[!template text="is an effort to smooth these things out." start="00:03:41.120" video="mainVideo" id=subtitle]] +[[!template text="The fundamental plan of" start="00:03:45.337" video="mainVideo" id=subtitle]] +[[!template text="NonGNU ELPA is that" start="00:03:48.319" video="mainVideo" id=subtitle]] +[[!template text="we won't ask for copyright assignments" start="00:03:51.680" video="mainVideo" id=subtitle]] +[[!template text="for those packages." start="00:03:54.480" video="mainVideo" id=subtitle]] +[[!template text="So, we won't be able to put them into core Emacs;" start="00:03:56.159" video="mainVideo" id=subtitle]] +[[!template text="at least not easily," start="00:04:00.000" video="mainVideo" id=subtitle]] +[[!template text="but we will have some control over how we distribute them." start="00:04:03.550" video="mainVideo" id=subtitle]] +[[!template text="We can put any package into NonGNU ELPA" start="00:04:09.519" video="mainVideo" id=subtitle]] +[[!template text="as long as it's free software." start="00:04:14.691" video="mainVideo" id=subtitle]] +[[!template text="If we like it, we can set up that way for users to get it." start="00:04:16.320" video="mainVideo" id=subtitle]] +[[!template text="We could put the package in exactly as it is" start="00:04:23.360" video="mainVideo" id=subtitle]] +[[!template text="if there's no problem at all with it." start="00:04:26.720" video="mainVideo" id=subtitle]] +[[!template text="We can make an arrangement" start="00:04:29.919" video="mainVideo" id=subtitle]] +[[!template text="with the package's developers" start="00:04:32.647" video="mainVideo" id=subtitle]] +[[!template text="to work on it with us and maintain it" start="00:04:34.160" video="mainVideo" id=subtitle]] +[[!template text="directly for distribution by NonGNU ELPA," start="00:04:38.000" video="mainVideo" id=subtitle]] +[[!template text="but if they are not interested," start="00:04:42.560" video="mainVideo" id=subtitle]] +[[!template text="we can put it in ourselves," start="00:04:45.778" video="mainVideo" id=subtitle]] +[[!template text="and if we need to make any changes," start="00:04:48.729" video="mainVideo" id=subtitle]] +[[!template text="we can do so." start="00:04:50.453" video="mainVideo" id=subtitle]] +[[!template text="So, NonGNU ELPA is not meant to be" start="00:04:52.000" video="mainVideo" id=subtitle]] +[[!template text="just a way that others can distribute their packages." start="00:04:58.688" video="mainVideo" id=subtitle]] +[[!template text="It's meant, at least in" start="00:05:02.720" video="mainVideo" id=subtitle]] +[[!template text="a minimal technical sense," start="00:05:04.336" video="mainVideo" id=subtitle]] +[[!template text="to work with GNU Emacs," start="00:05:07.574" video="mainVideo" id=subtitle]] +[[!template text="and we'll make changes if necessary," start="00:05:10.686" video="mainVideo" id=subtitle]] +[[!template text="so that it works smoothly with Emacs." start="00:05:12.305" video="mainVideo" id=subtitle]] +[[!template text="And this means that we're going to maintain it differently from GNU ELPA." start="00:05:17.928" video="mainVideo" id=subtitle]] +[[!template new="1" text="Well, GNU ELPA is hosted in a way that is actually rather inconvenient." start="00:05:25.365" video="mainVideo" id=subtitle]] +[[!template text="It is one single Git repository." start="00:05:31.520" video="mainVideo" id=subtitle]] +[[!template text="And so anybody that has access to write it" start="00:05:35.600" video="mainVideo" id=subtitle]] +[[!template text="can write any part of it." start="00:05:39.039" video="mainVideo" id=subtitle]] +[[!template text="There are many different packages in there, maintained by different people," start="00:05:41.239" video="mainVideo" id=subtitle]] +[[!template text="and we have no way to give each one of" start="00:05:46.080" video="mainVideo" id=subtitle]] +[[!template text="them access to per own package" start="00:05:48.080" video="mainVideo" id=subtitle]] +[[!template text="and not to the others." start="00:05:50.960" video="mainVideo" id=subtitle]] +[[!template text="Well, with NonGNU ELPA, we plan to fix that." start="00:05:53.122" video="mainVideo" id=subtitle]] +[[!template text="The idea is to have a single Git repository" start="00:05:57.035" video="mainVideo" id=subtitle]] +[[!template text="where you can download various packages from." start="00:06:01.411" video="mainVideo" id=subtitle]] +[[!template text="But they won't be maintained there." start="00:06:05.600" video="mainVideo" id=subtitle]] +[[!template text="Each of those packages will be" start="00:06:08.400" video="mainVideo" id=subtitle]] +[[!template text="copied automatically from some other place." start="00:06:10.800" video="mainVideo" id=subtitle]] +[[!template text="Probably some other repository" start="00:06:15.280" video="mainVideo" id=subtitle]] +[[!template text="where the right people have access to work on it." start="00:06:18.311" video="mainVideo" id=subtitle]] +[[!template text="And this way we can avoid giving" start="00:06:22.960" video="mainVideo" id=subtitle]] +[[!template text="a gigantic number of people" start="00:06:26.375" video="mainVideo" id=subtitle]] +[[!template new="1" text="access to every part of it." start="00:06:28.160" video="mainVideo" id=subtitle]] +[[!template text="So far NonGNU ELPA is just a plan," start="00:06:32.240" video="mainVideo" id=subtitle]] +[[!template text="we need people to implement the plan." start="00:06:37.039" video="mainVideo" id=subtitle]] +[[!template text="So, if you would like to help," start="00:06:40.479" video="mainVideo" id=subtitle]] +[[!template text="please write to me." start="00:06:43.825" video="mainVideo" id=subtitle]] +[[!template text="I think this is a very important step for progress" start="00:06:45.120" video="mainVideo" id=subtitle]] +[[!template text="and it's got to be implemented." start="00:06:49.520" video="mainVideo" id=subtitle]] +[[!template text="Thanks and happy hacking!" start="00:06:52.639" video="mainVideo" id=subtitle]] <!-- /transcript --> diff --git a/2020/organizers-notebook.md b/2020/organizers-notebook.md index b2edbf12..e2847847 100644 --- a/2020/organizers-notebook.md +++ b/2020/organizers-notebook.md @@ -46,8 +46,8 @@ I modified the `subed` package to work with VTT files. The modified version is a - [X] sachac <./info/16.md> <./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt> - [X] sachac <./info/17.md> <./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt> - [X] sachac <./info/18.md> <./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt> -- [ ] sachac <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt> -- [ ] sachac <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt> +- [X] sachac <./info/19.md> <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt> +- [X] sachac <./info/20.md> <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt> - [ ] <./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt> - [ ] sachac <./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt> - [ ] <./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt> @@ -61,11 +61,11 @@ I modified the `subed` package to work with VTT files. The modified version is a - [ ] <./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt> - [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt> - [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt> -- [ ] <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt> -- [ ] <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt> +- [ ] bhavin192 <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt> +- [ ] bhavin192 <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt> - [ ] bhavin192 <./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt> -- [ ] bhavin192 <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt> -- [ ] bhavin192 <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt> +- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt> +- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt> - [X] bhavin192 <./info/38.md> <./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt> - [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt> - [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt> diff --git a/2020/organizers-notebook.org b/2020/organizers-notebook.org index f3d68cdb..1eb742dd 100644 --- a/2020/organizers-notebook.org +++ b/2020/organizers-notebook.org @@ -61,11 +61,11 @@ I modified the =subed= package to work with VTT files. The modified version is a - [ ] [[./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt]] - [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt]] - [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt]] -- [ ] [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]] -- [ ] [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]] +- [ ] bhavin192 [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]] +- [ ] bhavin192 [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]] - [ ] bhavin192 [[./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt]] -- [ ] bhavin192 [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]] -- [ ] bhavin192 [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]] +- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]] +- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]] - [X] bhavin192 [[./info/38.md]] [[./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt]] - [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt]] - [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt]] @@ -823,44 +823,21 @@ If TALK is not specified, do it in the current buffer." ,@body) ,@body)) -(defun conf/add-transcript (&optional talk) - "Try to add transcript for the current talk." - (interactive) - (conf/with-talk-info-file talk - (goto-char (point-min)) - (let (subtitles subed-auto-find-video all) - (while (re-search-forward "subtitles=\"/\\(.+?\\)\"" nil t) - (setq subtitles (cons (match-string 1) subtitles)) - (when (re-search-forward "^$\\|\\[View transcript" nil t) - (unless (string= (match-string 0) "[View transcript") - (insert - (if (string-match "questions" (car subtitles)) - "[View transcript for Q&A](#transcript-questions)\n" - "[View transcript](#transcript)\n"))))) - (when subtitles - (mapc - (lambda (subtitle-file) - (with-current-buffer (find-file-noselect (expand-file-name subtitle-file conf/wiki-directory)) - (goto-char (point-min)) - (subed-mode) - (let (text) - (while (subed-forward-subtitle-text) - (setq text (cons (subed-subtitle-text) text))) - (setq all (mapconcat 'identity (reverse text) "\n")))) - (if (re-search-forward (format "<!-- transcript: %s -->[ \t]*\n\\([.\r\n]*?\\)<!-- /transcript -->" (regexp-quote subtitle-file)) nil t) - (progn - (goto-char (match-beginning 1)) - (delete-region (match-beginning 1) (match-end 1))) - (goto-char (point-max)) - (insert (format "\n\n<!-- transcript: %s -->\n\n" subtitle-file)) - (insert (if (string-match "questions" subtitle-file) - "<a name=\"transcript-questions\"></a>\n# Transcript: Q&A\n\n" - "<a name=\"transcript\"></a>\n# Transcript\n\n")) - (save-excursion (insert "\n\n<!-- /transcript -->\n"))) - (save-excursion (insert all))) - (reverse subtitles)))))) - -;; (conf/add-transcript (conf/find-talk "03")), or call from a talk info page +(defun my/convert-transcript-to-directives (id) + (interactive "MID: ") + (goto-char (point-min)) + (kill-new + (concat + "<a name=\"transcript\"></a>\n# Transcript\n\n" + (cl-loop while (subed-forward-subtitle-text) + concat (format "[[!template text=\"%s\" start=\"%s\" video=\"%s\" id=subtitle]]\n" + (replace-regexp-in-string + "\n" " " + (replace-regexp-in-string + "\"" """ + (replace-regexp-in-string "[][]" "" (subed-subtitle-text)))) + (subed-vtt--msecs-to-timestamp (subed-subtitle-msecs-start)) + id))))) #+end_src * Other useful tidbits diff --git a/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt index facb16b8..37114bf0 100644 --- a/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt +++ b/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt @@ -3,122 +3,103 @@ WEBVTT 00:00:00.000 --> 00:00:03.760 (Amin: Alrighty, Leo Vivier, take it away.) -00:00:03.760 --> 00:00:05.839 -Okay, well, thank you. I'm in. So you've +00:00:03.760 --> 00:00:05.319 +Okay, well, thank you. I'm in. -00:00:05.839 --> 00:00:06.879 -just had a +00:00:05.319 --> 00:00:08.393 +So you've just had a little roundup of +the news, -00:00:06.879 --> 00:00:08.880 -little roundup of the news, and we're +00:00:08.393 --> 00:00:11.120 +and we're going to get started now with +some presentations. -00:00:08.880 --> 00:00:10.320 -going to get started now with some - -00:00:10.320 --> 00:00:11.120 -presentations. - -00:00:11.120 --> 00:00:13.840 +00:00:11.120 --> 00:00:15.920 We're starting with user - -00:00:13.840 --> 00:00:15.920 developer stories. -00:00:15.920 --> 00:00:18.000 -I was extremely interested in this - -00:00:18.000 --> 00:00:19.199 -section because I +00:00:15.920 --> 00:00:18.568 +I was extremely interested in +this section -00:00:19.199 --> 00:00:21.600 -wanted to get a chance, basically, to tell +00:00:18.568 --> 00:00:21.133 +because I wanted to get +a chance, basically, -00:00:21.600 --> 00:00:24.160 -you a little more about who I am and +00:00:21.133 --> 00:00:24.160 +to tell you a little more about +who I am and -00:00:24.160 --> 00:00:27.039 -how I got from basically being a user of +00:00:24.160 --> 00:00:28.160 +how I got from basically being +a user of Emacs -00:00:27.039 --> 00:00:28.160 -Emacs - -00:00:28.160 --> 00:00:30.640 -to being nowadays a package - -00:00:30.640 --> 00:00:31.279 -maintainer, +00:00:28.160 --> 00:00:31.279 +to being nowadays a package maintainer, -00:00:31.279 --> 00:00:33.280 +00:00:31.279 --> 00:00:34.156 and maybe more in the future. I don't +know. -00:00:33.280 --> 00:00:34.559 -know. So, +00:00:34.156 --> 00:00:36.954 +So, just for the organizers, I'm +planning to speak for 15 minutes, -00:00:34.559 --> 00:00:36.160 -just for the organizers, I'm planning to +00:00:36.954 --> 00:00:39.680 +and I'll have five more minutes of +questions at the end. -00:00:36.160 --> 00:00:37.760 -speak for 15 minutes, and I'll have five - -00:00:37.760 --> 00:00:39.680 -more minutes of questions at the end. - -00:00:39.680 --> 00:00:41.360 +00:00:39.680 --> 00:00:41.880 As I told you before, if you want to have +questions, -00:00:41.360 --> 00:00:43.440 -questions, you know you can use the pad, +00:00:41.880 --> 00:00:43.440 +you know you can use the pad, -00:00:43.440 --> 00:00:44.879 +00:00:43.440 --> 00:00:45.871 and I'll be reading the questions from +there. -00:00:44.879 --> 00:00:47.360 -there. Okay. So - -00:00:47.360 --> 00:00:49.600 -hi there, as Amin introduced me before, +00:00:45.871 --> 00:00:49.600 +Okay. So hi there, as Amin introduced me +before, 00:00:49.600 --> 00:00:51.280 my name is Leo Vivier. -00:00:51.280 --> 00:00:54.800 +00:00:51.280 --> 00:00:55.662 I'm a freelance software engineer +in France, -00:00:54.800 --> 00:00:58.079 -in France, and I have been using Emacs - -00:00:58.079 --> 00:00:59.359 -now for +00:00:55.662 --> 00:00:59.359 +and I have been using Emacs now for -00:00:59.359 --> 00:01:01.280 -i believe close to eight years. I can't +00:00:59.359 --> 00:01:00.885 +I believe close to eight years. -00:01:01.280 --> 00:01:03.039 -believe it's been so long. +00:01:00.885 --> 00:01:03.039 +I can't believe it's been so long. -00:01:03.039 --> 00:01:07.680 +00:01:03.039 --> 00:01:09.967 But yes, it's been a journey because, +in a way, -00:01:07.680 --> 00:01:12.000 -in a way, nothing +00:01:09.967 --> 00:01:13.255 +nothing made me go for Emacs. -00:01:12.000 --> 00:01:15.119 -made me go for Emacs. You know I'm an-- +00:01:13.255 --> 00:01:17.011 +You know I'm an-- sorry, I was about to +say Emacs major, -00:01:15.119 --> 00:01:17.280 -sorry, I was about to say Emacs major, but +00:01:17.011 --> 00:01:18.638 +but no, I'm an English major. -00:01:17.280 --> 00:01:19.200 -no, I'm an English major. I went to +00:01:18.638 --> 00:01:23.990 +I went to university to study English +literature and linguistics, -00:01:19.200 --> 00:01:21.280 -university to study English literature - -00:01:21.280 --> 00:01:24.320 -and linguistics, and - -00:01:24.320 --> 00:01:26.159 -I just got started in Emacs +00:01:23.990 --> 00:01:26.159 +and I just got started in Emacs 00:01:26.159 --> 00:01:28.240 because I was looking for ways to take @@ -126,80 +107,70 @@ because I was looking for ways to take 00:01:28.240 --> 00:01:31.340 better notes. I was looking for ways to -00:01:31.340 --> 00:01:32.640 -[Applause] - 00:01:32.640 --> 00:01:34.640 structure the way I was learning, -00:01:34.640 --> 00:01:36.720 -structure the way I was +00:01:34.640 --> 00:01:38.084 +structure the way I was taking notes. -00:01:36.720 --> 00:01:40.079 -taking notes. I stumbled one day +00:01:38.084 --> 00:01:40.079 +I stumbled one day -00:01:40.079 --> 00:01:42.320 -upon this weird piece of software which +00:01:40.079 --> 00:01:42.032 +upon this weird piece of software -00:01:42.320 --> 00:01:43.759 -was called Emacs, +00:01:42.032 --> 00:01:43.759 +which was called Emacs, 00:01:43.759 --> 00:01:46.479 and I've been trapped forever since, -00:01:46.479 --> 00:01:47.920 -basically, because +00:01:46.479 --> 00:01:48.328 +basically, because eight years ago, -00:01:47.920 --> 00:01:49.280 -eight years ago, when I discovered +00:01:48.328 --> 00:01:49.515 +when I discovered Emacs, -00:01:49.280 --> 00:01:51.119 -Emacs I just couldn't let go. There was +00:01:49.515 --> 00:01:50.632 +I just couldn't let go. -00:01:51.119 --> 00:01:52.720 -just something very +00:01:50.632 --> 00:01:52.720 +There was just something very -00:01:52.720 --> 00:01:55.439 -interesting about the way you configured +00:01:52.720 --> 00:01:54.487 +interesting about the way -00:01:55.439 --> 00:01:56.320 -your setup, +00:01:54.487 --> 00:01:56.320 +you configured your setup, -00:01:56.320 --> 00:01:58.799 -and I just wanted to dive deeper and - -00:01:58.799 --> 00:01:59.759 -deeper. +00:01:56.320 --> 00:01:59.759 +and I just wanted to +dive deeper and deeper. 00:01:59.759 --> 00:02:04.320 So the title is of this talk exactly is -00:02:04.320 --> 00:02:06.640 +00:02:04.320 --> 00:02:07.637 how I went from user to package +maintainer, -00:02:06.640 --> 00:02:08.000 -maintainer, and - -00:02:08.000 --> 00:02:09.840 -the package now that I'm maintaining is - -00:02:09.840 --> 00:02:11.599 -called org-roam. I'm not the only one +00:02:07.637 --> 00:02:09.686 +and the package now that I'm maintaining -00:02:11.599 --> 00:02:12.080 +00:02:09.686 --> 00:02:12.080 +is called org-roam. I'm not the only one doing this. -00:02:12.080 --> 00:02:15.440 +00:02:12.080 --> 00:02:18.720 I'm helped with many lovely people - -00:02:15.440 --> 00:02:18.720 working on org-roam. -00:02:18.720 --> 00:02:21.360 +00:02:18.720 --> 00:02:22.149 I got started as a maintainer +only this year, -00:02:21.360 --> 00:02:23.360 -only this year, so that means that for +00:02:22.149 --> 00:02:23.360 +so that means that for 00:02:23.360 --> 00:02:24.720 the eight years I've been @@ -228,20 +199,17 @@ because I believe that I'm far from 00:02:40.959 --> 00:02:42.160 being the only user -00:02:42.160 --> 00:02:43.599 +00:02:42.160 --> 00:02:44.327 who can make the jump to being a +maintainer. -00:02:43.599 --> 00:02:45.519 -maintainer. A lot of you have - -00:02:45.519 --> 00:02:46.879 -a lot of knowledge when it comes to - -00:02:46.879 --> 00:02:48.959 -Emacs. Some of you +00:02:44.327 --> 00:02:47.572 +A lot of you have a lot of knowledge +when it comes to Emacs. -00:02:48.959 --> 00:02:51.040 -are at different steps in your journey. +00:02:47.572 --> 00:02:51.040 +Some of you are at different steps in +your journey. 00:02:51.040 --> 00:02:52.720 Some of you, for instance, are just @@ -249,78 +217,73 @@ Some of you, for instance, are just 00:02:52.720 --> 00:02:55.680 starting to copy stuff out of -00:02:55.680 --> 00:02:57.040 -StackExchange +00:02:55.680 --> 00:02:59.058 +StackExchange into your Emacs +configuration. -00:02:57.040 --> 00:02:59.519 -into your Emacs configuration. let's - -00:02:59.519 --> 00:03:00.720 -say you want to do something very - -00:03:00.720 --> 00:03:01.599 +00:02:59.058 --> 00:03:01.599 +Let's say you want to do something very particular 00:03:01.599 --> 00:03:04.480 and you haven't found a way to do so. -00:03:04.480 --> 00:03:05.920 -You go on StackExchange. You find - -00:03:05.920 --> 00:03:09.040 -something that's interesting. You add it -to your +00:03:04.480 --> 00:03:05.527 +You go on StackExchange. -00:03:09.040 --> 00:03:10.239 -Emacs configuration. You +00:03:05.527 --> 00:03:07.930 +You find something that's interesting. -00:03:10.239 --> 00:03:11.680 -barely understand anything that's going on. +00:03:07.930 --> 00:03:10.077 +You add it to your Emacs configuration. -00:03:11.680 --> 00:03:13.519 -You know that it's supposed to be +00:03:10.077 --> 00:03:11.680 +You barely understand anything that's +going on. -00:03:13.519 --> 00:03:14.800 -Emacs Lisp. +00:03:11.680 --> 00:03:14.800 +You know that it's supposed to be Emacs +Lisp. 00:03:14.800 --> 00:03:17.200 "I hardly know Emacs and 00:03:17.200 --> 00:03:19.440 -I know even less what is Lisp supposed to be." +I know even less what is Lisp supposed +to be." -00:03:19.440 --> 00:03:21.440 -But you paste it in and it does what you +00:03:19.440 --> 00:03:22.172 +But you paste it in, and it does what +you want it to do, -00:03:21.440 --> 00:03:22.800 -want it to do, and you say +00:03:22.172 --> 00:03:26.682 +and you say "Great, I'll move on to my +work now." -00:03:22.800 --> 00:03:26.959 -"Great, I'll move on to my work now." So +00:03:26.682 --> 00:03:28.821 +So that's how I got started. -00:03:26.959 --> 00:03:29.280 -that's how I got started. I had +00:03:28.821 --> 00:03:33.888 +I had a very spartan setup for Emacs, +which a lot of you must know... -00:03:29.280 --> 00:03:30.879 -a very spartan +00:03:33.888 --> 00:03:36.000 +The first time you launch Emacs, -00:03:30.879 --> 00:03:33.440 -setup for Emacs, which a lot of you must +00:03:36.000 --> 00:03:36.920 +you have this feeling -00:03:33.440 --> 00:03:36.000 -know... The first time you launch Emacs, +00:03:36.920 --> 00:03:38.852 +that you're jumping 20 years +back in time, -00:03:36.000 --> 00:03:37.840 -you have this feeling that you're jumping 20 +00:03:38.852 --> 00:03:43.260 +as far as the user interface is +concerned. -00:03:37.840 --> 00:03:39.599 -years back in time, as far as the - -00:03:39.599 --> 00:03:43.680 -user interface is concerned. But - -00:03:43.680 --> 00:03:46.959 -as you get to spend more time with Emacs... +00:03:43.260 --> 00:03:46.959 +But as you get to spend more time with +Emacs... 00:03:46.959 --> 00:03:49.120 Some would call it Stockholm syndrome @@ -328,104 +291,94 @@ Some would call it Stockholm syndrome 00:03:49.120 --> 00:03:50.959 insofar as you can't see -00:03:50.959 --> 00:03:53.360 -how spartan the entire thing is, but it - -00:03:53.360 --> 00:03:54.640 -actually is +00:03:50.959 --> 00:03:52.929 +how spartan the entire thing is, -00:03:54.640 --> 00:03:58.400 -a lovely prison, so to speak. +00:03:52.929 --> 00:03:58.400 +but it actually is a lovely prison, +so to speak. 00:03:58.400 --> 00:04:00.400 That's how I got started eight years ago. -00:04:00.400 --> 00:04:01.680 -I just wanted +00:04:00.400 --> 00:04:04.319 +I just wanted to find a way to do my +research properly. -00:04:01.680 --> 00:04:04.319 -to find a way to do my research properly. +00:04:04.319 --> 00:04:05.699 +I wanted to have a tool -00:04:04.319 --> 00:04:05.519 -I wanted to have a - -00:04:05.519 --> 00:04:07.280 -tool that I could use to write my notes +00:04:05.699 --> 00:04:07.280 +that I could use to write my notes 00:04:07.280 --> 00:04:08.959 in plain text, because I was already -00:04:08.959 --> 00:04:11.680 -fairly averse to - -00:04:11.680 --> 00:04:14.560 -Microsoft solutions when it - -00:04:14.560 --> 00:04:16.320 -came to taking notes. - -00:04:16.320 --> 00:04:19.359 -So yeah, I got started in Emacs. I +00:04:08.959 --> 00:04:16.320 +fairly averse to Microsoft solutions +when it came to taking notes. -00:04:19.359 --> 00:04:20.880 -read a little bit about what plain text +00:04:16.320 --> 00:04:19.180 +So yeah, I got started in Emacs. -00:04:20.880 --> 00:04:23.040 -was about. Just to be clear, +00:04:19.180 --> 00:04:21.651 +I read a little bit about what plain +text was about. -00:04:23.040 --> 00:04:26.000 -at the time, yes, I was very good with +00:04:21.651 --> 00:04:24.364 +Just to be clear, at the time, yes, -00:04:26.000 --> 00:04:27.120 -computers, +00:04:24.364 --> 00:04:27.120 +I was very good with computers, 00:04:27.120 --> 00:04:30.160 but I was not a computer science student. -00:04:30.160 --> 00:04:33.520 +00:04:30.160 --> 00:04:34.302 I had barely any experience with -programming +programming and coding, -00:04:33.520 --> 00:04:36.080 -and coding, and I was even less of a - -00:04:36.080 --> 00:04:39.919 -hacker +00:04:34.302 --> 00:04:39.919 +and I was even less of a hacker back then. -00:04:39.919 --> 00:04:42.560 -It just goes to show you that at the +00:04:39.919 --> 00:04:43.052 +It just goes to show you that +at the beginning, -00:04:42.560 --> 00:04:44.479 -beginning, I had close to no knowledge, +00:04:43.052 --> 00:04:44.479 +I had close to no knowledge, 00:04:44.479 --> 00:04:45.840 whether it be about -00:04:45.840 --> 00:04:48.880 -the free software world, whether it be -about... +00:04:45.840 --> 00:04:47.457 +the free software world, + +00:04:47.457 --> 00:04:48.880 +whether it be about... -00:04:48.880 --> 00:04:50.800 -Sacha, do you want to say something? (Sacha: just +00:04:48.880 --> 00:04:50.290 +Sacha, do you want to say something? -00:04:50.800 --> 00:04:52.479 -confirming, you're not sharing anything +00:04:50.290 --> 00:04:52.479 +(Sacha: just confirming, you're not +sharing anything 00:04:52.479 --> 00:04:54.080 on the screen at the moment, right?) -00:04:54.080 --> 00:04:55.360 -No, I'm not sharing anything, I'm +00:04:54.080 --> 00:04:55.204 +No, I'm not sharing anything, -00:04:55.360 --> 00:04:59.040 -just presenting. +00:04:55.204 --> 00:04:59.040 +I'm just presenting. -00:04:59.040 --> 00:05:02.240 -So when I started, I had no +00:04:59.040 --> 00:05:01.173 +So when I started, -00:05:02.240 --> 00:05:03.680 -experience whatsoever. +00:05:01.173 --> 00:05:03.680 +I had no experience whatsoever. 00:05:03.680 --> 00:05:07.199 I was just a literature major @@ -433,37 +386,39 @@ I was just a literature major 00:05:07.199 --> 00:05:11.039 trying to get better at taking notes. -00:05:11.039 --> 00:05:13.440 -I stumbled upon LaTeX. As many people +00:05:11.039 --> 00:05:12.466 +I stumbled upon LaTeX. -00:05:13.440 --> 00:05:15.280 -who stumble upon LaTeX know, +00:05:12.466 --> 00:05:15.280 +As many people who stumble upon +LaTeX know, -00:05:15.280 --> 00:05:17.039 -you don't just stumble upon +00:05:15.280 --> 00:05:17.519 +you don't just stumble upon LaTeX, -00:05:17.039 --> 00:05:19.759 -LaTeX, you embroil yourself in the +00:05:17.519 --> 00:05:21.950 +you embroil yourself in the turmoil of +suffering, -00:05:19.759 --> 00:05:24.560 -turmoil of suffering, of late -nights tweaking, +00:05:21.950 --> 00:05:24.560 +of late nights tweaking, -00:05:24.560 --> 00:05:27.440 -so that your document is exactly in the +00:05:24.560 --> 00:05:26.923 +so that your document is exactly -00:05:27.440 --> 00:05:33.440 -perfect shape you want it to be. +00:05:26.923 --> 00:05:33.440 +in the perfect shape you want it to be. 00:05:33.440 --> 00:05:36.639 Soon after, when I got started with Emacs and LaTeX, -00:05:36.639 --> 00:05:38.400 +00:05:36.639 --> 00:05:39.334 I discovered something that truly +changed my life, -00:05:38.400 --> 00:05:40.560 -changed my life, and it was Org Mode. +00:05:39.334 --> 00:05:40.560 +and it was Org Mode. 00:05:40.560 --> 00:05:44.479 As you'll get a lot of presentations @@ -478,41 +433,43 @@ I won't be spending too much time on it. But Org Mode, for me, was a revelation. It's... -00:05:53.680 --> 00:05:56.880 -There was something that, upon reading +00:05:53.680 --> 00:05:55.869 +There was something that, -00:05:56.880 --> 00:05:59.039 -articles on how to use Org Mode, +00:05:55.869 --> 00:05:59.039 +upon reading articles on +how to use Org Mode, -00:05:59.039 --> 00:06:02.080 +00:05:59.039 --> 00:06:02.453 especially one of the key +articles -00:06:02.080 --> 00:06:04.160 -article that I'd read which really made +00:06:02.453 --> 00:06:04.160 +that I'd read which really made 00:06:04.160 --> 00:06:06.000 a huge impact on me 00:06:06.000 --> 00:06:09.199 -was the "Organize Your Life in Plain Text" one - -00:06:09.199 --> 00:06:10.720 -which i'm sure many of you must have +was the "Organize Your Life in Plain +Text" one, -00:06:10.720 --> 00:06:12.240 +00:06:09.199 --> 00:06:12.240 +which I'm sure many of you must have stumbled upon 00:06:12.240 --> 00:06:15.919 in your Emacs journey... -00:06:15.919 --> 00:06:19.680 +00:06:15.919 --> 00:06:20.307 For me, when I stumbled upon this +document, -00:06:19.680 --> 00:06:21.840 -document, I was starting to get +00:06:20.307 --> 00:06:22.488 +I was starting to get interested -00:06:21.840 --> 00:06:24.240 -interested in Getting Things Done and +00:06:22.488 --> 00:06:24.240 +in Getting Things Done and 00:06:24.240 --> 00:06:26.560 all the nitty-gritty stuff about @@ -520,26 +477,23 @@ all the nitty-gritty stuff about 00:06:26.560 --> 00:06:29.199 organization and self-organization. -00:06:29.199 --> 00:06:31.919 +00:06:29.199 --> 00:06:32.960 It just felt like everything was under - -00:06:31.919 --> 00:06:32.960 my fingertips 00:06:32.960 --> 00:06:36.960 to make the perfect workflow. -00:06:36.960 --> 00:06:40.880 +00:06:36.960 --> 00:06:44.080 There was something incredibly - -00:06:40.880 --> 00:06:44.080 satisfying about -00:06:44.080 --> 00:06:46.319 -having a system that gave you so many +00:06:44.080 --> 00:06:45.834 +having a system that gave you -00:06:46.319 --> 00:06:48.319 -options to configure your experience +00:06:45.834 --> 00:06:48.319 +so many options to configure your +experience 00:06:48.319 --> 00:06:50.160 exactly how you wanted. @@ -547,10 +501,8 @@ exactly how you wanted. 00:06:50.160 --> 00:06:54.479 You had this feeling that -00:06:54.479 --> 00:06:57.199 +00:06:54.479 --> 00:06:57.599 the people behind Org Mode had thought - -00:06:57.199 --> 00:06:57.599 of everything, 00:06:57.599 --> 00:07:00.479 @@ -576,76 +528,76 @@ oh, it's half past one and I need to... in the morning, I mean, and I need to make 00:07:15.280 --> 00:07:17.680 -sure that the item that i'm marking as done +sure that the item that I'm marking as done -00:07:17.680 --> 00:07:19.199 -is done for the day before and not for +00:07:17.680 --> 00:07:18.759 +is done for the day before -00:07:19.199 --> 00:07:21.919 -the current day. You see what I'm talking about. +00:07:18.759 --> 00:07:20.233 +and not for the current day. + +00:07:20.233 --> 00:07:21.919 +You see what I'm talking about. 00:07:21.919 --> 00:07:25.280 So many details that were already -00:07:25.280 --> 00:07:28.800 -present in Org Mode. At first you're - -00:07:28.800 --> 00:07:31.039 -really impressed, because you think, - -00:07:31.039 --> 00:07:34.080 -wow, they thought of everything, but then +00:07:25.280 --> 00:07:27.235 +present in Org Mode. -00:07:34.080 --> 00:07:35.599 -you realize that it's just a matter of +00:07:27.235 --> 00:07:31.335 +At first you're really impressed, +because you think, wow, -00:07:35.599 --> 00:07:38.080 -experience, just a matter of people +00:07:31.335 --> 00:07:33.470 +they thought of everything, -00:07:38.080 --> 00:07:40.800 -contributing code, because the +00:07:33.470 --> 00:07:36.378 +but then you realize that it's just a +matter of experience, -00:07:40.800 --> 00:07:42.400 -development of Org Mode, Emacs, and +00:07:36.378 --> 00:07:39.712 +just a matter of people +contributing code, -00:07:42.400 --> 00:07:43.520 -everything is just +00:07:39.712 --> 00:07:42.171 +because the development of Org Mode, +Emacs, -00:07:43.520 --> 00:07:45.440 -open to the public. You know, it's like +00:07:42.171 --> 00:07:44.455 +and everything is just +open to the public. -00:07:45.440 --> 00:07:46.879 -everything is being done with the garage +00:07:44.455 --> 00:07:45.440 +You know, it's like -00:07:46.879 --> 00:07:48.560 -door opened. You can just +00:07:45.440 --> 00:07:47.685 +everything is being done +with the garage door opened. -00:07:48.560 --> 00:07:50.960 -go on Org Mode on Savannah and see +00:07:47.685 --> 00:07:50.402 +You can just go on Org Mode on Savannah -00:07:50.960 --> 00:07:54.800 -everything that is being developed. +00:07:50.402 --> 00:07:54.800 +and see everything that is being +developed. -00:07:54.800 --> 00:07:58.639 -For me, the shift that occurred +00:07:54.800 --> 00:08:01.586 +For me, the shift that occurred in my +mind was -00:07:58.639 --> 00:08:02.639 -in my mind was when +00:08:01.586 --> 00:08:04.139 +when I was reading all the options, -00:08:02.639 --> 00:08:04.240 -I was reading all the options, I +00:08:04.139 --> 00:08:05.881 +I was looking at all the variables -00:08:04.240 --> 00:08:06.240 -was looking at all the variables that i +00:08:05.881 --> 00:08:08.160 +that I could modify for Org Mode, -00:08:06.240 --> 00:08:08.160 -could modify for Org Mode, - -00:08:08.160 --> 00:08:11.440 -and there came a time, maybe two to three - -00:08:11.440 --> 00:08:12.560 -years ago, +00:08:08.160 --> 00:08:12.560 +and there came a time, maybe two to +three years ago, 00:08:12.560 --> 00:08:15.599 where I thought, oh wow, @@ -653,35 +605,36 @@ where I thought, oh wow, 00:08:15.599 --> 00:08:17.759 maybe for the first time in a while, -00:08:17.759 --> 00:08:19.599 -there is no option for me to do what I +00:08:17.759 --> 00:08:19.260 +there is no option for me to do -00:08:19.599 --> 00:08:21.440 -want to be doing with Org Mode. +00:08:19.260 --> 00:08:21.440 +what I want to be doing with Org Mode. -00:08:21.440 --> 00:08:24.479 -I believe at the time the the key +00:08:21.440 --> 00:08:23.668 +I believe at the time, -00:08:24.479 --> 00:08:29.199 -issue that triggered this reflex for me was +00:08:23.668 --> 00:08:29.199 +the key issue that triggered +this reflex for me was 00:08:29.199 --> 00:08:31.039 I wanted to do something with the agenda. -00:08:31.039 --> 00:08:33.599 -I wanted to have a super category so, you +00:08:31.039 --> 00:08:34.159 +I wanted to have a super category so, +you know, in the... -00:08:33.599 --> 00:08:34.159 -know, in the... +00:08:34.159 --> 00:08:36.606 +for those of you who know, +in your agenda, -00:08:34.159 --> 00:08:36.320 -for those of you who know, in your +00:08:36.606 --> 00:08:38.376 +you have the ability to +have many files, -00:08:36.320 --> 00:08:38.000 -agenda, you have the ability to have many - -00:08:38.000 --> 00:08:41.200 -files, and you have the ability to have +00:08:38.376 --> 00:08:41.200 +and you have the ability to have categories. 00:08:41.200 --> 00:08:47.920 @@ -693,30 +646,24 @@ TODOs in smaller groups, or bigger 00:08:51.680 --> 00:08:52.560 groups, I should say, -00:08:52.560 --> 00:08:53.920 -so that, for instance, I could have one - -00:08:53.920 --> 00:08:55.440 -group for my professional life, I could +00:08:52.560 --> 00:08:53.780 +so that, for instance, I could have -00:08:55.440 --> 00:08:56.000 -have a group +00:08:53.780 --> 00:08:55.131 +one group for my professional life, -00:08:56.000 --> 00:08:59.600 -for one work, the second -work... +00:08:55.131 --> 00:08:57.462 +I could have a group for one work, -00:08:59.600 --> 00:09:00.800 -I could have something for +00:08:57.462 --> 00:08:59.600 +the second work... -00:09:00.800 --> 00:09:02.800 -university and all this. +00:08:59.600 --> 00:09:02.800 +I could have something for university +and all this. -00:09:02.800 --> 00:09:06.000 -I thought, yeah, - -00:09:06.000 --> 00:09:09.600 -I think I'd like this. +00:09:02.800 --> 00:09:09.600 +I thought, yeah, I think I'd like this. 00:09:09.600 --> 00:09:12.959 After having spent so long working @@ -724,14 +671,15 @@ After having spent so long working 00:09:12.959 --> 00:09:15.519 with Emacs and working with Org Mode, -00:09:15.519 --> 00:09:17.200 -I had some ideas about what was +00:09:15.519 --> 00:09:16.766 +I had some ideas about -00:09:17.200 --> 00:09:18.800 -within the realm of possibility and what +00:09:16.766 --> 00:09:19.292 +what was within the realm of possibility +and what wasn't. -00:09:18.800 --> 00:09:21.120 -wasn't. Here I thought to myself, +00:09:19.292 --> 00:09:21.120 +Here I thought to myself, 00:09:21.120 --> 00:09:24.320 this is definitely something that I can do. @@ -742,11 +690,12 @@ And so thus started my journey 00:09:27.839 --> 00:09:31.360 into the Org Mode libraries. -00:09:31.360 --> 00:09:33.040 -I won't go too much into details right +00:09:31.360 --> 00:09:33.222 +I won't go too much into details +right now, -00:09:33.040 --> 00:09:34.959 -now, because right now, the main objective +00:09:33.222 --> 00:09:34.959 +because right now, the main objective 00:09:34.959 --> 00:09:37.040 that I have is just to show you @@ -770,46 +719,41 @@ It might seem like an obscure language, 00:09:52.080 --> 00:09:54.080 and it certainly is, -00:09:54.080 --> 00:09:56.399 +00:09:54.080 --> 00:09:57.279 but as soon as you get the logic of the - -00:09:56.399 --> 00:09:57.279 language--and -00:09:57.279 --> 00:09:59.360 -what i'm telling you - -00:09:59.360 --> 00:10:00.560 -is coming from someone who's never +00:09:57.279 --> 00:10:00.136 +what I'm telling you is coming from +someone -00:10:00.560 --> 00:10:01.760 -studied programming-- +00:10:00.136 --> 00:10:01.760 +who's never studied programming-- 00:10:01.760 --> 00:10:04.399 it made sense. -00:10:04.399 --> 00:10:06.079 -Everything is so verbose when you get +00:10:04.399 --> 00:10:05.534 +Everything is so verbose -00:10:06.079 --> 00:10:07.279 -into the code. +00:10:05.534 --> 00:10:07.279 +when you get into the code. -00:10:07.279 --> 00:10:10.399 +00:10:07.279 --> 00:10:11.065 When you learn the rudiments +of Elisp, -00:10:10.399 --> 00:10:13.360 -of Elisp, you start getting to the code, +00:10:11.065 --> 00:10:13.360 +you start getting to the code, -00:10:13.360 --> 00:10:14.079 -and you start +00:10:13.360 --> 00:10:15.229 +and you start thinking, wow, -00:10:14.079 --> 00:10:17.120 -thinking, wow, okay that makes sense, +00:10:15.229 --> 00:10:17.120 +okay that makes sense, -00:10:17.120 --> 00:10:19.519 +00:10:17.120 --> 00:10:21.360 and you start developing a logic - -00:10:19.519 --> 00:10:21.360 for all this. 00:10:21.360 --> 00:10:24.720 @@ -819,76 +763,75 @@ So, equipped as I was with this new knowledge, I went on my project, 00:10:27.760 --> 00:10:30.000 -i went into the Org agenda code, +I went into the Org agenda code, 00:10:30.000 --> 00:10:30.880 and I thought, okay, -00:10:30.880 --> 00:10:33.440 +00:10:30.880 --> 00:10:34.640 is there anything that I can use to do - -00:10:33.440 --> 00:10:34.640 my bidding? -00:10:34.640 --> 00:10:38.560 +00:10:34.640 --> 00:10:39.733 Fast forward maybe two to three weeks of +intense turmoil -00:10:38.560 --> 00:10:41.600 -intense turmoil and many nights which - -00:10:41.600 --> 00:10:46.079 -were spent single-mindedly working on -this project, +00:10:39.733 --> 00:10:46.079 +and many nights which were spent +single-mindedly working on this project, -00:10:46.079 --> 00:10:48.079 -two weeks after, I had something that was +00:10:46.079 --> 00:10:48.781 +two weeks after, I had something +that was working, -00:10:48.079 --> 00:10:51.680 -working, and I was pretty happy about it. +00:10:48.781 --> 00:10:51.680 +and I was pretty happy about it. -00:10:51.680 --> 00:10:54.640 -That was a key landmark for +00:10:51.680 --> 00:10:54.849 +That was a key landmark for me, -00:10:54.640 --> 00:10:56.800 -me, because when that happened, +00:10:54.849 --> 00:10:56.800 +because when that happened, -00:10:56.800 --> 00:11:00.320 -it just felt like, okay, I can contribute +00:10:56.800 --> 00:10:58.860 +it just felt like, okay, -00:11:00.320 --> 00:11:02.160 -something to Org Mode, and I can do +00:10:58.860 --> 00:11:01.335 +I can contribute something to Org Mode, -00:11:02.160 --> 00:11:07.600 -something that would benefit as many -people as possible. +00:11:01.335 --> 00:11:07.600 +and I can do something that would +benefit as many people as possible. -00:11:07.600 --> 00:11:09.519 -And to me, that was the click. That's when +00:11:07.600 --> 00:11:08.970 +And to me, that was the click. -00:11:09.519 --> 00:11:11.440 -it occurred. That's when I +00:11:08.970 --> 00:11:10.530 +That's when it occurred. -00:11:11.440 --> 00:11:14.640 -went on my first project and I did something +00:11:10.530 --> 00:11:14.640 +That's when I went on my first project +and I did something 00:11:14.640 --> 00:11:18.079 that felt useful to the community. -00:11:18.079 --> 00:11:20.079 -And nowadays, as I told you, I +00:11:18.079 --> 00:11:19.945 +And nowadays, as I told you, -00:11:20.079 --> 00:11:22.640 -maintain packages, but really, nothing +00:11:19.945 --> 00:11:22.640 +I maintain packages, but really, nothing has changed. 00:11:22.640 --> 00:11:24.399 The only thing, maybe, that has changed 00:11:24.399 --> 00:11:28.320 -that I've turned my mind onto other problems. +is that I've turned my mind onto other +problems. 00:11:28.320 --> 00:11:32.000 -Maybe I've got three more minutes +Maybe I've got three more minutes, 00:11:32.000 --> 00:11:35.279 and I'd like to finish by @@ -896,35 +839,30 @@ and I'd like to finish by 00:11:35.279 --> 00:11:38.399 maybe something a little different. -00:11:38.399 --> 00:11:39.600 -I've told you my Emacs story and +00:11:38.399 --> 00:11:39.449 +I've told you my Emacs story -00:11:39.600 --> 00:11:42.079 -I hope I've stressed how little effort +00:11:39.449 --> 00:11:42.924 +and I hope I've stressed how little +effort it took me -00:11:42.079 --> 00:11:43.600 -it took me to +00:11:42.924 --> 00:11:46.560 +to move from steps to steps on the +ladder. -00:11:43.600 --> 00:11:46.560 -move from steps to steps on the ladder. - -00:11:46.560 --> 00:11:48.399 +00:11:46.560 --> 00:11:48.959 The ladder implies a sense of hierarchy, - -00:11:48.399 --> 00:11:48.959 but it really isn't. -00:11:48.959 --> 00:11:52.240 -Whatever your step on the - -00:11:52.240 --> 00:11:53.920 -journey of Emacs is... +00:11:48.959 --> 00:11:53.920 +Whatever your step on the journey of +Emacs is... -00:11:53.920 --> 00:11:55.600 -Some of you might be at the +00:11:53.920 --> 00:11:55.830 +Some of you might be at the step -00:11:55.600 --> 00:11:57.440 -step where you're really worried +00:11:55.830 --> 00:11:57.440 +where you're really worried 00:11:57.440 --> 00:11:59.360 about learning Elisp because it feels @@ -960,20 +898,20 @@ I wish I could do this but I can't," 00:12:18.160 --> 00:12:19.920 or maybe do try to do this, -00:12:19.920 --> 00:12:21.680 -maybe do try to change something in a +00:12:19.920 --> 00:12:21.442 +maybe do try to change something -00:12:21.680 --> 00:12:23.279 -major mode that you're using +00:12:21.442 --> 00:12:23.279 +in a major mode that you're using 00:12:23.279 --> 00:12:26.560 and which you feel might be better. -00:12:26.560 --> 00:12:29.760 -I think Emacs, Org Mode, and all free +00:12:26.560 --> 00:12:28.722 +I think Emacs, Org Mode, -00:12:29.760 --> 00:12:31.040 -software in general +00:12:28.722 --> 00:12:31.040 +and all free software in general 00:12:31.040 --> 00:12:34.720 has this tendency to give you this idea @@ -990,11 +928,12 @@ that you're modifying things 00:12:43.200 --> 00:12:46.320 to do your bidding. -00:12:46.320 --> 00:12:48.399 -For me, I believe this to be a very +00:12:46.320 --> 00:12:48.042 +For me, I believe this to be -00:12:48.399 --> 00:12:50.320 -healthy attitude towards software. +00:12:48.042 --> 00:12:50.320 +a very healthy attitude towards +software. 00:12:50.320 --> 00:12:54.079 As Amin said in the very beginning, @@ -1003,19 +942,18 @@ As Amin said in the very beginning, we are doing this entire presentation-- 00:12:57.279 --> 00:13:00.800 -sorry, this entire conference with free software. +sorry, this entire conference with +free software. -00:13:00.800 --> 00:13:02.240 -Just see all the things we've been able +00:13:00.800 --> 00:13:01.686 +Just see all the things -00:13:02.240 --> 00:13:03.920 -to do in free software. +00:13:01.686 --> 00:13:03.920 +we've been able to do in free software. -00:13:03.920 --> 00:13:07.360 -For me, Emacs - -00:13:07.360 --> 00:13:10.399 -was my gateway, so to speak, +00:13:03.920 --> 00:13:10.399 +For me, Emacs was my gateway, +so to speak, 00:13:10.399 --> 00:13:14.399 into how to contribute to free software, @@ -1023,29 +961,28 @@ into how to contribute to free software, 00:13:14.399 --> 00:13:18.639 about the philosophy that surrounds it. -00:13:18.639 --> 00:13:20.560 -What I would like to do... I'll finish +00:13:18.639 --> 00:13:20.003 +What I would like to do... -00:13:20.560 --> 00:13:22.000 -on this note and then I'll be taking +00:13:20.003 --> 00:13:21.375 +I'll finish on this note and then -00:13:22.000 --> 00:13:23.360 -your questions. +00:13:21.375 --> 00:13:23.360 +I'll be taking your questions. 00:13:23.360 --> 00:13:26.480 Just try. -00:13:26.480 --> 00:13:29.360 -You've read on Reddit that you - -00:13:29.360 --> 00:13:31.279 -need to go through the Elisp manual +00:13:26.480 --> 00:13:28.592 +You've read on Reddit -00:13:31.279 --> 00:13:33.040 -in Emacs. You might be scared, +00:13:28.592 --> 00:13:31.807 +that you need to go through the Elisp +manual in Emacs. -00:13:33.040 --> 00:13:35.920 -but just do it. Just give it a shot. +00:13:31.807 --> 00:13:35.920 +You might be scared, but just do it. +Just give it a shot. 00:13:35.920 --> 00:13:38.560 Just give it maybe one afternoon. @@ -1056,30 +993,33 @@ Try to read it. 00:13:39.199 --> 00:13:43.120 Try to see if this appeals to your mind. -00:13:43.120 --> 00:13:44.399 -If you've been interested enough in my +00:13:43.120 --> 00:13:44.230 +If you've been interested enough -00:13:44.399 --> 00:13:45.680 -presentation right now, and if you're +00:13:44.230 --> 00:13:45.241 +in my presentation right now, -00:13:45.680 --> 00:13:47.199 -interested enough in any of the talks +00:13:45.241 --> 00:13:47.199 +and if you're interested enough in any +of the talks 00:13:47.199 --> 00:13:49.519 you're going to have during the entire conference, -00:13:49.519 --> 00:13:51.839 -do give it a shot. I'm pretty sure +00:13:49.519 --> 00:13:50.747 +do give it a shot. -00:13:51.839 --> 00:13:52.959 -you will like the journey +00:13:50.747 --> 00:13:52.959 +I'm pretty sure you will like +the journey -00:13:52.959 --> 00:13:55.760 -on which you will be embarking upon. So I +00:13:52.959 --> 00:13:55.418 +on which you will be embarking upon. -00:13:55.760 --> 00:13:57.120 -believe I'm finishing one minute early, +00:13:55.418 --> 00:13:57.120 +So I believe I'm finishing +one minute early, 00:13:57.120 --> 00:14:01.040 but I see quite a bit of questions already. @@ -1087,20 +1027,18 @@ but I see quite a bit of questions already. 00:14:01.040 --> 00:14:04.320 I'm not sure. Sacha, should I -00:14:04.320 --> 00:14:06.000 -just be reading the questions, or +00:14:04.320 --> 00:14:05.847 +just be reading the questions, -00:14:06.000 --> 00:14:07.120 -do you want to be feeding me the - -00:14:07.120 --> 00:14:08.639 +00:14:05.847 --> 00:14:08.639 +or do you want to be feeding me the questions? -00:14:08.639 --> 00:14:11.120 -(Amin: It's really up to you. it's +00:14:08.639 --> 00:14:10.755 +(Amin: It's really up to you. -00:14:11.120 --> 00:14:12.320 -completely up to you. +00:14:10.755 --> 00:14:12.320 +It's completely up to you. 00:14:12.320 --> 00:14:13.600 If you've got the questions @@ -1109,16 +1047,17 @@ If you've got the questions open and can take them or read them, 00:14:15.839 --> 00:14:18.320 -by all means please.) +by all means, please.) -00:14:18.320 --> 00:14:19.680 -Okay, well, I'm going to read them because +00:14:18.320 --> 00:14:19.420 +Okay, well, I'm going to read them -00:14:19.680 --> 00:14:20.880 -I've got them on the side. I'm going +00:14:19.420 --> 00:14:20.581 +because I've got them on the side. -00:14:20.880 --> 00:14:22.800 -to start with the one at the bottom. +00:14:20.581 --> 00:14:22.800 +I'm going to start with the one at the +bottom. 00:14:22.800 --> 00:14:24.959 "Do you feel that being a white male @@ -1126,22 +1065,25 @@ to start with the one at the bottom. 00:14:24.959 --> 00:14:26.959 contributed to your experience?" -00:14:26.959 --> 00:14:29.680 -Yeah. I mean, I do believe... There's +00:14:26.959 --> 00:14:29.165 +Yeah. I mean, I do believe... + +00:14:29.165 --> 00:14:30.771 +There's an idea of privilege. -00:14:29.680 --> 00:14:31.360 -an idea of privilege. I mean, I'm +00:14:30.771 --> 00:14:33.250 +I mean, I'm French. I live in... -00:14:31.360 --> 00:14:35.279 -French. I live in... I'm lucky enough to -be here +00:14:33.250 --> 00:14:36.959 +I'm lucky enough to be here at +university, okay, -00:14:35.279 --> 00:14:39.120 -at university, okay, and I'm fairly -aware of the +00:14:36.959 --> 00:14:40.714 +and I'm fairly aware of the +discrepancies that happen, -00:14:39.120 --> 00:14:41.600 -discrepancies that happen, even in France, +00:14:40.714 --> 00:14:41.600 +even in France, 00:14:41.600 --> 00:14:42.880 according to this... @@ -1152,14 +1094,13 @@ So, yes, I believe my journey 00:14:46.320 --> 00:14:51.199 was heavily influenced by this. -00:14:51.199 --> 00:14:52.639 +00:14:51.199 --> 00:14:53.547 If you would like to specify the +question, please do, -00:14:52.639 --> 00:14:54.320 -question, please do, but I don't have - -00:14:54.320 --> 00:14:56.560 -really all that much to ask on this. +00:14:53.547 --> 00:14:56.560 +but I don't have really all that much to +ask on this. 00:14:56.560 --> 00:14:59.839 "What is your advice to start learning @@ -1167,53 +1108,51 @@ really all that much to ask on this. 00:14:59.839 --> 00:15:01.279 Elisp language? Any particularly good -00:15:01.279 --> 00:15:04.160 -resource or any other tips?" I finished - -00:15:04.160 --> 00:15:07.760 -um my presentation by telling you about +00:15:01.279 --> 00:15:03.421 +resource or any other tips?" -00:15:07.760 --> 00:15:10.560 -the Elisp introduction which is built into +00:15:03.421 --> 00:15:07.760 +I finished my presentation by telling +you about -00:15:10.560 --> 00:15:13.519 -Emacs. What I might do... I'm going to share my +00:15:07.760 --> 00:15:10.937 +the Elisp introduction which is built +into Emacs. -00:15:13.519 --> 00:15:15.120 -screen just to show you +00:15:10.937 --> 00:15:13.936 +What I might do... I'm going to +share my screen -00:15:15.120 --> 00:15:22.880 -how this works. I will be sharing -this window. +00:15:13.936 --> 00:15:17.819 +just to show you how this works. -00:15:22.880 --> 00:15:24.399 -I believe it's frozen on my end, so I +00:15:17.819 --> 00:15:22.880 +I will be sharing this window. -00:15:24.399 --> 00:15:27.199 -can't see anything. +00:15:22.880 --> 00:15:24.234 +I believe it's frozen on my end, -00:15:27.199 --> 00:15:28.959 -i'm not sure if you can see me or if my +00:15:24.234 --> 00:15:27.199 +so I can't see anything. -00:15:28.959 --> 00:15:32.560 -camera is moving. +00:15:27.199 --> 00:15:28.597 +I'm not sure if you can see me -00:15:32.560 --> 00:15:34.800 -Okay, so my Firefox is frozen. So i'll +00:15:28.597 --> 00:15:32.560 +or if my camera is moving. -00:15:34.800 --> 00:15:36.000 -answer the question, but I won't be able +00:15:32.560 --> 00:15:34.387 +Okay, so my Firefox is frozen. -00:15:36.000 --> 00:15:36.800 -to show you +00:15:34.387 --> 00:15:35.361 +So I'll answer the question, -00:15:36.800 --> 00:15:40.000 -what I wanted to show you. +00:15:35.361 --> 00:15:40.000 +but I won't be able to show you what I +wanted to show you. -00:15:40.000 --> 00:15:42.639 +00:15:40.000 --> 00:15:44.320 There's a built-in guide inside Emacs to - -00:15:42.639 --> 00:15:44.320 learn Elisp. 00:15:44.320 --> 00:15:46.880 @@ -1225,11 +1164,9 @@ is just to go open these info pages. 00:15:49.040 --> 00:15:50.959 I'm sure someone will be kind enough to -00:15:50.959 --> 00:15:53.839 -mention this to you in the #emacsconf channel - -00:15:53.839 --> 00:15:54.880 -on IRC +00:15:50.959 --> 00:15:54.880 +mention this to you in the #emacsconf +channel on IRC 00:15:54.880 --> 00:15:56.880 but it's probably the best way @@ -1237,26 +1174,25 @@ but it's probably the best way 00:15:56.880 --> 00:15:59.040 to get started with Elisp. -00:15:59.040 --> 00:16:01.279 -You know, we tend to get obsessed, with - -00:16:01.279 --> 00:16:03.360 -software and with programming, about +00:15:59.040 --> 00:16:00.991 +You know, we tend to get obsessed, -00:16:03.360 --> 00:16:04.880 -what's the best way to get started. +00:16:00.991 --> 00:16:03.013 +with software and with programming, -00:16:04.880 --> 00:16:06.959 -You see so many people who are +00:16:03.013 --> 00:16:04.880 +about what's the best way to get +started. -00:16:06.959 --> 00:16:08.399 -heavily interested +00:16:04.880 --> 00:16:08.399 +You see so many people who are heavily +interested -00:16:08.399 --> 00:16:10.639 -in getting started with programming but +00:16:08.399 --> 00:16:10.409 +in getting started with programming -00:16:10.639 --> 00:16:12.320 -they never managed to get started +00:16:10.409 --> 00:16:12.320 +but they never managed to get started 00:16:12.320 --> 00:16:14.320 because there's so much choice. @@ -1267,135 +1203,115 @@ My advice would be to just get started. 00:16:16.320 --> 00:16:18.800 Don't get so worried about the first step. -00:16:18.800 --> 00:16:21.839 -Well, if I may still recommend the - -00:16:21.839 --> 00:16:23.920 -first step, even after saying this, - -00:16:23.920 --> 00:16:26.480 -do try to start with the - -00:16:26.480 --> 00:16:28.000 -built-in guides. I believe they're pretty - -00:16:28.000 --> 00:16:29.600 -pretty good. +00:16:18.800 --> 00:16:22.493 +Well, if I may still recommend +the first step, -00:16:29.600 --> 00:16:32.079 -There was another question. It's +00:16:22.493 --> 00:16:23.920 +even after saying this, -00:16:32.079 --> 00:16:33.199 -the last question that I can read and +00:16:23.920 --> 00:16:27.073 +do try to start with the built-in +guides. -00:16:33.199 --> 00:16:34.800 -after that, you will have to read +00:16:27.073 --> 00:16:29.600 +I believe they're pretty, pretty good. -00:16:34.800 --> 00:16:36.000 -the questions for me because everything +00:16:29.600 --> 00:16:31.691 +There was another question. -00:16:36.000 --> 00:16:37.920 -is frozen on my end. +00:16:31.691 --> 00:16:33.055 +It's the last question that I can read -00:16:37.920 --> 00:16:41.600 -I hope I'm not frozen +00:16:33.055 --> 00:16:34.564 +and after that, you will have to -00:16:41.600 --> 00:16:44.240 -in a very bad position so +00:16:34.564 --> 00:16:37.920 +read the questions for me because +everything is frozen on my end. -00:16:44.240 --> 00:16:45.680 -please excuse me if +00:16:37.920 --> 00:16:43.935 +I hope I'm not frozen in a very bad +position, -00:16:45.680 --> 00:16:48.240 -my mouth is open or anything. (Amin: no, we +00:16:43.935 --> 00:16:47.406 +so please excuse me if my mouth is open +or anything. -00:16:48.240 --> 00:16:49.759 -just completely lost the video feed, so +00:16:47.406 --> 00:16:51.120 +(Amin: no, we just completely lost the +video feed, so no worries.) -00:16:49.759 --> 00:16:51.120 -no worries.) - -00:16:51.120 --> 00:16:52.720 +00:16:51.120 --> 00:16:54.800 Oh, splendid, so I won't have to make a - -00:16:52.720 --> 00:16:54.800 fool out of myself. 00:16:54.800 --> 00:16:56.800 So the last question I wanted to answer was -00:16:56.800 --> 00:16:58.320 +00:16:56.800 --> 00:16:59.199 "Have you read Dirk Gently's Holistic - -00:16:58.320 --> 00:16:59.199 Detective Agency?" -00:16:59.199 --> 00:17:03.519 -No, I haven't. I hope it's not - -00:17:03.519 --> 00:17:05.199 -a jab at the way i'm dressing for the +00:16:59.199 --> 00:17:05.741 +No, I haven't. I hope it's not a jab at +the way I'm dressing for the conference, -00:17:05.199 --> 00:17:06.559 -conference, but yeah, - -00:17:06.559 --> 00:17:08.559 -I haven't read it. Was there any - -00:17:08.559 --> 00:17:10.559 -other question? +00:17:05.741 --> 00:17:10.559 +but yeah, I haven't read it. Was there +any other question? 00:17:10.559 --> 00:17:15.919 (Amin: I see one other question. -00:17:15.919 --> 00:17:17.919 +00:17:15.919 --> 00:17:19.679 "Any recommendation for good packaging - -00:17:17.919 --> 00:17:19.679 guides or places to start? 00:17:19.679 --> 00:17:23.199 -i get a bit overwhelmed by some things. +I get a bit overwhelmed by some things. 00:17:23.199 --> 00:17:26.799 For example, the choice of different test frameworks.") -00:17:26.799 --> 00:17:28.240 +00:17:26.799 --> 00:17:29.263 Right. Okay. So that's a very good +question. -00:17:28.240 --> 00:17:30.400 -question. I believe +00:17:29.263 --> 00:17:33.840 +I believe alphapapa is in the chat right +now. -00:17:30.400 --> 00:17:33.840 -alphapapa is in the chat right now. +00:17:33.840 --> 00:17:36.314 +As myself a new Lisp developer for +org-roam, -00:17:33.840 --> 00:17:35.840 -As myself a new lisp developer for +00:17:36.314 --> 00:17:38.320 +I'd really recommend you to look into -00:17:35.840 --> 00:17:38.320 -org-roam, i'd really recommend you to look into +00:17:38.320 --> 00:17:40.032 +his package developers' guide, -00:17:38.320 --> 00:17:40.640 -his package developers' guide because you +00:17:40.032 --> 00:17:42.507 +because you have a list of +all the softwares -00:17:40.640 --> 00:17:42.799 -have a list of all the softwares that - -00:17:42.799 --> 00:17:44.559 -are extremely useful to be using when +00:17:42.507 --> 00:17:44.559 +that are extremely useful to +be using when 00:17:44.559 --> 00:17:45.760 you're getting started. -00:17:45.760 --> 00:17:48.000 -If you're looking into a first +00:17:45.760 --> 00:17:48.347 +If you're looking into a first step -00:17:48.000 --> 00:17:50.000 -step for how to develop +00:17:48.347 --> 00:17:50.947 +for how to develop elisp packages, -00:17:50.000 --> 00:17:52.640 -elast package, i'd really advise you to +00:17:50.947 --> 00:17:52.640 +I'd really advise you to 00:17:52.640 --> 00:17:53.520 look into edebug. @@ -1404,111 +1320,108 @@ look into edebug. It's one word, edebug, 00:17:56.559 --> 00:17:58.400 -and you have a section in the manual for this, +and you have a section in the +manual for this, 00:17:58.400 --> 00:18:00.799 because for me, it was the key step to -00:18:00.799 --> 00:18:04.320 -getting to develop good packages. It was +00:18:00.799 --> 00:18:03.791 +getting to develop good packages. -00:18:04.320 --> 00:18:06.160 -understanding basically what the code did +00:18:03.791 --> 00:18:06.160 +It was understanding basically +what the code did -00:18:06.160 --> 00:18:08.960 -and having us something like a +00:18:06.160 --> 00:18:08.866 +and having us something like -00:18:08.960 --> 00:18:09.919 -REPL (read-evaluate-print-loop) +00:18:08.866 --> 00:18:09.919 +a REPL (read-evaluate-print-loop) 00:18:09.919 --> 00:18:11.760 that allows you to step through the code -00:18:11.760 --> 00:18:13.360 -and see exactly which states the - -00:18:13.360 --> 00:18:16.000 -variables are at which at this point in the +00:18:11.760 --> 00:18:13.210 +and see exactly which states -00:18:16.000 --> 00:18:20.080 -program. That's really my biggest advice -to you. +00:18:13.210 --> 00:18:15.643 +the variables are at which at this point -00:18:21.200 --> 00:18:24.400 -Any other question? Thanks. Yeah, I see one +00:18:15.643 --> 00:18:20.080 +in the program. That's really my biggest +advice to you. -00:18:24.400 --> 00:18:26.160 -or two more. +00:18:21.200 --> 00:18:26.160 +Any other question? Thanks. Yeah, I see +one or two more. -00:18:26.160 --> 00:18:28.240 +00:18:26.160 --> 00:18:33.120 So there's one. They ask, "How did the +freedom of Emacs help you on your way?" -00:18:28.240 --> 00:18:30.080 -freedom of Emacs help you on +00:18:33.120 --> 00:18:35.507 +So the freedom of Emacs... -00:18:30.080 --> 00:18:33.120 -your way?" +00:18:35.507 --> 00:18:38.080 +I mentioned that Emacs, for me, +was my gateway -00:18:33.120 --> 00:18:36.480 -So the freedom of Emacs... I mentioned +00:18:38.080 --> 00:18:39.216 +into free software -00:18:36.480 --> 00:18:38.080 -that Emacs, for me, was my gateway +00:18:39.216 --> 00:18:40.652 +and the freedom of Emacs -00:18:38.080 --> 00:18:40.320 -into free software and the freedom of +00:18:40.652 --> 00:18:42.551 +was that you could maybe... -00:18:40.320 --> 00:18:43.840 -Emacs was that you could maybe... First -and foremost, +00:18:42.551 --> 00:18:43.840 +First and foremost, -00:18:43.840 --> 00:18:47.840 -compared to other software, was that -you had +00:18:43.840 --> 00:18:46.385 +compared to other software, -00:18:47.840 --> 00:18:51.039 -behind Emacs, Elisp, which allows you to -read the code, +00:18:46.385 --> 00:18:49.003 +was that you had behind Emacs, Elisp, -00:18:51.039 --> 00:18:52.400 -read whatever is going on in the +00:18:49.003 --> 00:18:51.039 +which allows you to read the code, -00:18:52.400 --> 00:18:53.039 +00:18:51.039 --> 00:18:53.039 +read whatever is going on in the background. -00:18:53.039 --> 00:18:54.640 -Surely, if you go deep enough, you'll +00:18:53.039 --> 00:18:54.380 +Surely, if you go deep enough, -00:18:54.640 --> 00:18:58.000 -end up in C functions that you might not -be able to +00:18:54.380 --> 00:18:58.172 +you'll end up in C functions that you +might not be able to read -00:18:58.000 --> 00:18:59.679 -read if you do not have the experience. +00:18:58.172 --> 00:18:59.679 +if you do not have the experience. -00:18:59.679 --> 00:19:02.000 +00:18:59.679 --> 00:19:03.520 But for Org Mode, which was my gateway - -00:19:02.000 --> 00:19:03.520 into Emacs, -00:19:03.520 --> 00:19:06.400 -most of it is written in Elisp, and all +00:19:03.520 --> 00:19:05.883 +most of it is written in Elisp, -00:19:06.400 --> 00:19:08.240 -the commands have a very verbose +00:19:05.883 --> 00:19:08.546 +and all the commands have a +very verbose name, -00:19:08.240 --> 00:19:10.080 -name, like something simple as +00:19:08.546 --> 00:19:10.080 +like something simple as 00:19:10.080 --> 00:19:13.440 org go to next subtree or -00:19:13.440 --> 00:19:15.840 -org go to a parent subtree. You know, things - -00:19:15.840 --> 00:19:16.880 -like this. +00:19:13.440 --> 00:19:16.880 +org go to a parent subtree. You know, +things like this. 00:19:16.880 --> 00:19:20.240 It's so elegant. It's verbose. @@ -1516,38 +1429,34 @@ It's so elegant. It's verbose. 00:19:20.240 --> 00:19:22.799 That's a sense of freedom -00:19:22.799 --> 00:19:24.320 -insofar as you can go into the code and +00:19:22.799 --> 00:19:24.491 +insofar as you can go into +the code and see, -00:19:24.320 --> 00:19:26.160 -see, oh, okay, that's how it's implemented. +00:19:24.491 --> 00:19:26.160 +oh, okay, that's how it's implemented. 00:19:26.160 --> 00:19:28.640 I believe in a way that's the freedom -00:19:28.640 --> 00:19:30.400 -and the liberty that is given to you to +00:19:28.640 --> 00:19:30.264 +and the liberty that is given to you -00:19:30.400 --> 00:19:31.600 -look into the code +00:19:30.264 --> 00:19:31.600 +to look into the code -00:19:31.600 --> 00:19:33.039 -is something that invites you to do the +00:19:31.600 --> 00:19:32.670 +is something that invites you -00:19:33.039 --> 00:19:34.640 -same with your life. As +00:19:32.670 --> 00:19:34.460 +to do the same with your life. -00:19:34.640 --> 00:19:35.200 -someone who +00:19:34.460 --> 00:19:36.776 +As someone who does a little bit of +philosophy on the side, -00:19:35.200 --> 00:19:36.559 -does a little bit of philosophy on the - -00:19:36.559 --> 00:19:38.080 -side, I believe it's a very healthy - -00:19:38.080 --> 00:19:38.799 -message +00:19:36.776 --> 00:19:38.799 +I believe it's a very healthy message 00:19:38.799 --> 00:19:42.320 to be gathering from a piece of software. @@ -1579,56 +1488,51 @@ ahead of the schedule, so if we take a 00:20:05.679 --> 00:20:07.840 little bit longer, we're fine. -00:20:07.840 --> 00:20:09.440 -If you do have more - -00:20:09.440 --> 00:20:11.280 -questions, please do.) I'm just sorry that - -00:20:11.280 --> 00:20:12.880 -my video is not working anymore. +00:20:07.840 --> 00:20:10.225 +If you do have more questions, please +do.) -00:20:12.880 --> 00:20:16.000 -(Amin: No problem. Someone was +00:20:10.225 --> 00:20:12.880 +I'm just sorry that my video is not +working anymore. -00:20:16.000 --> 00:20:17.120 -actually saying... +00:20:12.880 --> 00:20:17.120 +(Amin: No problem. Someone was actually +saying... -00:20:17.120 --> 00:20:21.120 -What's the most recent... +00:20:17.120 --> 00:20:24.159 +What's the most recent... Actually, yeah +well before that. -00:20:21.120 --> 00:20:24.159 -Actually, yeah well before that. - -00:20:24.159 --> 00:20:25.919 +00:20:24.159 --> 00:20:27.440 "Please show off your three-piece suit - -00:20:25.919 --> 00:20:27.440 before you end your talk, 00:20:27.440 --> 00:20:30.080 which requires fixing your frozen camera. -00:20:30.080 --> 00:20:31.919 -if this is not possible, please post +00:20:30.080 --> 00:20:31.306 +If this is not possible, -00:20:31.919 --> 00:20:36.240 -suit selfies in an easily accessible -location." +00:20:31.306 --> 00:20:36.240 +please post suit selfies in an easily +accessible location." -00:20:36.240 --> 00:20:38.720 -Okay, I'll make sure to do this. But yes, I +00:20:36.240 --> 00:20:38.143 +Okay, I'll make sure to do this. -00:20:38.720 --> 00:20:41.200 -wanted to hype things up for the -conference, +00:20:38.143 --> 00:20:41.200 +But yes, I wanted to hype things up for +the conference, 00:20:41.200 --> 00:20:43.039 so yes, I did get the three-piece suit out. -00:20:43.039 --> 00:20:45.919 -I'm very glad you like it. By the way, -when you get +00:20:43.039 --> 00:20:44.563 +I'm very glad you like it. + +00:20:44.563 --> 00:20:45.919 +By the way, when you get 00:20:45.919 --> 00:20:47.760 a chance to see me live again, @@ -1642,128 +1546,104 @@ colors of Emacs purple 00:20:51.280 --> 00:20:53.679 and also Org Mode green. -00:20:53.679 --> 00:20:55.760 -It took me a while to find this one, so I +00:20:53.679 --> 00:20:55.556 +It took me a while to find this one, -00:20:55.760 --> 00:21:00.840 -hope you will appreciate this. +00:20:55.556 --> 00:21:00.840 +so I hope you will appreciate this. -00:21:00.840 --> 00:21:03.679 -(Amin: Awesome. Let's see. We have +00:21:00.840 --> 00:21:03.094 +(Amin: Awesome. Let's see. -00:21:03.679 --> 00:21:06.880 -one other question. "What's the +00:21:03.094 --> 00:21:06.880 +We have one other question. "What's the 00:21:06.880 --> 00:21:08.960 most recent Emacs package or tool that -00:21:08.960 --> 00:21:10.159 -you've discovered - -00:21:10.159 --> 00:21:14.480 -that you've added to your repertoire?") +00:21:08.960 --> 00:21:14.480 +you've discovered that you've added to +your repertoire?") 00:21:14.480 --> 00:21:17.600 Very interesting question. -00:21:17.600 --> 00:21:20.799 -The thing is, - -00:21:20.799 --> 00:21:22.320 -when you've spent as long as I have on +00:21:17.600 --> 00:21:22.614 +The thing is, when you've spent as long +as I have on Emacs-- -00:21:22.320 --> 00:21:23.919 -Emacs--and I know that I've only spent +00:21:22.614 --> 00:21:23.919 +and I know that I've only spent 00:21:23.919 --> 00:21:25.120 eight years and some of you -00:21:25.120 --> 00:21:28.799 -might have spent maybe 10, 20, maybe even +00:21:25.120 --> 00:21:27.901 +might have spent maybe 10, 20, -00:21:28.799 --> 00:21:30.000 -more years on Emacs-- +00:21:27.901 --> 00:21:30.000 +maybe even more years on Emacs-- -00:21:30.000 --> 00:21:32.799 -but for me, I believe the the coolest +00:21:30.000 --> 00:21:34.926 +but for me, I believe the coolest neat +trick that I found in Emacs -00:21:32.799 --> 00:21:35.120 -neat trick that I found in Emacs was +00:21:34.926 --> 00:21:40.080 +was a mode which is called beacon-mode. -00:21:35.120 --> 00:21:40.080 -a mode which is called beacon-mode. +00:21:40.080 --> 00:21:43.679 +It's something that allows you to show -00:21:40.080 --> 00:21:42.559 -It's something that allows +00:21:43.679 --> 00:21:45.006 +when you're jumping between buffers -00:21:42.559 --> 00:21:43.679 -you to show +00:21:45.006 --> 00:21:46.960 +or when you're dropping between windows, -00:21:43.679 --> 00:21:45.120 -when you're jumping between buffers or - -00:21:45.120 --> 00:21:46.960 -when you're dropping between windows, - -00:21:46.960 --> 00:21:49.760 +00:21:46.960 --> 00:21:50.681 it shows exactly where your point is in +that buffer -00:21:49.760 --> 00:21:51.520 -that buffer by making - -00:21:51.520 --> 00:21:53.840 -a slight ray of light which looks like a - -00:21:53.840 --> 00:21:55.440 -beacon, hence the name. +00:21:50.681 --> 00:21:55.440 +by making a slight ray of light which +looks like a beacon, hence the name. 00:21:55.440 --> 00:21:57.760 It really helps you navigate buffers -00:21:57.760 --> 00:21:59.520 -because it always shows in a very - -00:21:59.520 --> 00:22:01.760 -visual way where your point is. +00:21:57.760 --> 00:21:58.986 +because it always shows -00:22:01.760 --> 00:22:03.520 -I'll get a chance to show this to +00:21:58.986 --> 00:22:01.760 +in a very visual way +where your point is. -00:22:03.520 --> 00:22:04.640 -you later today +00:22:01.760 --> 00:22:04.640 +I'll get a chance to show this to you +later today 00:22:04.640 --> 00:22:10.159 -when i'll be presenting my other talks. - -00:22:10.159 --> 00:22:13.840 -(Amin: Aeesome. - -00:22:13.840 --> 00:22:16.880 -We have one question +when I'll be presenting my other talks. -00:22:16.880 --> 00:22:20.159 -from Jonas, the maintainer +00:22:10.159 --> 00:22:20.880 +(Amin: Awesome. We have one question +from Jonas, the maintainer of Magit. -00:22:20.159 --> 00:22:20.880 -from Magit. +00:22:20.880 --> 00:22:25.128 +He asks, "When you touched your webcam, -00:22:20.880 --> 00:22:24.720 -He asks, "When you touched your - -00:22:24.720 --> 00:22:26.880 -webcam, that blew a fuse at my place. +00:22:25.128 --> 00:22:26.880 +that blew a fuse at my place. 00:22:26.880 --> 00:22:29.760 How did you do that?") -00:22:29.760 --> 00:22:31.600 -Well, I'm very sorry, Jonas, that it - -00:22:31.600 --> 00:22:32.960 -happened to you, but i'll make sure not +00:22:29.760 --> 00:22:31.242 +Well, I'm very sorry, Jonas, -00:22:32.960 --> 00:22:36.960 -to touch my webcam again. +00:22:31.242 --> 00:22:36.960 +that it happened to you, but I'll make +sure not to touch my webcam again. 00:22:36.960 --> 00:22:41.600 (Amin: Do we have any other questions?) @@ -1771,42 +1651,33 @@ to touch my webcam again. 00:22:41.600 --> 00:22:43.919 I have to trust you on this one. -00:22:43.919 --> 00:22:45.840 +00:22:43.919 --> 00:22:46.960 I'm really sorry. Everything is frozen - -00:22:45.840 --> 00:22:46.960 on my end. -00:22:46.960 --> 00:22:48.720 -(Amin: No problem.) Yeah I'm more talking -to the +00:22:46.960 --> 00:22:49.940 +(Amin: No problem.) Yeah I'm more +talking to the audience, I guess. -00:22:48.720 --> 00:22:49.940 -audience, I guess. +00:22:51.520 --> 00:22:56.018 +I hope my lack of slides didn't bother +you. -00:22:51.520 --> 00:22:55.120 -I hope my lack of +00:22:56.018 --> 00:23:00.481 +I really wanted to have this verbose +time with people, -00:22:55.120 --> 00:22:56.960 -slides didn't bother you. I really - -00:22:56.960 --> 00:22:58.159 -wanted to have this - -00:22:58.159 --> 00:23:01.039 -verbose time with people, to be - -00:23:01.039 --> 00:23:01.600 -able to... +00:23:00.481 --> 00:23:01.600 +to be able to... 00:23:01.600 --> 00:23:04.880 -it's a message that i've been trying +It's a message that I've been trying 00:23:04.880 --> 00:23:08.640 to share with as many people as possible. 00:23:08.640 --> 00:23:11.760 -In france we do have an Emacs workshop +In France, we do have an Emacs workshop 00:23:11.760 --> 00:23:14.159 that we have on a monthly basis. @@ -1820,26 +1691,24 @@ with those people and I felt like 00:23:18.960 --> 00:23:20.400 doing the same with Emacs conference -00:23:20.400 --> 00:23:22.480 -would be good. That's why i'm really +00:23:20.400 --> 00:23:22.713 +would be good. That's why I'm +really happy, -00:23:22.480 --> 00:23:24.000 -happy, and I'm really lucky to have had +00:23:22.713 --> 00:23:24.000 +and I'm really lucky to have had -00:23:24.000 --> 00:23:25.120 -the chance to +00:23:24.000 --> 00:23:26.418 +the chance to do this today. -00:23:25.120 --> 00:23:27.919 -do this today. I hope some of you +00:23:26.418 --> 00:23:29.200 +I hope some of you, I've convinced you -00:23:27.919 --> 00:23:29.200 -I've convinced you +00:23:29.200 --> 00:23:31.472 +of climbing up a step on a ladder -00:23:29.200 --> 00:23:31.679 -of climbing up a step on a ladder or - -00:23:31.679 --> 00:23:34.480 -making a step in a journey. +00:23:31.472 --> 00:23:34.480 +or making a step in a journey. 00:23:34.480 --> 00:23:38.080 (Amin: Absolutely. Thank you so much, Leo. @@ -1856,38 +1725,34 @@ when it's not really needed 00:23:45.600 --> 00:23:49.200 and to help give some face-to-face time -00:23:49.200 --> 00:23:51.840 -with the audience. Unfortunately +00:23:49.200 --> 00:23:50.685 +with the audience. -00:23:51.840 --> 00:23:53.520 -your webcam cut out, but I mean +00:23:50.685 --> 00:23:52.923 +Unfortunately, your webcam cut out, -00:23:53.520 --> 00:23:55.200 -before that.) +00:23:52.923 --> 00:23:55.200 +but I mean before that.) -00:23:55.200 --> 00:23:57.279 -Yes, I'll make sure to fix the problems +00:23:55.200 --> 00:23:57.914 +Yes, I'll make sure to fix +the problems later on, -00:23:57.279 --> 00:23:59.679 -later on, so don't worry about it. +00:23:57.914 --> 00:23:59.679 +so don't worry about it. 00:23:59.679 --> 00:24:02.240 (Amin: Awesome. Alrighty. I guess we're -00:24:02.240 --> 00:24:03.200 -wrapping up - -00:24:03.200 --> 00:24:06.400 -for your talk and getting ready for the - -00:24:06.400 --> 00:24:08.000 -next talk.) +00:24:02.240 --> 00:24:08.000 +wrapping up for your talk and getting +ready for the next talk.) -00:24:08.000 --> 00:24:10.000 -Sure. Well, thank you so much. I'll see +00:24:08.000 --> 00:24:09.538 +Sure. Well, thank you so much. -00:24:10.000 --> 00:24:11.760 -you all later, I suppose! +00:24:09.538 --> 00:24:11.760 +I'll see you all later, I suppose! 00:24:11.760 --> 00:24:16.799 (Amin: Sounds good. Thank you again, Leo. Bye-bye) diff --git a/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt new file mode 100644 index 00000000..6a8d12b2 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt @@ -0,0 +1,470 @@ +WEBVTT + +00:00:00.000 --> 00:00:05.333 +I have the pad open. So, I can start. + +00:00:05.333 --> 00:00:11.333 +Do you have occasions to use Emacs for +multilingual text composition? + +00:00:11.333 --> 00:00:15.333 +How do you deal with spell-checking? + +00:00:15.333 --> 00:00:15.333 +I have written only in English. For +English, Emacs works great. + +00:00:15.333 --> 00:00:23.767 +Spell-check works great. + +00:00:23.767 --> 00:00:29.300 +I have not used it for any other languages. + +00:00:29.300 --> 00:00:40.333 +I have indeed tried local South Indian +language, but only the script + +00:00:40.333 --> 00:00:47.567 +I could get, but not the spell-checker, +really. I've not really figured it out. + +00:00:47.567 --> 00:00:51.067 +So that was my trial to answer +the first question. + +00:00:51.067 --> 00:00:57.031 +The second question is: "is it possible +to align the subcolumns + +00:00:57.031 --> 00:00:59.967 +and headings and subheadings?" + +00:00:59.967 --> 00:01:04.967 +Oh boy. That's a good one. I actually +felt the lack of having the... + +00:01:04.967 --> 00:01:11.100 +The theme I had was great for... It +looked like a novel + +00:01:11.100 --> 00:01:14.533 +when I'm typing on the novel itself, + +00:01:14.533 --> 00:01:19.800 +but when I expand into the subtrees, + +00:01:19.800 --> 00:01:22.233 +it sort of goes haywire. It's a bit hacky. + +00:01:22.233 --> 00:01:24.900 +You can probably switch to a monospace font, + +00:01:24.900 --> 00:01:27.133 +and that works better than + +00:01:27.133 --> 00:01:30.967 +the font that I have demoed it. + +00:01:30.967 --> 00:01:36.033 +You can perhaps try monospace font + +00:01:36.033 --> 00:01:37.700 +and it should work, I think, + +00:01:37.700 --> 00:01:39.600 +as far as I know. + +00:01:39.600 --> 00:01:42.667 +So, that's the second question. + +00:01:42.667 --> 00:01:47.600 +The third question is maybe there should +be an Emacs for Writing + +00:01:47.600 --> 00:01:50.433 +mailing list, an online writer's workshop? + +00:01:50.433 --> 00:01:51.300 +This is a great one. + +00:01:51.300 --> 00:01:54.433 +I have conducted an online writer's workshop + +00:01:54.433 --> 00:01:58.000 +here in India. Of course, it wasn't + +00:01:58.000 --> 00:02:05.467 +an Emacs-focused workshop. We used +Notion as the tool. It worked pretty good. + +00:02:05.467 --> 00:02:12.633 +for people who are not aware of Emacs +and how to use Emacs, the keystrokes, + +00:02:12.633 --> 00:02:16.200 +the fact that I wasn't using the mouse +unnerved them. + +00:02:16.200 --> 00:02:19.267 +It was a scary experience for most people. + +00:02:19.267 --> 00:02:22.333 +I had to switch to Notion. + +00:02:22.333 --> 00:02:23.567 +People used that as a template + +00:02:23.567 --> 00:02:28.233 +and then they could type it out. + +00:02:28.233 --> 00:02:33.633 +It wasn't my perfect experience. I liked +the Emacs Org Mode experience much better. + +00:02:33.633 --> 00:02:41.300 +The next question is, "How do you share +drafts of your novel? + +00:02:41.300 --> 00:02:44.867 +If you use pandoc to export to Word, +etc., how do you incorporate feedback + +00:02:44.867 --> 00:02:46.867 +on the document back into Org?" + +00:02:46.867 --> 00:02:50.767 +Thank you for the kind words. + +00:02:50.767 --> 00:02:53.100 +Yes, it is a problem. + +00:02:53.100 --> 00:03:02.033 +This is my ??, and I have a dedication +to Spacemacs also and the Emacs Org Mode + +00:03:02.033 --> 00:03:04.433 +community in there. I don't know if you +can see it. + +00:03:04.433 --> 00:03:05.467 +Probably not. + +00:03:05.467 --> 00:03:10.600 +I did export it to Word. + +00:03:10.600 --> 00:03:13.333 +My editor did complain that there were a +whole bunch of things, + +00:03:13.333 --> 00:03:16.633 +that it wasn't convenient for her. + +00:03:16.633 --> 00:03:20.933 +So I tried having the raw Org Mode +itself in a DOC embedded, + +00:03:20.933 --> 00:03:26.067 +and I will do a copy and paste. + +00:03:26.067 --> 00:03:27.867 +Didn't work so well either. + +00:03:27.867 --> 00:03:31.267 +So I'm still on the edge on +how do I do this. + +00:03:31.267 --> 00:03:34.933 +Should I train my editor +to use Org Mode + +00:03:34.933 --> 00:03:37.167 +in Gitlab or one of those + +00:03:37.167 --> 00:03:39.833 +other tools, which is not a great +experience? + +00:03:39.833 --> 00:03:47.633 +But... I don't know. It could be +tricky for working with people + +00:03:47.633 --> 00:03:50.867 +who are not well-versed with Emacs. + +00:03:50.867 --> 00:04:02.000 +Pandoc is very, very useful in +converting it to PDF + +00:04:02.000 --> 00:04:02.000 +and integrating it with LaTeX, the +styling, formatting into e-reader, + +00:04:02.000 --> 00:04:13.133 +EPUB format. For all that, Pandoc works +great. You can customize it + +00:04:13.133 --> 00:04:16.233 +and of course there's a lot of support +in the community + +00:04:16.233 --> 00:04:20.133 +for any style changes that you want to +make, any images that you want to add. + +00:04:20.133 --> 00:04:22.967 +It works great. + +00:04:22.967 --> 00:04:28.367 +That was my trial to answer the pandoc question. + +00:04:28.367 --> 00:04:35.100 +"Can you show exported PDF of +any of your novels?" + +00:04:35.100 --> 00:04:38.600 +Unfortunately, it's still +not published, so I'm... + +00:04:38.600 --> 00:04:42.067 +I will put it and +share it on the community, + +00:04:42.067 --> 00:04:48.067 +or part of this in the schedule itself. +Thank you for the question. + +00:04:48.067 --> 00:04:55.000 +Unfortunately, it's not yet published, +so I'm unable to publish the exported PDF. + +00:04:55.000 --> 00:05:01.300 +But I'll make a test of an open-source +novel that I'm working on + +00:05:01.300 --> 00:05:05.767 +I will definitely publish that so that +you can see + +00:05:05.767 --> 00:05:10.433 +how it works also. + +00:05:10.433 --> 00:05:13.167 +Can you text-wrap in the columns? + +00:05:13.167 --> 00:05:19.667 +I have not found a way to do +text-wrap in the columns. + +00:05:19.667 --> 00:05:23.633 +That only shows my limitation +in config setup, + +00:05:23.633 --> 00:05:27.033 +but I'm sure people can figure this out + +00:05:27.033 --> 00:05:29.900 +That's a good one. I would have loved to +have it. + +00:05:29.900 --> 00:05:34.000 +Every time I want to write more on the +headline, + +00:05:34.000 --> 00:05:42.467 +I would get out of the column-view mode +and I would do the typing and expand it, + +00:05:42.467 --> 00:05:46.700 +and then come back into the column view +when I want to set the other meta parameters. + +00:05:46.700 --> 00:05:54.133 +So that's how I manage without the +text-wrapping feature built into column. + +00:05:54.133 --> 00:05:58.000 +But I think it's a great idea to +have text wrap. + +00:05:58.000 --> 00:06:05.333 +Did I leave out any questions? +I don't think so. + +00:06:05.333 --> 00:06:10.600 +[Amin]: I think there's at least one +question on IRC, + +00:06:10.600 --> 00:06:14.500 +which I shall read to you. + +00:06:14.500 --> 00:06:17.300 +[Bala]: Please, can you do that? Thank you. + +00:06:17.300 --> 00:06:21.278 +[Amin]: So they asked, "How do you collaborate +with others while writing your novel? + +00:06:21.278 --> 00:06:28.100 +For example, sharing your file and +getting feedback." + +00:06:28.100 --> 00:06:37.100 +Okay. Good question. So far, I have +used... Let's see... + +00:06:37.100 --> 00:06:40.833 +What did I use... +This is a crazy hack. + +00:06:40.833 --> 00:06:44.667 +But it's a long-winded way of... + +00:06:44.667 --> 00:06:50.300 +Right now we're working on an e-book for +sustainability + +00:06:50.300 --> 00:06:57.767 +and kids contribute their stories into +this long Org Mode file + +00:06:57.767 --> 00:07:00.233 +and I want my editors to see it + +00:07:00.233 --> 00:07:05.333 +so what we have done, actually, is with +the tags and all that, I have actually + +00:07:05.333 --> 00:07:08.167 +pasted it into Google Docs + +00:07:08.167 --> 00:07:11.833 +so that my collaborators and + +00:07:11.833 --> 00:07:14.000 +editors can see it. + +00:07:14.000 --> 00:07:16.667 +That's my current solution. +It's not elegant. + +00:07:16.667 --> 00:07:23.900 +I'm trying to see if I can use Python +code to make the copy and paste work, + +00:07:23.900 --> 00:07:26.900 +but it's not so elegant for now. + +00:07:26.900 --> 00:07:28.933 +I don't know how to work this out, + +00:07:28.933 --> 00:07:31.100 +but this is my hack. That is, + +00:07:31.100 --> 00:07:34.300 +the entire Org Mode text, I would paste +it into + +00:07:34.300 --> 00:07:35.433 +Google Docs + +00:07:35.433 --> 00:07:37.700 +so that my collaborators and editors + +00:07:37.700 --> 00:07:41.667 +can see it. Whenever they edit it, I ask +them not to make any changes + +00:07:41.667 --> 00:07:43.500 +to the Org Mode tags. + +00:07:43.500 --> 00:07:45.633 +So just copy the entire text + +00:07:45.633 --> 00:07:51.167 +and put it back into my Org Mode file + +00:07:51.167 --> 00:07:53.300 +and export it using Pandoc into a PDF + +00:07:53.300 --> 00:07:56.000 +and since it's synced to Google Drive + +00:07:56.000 --> 00:07:58.600 +it shows up in the Google Drive + +00:07:58.600 --> 00:08:03.633 +and then the collaborators can see +the PDF/EPUB + +00:08:03.633 --> 00:08:05.333 +if they want to open it up + +00:08:05.333 --> 00:08:06.200 +in their own space. + +00:08:06.200 --> 00:08:11.467 +It's very very hacky and I think +primitive, Stone Age sort of solution. + +00:08:11.467 --> 00:08:15.567 +I did see a Python solution. + +00:08:15.567 --> 00:08:18.967 +to at least help me with +the copying and paste. + +00:08:18.967 --> 00:08:21.574 +I'm still working on +how do I convert this. + +00:08:21.574 --> 00:08:24.300 +Interconvertability is +driving me nuts. + +00:08:24.300 --> 00:08:26.533 +I think most of the questions + +00:08:26.533 --> 00:08:29.333 +are around interconvertability. + +00:08:29.333 --> 00:08:34.767 +This is sort of what I have right now. + +00:08:34.767 --> 00:08:37.567 +Any other questions, Amin, + +00:08:37.567 --> 00:08:40.233 +on IRC or not? + +00:08:40.233 --> 00:08:46.433 +[Amin]: Let's see. I think that's about it. + +00:08:46.433 --> 00:08:50.033 +[Bala]: Okay. Cool. That was fun. + +00:08:50.033 --> 00:08:51.833 +Thank you so much to + +00:08:51.833 --> 00:08:54.577 +the organizers of Emacs conference, + +00:08:54.577 --> 00:08:57.100 +and the community at large, + +00:08:57.100 --> 00:09:01.303 +the Org Mode community and the Emacs +community for helping me out. + +00:09:01.303 --> 00:09:02.900 +Thank you so much. + +00:09:02.900 --> 00:09:05.233 +Thanks for the opportunity +as well. + +00:09:05.233 --> 00:09:07.300 +[Amin]: And thank you, Bala, for your +awesome talk. + +00:09:07.300 --> 00:09:14.000 +[Bala]: Thanks. Thanks a lot, Amin. diff --git a/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt b/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt index 773ff31b..b2722c99 100644 --- a/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt +++ b/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt @@ -3,98 +3,94 @@ WEBVTT 00:00:02.000 --> 00:00:04.799 Hello, everyone, and welcome to the EmacsConf. -00:00:04.799 --> 00:00:07.200 -I am Jonathan. In this talk, I'm going +00:00:04.799 --> 00:00:06.631 +I am Jonathan. In this talk, -00:00:07.200 --> 00:00:09.599 -to demonstrate ways of producing sheet +00:00:06.631 --> 00:00:10.880 +I'm going to demonstrate ways of +producing sheet music in Emacs -00:00:09.599 --> 00:00:10.880 -music in Emacs +00:00:10.880 --> 00:00:14.636 +using Lilypond, and maybe also +convince you -00:00:10.880 --> 00:00:14.320 -using Lilypond, and maybe also convince +00:00:14.636 --> 00:00:18.640 +to use Emacs for writing your scores. -00:00:14.320 --> 00:00:18.640 -you to use Emacs for writing your scores. +00:00:18.640 --> 00:00:20.698 +I'll start with an overview +of the syntax -00:00:18.640 --> 00:00:20.400 -I'll start with an overview of the - -00:00:20.400 --> 00:00:22.240 -syntax for those who are new to using +00:00:20.698 --> 00:00:22.240 +for those who are new to using 00:00:22.240 --> 00:00:24.400 text-based notation -00:00:24.400 --> 00:00:26.800 -as a shallow dive into the deep pond of +00:00:24.400 --> 00:00:26.615 +as a shallow dive into the deep pond -00:00:26.800 --> 00:00:28.800 -lilies and Lilypond, +00:00:26.615 --> 00:00:28.800 +of lilies and Lilypond, -00:00:28.800 --> 00:00:30.800 -and move on to showcase some of its +00:00:28.800 --> 00:00:30.171 +and move on to showcase -00:00:30.800 --> 00:00:32.960 -functionalities using Org Mode +00:00:30.171 --> 00:00:34.723 +some of its functionalities +using Org Mode and lilypond-mode. -00:00:32.960 --> 00:00:36.320 -and lilypond-mode. One disclaimer, +00:00:34.723 --> 00:00:37.173 +One disclaimer, however: -00:00:36.320 --> 00:00:40.480 -however: I am not a Lilypond developer. +00:00:37.173 --> 00:00:40.480 +I am not a Lilypond developer. -00:00:40.480 --> 00:00:44.079 -So what is Lilypond? Lilypond is +00:00:40.480 --> 00:00:42.841 +So what is Lilypond? -00:00:44.079 --> 00:00:46.800 -a file format and music engraving system +00:00:42.841 --> 00:00:46.800 +Lilypond is a file format and music +engraving system 00:00:46.800 --> 00:00:50.000 for producing high-quality sheet music. -00:00:50.000 --> 00:00:52.640 -It translates textual representations of +00:00:50.000 --> 00:00:52.442 +It translates textual representations -00:00:52.640 --> 00:00:55.120 -music to graphical objects. +00:00:52.442 --> 00:00:55.120 +of music to graphical objects. -00:00:55.120 --> 00:00:57.760 -It's similar to LaTeX in that its +00:00:55.120 --> 00:00:57.520 +It's similar to LaTeX in that -00:00:57.760 --> 00:01:00.000 -input format describes the visual +00:00:57.520 --> 00:00:59.329 +its input format describes -00:01:00.000 --> 00:01:01.600 -layouts of the score, +00:00:59.329 --> 00:01:01.600 +the visual layouts of the score, -00:01:01.600 --> 00:01:03.520 +00:01:01.600 --> 00:01:05.119 using commands to define musical - -00:01:03.520 --> 00:01:05.119 expressions. 00:01:05.119 --> 00:01:07.760 Commands begin with a backslash. -00:01:07.760 --> 00:01:08.640 -For example, - -00:01:08.640 --> 00:01:10.479 -the formatter command, as shown on the +00:01:07.760 --> 00:01:10.791 +For example, the formatter command, +as shown on the left, -00:01:10.479 --> 00:01:13.040 -left, yields its graphical equivalents on +00:01:10.791 --> 00:01:13.920 +yields its graphical equivalents +on the right, -00:01:13.040 --> 00:01:13.920 -the right, +00:01:13.920 --> 00:01:16.345 +the fermata symbol over the low B -00:01:13.920 --> 00:01:16.640 -the fermata symbol over the low B and - -00:01:16.640 --> 00:01:19.119 -so on and so forth. +00:01:16.345 --> 00:01:19.119 +and so on and so forth. 00:01:19.119 --> 00:01:21.600 It's also fully extensible, like Emacs, @@ -105,59 +101,48 @@ allowing users to extend 00:01:23.119 --> 00:01:25.600 and override Lilypond's functionalities -00:01:25.600 --> 00:01:26.640 -using the Scheme - -00:01:26.640 --> 00:01:29.840 -scripting language. It can be used for +00:01:25.600 --> 00:01:28.452 +using the Scheme scripting language. -00:01:29.840 --> 00:01:31.600 -early and contemporary music +00:01:28.452 --> 00:01:32.422 +It can be used for early and +contemporary music tablature, -00:01:31.600 --> 00:01:34.479 -tablature, vocal music lead sheets, - -00:01:34.479 --> 00:01:35.200 -and so on. +00:01:32.422 --> 00:01:35.200 +vocal music lead sheets, and so on. 00:01:35.200 --> 00:01:38.000 Above all, it works with Emacs. -00:01:38.000 --> 00:01:38.479 -In fact, - -00:01:38.479 --> 00:01:41.040 -Lilypond ships with Emacs Lisp libraries, +00:01:38.000 --> 00:01:41.040 +In fact, Lilypond ships with +Emacs Lisp libraries, -00:01:41.040 --> 00:01:43.119 +00:01:41.040 --> 00:01:47.360 including a major mode for editing - -00:01:43.119 --> 00:01:47.360 Lilypond files. -00:01:47.360 --> 00:01:50.000 -So the input files are similar to - -00:01:50.000 --> 00:01:50.560 -source files. +00:01:47.360 --> 00:01:50.560 +So the input files are similar to source +files. -00:01:50.560 --> 00:01:52.560 +00:01:50.560 --> 00:01:54.079 They contain expressions formed with - -00:01:52.560 --> 00:01:54.079 curly braces, -00:01:54.079 --> 00:01:55.840 -comments that start with the percent +00:01:54.079 --> 00:01:56.549 +comments that start with +the percent sign, -00:01:55.840 --> 00:02:00.240 -sign, and the code is indented. +00:01:56.549 --> 00:02:00.240 +and the code is indented. -00:02:00.240 --> 00:02:02.159 +00:02:00.240 --> 00:02:02.903 Notes are entered using lowercase +letters, -00:02:02.159 --> 00:02:05.600 -letters, and rests with the letter r. +00:02:02.903 --> 00:02:05.600 +and rests with the letter r. 00:02:05.600 --> 00:02:08.800 In this case, the lowercase r or r4 @@ -168,22 +153,20 @@ is the equivalence of a crotchet or 00:02:11.039 --> 00:02:14.000 quarter note rest. -00:02:14.000 --> 00:02:16.160 -Durations are entered using numbers and +00:02:14.000 --> 00:02:15.938 +Durations are entered using numbers -00:02:16.160 --> 00:02:18.480 -dots after the note name. +00:02:15.938 --> 00:02:18.480 +and dots after the note name. -00:02:18.480 --> 00:02:20.959 -If you do not specify one, the previous +00:02:18.480 --> 00:02:20.196 +If you do not specify one, -00:02:20.959 --> 00:02:22.640 -duration is used. +00:02:20.196 --> 00:02:22.640 +the previous duration is used. -00:02:22.640 --> 00:02:24.560 +00:02:22.640 --> 00:02:27.360 You can also tie notes together using - -00:02:24.560 --> 00:02:27.360 the tilde symbol (~). 00:02:27.360 --> 00:02:30.000 @@ -192,32 +175,30 @@ In fact, you can input chords, lyrics, 00:02:30.000 --> 00:02:32.080 embellishments, and a lot more. -00:02:32.080 --> 00:02:33.920 +00:02:32.080 --> 00:02:36.160 I encourage you to read the manual for - -00:02:33.920 --> 00:02:36.160 more information. 00:02:36.160 --> 00:02:39.680 Now let's switch to a terminal window. -00:02:39.680 --> 00:02:42.000 -With Lilypond installed, let's create - -00:02:42.000 --> 00:02:43.840 -a test file with the extension +00:02:39.680 --> 00:02:41.247 +With Lilypond installed, -00:02:43.840 --> 00:02:50.560 -.ly and open it in Emacs. +00:02:41.247 --> 00:02:50.560 +let's create a test file with the +extension .ly and open it in Emacs. -00:02:50.560 --> 00:02:52.400 -At the top of the file is the version +00:02:50.560 --> 00:02:53.048 +At the top of the file is +the version statement, -00:02:52.400 --> 00:02:54.800 -statement, which tells Lilypond which +00:02:53.048 --> 00:02:54.395 +which tells Lilypond -00:02:54.800 --> 00:02:57.440 -version to use when compiling the file. +00:02:54.395 --> 00:02:57.440 +which version to use when +compiling the file. 00:02:57.440 --> 00:03:00.959 Here I'm using version 2.20.0. @@ -228,14 +209,15 @@ I've added the clef and time signature. 00:03:04.159 --> 00:03:09.280 Let's add some notes. -00:03:09.280 --> 00:03:12.400 -I'm going to close this now and +00:03:09.280 --> 00:03:12.098 +I'm going to close this now -00:03:12.400 --> 00:03:14.560 -compile the file by running +00:03:12.098 --> 00:03:13.765 +and compile the file -00:03:14.560 --> 00:03:19.760 -lilypond followed by the file name. +00:03:13.765 --> 00:03:19.760 +by running lilypond followed +by the file name. 00:03:19.760 --> 00:03:27.360 So now let's view the output. @@ -246,26 +228,22 @@ Okay. So here's a more complex example 00:03:29.760 --> 00:03:32.239 for randomizing note sequences. -00:03:32.239 --> 00:03:34.080 -The idea is to create new reading +00:03:32.239 --> 00:03:33.410 +The idea is to create -00:03:34.080 --> 00:03:36.239 -materials each time the code blocks are - -00:03:36.239 --> 00:03:37.760 -evaluated. +00:03:33.410 --> 00:03:37.760 +new reading materials each time the code +blocks are evaluated. 00:03:37.760 --> 00:03:40.640 As usual, we begin with a header. -00:03:40.640 --> 00:03:41.840 -I've added the title - -00:03:41.840 --> 00:03:45.200 -and composer. Then we add the note +00:03:40.640 --> 00:03:43.541 +I've added the title and composer. -00:03:45.200 --> 00:03:47.920 -sequences to use in the composition. +00:03:43.541 --> 00:03:47.920 +Then we add the note sequences to use in +the composition. 00:03:47.920 --> 00:03:51.200 In this case, sn is a note name just like @@ -288,28 +266,22 @@ Finally, we expand the notes inside 00:04:06.560 --> 00:04:08.799 the Lilypond source block. -00:04:08.799 --> 00:04:10.799 -So whatever the function returns is +00:04:08.799 --> 00:04:10.684 +So whatever the function returns -00:04:10.799 --> 00:04:13.680 -expanded inside the drums block. +00:04:10.684 --> 00:04:13.680 +is expanded inside the drums block. -00:04:13.680 --> 00:04:16.479 -Now let's press C-c C-c to view +00:04:13.680 --> 00:04:20.079 +Now let's press C-c C-c to view the +results. -00:04:16.479 --> 00:04:20.079 -the results. - -00:04:20.079 --> 00:04:23.280 +00:04:20.079 --> 00:04:26.840 Okay. And if I run this again, it should - -00:04:23.280 --> 00:04:26.840 create a new composition. -00:04:26.840 --> 00:04:29.680 +00:04:26.840 --> 00:04:31.360 Great. You can also audition a piece - -00:04:29.680 --> 00:04:31.360 using the midi command, 00:04:31.360 --> 00:04:34.320 @@ -324,74 +296,64 @@ sorry, the ob-lilypond library comes 00:04:39.040 --> 00:04:40.400 with two modes. -00:04:40.400 --> 00:04:42.560 +00:04:40.400 --> 00:04:43.440 The one I'm using now is called - -00:04:42.560 --> 00:04:43.440 arrange mode -00:04:43.440 --> 00:04:45.440 +00:04:43.440 --> 00:04:47.120 and is useful for assembling - -00:04:45.440 --> 00:04:47.120 complete scores. -00:04:47.120 --> 00:04:49.360 -The basic mode on the other hand allows +00:04:47.120 --> 00:04:49.015 +The basic mode, on the other hand, -00:04:49.360 --> 00:04:51.199 -you to mix text and music +00:04:49.015 --> 00:04:51.199 +allows you to mix text and music 00:04:51.199 --> 00:04:53.360 by embedding Lilypond snippets and -00:04:53.360 --> 00:04:55.440 +00:04:53.360 --> 00:05:00.240 export them using typical Org Mode - -00:04:55.440 --> 00:05:00.240 commands. -00:05:00.240 --> 00:05:02.320 +00:05:00.240 --> 00:05:02.661 Now to demonstrate the basic mode in +action. -00:05:02.320 --> 00:05:04.320 -action. I'm going to export this document +00:05:02.661 --> 00:05:04.320 +I'm going to export this document 00:05:04.320 --> 00:05:05.120 to a PDF file. -00:05:05.120 --> 00:05:08.240 -In this case, the - -00:05:08.240 --> 00:05:10.639 -:file header argument is required, so you +00:05:05.120 --> 00:05:10.077 +In this case, the :file header argument +is required, -00:05:10.639 --> 00:05:11.919 -have to provide one +00:05:10.077 --> 00:05:11.919 +so you have to provide one 00:05:11.919 --> 00:05:15.600 and include the file name. -00:05:15.600 --> 00:05:17.919 -Again, you can run the code and view +00:05:15.600 --> 00:05:22.160 +Again, you can run the code and view the +results. -00:05:17.919 --> 00:05:22.160 -the results. - -00:05:22.160 --> 00:05:25.840 -Here it is. So now let's - -00:05:25.840 --> 00:05:33.680 -export this to a PDF file. +00:05:22.160 --> 00:05:33.680 +Here it is. So now let's export this to +a PDF file. 00:05:33.680 --> 00:05:39.680 And here it is, what it generates. -00:05:39.680 --> 00:05:41.440 -Now I'm going to show you the workflow I +00:05:39.680 --> 00:05:41.716 +Now I'm going to show you +the workflow I used -00:05:41.440 --> 00:05:44.000 -used to produce music books in Emacs, +00:05:41.716 --> 00:05:44.000 +to produce music books in Emacs, 00:05:44.000 --> 00:05:46.160 combining Lilypond and LaTeX for a @@ -399,11 +361,12 @@ combining Lilypond and LaTeX for a 00:05:46.160 --> 00:05:48.000 perfect marriage. -00:05:48.000 --> 00:05:50.160 -I begin by sketching the first draft of the +00:05:48.000 --> 00:05:49.858 +I begin by sketching the first draft -00:05:50.160 --> 00:05:53.039 -manuscript using pencil and paper. +00:05:49.858 --> 00:05:53.039 +of the manuscript using +pencil and paper. 00:05:53.039 --> 00:05:55.039 Then I move to Emacs to input the notes @@ -411,32 +374,28 @@ Then I move to Emacs to input the notes 00:05:55.039 --> 00:05:57.440 in a git repository. -00:05:57.440 --> 00:06:00.080 -This is a typical source file. It begins +00:05:57.440 --> 00:05:59.486 +This is a typical source file. -00:06:00.080 --> 00:06:01.360 -with a stylesheet +00:05:59.486 --> 00:06:01.360 +It begins with a stylesheet -00:06:01.360 --> 00:06:03.199 -where I set variables and layout +00:06:01.360 --> 00:06:03.690 +where I set variables and layout settings, -00:06:03.199 --> 00:06:05.440 -settings, although in general, there's no +00:06:03.690 --> 00:06:04.875 +although in general, -00:06:05.440 --> 00:06:07.039 -need for tweaking the layout +00:06:04.875 --> 00:06:07.039 +there's no need for tweaking the layout -00:06:07.039 --> 00:06:09.280 +00:06:07.039 --> 00:06:11.199 unless you have specific requirements to - -00:06:09.280 --> 00:06:11.199 do so. -00:06:11.199 --> 00:06:13.360 -The easiest way to compile the file from - -00:06:13.360 --> 00:06:15.520 -Emacs is by pressing C-c C-l, +00:06:11.199 --> 00:06:15.520 +The easiest way to compile the file +from Emacs is by pressing C-c C-l, 00:06:15.520 --> 00:06:19.280 so let's do this now, @@ -447,20 +406,19 @@ and the compilation buffer will tell you 00:06:21.199 --> 00:06:23.759 if there were any errors in the file. -00:06:23.759 --> 00:06:26.000 -Now to automate the process of compiling +00:06:23.759 --> 00:06:25.439 +Now to automate the process of -00:06:26.000 --> 00:06:28.560 -several files and building the PDF, +00:06:25.439 --> 00:06:28.560 +compiling several files and +building the PDF, 00:06:28.560 --> 00:06:31.280 I use GNU Make, so all I have to do is -00:06:31.280 --> 00:06:32.560 -open the shell - -00:06:32.560 --> 00:06:36.000 -and run the make command. Don't worry, +00:06:31.280 --> 00:06:36.000 +open the shell and run the make command. +Don't worry, 00:06:36.000 --> 00:06:37.840 I'll provide a link to the source code @@ -468,11 +426,11 @@ I'll provide a link to the source code 00:06:37.840 --> 00:06:41.600 on the last slide. -00:06:41.600 --> 00:06:43.600 -As I moved forward with the project, I +00:06:41.600 --> 00:06:43.494 +As I moved forward with the project, -00:06:43.600 --> 00:06:46.000 -found at least two things missing. +00:06:43.494 --> 00:06:46.000 +I found at least two things missing. 00:06:46.000 --> 00:06:48.720 One, I had no access to a metronome, @@ -480,29 +438,30 @@ One, I had no access to a metronome, 00:06:48.720 --> 00:06:50.479 at least not from the editor, -00:06:50.479 --> 00:06:52.960 -so I built one for casual use and made +00:06:50.479 --> 00:06:52.437 +so I built one for casual use -00:06:52.960 --> 00:06:55.919 -it available in the MELPA repository. +00:06:52.437 --> 00:06:55.919 +and made it available in the MELPA +repository. 00:06:55.919 --> 00:06:59.039 -I also missed bar numbers in the source file. +I also missed bar numbers in the +source file. 00:06:59.039 --> 00:07:00.880 This is useful when going back and forth -00:07:00.880 --> 00:07:03.199 +00:07:00.880 --> 00:07:04.479 between input and output files without - -00:07:03.199 --> 00:07:04.479 getting lost. -00:07:04.479 --> 00:07:06.720 +00:07:04.479 --> 00:07:07.290 So I wrote a command for toggling bar +numbers, -00:07:06.720 --> 00:07:10.000 -numbers, which I hope you can see on the left. +00:07:07.290 --> 00:07:10.000 +which I hope you can see on the left. 00:07:10.000 --> 00:07:12.080 Also, some expressions are difficult or @@ -510,26 +469,28 @@ Also, some expressions are difficult or 00:07:12.080 --> 00:07:14.160 slow to write on the keyboard-- -00:07:14.160 --> 00:07:17.039 -accents and tuplets, for example--so I use +00:07:14.160 --> 00:07:16.490 +accents and tuplets, for example-- -00:07:17.039 --> 00:07:20.160 -template expansion extensively for this purpose, +00:07:16.490 --> 00:07:20.160 +so I use template expansion extensively +for this purpose, 00:07:20.160 --> 00:07:23.440 mainly yasnippet. -00:07:23.440 --> 00:07:25.680 -So what do I think? Well, I think +00:07:23.440 --> 00:07:24.797 +So what do I think? -00:07:25.680 --> 00:07:28.080 -Lilypond can be a sharp paradigm shift +00:07:24.797 --> 00:07:28.080 +Well, I think Lilypond can be a sharp +paradigm shift -00:07:28.080 --> 00:07:31.039 -for people used to GUI alternatives, but +00:07:28.080 --> 00:07:30.817 +for people used to GUI alternatives, -00:07:31.039 --> 00:07:32.720 -the results are impressive. +00:07:30.817 --> 00:07:32.720 +but the results are impressive. 00:07:32.720 --> 00:07:34.639 You don't have to dive too deeply to @@ -537,29 +498,27 @@ You don't have to dive too deeply to 00:07:34.639 --> 00:07:36.960 start using Lilypond. -00:07:36.960 --> 00:07:38.880 +00:07:36.960 --> 00:07:39.635 Likewise, the ability to extend the +software, +I think, -00:07:38.880 --> 00:07:40.720 -software, I think, is especially appealing +00:07:39.635 --> 00:07:42.400 +is especially appealing for music +professionals, -00:07:40.720 --> 00:07:42.400 -for music professionals, - -00:07:42.400 --> 00:07:45.199 +00:07:42.400 --> 00:07:46.560 enthusiasts, composers, and the academic - -00:07:45.199 --> 00:07:46.560 community: 00:07:46.560 --> 00:07:48.400 for example, allowing users to create -00:07:48.400 --> 00:07:50.800 -alternative notation systems required in +00:07:48.400 --> 00:07:50.187 +alternative notation systems -00:07:50.800 --> 00:07:53.120 -non-Western music traditions +00:07:50.187 --> 00:07:53.120 +required in non-Western music traditions 00:07:53.120 --> 00:07:56.160 and other non-conventional requirements. @@ -573,35 +532,28 @@ extensive and well-written manuals 00:08:00.720 --> 00:08:04.639 and active communities of users. -00:08:04.639 --> 00:08:06.400 -But if you're still not sure where to +00:08:04.639 --> 00:08:05.971 +But if you're still not sure -00:08:06.400 --> 00:08:09.599 -start and when to wedge your feet in the deep +00:08:05.971 --> 00:08:10.475 +where to start and when to wedge your +feet in the deep but warm pond -00:08:09.599 --> 00:08:12.160 -but warm pond of lilies, Lilypond, and +00:08:10.475 --> 00:08:13.680 +of lilies, Lilypond, and Lilypond users, -00:08:12.160 --> 00:08:13.680 -Lilypond users, - -00:08:13.680 --> 00:08:15.680 +00:08:13.680 --> 00:08:16.960 I invite you to contribute to my - -00:08:15.680 --> 00:08:16.960 Lilypond projects, -00:08:16.960 --> 00:08:18.800 +00:08:16.960 --> 00:08:20.720 which you can do so from the links on - -00:08:18.800 --> 00:08:20.720 the screen. -00:08:20.720 --> 00:08:22.800 -So, thank you all. I look forward to your - -00:08:22.800 --> 00:08:24.639 -comments, and I hope you enjoy the rest +00:08:20.720 --> 00:08:23.271 +So, thank you all. I look forward to +your comments, -00:08:24.639 --> 00:08:27.840 -of the conference. +00:08:23.271 --> 00:08:27.840 +and I hope you enjoy the rest of the +conference. diff --git a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt index debfa46c..24e598d5 100644 --- a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt +++ b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt @@ -3,98 +3,79 @@ WEBVTT 00:00:01.360 --> 00:00:04.480 Hello, my name is Grant Shangreaux. -00:00:04.480 --> 00:00:07.279 +00:00:04.480 --> 00:00:09.519 This is my talk titled Bard Bivou(m)acs: +Publishing Music with Emacs. -00:00:07.279 --> 00:00:07.919 -Publishing Music +00:00:09.519 --> 00:00:14.400 +I'm a software developer with Unabridged +Software in Lincoln, Nebraska. -00:00:07.919 --> 00:00:10.719 -with Emacs. I'm a software - -00:00:10.719 --> 00:00:12.799 -developer with Unabridged Software in - -00:00:12.799 --> 00:00:14.400 -Lincoln, Nebraska. - -00:00:14.400 --> 00:00:16.800 +00:00:14.400 --> 00:00:18.720 Long time Emacs user, relatively new - -00:00:16.800 --> 00:00:18.720 Emacs hacker. -00:00:18.720 --> 00:00:20.480 -Hopefully, I'll be able to show +00:00:18.720 --> 00:00:22.487 +Hopefully, I'll be able to show you +my workflow, -00:00:20.480 --> 00:00:22.960 -you my workflow, with +00:00:22.487 --> 00:00:30.480 +with how I publish music with Emacs. -00:00:22.960 --> 00:00:30.480 -how I publish music with Emacs. +00:00:30.480 --> 00:00:35.520 +All right. So as a musician, I would +like to publish my music online. -00:00:30.480 --> 00:00:33.440 -All right. So as a musician, I would like +00:00:35.520 --> 00:00:39.040 +I could publish with popular online +music services, -00:00:33.440 --> 00:00:35.520 -to publish my music online. +00:00:39.040 --> 00:00:41.061 +but I'm more of a DIY-type, -00:00:35.520 --> 00:00:37.200 -I could publish with popular - -00:00:37.200 --> 00:00:39.040 -online music services, - -00:00:39.040 --> 00:00:42.000 -but I'm more of a DIY-type, so I chose to - -00:00:42.000 --> 00:00:44.719 -go ahead and publish with Emacs. +00:00:41.061 --> 00:00:44.719 +so I chose to go ahead and +publish with Emacs. 00:00:44.719 --> 00:00:48.160 What's the motivation behind this? -00:00:48.160 --> 00:00:49.760 +00:00:48.160 --> 00:00:51.600 A lot of it comes down to some - -00:00:49.760 --> 00:00:51.600 fundamental freedoms -00:00:51.600 --> 00:00:54.960 +00:00:51.600 --> 00:00:57.178 that Emacs and GNU software +represent to me, -00:00:54.960 --> 00:00:59.120 -represent to me, as well as my - -00:00:59.120 --> 00:01:01.840 -ideas on culture and my background. +00:00:57.178 --> 00:01:01.840 +as well as my ideas on culture and my +background. 00:01:01.840 --> 00:01:04.080 -I don't believe that music is a consumer good. - -00:01:04.080 --> 00:01:06.080 -It's a form of knowledge, +I don't believe that music is +a consumer good. -00:01:06.080 --> 00:01:08.320 -like an algorithm. +00:01:04.080 --> 00:01:08.320 +It's a form of knowledge, like an +algorithm. -00:01:08.320 --> 00:01:10.479 -And it's just such a part of +00:01:08.320 --> 00:01:11.036 +And it's just such a part of culture, -00:01:10.479 --> 00:01:13.119 -culture, like in tribal cultures, music +00:01:11.036 --> 00:01:12.780 +like in tribal cultures, -00:01:13.119 --> 00:01:16.640 -was seen as a gift from the cosmos or +00:01:12.780 --> 00:01:17.405 +music was seen as a gift from the cosmos +or the gods. -00:01:16.640 --> 00:01:18.000 -the gods. It was +00:01:17.405 --> 00:01:20.288 +It was a gift maybe through an +individual vessel, -00:01:18.000 --> 00:01:19.920 -a gift maybe through an individual - -00:01:19.920 --> 00:01:21.920 -vessel, but was shared with the people +00:01:20.288 --> 00:01:21.920 +but was shared with the people 00:01:21.920 --> 00:01:23.520 and shared with everyone, @@ -108,11 +89,12 @@ So to me, music is something that 00:01:29.840 --> 00:01:31.520 should be shared and should be -00:01:31.520 --> 00:01:34.640 -freely enjoyed by everyone. Of course, +00:01:31.520 --> 00:01:33.818 +freely enjoyed by everyone. -00:01:34.640 --> 00:01:36.560 -artists should be compensated as well, +00:01:33.818 --> 00:01:36.560 +Of course, artists should be +compensated as well, 00:01:36.560 --> 00:01:39.040 but that's a whole different topic. @@ -120,41 +102,43 @@ but that's a whole different topic. 00:01:39.040 --> 00:01:41.040 So when I want to share my music, -00:01:41.040 --> 00:01:42.720 +00:01:41.040 --> 00:01:43.520 I want to do it without impacting - -00:01:42.720 --> 00:01:43.520 anyone's freedom. -00:01:43.520 --> 00:01:45.680 -Using GNU software like Emacs is a +00:01:43.520 --> 00:01:45.425 +Using GNU software like Emacs -00:01:45.680 --> 00:01:49.200 -good way that I can ensure that +00:01:45.425 --> 00:01:49.200 +is a good way that I can ensure that -00:01:49.200 --> 00:01:52.840 -I won't be requiring people to +00:01:49.200 --> 00:01:52.597 +I won't be requiring people -00:01:52.840 --> 00:01:55.840 -sign away their freedoms for anything. +00:01:52.597 --> 00:01:55.840 +to sign away their freedoms for +anything. -00:01:55.840 --> 00:01:57.119 -There's a lot more I could say about +00:01:55.840 --> 00:01:57.367 +There's a lot more I could say +about this -00:01:57.119 --> 00:01:58.799 -this but I don't have time. +00:01:57.367 --> 00:01:58.799 +but I don't have time. 00:01:58.799 --> 00:02:03.439 -Feel free to reach out to me by email or IRC. +Feel free to reach out to me by +email or IRC. 00:02:03.439 --> 00:02:06.479 Part of the motivation for me, -00:02:06.479 --> 00:02:08.239 +00:02:06.479 --> 00:02:08.775 personally, is that Emacs is super +magical. -00:02:08.239 --> 00:02:10.720 -magical. It's an all-in-one solution. +00:02:08.775 --> 00:02:10.720 +It's an all-in-one solution. 00:02:10.720 --> 00:02:12.720 Like I said, the GNU software aligns with @@ -162,25 +146,22 @@ Like I said, the GNU software aligns with 00:02:12.720 --> 00:02:14.480 Creative Commons' ideas. -00:02:14.480 --> 00:02:16.800 -I can do file management. I can author +00:02:14.480 --> 00:02:16.067 +I can do file management. -00:02:16.800 --> 00:02:18.879 -HTML, all the web stuff I need even, +00:02:16.067 --> 00:02:20.239 +I can author HTML, all the web stuff +I need even, literate-style. -00:02:18.879 --> 00:02:20.239 -literate-style. +00:02:20.239 --> 00:02:22.171 +I can handle media and metadata. -00:02:20.239 --> 00:02:22.640 -I can handle media and metadata. I've got +00:02:22.171 --> 00:02:24.640 +I've got version control, remote server +access... -00:02:22.640 --> 00:02:24.640 -version control, remote server access... - -00:02:24.640 --> 00:02:26.800 +00:02:24.640 --> 00:02:28.080 All the tools I need are right under my - -00:02:26.800 --> 00:02:28.080 fingertips with this tool 00:02:28.080 --> 00:02:30.000 @@ -204,23 +185,22 @@ So, how do you use Emacs to publish music? 00:02:41.680 --> 00:02:43.440 Well, for me, I needed -00:02:43.440 --> 00:02:45.120 -a couple of things. I needed to be able +00:02:43.440 --> 00:02:44.258 +a couple of things. -00:02:45.120 --> 00:02:46.480 -to audition and label +00:02:44.258 --> 00:02:47.564 +I needed to be able to audition and +label unlabeled audio tracks. -00:02:46.480 --> 00:02:48.319 -unlabeled audio tracks. I have a lot of +00:02:47.564 --> 00:02:50.320 +I have a lot of files that +I don't know where they came from. -00:02:48.319 --> 00:02:50.000 -files that I don't know where they +00:02:50.320 --> 00:02:51.213 +I don't know what they are. -00:02:50.000 --> 00:02:51.280 -came from. I don't know what they are. I - -00:02:51.280 --> 00:02:53.840 -need to be able to listen to them, +00:02:51.213 --> 00:02:53.840 +I need to be able to listen to them, 00:02:53.840 --> 00:02:56.800 and I need to be able to add metadata to @@ -240,20 +220,19 @@ And in the end, I wanted to take those 00:03:05.120 --> 00:03:08.319 files and programmatically produce a web page -00:03:08.319 --> 00:03:11.920 -for people to consume. I found out that - -00:03:11.920 --> 00:03:14.879 -Emacs scores a hundred percent on all of +00:03:08.319 --> 00:03:10.442 +for people to consume. -00:03:14.879 --> 00:03:18.000 -these requirements that I had for this, and +00:03:10.442 --> 00:03:14.879 +I found out that Emacs scores a hundred +percent on all of -00:03:18.000 --> 00:03:20.720 -a lot of that came from EMMS, the Emacs +00:03:14.879 --> 00:03:17.709 +these requirements that I had for this, -00:03:20.720 --> 00:03:22.640 -multimedia system. +00:03:17.709 --> 00:03:22.640 +and a lot of that came from EMMS, the +Emacs multimedia system. 00:03:22.640 --> 00:03:26.080 EMMS is great. @@ -261,17 +240,18 @@ EMMS is great. 00:03:26.080 --> 00:03:27.760 If you haven't checked it out, please do. -00:03:27.760 --> 00:03:30.000 -It's a little bit unintuitive, but +00:03:27.760 --> 00:03:29.736 +It's a little bit unintuitive, -00:03:30.000 --> 00:03:34.000 -once you get into it, you know it works. +00:03:29.736 --> 00:03:34.000 +but once you get into it, you know it +works. -00:03:34.000 --> 00:03:36.640 -Basically, what EMMS gave me was the +00:03:34.000 --> 00:03:36.420 +Basically, what EMMS gave me was -00:03:36.640 --> 00:03:38.720 -ability to listen to the tracks, +00:03:36.420 --> 00:03:38.720 +the ability to listen to the tracks, 00:03:38.720 --> 00:03:39.680 organize playlists. @@ -297,17 +277,14 @@ so (require 'emms-mark). I'm going to 00:03:54.879 --> 00:03:59.680 go through, and I'm going to open the red... -00:03:59.680 --> 00:04:02.319 -I've got this. These files here. So +00:03:59.680 --> 00:04:02.092 +I've got this. These files here. -00:04:02.319 --> 00:04:04.480 -you can see these files are mp3s. +00:04:02.092 --> 00:04:04.480 +So you can see these files are mp3s. -00:04:04.480 --> 00:04:06.080 -They're recorded on a - -00:04:06.080 --> 00:04:07.599 -digital recorder. +00:04:04.480 --> 00:04:07.599 +They're recorded on a digital recorder. 00:04:07.599 --> 00:04:09.920 If I had the choice, I would have a @@ -318,35 +295,28 @@ recorder that used a different format, 00:04:12.319 --> 00:04:14.640 but so be it. I can mark all these files -00:04:14.640 --> 00:04:16.160 -and I can do EMMS - -00:04:16.160 --> 00:04:20.000 -add to .., and now they've been loaded - -00:04:20.000 --> 00:04:27.040 -into a playlist. - -00:04:27.040 --> 00:04:29.040 -So you can see the playlist here. There's +00:04:14.640 --> 00:04:27.040 +and I can do EMMS add to .., and now +they've been loaded into a playlist. -00:04:29.040 --> 00:04:30.400 -some leftover files. +00:04:27.040 --> 00:04:28.698 +So you can see the playlist here. -00:04:30.400 --> 00:04:32.000 -So I've got these three files in my +00:04:28.698 --> 00:04:30.400 +There's some leftover files. -00:04:32.000 --> 00:04:33.759 -playlist, and as you can see, it's just +00:04:30.400 --> 00:04:31.771 +So I've got these three files -00:04:33.759 --> 00:04:34.639 -the file name, +00:04:31.771 --> 00:04:33.361 +in my playlist, and as you can see, -00:04:34.639 --> 00:04:36.800 -the path. I don't have any metadata +00:04:33.361 --> 00:04:35.194 +it's just the file name, the path. -00:04:36.800 --> 00:04:38.560 -associated with them. +00:04:35.194 --> 00:04:38.560 +I don't have any metadata associated +with them. 00:04:38.560 --> 00:04:41.360 In this playlist, I can hit E, @@ -360,37 +330,30 @@ the tag information that I have. 00:04:47.360 --> 00:04:49.840 I could edit these here. -00:04:49.840 --> 00:04:51.520 -I could edit them one at a time, but that's +00:04:49.840 --> 00:04:51.129 +I could edit them one at a time, -00:04:51.520 --> 00:04:53.919 -not really great. I want superpower +00:04:51.129 --> 00:05:03.101 +but that's not really great. I want +superpower metadata authoring. -00:04:53.919 --> 00:05:04.479 -metadata authoring. So, +00:05:03.101 --> 00:05:07.159 +So, by marking them, I can then hit E, -00:05:04.479 --> 00:05:07.680 -by marking them, I can then hit E, and I +00:05:07.159 --> 00:05:12.639 +and I have all three of the tracks +loaded up in this tags buffer. -00:05:07.680 --> 00:05:10.479 -have all three of the tracks loaded up in +00:05:12.639 --> 00:05:16.912 +On top of that, I can do EMMS tag +editor, -00:05:10.479 --> 00:05:12.639 -this tags buffer. +00:05:16.912 --> 00:05:22.840 +set all, C-c C-r, and I want to +set the artist. -00:05:12.639 --> 00:05:15.759 -On top of that, I can do EMMS - -00:05:15.759 --> 00:05:18.800 -tag editor, set all, C-c C-r, - -00:05:18.800 --> 00:05:22.840 -and I want to set the artist. - -00:05:22.840 --> 00:05:25.680 +00:05:22.840 --> 00:05:26.320 so these are some recordings of my - -00:05:25.680 --> 00:05:26.320 family. 00:05:26.320 --> 00:05:31.039 @@ -405,53 +368,45 @@ Spring Walk with Lap Harp. 00:05:40.160 --> 00:05:45.520 I want to set the year. -00:05:45.520 --> 00:05:48.960 +00:05:45.520 --> 00:05:53.759 And then I'm going to go ahead and put - -00:05:48.960 --> 00:05:53.759 these in manually, -00:05:53.759 --> 00:05:55.840 -but with the power of Emacs keyboard - -00:05:55.840 --> 00:05:57.039 -macros and +00:05:53.759 --> 00:05:56.759 +but with the power of Emacs +keyboard macros -00:05:57.039 --> 00:05:59.600 -registers and so on. I could do this +00:05:56.759 --> 00:05:59.600 +and registers and so on. I could do this 00:05:59.600 --> 00:06:02.319 programmatically as well, -00:06:02.319 --> 00:06:04.000 -which would make it a lot easier if I +00:06:02.319 --> 00:06:03.818 +which would make it a lot easier -00:06:04.000 --> 00:06:06.000 -had much more than three files to - -00:06:06.000 --> 00:06:07.440 +00:06:03.818 --> 00:06:07.440 +if I had much more than three files to do this with. 00:06:07.440 --> 00:06:09.919 Submit the changes with C-c C-c, -00:06:09.919 --> 00:06:11.520 -and now we've got the playlist. You can - -00:06:11.520 --> 00:06:13.120 -see the artist and track number have +00:06:09.919 --> 00:06:11.232 +and now we've got the playlist. -00:06:13.120 --> 00:06:15.039 -been updated here. +00:06:11.232 --> 00:06:15.039 +You can see the artist and track number +have been updated here. 00:06:15.039 --> 00:06:17.360 And then the final piece of this is that -00:06:17.360 --> 00:06:19.039 -if you look at this, you can see that the +00:06:17.360 --> 00:06:18.875 +if you look at this, you can see that -00:06:19.039 --> 00:06:20.479 -file name is still the same. +00:06:18.875 --> 00:06:20.479 +the file name is still the same. 00:06:20.479 --> 00:06:22.639 So if I were looking at the directory, @@ -468,29 +423,27 @@ for people to download, 00:06:28.000 --> 00:06:30.319 it's nice to be able to have that -00:06:30.319 --> 00:06:32.400 -filename reflect the track number and the +00:06:30.319 --> 00:06:32.044 +filename reflect the track number -00:06:32.400 --> 00:06:34.800 -artist and so on. So there's another +00:06:32.044 --> 00:06:33.609 +and the artist and so on. -00:06:34.800 --> 00:06:41.199 -command, EMMS +00:06:33.609 --> 00:06:40.250 +So there's another command, -00:06:41.199 --> 00:06:44.160 -rename tag editor, rename, so it could be +00:06:40.250 --> 00:06:42.970 +EMMS rename tag editor, rename, -00:06:44.160 --> 00:06:45.120 -just capital R. +00:06:42.970 --> 00:06:45.120 +so it could be just capital R. -00:06:45.120 --> 00:06:47.199 -I think I need to mark all of these, hit +00:06:45.120 --> 00:06:46.991 +I think I need to mark all of these, -00:06:47.199 --> 00:06:48.880 -capital R, and then it's going to ask me - -00:06:48.880 --> 00:06:50.000 -to confirm +00:06:46.991 --> 00:06:50.000 +hit capital R, and then it's going to +ask me to confirm 00:06:50.000 --> 00:06:54.400 and say yes to all of them. @@ -504,86 +457,78 @@ whoops I have to update it--you'll see 00:07:04.319 --> 00:07:06.319 it's been updated with the artist, -00:07:06.319 --> 00:07:09.840 -track number and - -00:07:09.840 --> 00:07:11.120 -track name. +00:07:06.319 --> 00:07:11.120 +track number and track name. -00:07:11.120 --> 00:07:14.639 -This format is a format string, so +00:07:11.120 --> 00:07:14.432 +This format is a format string, -00:07:14.639 --> 00:07:17.360 -it's customizable of course. +00:07:14.432 --> 00:07:17.360 +so it's customizable of course. 00:07:17.360 --> 00:07:21.039 I just decided to go with the default. -00:07:21.039 --> 00:07:24.160 +00:07:21.039 --> 00:07:24.948 So that's pretty great, this workflow +just with EMMS. -00:07:24.160 --> 00:07:26.000 -just with EMMS. I didn't have to do - -00:07:26.000 --> 00:07:28.080 -anything. This is all there. It's all - -00:07:28.080 --> 00:07:30.960 -built in. It gave me exactly what +00:07:24.948 --> 00:07:27.585 +I didn't have to do anything. This is +all there. -00:07:30.960 --> 00:07:32.639 -I was looking for in terms of being able +00:07:27.585 --> 00:07:31.673 +It's all built in. It gave me exactly +what I was looking for -00:07:32.639 --> 00:07:35.599 -to process a lot of raw audio files +00:07:31.673 --> 00:07:35.599 +in terms of being able to process a lot +of raw audio files, -00:07:35.599 --> 00:07:37.599 -add metadata to them and get them ready - -00:07:37.599 --> 00:07:39.280 +00:07:35.599 --> 00:07:39.280 +add metadata to them, and get them ready for publishing. 00:07:39.280 --> 00:07:41.599 And this is for publishing for playback -00:07:41.599 --> 00:07:43.520 -in any media player. It'll be - -00:07:43.520 --> 00:07:46.560 -useful. Not just for the web page that I'm +00:07:41.599 --> 00:07:44.026 +in any media player. It'll be useful. -00:07:46.560 --> 00:07:48.479 -building. So the +00:07:44.026 --> 00:07:47.639 +Not just for the web page that I'm +building. -00:07:48.479 --> 00:07:50.560 -final part, of course, is to build the +00:07:47.639 --> 00:07:51.440 +So the final part, of course, is to +build the web page. -00:07:50.560 --> 00:07:54.960 -web page. Emacs makes authoring HTML trivial. +00:07:51.440 --> 00:07:54.960 +Emacs makes authoring HTML trivial. -00:07:54.960 --> 00:07:57.440 -As I was going through this, I +00:07:54.960 --> 00:07:57.357 +As I was going through this, -00:07:57.440 --> 00:07:59.039 -wanted to challenge myself and just be, +00:07:57.357 --> 00:07:59.701 +I wanted to challenge myself and just +be, like, -00:07:59.039 --> 00:08:00.400 -like, can I do this +00:07:59.701 --> 00:08:03.520 +can I do this just all with Emacs? +Can I just make this? -00:08:00.400 --> 00:08:03.520 -just all with Emacs? Can I just make this? +00:08:03.520 --> 00:08:05.134 +I don't need a... I don't need Ruby. -00:08:03.520 --> 00:08:05.440 -I don't need a... I don't need Ruby. I don't +00:08:05.134 --> 00:08:06.707 +I don't need Rails. I don't need Node. -00:08:05.440 --> 00:08:07.039 -need Rails. I don't need Node. I don't +00:08:06.707 --> 00:08:08.528 +I don't need any of this other stuff. -00:08:07.039 --> 00:08:08.960 -need any of this other stuff. I have my - -00:08:08.960 --> 00:08:10.560 -tool right here. It's a fully... +00:08:08.528 --> 00:08:10.560 +I have my tool right here. It's a +fully... 00:08:10.560 --> 00:08:12.560 It's a whole operating system, basically, @@ -591,83 +536,78 @@ It's a whole operating system, basically, 00:08:12.560 --> 00:08:15.039 plus programming languages. -00:08:15.039 --> 00:08:17.360 -So the first thing I started with was +00:08:15.039 --> 00:08:17.171 +So the first thing I started with -00:08:17.360 --> 00:08:19.919 -buffer scripting for manipulating text. +00:08:17.171 --> 00:08:19.919 +was buffer scripting for +manipulating text. 00:08:19.919 --> 00:08:22.560 That's kind of the easiest way to do it. -00:08:22.560 --> 00:08:24.319 -Basically, anything you can do in a - -00:08:24.319 --> 00:08:25.280 -buffer, you can do +00:08:22.560 --> 00:08:24.692 +Basically, anything you can do in +a buffer, -00:08:25.280 --> 00:08:28.479 -programmatically with Elisp. So this +00:08:24.692 --> 00:08:27.834 +you can do programmatically with Elisp. -00:08:28.479 --> 00:08:30.319 -might be a good example for beginners. If +00:08:27.834 --> 00:08:30.217 +So this might be a good example for +beginners. -00:08:30.319 --> 00:08:33.919 -you haven't done any Elisp yet, +00:08:30.217 --> 00:08:33.919 +If you haven't done any Elisp yet, -00:08:33.919 --> 00:08:36.000 -a simple example is to create this +00:08:33.919 --> 00:08:39.557 +a simple example is to create this div +output here. -00:08:36.000 --> 00:08:36.959 -this div +00:08:39.557 --> 00:08:41.581 +You can use this with-temp-buffer, -00:08:36.959 --> 00:08:40.000 -output here. You +00:08:41.581 --> 00:08:44.240 +so basically creating an imaginary +buffer. -00:08:40.000 --> 00:08:41.760 -can use this with-temp-buffer, so +00:08:44.240 --> 00:08:45.945 +insert is just like typing, -00:08:41.760 --> 00:08:44.240 -basically creating an imaginary buffer. - -00:08:44.240 --> 00:08:46.640 -insert is just like typing, so you put - -00:08:46.640 --> 00:08:48.800 -strings in, you put new lines in, +00:08:45.945 --> 00:08:48.800 +so you put strings in, +you put new lines in, 00:08:48.800 --> 00:08:50.959 you can build some strings together. -00:08:50.959 --> 00:08:52.080 -Here you can see - -00:08:52.080 --> 00:08:54.000 -I'm doing a random number, so every time - -00:08:54.000 --> 00:08:55.360 -I execute this, +00:08:50.959 --> 00:08:53.551 +Here you can see I'm doing a random +number, -00:08:55.360 --> 00:08:57.920 -my content changes. I can generate +00:08:53.551 --> 00:08:55.360 +so every time I execute this, -00:08:57.920 --> 00:09:01.040 -dynamic content in HTML blocks +00:08:55.360 --> 00:08:56.790 +my content changes. -00:09:01.040 --> 00:09:04.399 -with Elisp. For my +00:08:56.790 --> 00:09:03.685 +I can generate dynamic content in HTML +blocks with Elisp. -00:09:04.399 --> 00:09:05.920 -web page builder, It's a little more +00:09:03.685 --> 00:09:06.493 +For my web page builder, it's a little +more complex. -00:09:05.920 --> 00:09:08.000 -complex. I'm pulling data out +00:09:06.493 --> 00:09:08.000 +I'm pulling data out 00:09:08.000 --> 00:09:12.080 using EMMS data structures, 00:09:12.080 --> 00:09:16.080 -so it's pulling that out from the track data. +so it's pulling that out from +the track data. 00:09:16.080 --> 00:09:19.440 And then I'm using some program to @@ -675,50 +615,48 @@ And then I'm using some program to 00:09:19.440 --> 00:09:21.440 generate list elements, so each track is -00:09:21.440 --> 00:09:23.200 -going to have the title +00:09:21.440 --> 00:09:24.086 +going to have the title and +track number, -00:09:23.200 --> 00:09:25.120 -and track number, and then a button for +00:09:24.086 --> 00:09:25.869 +and then a button for playing it, -00:09:25.120 --> 00:09:26.959 -playing it, plus the source +00:09:25.869 --> 00:09:28.206 +plus the source of the audio file, -00:09:26.959 --> 00:09:29.519 -of the audio file, which will get added +00:09:28.206 --> 00:09:30.480 +which will get added here. -00:09:29.519 --> 00:09:30.480 -here. +00:09:30.480 --> 00:09:32.485 +Right now, this is hard coded for Opus, -00:09:30.480 --> 00:09:32.640 -Right now, this is hard coded for Opus, so +00:09:32.485 --> 00:09:37.200 +so it won't work for my MP3s. -00:09:32.640 --> 00:09:37.200 -it won't work for my MP3s. +00:09:37.200 --> 00:09:38.867 +I'm going to skip over snippets. -00:09:37.200 --> 00:09:39.120 -I'm going to skip over snippets. Turns +00:09:38.867 --> 00:09:42.017 +Turns out format strings were good +enough for me. -00:09:39.120 --> 00:09:41.200 -out format strings were good enough +00:09:42.017 --> 00:09:45.035 +Snippets could be useful, -00:09:41.200 --> 00:09:45.519 -for me. Snippets could be useful, but +00:09:45.035 --> 00:09:47.267 +but format is super powerful, -00:09:45.519 --> 00:09:48.160 -format is super powerful, and I didn't +00:09:47.267 --> 00:09:49.839 +and I didn't really even need +all that much power, -00:09:48.160 --> 00:09:49.839 -really even need all that much power, - -00:09:49.839 --> 00:09:51.279 +00:09:49.839 --> 00:09:52.187 basically, just doing string +interpolation. -00:09:51.279 --> 00:09:53.519 -interpolation. So if you haven't seen - -00:09:53.519 --> 00:09:54.560 -format before, +00:09:52.187 --> 00:09:54.560 +So if you haven't seen format before, 00:09:54.560 --> 00:09:56.720 you basically put these control strings @@ -726,37 +664,29 @@ you basically put these control strings 00:09:56.720 --> 00:09:59.120 or control characters inside of a string, -00:09:59.120 --> 00:10:03.120 -and you can generate an +00:09:59.120 --> 00:10:05.040 +and you can generate an output string +that you want. -00:10:03.120 --> 00:10:05.040 -output string that you want. +00:10:05.040 --> 00:10:07.344 +So in my generator code, basically, -00:10:05.040 --> 00:10:07.600 -So in my generator code, basically, it's +00:10:07.344 --> 00:10:08.720 +it's down here, -00:10:07.600 --> 00:10:08.720 -down here, - -00:10:08.720 --> 00:10:10.959 +00:10:08.720 --> 00:10:12.800 I'm calling format with this Bard - -00:10:10.959 --> 00:10:12.800 Bivou(m)acs template, -00:10:12.800 --> 00:10:15.920 -and that's basically a big +00:10:12.800 --> 00:10:17.491 +and that's basically a big string of +HTML. -00:10:15.920 --> 00:10:18.240 -a big string of HTML. It's just +00:10:17.491 --> 00:10:21.200 +It's just my whole page of HTML -00:10:18.240 --> 00:10:21.200 -my whole page of HTML - -00:10:21.200 --> 00:10:22.959 +00:10:21.200 --> 00:10:24.399 with those control characters in just - -00:10:22.959 --> 00:10:24.399 four places. 00:10:24.399 --> 00:10:26.399 @@ -765,41 +695,38 @@ One of them populates the track list. 00:10:26.399 --> 00:10:29.760 That's really the meat of the program. -00:10:29.760 --> 00:10:32.079 +00:10:29.760 --> 00:10:34.746 Again, this is a combination of using +buffer scripting, using HTML mode, -00:10:32.079 --> 00:10:33.440 -buffer scripting, +00:10:34.746 --> 00:10:37.279 +inserting text format strings, -00:10:33.440 --> 00:10:37.279 -using HTML mode, inserting text format strings, +00:10:37.279 --> 00:10:39.251 +and then I can indent-region -00:10:37.279 --> 00:10:40.000 -and then I can indent-region so the HTML - -00:10:40.000 --> 00:10:41.920 -actually looks pretty +00:10:39.251 --> 00:10:41.920 +so the HTML actually looks pretty 00:10:41.920 --> 00:10:45.200 when it comes out of it as well. -00:10:45.200 --> 00:10:50.160 +00:10:45.200 --> 00:10:54.000 I will show that, just really quick - -00:10:50.160 --> 00:10:54.000 actually. -00:10:54.000 --> 00:10:56.880 -So you can see, this is the HTML that got +00:10:54.000 --> 00:10:57.540 +So you can see, this is the HTML that +got generated. -00:10:56.880 --> 00:10:58.800 -generated. I've got my template. +00:10:57.540 --> 00:10:58.800 +I've got my template. -00:10:58.800 --> 00:11:02.560 -I inserted the title here, the style, the +00:10:58.800 --> 00:11:02.193 +I inserted the title here, the style, -00:11:02.560 --> 00:11:05.760 -font was all inserted, +00:11:02.193 --> 00:11:05.760 +the font was all inserted, 00:11:05.760 --> 00:11:07.920 and then this whole list of of tracks here. @@ -810,98 +737,100 @@ It's kind of messy to look at, 00:11:11.200 --> 00:11:14.399 but this track list, this whole div here, -00:11:14.399 --> 00:11:15.920 -is all generated by - -00:11:15.920 --> 00:11:22.480 -my generator code, and it works. It's great. +00:11:14.399 --> 00:11:22.480 +is all generated by my generator code, +and it works. It's great. 00:11:22.480 --> 00:11:27.120 Okay, moving on. -00:11:27.120 --> 00:11:30.240 +00:11:27.120 --> 00:11:30.945 So the other thing was that as I was +developing this, -00:11:30.240 --> 00:11:32.079 -developing this, I decided to use - -00:11:32.079 --> 00:11:33.200 -Org Babel and some of his +00:11:30.945 --> 00:11:32.547 +I decided to use Org Babel -00:11:33.200 --> 00:11:35.360 -its features for multi-language +00:11:32.547 --> 00:11:35.588 +and some of its features for +multi-language things -00:11:35.360 --> 00:11:36.880 -things because I needed to style it with +00:11:35.588 --> 00:11:37.839 +because I needed to style it with CSS -00:11:36.880 --> 00:11:37.839 -CSS and +00:11:37.839 --> 00:11:39.835 +and put actions in Javascript, -00:11:37.839 --> 00:11:40.480 -and put actions in Javascript, and also I - -00:11:40.480 --> 00:11:42.480 -used SVG for authoring stuff. +00:11:39.835 --> 00:11:42.480 +and also I used SVG for authoring stuff. 00:11:42.480 --> 00:11:46.079 It was a little bit complicated. -00:11:46.079 --> 00:11:47.680 -It probably would have been simpler had I +00:11:46.079 --> 00:11:47.484 +It probably would have been simpler + +00:11:47.484 --> 00:11:48.680 +had I not used Org Babel, -00:11:47.680 --> 00:11:49.600 -not used Org Babel, but it's also really +00:11:48.680 --> 00:11:49.894 +but it's also really fun. -00:11:49.600 --> 00:11:51.440 -fun. I think it's a cool, +00:11:49.894 --> 00:11:53.663 +I think it's a cool, cool idea to use +literate programming. -00:11:51.440 --> 00:11:53.839 -cool idea to use literate programming. My +00:11:53.663 --> 00:11:57.001 +My idea was to create HTML +components. -00:11:53.839 --> 00:11:55.839 -idea was to create HTML +00:11:57.001 --> 00:11:59.519 +I could name it like this, -00:11:55.839 --> 00:11:59.519 -components. I could name it like this, +00:11:59.519 --> 00:12:00.959 +put a format string inside it, -00:11:59.519 --> 00:12:01.440 -put a format string inside it, and build +00:12:00.959 --> 00:12:02.800 +and build a function -00:12:01.440 --> 00:12:02.800 -a function +00:12:02.800 --> 00:12:04.302 +in Elisp to format it -00:12:02.800 --> 00:12:05.519 -in Elisp to format it and spit out the +00:12:04.302 --> 00:12:07.120 +and spit out the HTML that I want. -00:12:05.519 --> 00:12:07.120 -HTML that I want. +00:12:07.120 --> 00:12:09.581 +By doing this, then, -00:12:07.120 --> 00:12:10.320 -By doing this, then, I can +00:12:09.581 --> 00:12:12.388 +I can just change things in my Org file, -00:12:10.320 --> 00:12:12.880 -just change things in my Org file which, +00:12:12.388 --> 00:12:14.814 +which, not getting a whole lot of time +to work on it, -00:12:12.880 --> 00:12:14.320 -not getting a whole lot of time to work +00:12:14.814 --> 00:12:16.615 +I can come back to it -00:12:14.320 --> 00:12:16.959 -on it, I can come back to it and +00:12:16.615 --> 00:12:19.335 +and I have a lot of notes. -00:12:16.959 --> 00:12:19.839 -I have a lot of notes. I can +00:12:19.335 --> 00:12:21.695 +I can kind of generate things as I'm +going -00:12:19.839 --> 00:12:21.920 -kind of generate things as I'm going and +00:12:21.695 --> 00:12:24.399 +and keep notes for myself, +and keep the... -00:12:21.920 --> 00:12:24.399 -keep notes for myself, and keep the... +00:12:24.399 --> 00:12:25.308 +I don't know. It's cool. -00:12:24.399 --> 00:12:25.600 -I don't know. It's cool. Literate +00:12:25.308 --> 00:12:26.672 +Literate programming is fun. -00:12:25.600 --> 00:12:27.519 -programming is fun. So I don't need to +00:12:26.672 --> 00:12:27.519 +So I don't need to 00:12:27.519 --> 00:12:29.279 go into that too much, but you can see if @@ -909,41 +838,42 @@ go into that too much, but you can see if 00:12:29.279 --> 00:12:31.040 I execute this here, -00:12:31.040 --> 00:12:33.360 -I get the the div that I want. It's a +00:12:31.040 --> 00:12:32.983 +I get the the div that I want. -00:12:33.360 --> 00:12:34.880 -little bit funny. You'll see I have the +00:12:32.983 --> 00:12:34.013 +It's a little bit funny. -00:12:34.880 --> 00:12:36.480 -string like this, the way that +00:12:34.013 --> 00:12:35.786 +You'll see I have the string like this, -00:12:36.480 --> 00:12:39.200 -noweb expands, I can't do this on a - -00:12:39.200 --> 00:12:40.000 -single line. +00:12:35.786 --> 00:12:40.000 +the way that noweb expands, I can't do +this on a single line. 00:12:40.000 --> 00:12:43.839 It looks funny when you do that, -00:12:43.839 --> 00:12:45.440 -so that might be something to work out +00:12:43.839 --> 00:12:45.931 +so that might be something +to work out later. -00:12:45.440 --> 00:12:48.959 -later. CSS blocks can either be tangled out +00:12:45.931 --> 00:12:48.959 +CSS blocks can either be tangled out 00:12:48.959 --> 00:12:52.639 -and referenced in the HTML source or inlined. +and referenced in the HTML source, +or inlined. 00:12:52.639 --> 00:12:54.639 Here's an example I have of inlining it. -00:12:54.639 --> 00:12:56.959 -So I've got my little CSS block named +00:12:54.639 --> 00:12:57.609 +So I've got my little CSS block +named style, -00:12:56.959 --> 00:13:00.320 -style, Javascript named script, +00:12:57.609 --> 00:13:00.320 +Javascript named script, 00:13:00.320 --> 00:13:03.040 and then I've got this HTML source block @@ -954,20 +884,23 @@ with noweb expansion. 00:13:04.839 --> 00:13:07.920 These double angle brackets here -00:13:07.920 --> 00:13:09.839 -are where I'm going to expand the block +00:13:07.920 --> 00:13:09.396 +are where I'm going to expand -00:13:09.839 --> 00:13:12.639 -named style. I'm actually calling a function, +00:13:09.396 --> 00:13:12.639 +the block named style. I'm actually +calling a function, -00:13:12.639 --> 00:13:14.399 -so I want the result of the function +00:13:12.639 --> 00:13:14.737 +so I want the result of the +function here, -00:13:14.399 --> 00:13:17.040 -here, and then the script will just get +00:13:14.737 --> 00:13:18.881 +and then the script will just get +expanded here. -00:13:17.040 --> 00:13:22.959 -expanded here. So org-babel-expand-src-block, +00:13:18.881 --> 00:13:22.959 +So org-babel-expand-src-block, 00:13:22.959 --> 00:13:25.360 you can see what it looks like. @@ -975,50 +908,45 @@ you can see what it looks like. 00:13:25.360 --> 00:13:28.160 I've got my style here. I've got my title. -00:13:28.160 --> 00:13:29.920 -I've got that main content class - -00:13:29.920 --> 00:13:31.279 -I showed before, +00:13:28.160 --> 00:13:31.279 +I've got that main content class I +showed before, 00:13:31.279 --> 00:13:34.480 -and the script as well. So that's kind of cool. +and the script as well. +So that's kind of cool. -00:13:34.480 --> 00:13:36.320 +00:13:34.480 --> 00:13:37.527 I could just run org-babel-tangle and +get my thing out -00:13:36.320 --> 00:13:38.160 -get my thing out and just - -00:13:38.160 --> 00:13:40.480 -edit one file instead of multiple files. - -00:13:40.480 --> 00:13:41.600 -Not for everyone, +00:13:37.527 --> 00:13:40.480 +and just edit one file instead of +multiple files. -00:13:41.600 --> 00:13:45.839 -but I thought it was kind of fun. +00:13:40.480 --> 00:13:46.455 +Not for everyone, but I thought it was +kind of fun. All right. -00:13:45.839 --> 00:13:47.760 -All right. Oh, and the final thing is that +00:13:46.455 --> 00:13:48.807 +Oh, and the final thing is +that in Emacs, -00:13:47.760 --> 00:13:49.199 -in Emacs, you can +00:13:48.807 --> 00:13:51.320 +you can author and view SVG. -00:13:49.199 --> 00:13:52.880 -author and view SVG. So this is just an +00:13:51.320 --> 00:13:58.297 +So this is just an Org. This SVG, I used +to make the play and pause buttons. -00:13:52.880 --> 00:13:57.199 -Org. This SVG, I used to make the play +00:13:58.297 --> 00:13:59.519 +I didn't know this, -00:13:57.199 --> 00:13:59.519 -and pause buttons. I didn't know this, +00:13:59.519 --> 00:14:02.162 +but if you edit an SVG file, -00:13:59.519 --> 00:14:02.800 -but if you edit an SVG file, you can - -00:14:02.800 --> 00:14:08.800 -toggle back and forth +00:14:02.162 --> 00:14:08.800 +you can toggle back and forth 00:14:08.800 --> 00:14:13.199 between the code and the image. @@ -1026,107 +954,102 @@ between the code and the image. 00:14:13.199 --> 00:14:17.360 It's pretty sweet. So I can iteratively -00:14:17.360 --> 00:14:19.680 -work through this because of how - -00:14:19.680 --> 00:14:20.560 -Emacs is. +00:14:17.360 --> 00:14:20.560 +work through this +because of how Emacs is. 00:14:20.560 --> 00:14:24.959 Final considerations here, -00:14:24.959 --> 00:14:27.360 -like when doing this, I want it to be all +00:14:24.959 --> 00:14:26.247 +like when doing this, -00:14:27.360 --> 00:14:29.279 -free, so I want to use fonts that use a +00:14:26.247 --> 00:14:27.606 +I want it to be all free, -00:14:29.279 --> 00:14:30.079 -free license. +00:14:27.606 --> 00:14:30.079 +so I want to use fonts that use a free +license. 00:14:30.079 --> 00:14:32.800 I found GNU Unifont. It's kind of cool. -00:14:32.800 --> 00:14:34.800 -The content license... I chose +00:14:32.800 --> 00:14:34.333 +The content license... -00:14:34.800 --> 00:14:37.600 -Creative Commons Attribution ShareAlike, +00:14:34.333 --> 00:14:37.600 +I chose Creative Commons Attribution +ShareAlike, 00:14:37.600 --> 00:14:39.920 which is kind of like the GPL. -00:14:39.920 --> 00:14:42.880 -Ideally, I could serve it with Emacs. I'd +00:14:39.920 --> 00:14:42.663 +Ideally, I could serve it with Emacs. -00:14:42.880 --> 00:14:44.800 -like to remove idiosyncrasy so other - -00:14:44.800 --> 00:14:46.320 +00:14:42.663 --> 00:14:46.320 +I'd like to remove idiosyncrasy so other people can use it. 00:14:46.320 --> 00:14:48.720 It's pretty much just my tool right now. -00:14:48.720 --> 00:14:51.040 -Not requiring the web browser... I can - -00:14:51.040 --> 00:14:54.079 -ship playlists so that you can just +00:14:48.720 --> 00:14:50.734 +Not requiring the web browser... -00:14:54.079 --> 00:14:58.000 -click or link to a playlist on your favorite +00:14:50.734 --> 00:14:56.648 +I can ship playlists so that you can +just click or link to a playlist -00:14:58.000 --> 00:15:00.639 -player, even EMMS if you want, and then +00:14:56.648 --> 00:15:00.068 +on your favorite player, even EMMS if +you want, -00:15:00.639 --> 00:15:02.639 -packing up those albums in like a ZIP or - -00:15:02.639 --> 00:15:04.320 -.tar file. +00:15:00.068 --> 00:15:04.320 +and then packing up those albums in like +a ZIP or .tar file. 00:15:04.320 --> 00:15:08.639 So you can go to churls.world . -00:15:08.639 --> 00:15:10.880 -It just has a link to this album. I'll +00:15:08.639 --> 00:15:10.644 +It just has a link to this album. -00:15:10.880 --> 00:15:14.000 -display it here in just a second. +00:15:10.644 --> 00:15:14.000 +I'll display it here in just a second. 00:15:14.000 --> 00:15:17.519 You can contact me. I'm shoshin on #emacs 00:15:17.519 --> 00:15:21.040 -in IRC and on sourcehut. You can email me +in IRC and on sourcehut. You can email me: 00:15:21.040 --> 00:15:23.680 grant@churls.world, personal, or 00:15:23.680 --> 00:15:26.800 -grant@unabridgedsoftware.com. All right, now. +grant@unabridgedsoftware.com. +All right, now. 00:15:26.800 --> 00:15:32.079 Let's see about this... -00:15:32.079 --> 00:15:33.680 -This is up online, so if you want to - -00:15:33.680 --> 00:15:35.120 -listen to my +00:15:32.079 --> 00:15:34.316 +This is up online, so if you +want to listen -00:15:35.120 --> 00:15:39.199 -college band's album from 20 years ago, +00:15:34.316 --> 00:15:39.199 +to my college band's album from +20 years ago, 00:15:39.199 --> 00:15:43.040 here it is: Cassiopeia Basement Days. -00:15:43.040 --> 00:15:47.680 -Whoops. I made this art in Krita. You can +00:15:43.040 --> 00:15:46.887 +Whoops. I made this art in Krita. -00:15:47.680 --> 00:15:51.199 -press play. You can skip around. +00:15:46.887 --> 00:15:51.199 +You can press play. You can skip around. 00:15:51.199 --> 00:15:55.040 I do have the playlist up here too. @@ -1134,8 +1057,6 @@ I do have the playlist up here too. 00:15:55.040 --> 00:15:58.560 So yeah, thanks for listening. -00:15:58.560 --> 00:16:00.880 -I hope you enjoyed it, and enjoy the rest - -00:16:00.880 --> 00:16:07.360 -of EmacsConf. Goodbye! +00:15:58.560 --> 00:16:07.360 +I hope you enjoyed it, and enjoy the +rest of EmacsConf. Goodbye! diff --git a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt index e5dfd2f7..4d7bfede 100644 --- a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt +++ b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt @@ -1,25 +1,18 @@ WEBVTT -00:00:03.360 --> 00:00:05.359 +00:00:03.360 --> 00:00:07.440 So first question, what does - -00:00:05.359 --> 00:00:07.440 Bard Bivou(m)acs mean? Good question. -00:00:07.440 --> 00:00:09.679 +00:00:07.440 --> 00:00:10.800 In one version of my talk, I spent too - -00:00:09.679 --> 00:00:10.800 long explaining it, 00:00:10.800 --> 00:00:14.559 and decided to cut it out. -00:00:14.559 --> 00:00:17.920 -It's basically a bad pun on - -00:00:17.920 --> 00:00:20.960 -band camp. +00:00:14.559 --> 00:00:20.960 +It's basically a bad pun on band camp. 00:00:20.960 --> 00:00:22.480 A bivouac--I don't even know if I'm @@ -45,50 +38,44 @@ I'll probably find a different name for 00:00:42.879 --> 00:00:45.039 it but I liked that "bivoaucs," -00:00:45.039 --> 00:00:47.520 +00:00:45.039 --> 00:00:48.719 if you stick an m in there, it becomes - -00:00:47.520 --> 00:00:48.719 Bivou(m)acs. -00:00:48.719 --> 00:00:56.239 +00:00:48.719 --> 00:01:00.160 It's kind of like editor macros for - -00:00:56.239 --> 00:01:00.160 generating some HTML. -00:01:00.160 --> 00:01:04.000 -Yes, it is confusing, chatting on IRC - -00:01:04.000 --> 00:01:05.920 -at the same time. +00:01:00.160 --> 00:01:07.782 +Yes, it is confusing, chatting on IRC at +the same time. Great question. -00:01:05.920 --> 00:01:09.520 -Great question. (Amin: Grant, +00:01:07.782 --> 00:01:11.398 +(Amin: Grant, so right now, you're +sharing your screen. -00:01:09.520 --> 00:01:10.880 -so right now, you're sharing your +00:01:11.398 --> 00:01:14.479 +Are you planning on showing something +with it, or for example, -00:01:10.880 --> 00:01:12.880 -screen. Are you planning on +00:01:14.479 --> 00:01:16.036 +should I maximize you?) -00:01:12.880 --> 00:01:14.479 -showing something with it, or for example, - -00:01:14.479 --> 00:01:16.880 -should I maximize you?) I don't know. +00:01:16.036 --> 00:01:20.400 +I don't know. I can turn it off for now. +Okay. -00:01:16.880 --> 00:01:20.400 -I can turn it off for now. Okay. +00:01:20.400 --> 00:01:22.299 +(Amin: You can turn on the webcam.) -00:01:20.400 --> 00:01:22.880 -(Amin: You can turn on the webcam.) Yeah, okay. +00:01:22.299 --> 00:01:22.880 +Yeah, okay. -00:01:22.880 --> 00:01:24.240 -(Amin: I'll maximize your +00:01:22.880 --> 00:01:25.694 +(Amin: I'll maximize your webcam.) -00:01:24.240 --> 00:01:28.240 -webcam.) Okay, thanks. +00:01:25.694 --> 00:01:28.240 +Okay, thanks. 00:01:28.240 --> 00:01:30.000 I'll get to the answer for my color @@ -96,14 +83,11 @@ I'll get to the answer for my color 00:01:30.000 --> 00:01:31.360 theme here in a bit in IRC. -00:01:31.360 --> 00:01:34.640 -Next question on +00:01:31.360 --> 00:01:35.105 +Next question on the Etherpad, -00:01:34.640 --> 00:01:37.280 -the Etherpad, does this metadata - -00:01:37.280 --> 00:01:38.479 -workflow also support +00:01:35.105 --> 00:01:38.479 +does this metadata workflow also support 00:01:38.479 --> 00:01:41.360 unsynchronized lyrics within ID3 tags, @@ -129,20 +113,17 @@ figure out how to do mass tag editing. 00:01:55.360 --> 00:01:56.399 And that was like... -00:01:56.399 --> 00:01:58.479 +00:01:56.399 --> 00:01:59.600 It wasn't very intuitive, like I said, - -00:01:58.479 --> 00:01:59.600 with EMMS. -00:01:59.600 --> 00:02:01.840 +00:01:59.600 --> 00:02:03.040 I think EMMS is really great, but its - -00:02:01.840 --> 00:02:03.040 interface is huge. 00:02:03.040 --> 00:02:07.040 -like if you do M-x and type emms, you get +like if you do M-x and type emms, +you get, 00:02:07.040 --> 00:02:10.160 I don't know, 270-some candidates. @@ -150,92 +131,72 @@ I don't know, 270-some candidates. 00:02:10.160 --> 00:02:13.200 There's a lot of functions going on. -00:02:13.200 --> 00:02:14.319 -I basically found the - -00:02:14.319 --> 00:02:16.319 -features that I needed to get this +00:02:13.200 --> 00:02:18.879 +I basically found the features that I +needed to get this workflow working. -00:02:16.319 --> 00:02:18.879 -workflow working. - -00:02:18.879 --> 00:02:21.040 +00:02:18.879 --> 00:02:22.160 I would guess that you probably can do - -00:02:21.040 --> 00:02:22.160 it, and if you don't, -00:02:22.160 --> 00:02:24.080 -if you can't do it out of the box, I +00:02:22.160 --> 00:02:24.026 +if you can't do it out of the box, -00:02:24.080 --> 00:02:28.160 -think you could script EMMS to do that. +00:02:24.026 --> 00:02:28.160 +I think you could script EMMS +to do that. -00:02:28.160 --> 00:02:29.840 +00:02:28.160 --> 00:02:33.268 I'd like to know more, and I'm certainly +going to be investigating it. -00:02:29.840 --> 00:02:31.840 -going to be - -00:02:31.840 --> 00:02:35.200 -investigating it. I will try and post my - -00:02:35.200 --> 00:02:39.519 -findings somewhere online. +00:02:33.268 --> 00:02:39.519 +I will try and post my findings +somewhere online. 00:02:39.519 --> 00:02:42.080 Is it possible to import batch metadata? -00:02:42.080 --> 00:02:43.920 -I'm not sure. I would guess +00:02:42.080 --> 00:02:46.496 +I'm not sure. I would guess yes is the +answer. -00:02:43.920 --> 00:02:49.360 -yes is the answer. EMMS can connect to +00:02:46.496 --> 00:02:50.712 +EMMS can connect to metadata services. -00:02:49.360 --> 00:02:51.840 -metadata services. I haven't done - -00:02:51.840 --> 00:02:53.040 -that because I was just +00:02:50.712 --> 00:02:53.040 +I haven't done that because I was just 00:02:53.040 --> 00:02:56.959 using audio files that I created myself. -00:02:56.959 --> 00:03:00.400 -I know that on the back end, it calls out to - -00:03:00.400 --> 00:03:02.319 -shell programs for tagging things. +00:02:56.959 --> 00:03:00.165 +I know that on the back end, it calls out -00:03:02.319 --> 00:03:04.560 -there's a lot of different options that can +00:03:00.165 --> 00:03:02.319 +to shell programs for tagging things. -00:03:04.560 --> 00:03:08.000 -shell out too. I was using the +00:03:02.319 --> 00:03:06.165 +There's a lot of different options that can +shell out too. -00:03:08.000 --> 00:03:10.319 -the vorbis tools to tag the particular +00:03:06.165 --> 00:03:12.239 +I was using the vorbis tools to tag the +particular files I was working with. -00:03:10.319 --> 00:03:12.239 -files I was working with. - -00:03:12.239 --> 00:03:15.120 +00:03:12.239 --> 00:03:15.840 You can also use tiny tag, and there's - -00:03:15.120 --> 00:03:15.840 some other... -00:03:15.840 --> 00:03:17.840 -That might be the python library. I can't +00:03:15.840 --> 00:03:17.498 +That might be the python library. -00:03:17.840 --> 00:03:19.120 -remember. There's two other libraries +00:03:17.498 --> 00:03:20.971 +I can't remember. There's two other +libraries that I can shell out to -00:03:19.120 --> 00:03:21.120 -that I can shell out to for - -00:03:21.120 --> 00:03:24.400 -doing metadata. +00:03:20.971 --> 00:03:24.400 +for doing metadata. 00:03:24.400 --> 00:03:26.400 My current workflow for tagging music is @@ -243,29 +204,27 @@ My current workflow for tagging music is 00:03:26.400 --> 00:03:29.040 to first apply replay gain in fubar 2000, -00:03:29.040 --> 00:03:32.159 -fix egregious mistakes, use beats to - -00:03:32.159 --> 00:03:34.560 -apply metadata from music brains, +00:03:29.040 --> 00:03:31.119 +fix egregious mistakes, -00:03:34.560 --> 00:03:36.640 -or discogs, go over remaining albums with +00:03:31.119 --> 00:03:35.118 +use beats to apply metadata from music +brains or discogs, -00:03:36.640 --> 00:03:38.400 -fubar 2000 again. +00:03:35.118 --> 00:03:38.400 +go over remaining albums with fubar 2000 +again. -00:03:38.400 --> 00:03:40.080 -Is there a chance textual tagging could +00:03:38.400 --> 00:03:43.280 +Is there a chance textual tagging +could allow doing it all in one program? -00:03:40.080 --> 00:03:43.280 -allow doing it all in one program? - -00:03:43.280 --> 00:03:45.120 +00:03:43.280 --> 00:03:46.400 Have I experimented with mass tag +update queries? -00:03:45.120 --> 00:03:47.280 -update queries? I have not. +00:03:46.400 --> 00:03:47.280 +I have not. 00:03:47.280 --> 00:03:49.120 Again, I was just doing this workflow, @@ -276,11 +235,11 @@ taking raw files with no tags and doing that. 00:03:54.799 --> 00:03:58.159 I believe because it calls out to -00:03:58.159 --> 00:04:01.519 -the programs in the back end, I'm sure +00:03:58.159 --> 00:04:00.811 +the programs in the back end, -00:04:01.519 --> 00:04:03.040 -you could work that out. +00:04:00.811 --> 00:04:03.040 +I'm sure you could work that out. 00:04:03.040 --> 00:04:06.159 I think EMMS would benefit from @@ -294,11 +253,11 @@ we work with text, and being able 00:04:11.280 --> 00:04:14.000 to use Emacs as a front end for those -00:04:14.000 --> 00:04:16.799 -updates would be really fantastic. So +00:04:14.000 --> 00:04:16.647 +updates would be really fantastic. -00:04:16.799 --> 00:04:18.560 -really, it's just a matter of +00:04:16.647 --> 00:04:18.560 +So really, it's just a matter of 00:04:18.560 --> 00:04:22.720 writing the interface to the external tool. @@ -306,59 +265,54 @@ writing the interface to the external tool. 00:04:22.720 --> 00:04:24.560 Is there a link to some info expanding -00:04:24.560 --> 00:04:26.840 +00:04:24.560 --> 00:04:28.479 philosophy of how to compensate - -00:04:26.840 --> 00:04:28.479 musicians? 00:04:28.479 --> 00:04:31.199 No, I don't really have a lot of -00:04:31.199 --> 00:04:32.720 -philosophy around that. I guess the first +00:04:31.199 --> 00:04:32.052 +philosophy around that. -00:04:32.720 --> 00:04:33.919 -thing I could say would be +00:04:32.052 --> 00:04:33.919 +I guess the first thing +I could say would be -00:04:33.919 --> 00:04:36.800 -something like a universal income. I feel +00:04:33.919 --> 00:04:36.378 +something like a universal income. -00:04:36.800 --> 00:04:38.960 -like that would solve a lot of problems, +00:04:36.378 --> 00:04:38.960 +I feel like that would solve +a lot of problems, -00:04:38.960 --> 00:04:42.000 -if musicians could just be musicians and +00:04:38.960 --> 00:04:41.772 +if musicians could just be musicians -00:04:42.000 --> 00:04:45.199 -not have to worry about their pay. I will +00:04:41.772 --> 00:04:44.742 +and not have to worry about their pay. -00:04:45.199 --> 00:04:46.240 -think about it more. +00:04:44.742 --> 00:04:46.240 +I will think about it more. -00:04:46.240 --> 00:04:48.720 -This is one of my first +00:04:46.240 --> 00:04:52.015 +This is one of my first forays into +getting public with some of these ideas, -00:04:48.720 --> 00:04:50.160 -forays into getting +00:04:52.015 --> 00:04:53.360 +so I will try to do more -00:04:50.160 --> 00:04:52.240 -public with some of these ideas, so I +00:04:53.360 --> 00:04:55.187 +and let the community know. -00:04:52.240 --> 00:04:53.360 -will try to do more - -00:04:53.360 --> 00:04:55.840 -and let the community know. What Emacs - -00:04:55.840 --> 00:04:57.199 -theme am I using? +00:04:55.187 --> 00:04:57.199 +What Emacs theme am I using? 00:04:57.199 --> 00:05:02.240 Can't remember. It's one of the Kaolin themes. 00:05:02.240 --> 00:05:05.680 -I think it was Aurora or +I think it was Aurora 00:05:05.680 --> 00:05:09.120 or Bubble Gum, maybe, but the @@ -369,35 +323,26 @@ Kaolin themes are nice. I recommend them. 00:05:12.880 --> 00:05:16.000 Not using Doom Emacs, Doom mode line though. -00:05:16.000 --> 00:05:18.880 -It's very pretty. SVG support built into +00:05:16.000 --> 00:05:17.296 +It's very pretty. -00:05:18.880 --> 00:05:20.080 -Emacs? +00:05:17.296 --> 00:05:20.080 +SVG support built into Emacs? -00:05:20.080 --> 00:05:23.600 -I'm using Emacs 27.1, and yes, SVG support +00:05:20.080 --> 00:05:25.520 +I'm using Emacs 27.1, and yes, SVG +support is built in. -00:05:23.600 --> 00:05:25.520 -is built in. - -00:05:25.520 --> 00:05:28.800 +00:05:25.520 --> 00:05:30.639 I may have had to compile it with some - -00:05:28.800 --> 00:05:30.639 Cairo support. 00:05:30.639 --> 00:05:33.840 I don't remember for sure. -00:05:33.840 --> 00:05:36.720 -But yes, you can even take screenshots of - -00:05:36.720 --> 00:05:38.080 -your Emacs - -00:05:38.080 --> 00:05:41.199 -from within Emacs in SVG. +00:05:33.840 --> 00:05:41.199 +But yes, you can even take screenshots +of your Emacs from within Emacs, in SVG. 00:05:41.199 --> 00:05:44.320 It's pretty great. @@ -429,62 +374,48 @@ I'll start looking through IRC. 00:06:05.440 --> 00:06:09.680 (Amin: And keep an eye on the pad too.) -00:06:09.680 --> 00:06:13.440 -Thank you all for listening and for - -00:06:13.440 --> 00:06:19.440 -enjoying the talk. I'm glad it turned out well. - -00:06:19.440 --> 00:06:22.800 -Awesome. Yeah, it's been fun +00:06:09.680 --> 00:06:12.688 +Thank you all for listening -00:06:22.800 --> 00:06:36.000 -so far. +00:06:12.688 --> 00:06:19.440 +and for enjoying the talk. I'm glad it +turned out well. -00:06:36.000 --> 00:06:39.199 -How did I manage? I can post a +00:06:19.440 --> 00:06:36.000 +Awesome. Yeah, it's been fun so far. -00:06:39.199 --> 00:06:41.120 -snippet of that, or actually I can share +00:06:36.000 --> 00:06:40.015 +How did I manage? I can post +a snippet of that, -00:06:41.120 --> 00:06:46.319 -my screen, can't I... +00:06:40.015 --> 00:06:46.319 +or actually I can share my screen, +can't I... 00:06:46.319 --> 00:06:49.599 Okay. I actually have it up right here. -00:06:49.599 --> 00:06:51.840 +00:06:49.599 --> 00:06:53.440 So I think I got this from alphapapa, to - -00:06:51.840 --> 00:06:53.440 be honest. 00:06:53.440 --> 00:07:00.960 I define screenshot-svg. -00:07:00.960 --> 00:07:03.680 +00:07:00.960 --> 00:07:04.960 It's an interactive command. Oh yeah, - -00:07:03.680 --> 00:07:04.960 there's alphapapa. 00:07:04.960 --> 00:07:08.560 Okay, there we go. -00:07:08.560 --> 00:07:10.639 +00:07:08.560 --> 00:07:13.249 I would like to change this so that I +can get it into the copy-paste buffer -00:07:10.639 --> 00:07:11.599 -can get it into - -00:07:11.599 --> 00:07:14.000 -the copy-paste buffer so I don't - -00:07:14.000 --> 00:07:17.039 -have to copy the file in, but I haven't really - -00:07:17.039 --> 00:07:20.560 -hacked on it yet. +00:07:13.249 --> 00:07:20.560 +so I don't have to copy the file in, but +I haven't really hacked on it yet. 00:07:20.560 --> 00:07:24.400 Okay, org heading colors. @@ -510,11 +441,11 @@ So the presentation is just a 00:07:45.120 --> 00:07:48.960 normal org file, right, so I have my headers, -00:07:48.960 --> 00:07:50.639 -and the author--you can even stick your +00:07:48.960 --> 00:07:50.466 +and the author--you can even stick -00:07:50.639 --> 00:07:52.560 -email and other headers in there. +00:07:50.466 --> 00:07:52.560 +your email and other headers in there. 00:07:52.560 --> 00:07:57.599 But there's a package called org-tree-slide. @@ -522,14 +453,15 @@ But there's a package called org-tree-slide. 00:07:57.599 --> 00:08:01.440 Whoops, why is it not... -00:08:01.440 --> 00:08:03.919 -I must have not required it. Good +00:08:01.440 --> 00:08:03.618 +I must have not required it. -00:08:03.919 --> 00:08:05.440 -question. (Amin: Grant, +00:08:03.618 --> 00:08:04.594 +Good question. -00:08:05.440 --> 00:08:09.599 -can you try sharing your screen maybe?) +00:08:04.594 --> 00:08:09.599 +(Amin: Grant, can you try sharing your +screen maybe?) 00:08:09.599 --> 00:08:13.199 Oh, is it not shared? I'm sorry. @@ -543,14 +475,9 @@ There we go, should be coming up. 00:08:22.000 --> 00:08:26.720 (Amin: It's coming up. Yep, we see it.) -00:08:26.720 --> 00:08:33.919 -Awesome. - -00:08:33.919 --> 00:08:37.599 -All right. Okay. I don't know why this - -00:08:37.599 --> 00:08:38.800 -isn't working. +00:08:26.720 --> 00:08:38.800 +Awesome. All right. Okay. I don't know +why this isn't working. 00:08:38.800 --> 00:08:56.080 It was working. @@ -567,47 +494,38 @@ So, org-tree-slide. 00:09:09.760 --> 00:09:12.800 I don't know why it's not launching. -00:09:12.800 --> 00:09:14.480 +00:09:12.800 --> 00:09:16.000 I thought that I had required it, but I - -00:09:14.480 --> 00:09:16.000 must not have. -00:09:16.000 --> 00:09:26.959 -Maybe I'll try. +00:09:16.000 --> 00:09:30.959 +Maybe I'll try. Okay. -00:09:26.959 --> 00:09:30.959 -Okay. - -00:09:30.959 --> 00:09:33.040 +00:09:30.959 --> 00:09:34.560 So there we go. So org-tree-slide is a - -00:09:33.040 --> 00:09:34.560 way that basically uses 00:09:34.560 --> 00:09:38.880 narrowing and some kind of font tricks to... -00:09:38.880 --> 00:09:41.680 -it changes your titles or your - -00:09:41.680 --> 00:09:42.640 -metadata into +00:09:38.880 --> 00:09:42.640 +it changes your titles +or your metadata into 00:09:42.640 --> 00:09:44.560 this banner for the title here, 00:09:44.560 --> 00:09:46.560 -and it automatically sets the faces for you. +and it automatically sets the +faces for you. -00:09:46.560 --> 00:09:51.360 -You can customize that, of course. And then, as you +00:09:46.560 --> 00:09:53.938 +You can customize that, of course. And +then, as you go through the Org file, -00:09:51.360 --> 00:09:55.279 -go through the Org file, you get these - -00:09:55.279 --> 00:09:59.600 -kind of nice animations and-- +00:09:53.938 --> 00:09:59.600 +you get these kind of nice animations +and-- 00:09:59.600 --> 00:10:04.160 what's it called--breadcrumbs up at the top. @@ -615,29 +533,20 @@ what's it called--breadcrumbs up at the top. 00:10:04.160 --> 00:10:06.399 So org-tree-slide. I highly recommend it. -00:10:06.399 --> 00:10:07.920 +00:10:06.399 --> 00:10:10.024 It's really nice because you can give +your presentation and practice it, -00:10:07.920 --> 00:10:09.600 -your presentation - -00:10:09.600 --> 00:10:10.880 -and practice it, and while you're - -00:10:10.880 --> 00:10:12.560 -practicing it, you can edit things as well, - -00:10:12.560 --> 00:10:13.760 -because it's still just +00:10:10.024 --> 00:10:12.560 +and while you're practicing it, you can +edit things as well, -00:10:13.760 --> 00:10:16.160 -an Org document using narrowing, you know. +00:10:12.560 --> 00:10:16.160 +because it's still just an Org document +using narrowing, you know. -00:10:16.160 --> 00:10:16.880 -It doesn't - -00:10:16.880 --> 00:10:20.079 -actually change anything. +00:10:16.160 --> 00:10:20.079 +It doesn't actually change anything. 00:10:20.079 --> 00:10:24.079 Definitely recommend org-tree-slide mode. @@ -654,34 +563,27 @@ Let's see. 00:10:39.519 --> 00:10:41.279 Okay, so I don't know if you can see this now, -00:10:41.279 --> 00:10:43.839 +00:10:41.279 --> 00:10:49.360 but I'm actually viewing the SVG - -00:10:43.839 --> 00:10:49.360 screenshot that I took with Emacs. -00:10:49.360 --> 00:10:51.920 +00:10:49.360 --> 00:10:52.720 See here's the source of it. So Emacs - -00:10:51.920 --> 00:10:52.720 made that. 00:10:52.720 --> 00:10:58.160 And here's the image. -00:10:58.160 --> 00:10:59.600 +00:10:58.160 --> 00:11:01.570 It's cool because you can even do it +again and again, -00:10:59.600 --> 00:11:01.760 -again and again, and - -00:11:01.760 --> 00:11:05.360 -open more screenshots of screenshots. +00:11:01.570 --> 00:11:05.360 +and open more screenshots of +screenshots. -00:11:05.360 --> 00:11:11.200 +00:11:05.360 --> 00:11:14.880 Yeah, definitely Emacsception. - -00:11:11.200 --> 00:11:14.880 Fun stuff. 00:11:14.880 --> 00:11:18.079 @@ -693,29 +595,28 @@ Heading colors? Oh, yeah. I talked about the 00:11:20.160 --> 00:11:24.800 themes. This is another Kaolin theme. -00:11:24.800 --> 00:11:30.560 +00:11:24.800 --> 00:11:34.959 I think the one in the talk was - -00:11:30.560 --> 00:11:34.959 maybe this one, Aurora. 00:11:34.959 --> 00:11:36.560 Oh, here, there's something funny when -00:11:36.560 --> 00:11:38.079 -you start org-tree-slide with a +00:11:36.560 --> 00:11:37.785 +you start org-tree-slide -00:11:38.079 --> 00:11:38.880 -different theme. +00:11:37.785 --> 00:11:38.880 +with a different theme. -00:11:38.880 --> 00:11:42.160 -This top header bar gets the faces from +00:11:38.880 --> 00:11:41.823 +This top header bar gets the faces -00:11:42.160 --> 00:11:44.000 -that previous theme. I have not +00:11:41.823 --> 00:11:43.395 +from that previous theme. -00:11:44.000 --> 00:11:47.760 -figured out how to fix that yet. +00:11:43.395 --> 00:11:47.760 +I have not figured out how to +fix that yet. 00:11:47.760 --> 00:11:49.200 Did I have to compile to get the @@ -729,11 +630,12 @@ Yes, if I'm remembering correctly. 00:11:54.480 --> 00:11:58.399 I got Emacs 27. I'm not on a Mac. -00:11:58.399 --> 00:12:02.079 -I saw alphapapa's comment on reddit, and then +00:11:58.399 --> 00:12:01.424 +I saw alphapapa's comment on reddit, -00:12:02.079 --> 00:12:08.839 -I recompiled it with Cairo support. +00:12:01.424 --> 00:12:08.839 +and then I recompiled it with Cairo +support. 00:12:08.839 --> 00:12:18.000 Yes. @@ -744,70 +646,56 @@ Okay, lots of good conversation on here. 00:12:21.920 --> 00:12:25.839 Yep, I have like one or two more minutes. -00:12:25.839 --> 00:12:31.680 -Okay - -00:12:31.680 --> 00:12:34.240 -I guess while I'm here, I might as - -00:12:34.240 --> 00:12:35.519 -well say thank you to +00:12:25.839 --> 00:12:34.240 +Okay. I guess while I'm here, I might as -00:12:35.519 --> 00:12:38.959 -the organizers. I really appreciate +00:12:34.240 --> 00:12:36.993 +well say thank you to the organizers. -00:12:38.959 --> 00:12:40.320 -everybody's work on this. +00:12:36.993 --> 00:12:40.320 +I really appreciate everybody's +work on this. 00:12:40.320 --> 00:12:42.720 It's fun to be a part of this community. -00:12:42.720 --> 00:12:45.279 +00:12:42.720 --> 00:12:45.929 I'm enjoying the other talks I've seen +so far today, -00:12:45.279 --> 00:12:47.279 -so far today, and I'm looking forward to - -00:12:47.279 --> 00:12:48.560 +00:12:45.929 --> 00:12:48.560 +and I'm looking forward to to the rest. -00:12:48.560 --> 00:12:50.480 -It's really interesting, just from - -00:12:50.480 --> 00:12:52.720 -being on Emacs in IRC +00:12:48.560 --> 00:12:53.570 +It's really interesting, just from being +on Emacs in IRC for a few months, -00:12:52.720 --> 00:12:54.720 -for a few months, I've already connected +00:12:53.570 --> 00:12:54.720 +I've already connected 00:12:54.720 --> 00:12:56.959 with a lot of interesting people -00:12:56.959 --> 00:13:00.720 +00:12:56.959 --> 00:13:04.079 and have a lot of cool connections - -00:13:00.720 --> 00:13:04.079 already. -00:13:04.079 --> 00:13:05.519 +00:13:04.079 --> 00:13:07.519 (Amin: Thank you for being a part of the - -00:13:05.519 --> 00:13:07.519 community, Grant.) -00:13:07.519 --> 00:13:09.680 -That's good to be here. I have another +00:13:07.519 --> 00:13:08.883 +That's good to be here. -00:13:09.680 --> 00:13:16.560 -talk tomorrow as well. +00:13:08.883 --> 00:13:16.560 +I have another talk tomorrow as well. 00:13:16.560 --> 00:13:18.399 Oh, thanks for everyone in the Etherpad -00:13:18.399 --> 00:13:20.160 +00:13:18.399 --> 00:13:21.680 for putting more comments on these - -00:13:20.160 --> 00:13:21.680 questions here 00:13:21.680 --> 00:13:29.360 @@ -822,14 +710,10 @@ that we have for the Q&A. 00:13:33.040 --> 00:13:36.720 Okay. Thank you again so much, Grant, -00:13:36.720 --> 00:13:38.480 +00:13:36.720 --> 00:13:39.920 for your awesome talk and for popping in - -00:13:38.480 --> 00:13:39.920 for questions.) -00:13:39.920 --> 00:13:42.000 +00:13:39.920 --> 00:13:46.800 Yeah, thanks again for hosting. See you - -00:13:42.000 --> 00:13:46.800 later. Cheers! diff --git a/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt index b1659d7e..588cf43a 100644 --- a/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt +++ b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt @@ -1,67 +1,56 @@ WEBVTT -00:00:00.399 --> 00:00:03.280 -My name is Corwin Brust and I +00:00:00.399 --> 00:00:02.683 +My name is Corwin Brust -00:00:03.280 --> 00:00:06.240 -will be talking about getting started +00:00:02.683 --> 00:00:08.960 +and I will be talking about getting +started with Emacs today. -00:00:06.240 --> 00:00:08.960 -with Emacs today. - -00:00:08.960 --> 00:00:11.200 +00:00:08.960 --> 00:00:11.448 I have been an Emacs user for a long +time. -00:00:11.200 --> 00:00:13.040 -time. First of all, thanks and a huge - -00:00:13.040 --> 00:00:15.360 -welcome to the conference - -00:00:15.360 --> 00:00:18.400 -from me and +00:00:11.448 --> 00:00:15.360 +First of all, thanks and a huge welcome +to the conference -00:00:18.400 --> 00:00:22.400 -and on behalf +00:00:15.360 --> 00:00:22.400 +from me and and on behalf -00:00:22.400 --> 00:00:24.720 -and back to the other people that +00:00:22.400 --> 00:00:24.368 +and back to the other people -00:00:24.720 --> 00:00:26.080 -have been helping to organize. +00:00:24.368 --> 00:00:26.080 +that have been helping to organize. 00:00:26.080 --> 00:00:30.480 It's been amazing just to be involved -00:00:30.480 --> 00:00:32.480 +00:00:30.480 --> 00:00:36.399 with that and just, kind of, see - -00:00:32.480 --> 00:00:36.399 backstage. -00:00:36.399 --> 00:00:39.680 +00:00:36.399 --> 00:00:42.281 So I've used a lot of different editors +in my time. -00:00:39.680 --> 00:00:42.960 -in my time. That's - -00:00:42.960 --> 00:00:45.440 -about 25 years as a professional - -00:00:45.440 --> 00:00:52.399 +00:00:42.281 --> 00:00:52.399 +That's about 25 years as a professional software engineer. -00:00:52.399 --> 00:00:53.920 +00:00:52.399 --> 00:00:54.247 And most of that time I've been using +Emacs. -00:00:53.920 --> 00:00:56.160 -Emacs. I'll talk a little bit in a minute +00:00:54.247 --> 00:00:56.160 +I'll talk a little bit in a minute 00:00:56.160 --> 00:01:00.960 (if I can ever find my slides) 00:01:00.960 --> 00:01:04.479 -about how I got into Emacs +about how I got into Emacs, 00:01:04.479 --> 00:01:07.200 but I think if you've used Emacs and a @@ -69,56 +58,45 @@ but I think if you've used Emacs and a 00:01:07.200 --> 00:01:10.240 lot of other editors for a long time, -00:01:10.240 --> 00:01:15.200 -something that you notice right away is that +00:01:10.240 --> 00:01:14.410 +something that you notice right away -00:01:15.200 --> 00:01:17.520 -you get good with it in a way that stays +00:01:14.410 --> 00:01:18.560 +is that you get good with it in a way +that stays meaningful. -00:01:17.520 --> 00:01:18.560 -meaningful. - -00:01:18.560 --> 00:01:20.799 +00:01:18.560 --> 00:01:24.199 You learn new things. Those things +stick with you. -00:01:20.799 --> 00:01:27.600 -stick with you. You learn how to - -00:01:27.600 --> 00:01:30.720 -make it do new tricks and then - -00:01:30.720 --> 00:01:33.759 -keep doing those tricks. +00:01:24.199 --> 00:01:33.759 +You learn how to make it do new tricks +and then keep doing those tricks. -00:01:33.759 --> 00:01:36.799 +00:01:33.759 --> 00:01:39.439 I want to mention that this - -00:01:36.799 --> 00:01:39.439 conference--oops, -00:01:39.439 --> 00:01:41.439 -this talk isn't about - -00:01:41.439 --> 00:01:45.600 -how to adjust your +00:01:39.439 --> 00:01:44.829 +this talk isn't about how to adjust -00:01:45.600 --> 00:01:47.520 -configuration specifically. I don't have +00:01:44.829 --> 00:01:46.802 +your configuration specifically. -00:01:47.520 --> 00:01:50.000 -a bunch of good code samples in here. +00:01:46.802 --> 00:01:50.000 +I don't have a bunch of good code +samples in here. -00:01:50.000 --> 00:01:51.520 +00:01:50.000 --> 00:01:52.451 There are other great talks at the +conference, -00:01:51.520 --> 00:01:54.399 -conference, particularly Andrew's, - -00:01:54.399 --> 00:01:57.600 -that I looked at, that looked +00:01:52.451 --> 00:01:56.411 +particularly Andrew's, that I looked at, -00:01:57.600 --> 00:01:59.920 -like they might be more aimed at that +00:01:56.411 --> 00:01:59.920 +that looked like they might be more +aimed at that 00:01:59.920 --> 00:02:02.240 "hey, I'm just getting started with Emacs, @@ -126,59 +104,53 @@ like they might be more aimed at that 00:02:02.240 --> 00:02:05.280 what are some things to try to make -00:02:05.280 --> 00:02:07.200 -it more comfortable for me starting?" This +00:02:05.280 --> 00:02:07.017 +it more comfortable for me starting?" -00:02:07.200 --> 00:02:08.879 -is about how to think about the problem +00:02:07.017 --> 00:02:09.759 +This is about how to think about the +problem space. -00:02:08.879 --> 00:02:09.759 -space. +00:02:09.759 --> 00:02:13.337 +Hopefully, a good warm up as we start +thinking about -00:02:09.759 --> 00:02:12.959 -Hopefully, a good warm up as we +00:02:13.337 --> 00:02:17.200 +some of the lightning talks a little +later on. -00:02:12.959 --> 00:02:14.080 -start thinking about some of the +00:02:17.200 --> 00:02:19.835 +I'm just gonna quickly make sure -00:02:14.080 --> 00:02:17.200 -lightning talks a little later on. +00:02:19.835 --> 00:02:21.789 +I can see my IRC buffer in case -00:02:17.200 --> 00:02:20.000 -I'm just gonna quickly make sure I - -00:02:20.000 --> 00:02:22.400 -can see my IRC buffer in case I run into - -00:02:22.400 --> 00:02:24.080 -time. I didn't get my stopwatch started - -00:02:24.080 --> 00:02:25.680 -for this one. +00:02:21.789 --> 00:02:25.680 +I run into time. I didn't get my +stopwatch started for this one. 00:02:25.680 --> 00:02:29.680 So all right, let's dive in. -00:02:29.680 --> 00:02:32.879 -We assume that we want to install - -00:02:32.879 --> 00:02:33.840 -packages +00:02:29.680 --> 00:02:33.840 +We assume that we want to +install packages -00:02:33.840 --> 00:02:36.560 -and maybe configure some features. This +00:02:33.840 --> 00:02:36.281 +and maybe configure some features. -00:02:36.560 --> 00:02:38.319 -is particularly from the perspective of +00:02:36.281 --> 00:02:38.319 +This is particularly from the +perspective of 00:02:38.319 --> 00:02:39.120 where we're working -00:02:39.120 --> 00:02:40.800 -with a bunch of people on a team and we +00:02:39.120 --> 00:02:40.541 +with a bunch of people on a team -00:02:40.800 --> 00:02:42.160 -want to get something done. +00:02:40.541 --> 00:02:42.160 +and we want to get something done. 00:02:42.160 --> 00:02:44.800 Some of us probably already have mature @@ -186,104 +158,81 @@ Some of us probably already have mature 00:02:44.800 --> 00:02:46.560 Emacs workflows. -00:02:46.560 --> 00:02:49.280 +00:02:46.560 --> 00:02:53.519 Others are installing it for the first - -00:02:49.280 --> 00:02:53.519 time. -00:02:53.519 --> 00:02:56.879 -So the first question is, you know, - -00:02:56.879 --> 00:02:59.280 -in that context: what's the value - -00:02:59.280 --> 00:03:00.879 -proposition? Why should I mess with my +00:02:53.519 --> 00:02:57.889 +So the first question is, you know, in +that context: -00:03:00.879 --> 00:03:02.840 -machine, my mature Emacs +00:02:57.889 --> 00:02:59.784 +what's the value proposition? -00:03:02.840 --> 00:03:05.599 -configuration, and impose my +00:02:59.784 --> 00:03:01.532 +Why should I mess with my machine, -00:03:05.599 --> 00:03:07.440 -ideas over the way somebody else is +00:03:01.532 --> 00:03:04.219 +my mature Emacs configuration, -00:03:07.440 --> 00:03:10.239 -learning Emacs? Well, +00:03:04.219 --> 00:03:09.815 +and impose my ideas over the way +somebody else is learning Emacs? -00:03:10.239 --> 00:03:12.800 -it can be.. I'm off my slides here a +00:03:09.815 --> 00:03:13.840 +Well, it can be.. I'm off my slides here +a little bit. -00:03:12.800 --> 00:03:13.840 -little bit. +00:03:13.840 --> 00:03:16.959 +It can be a little bit tricky -00:03:13.840 --> 00:03:16.400 -It can be a little bit - -00:03:16.400 --> 00:03:16.959 -tricky - -00:03:16.959 --> 00:03:20.400 +00:03:16.959 --> 00:03:21.440 to learn Emacs. One thing that - -00:03:20.400 --> 00:03:21.440 helps us a lot 00:03:21.440 --> 00:03:24.720 is if people that we're working with -00:03:24.720 --> 00:03:26.239 +00:03:24.720 --> 00:03:27.301 can tell us, kinda, keystroke for +keystroke at times, -00:03:26.239 --> 00:03:28.080 -keystroke at times, what to do and - -00:03:28.080 --> 00:03:30.480 -explain what everything is doing. - -00:03:30.480 --> 00:03:32.400 -Using the same packages can really - -00:03:32.400 --> 00:03:35.840 -help us working together on a project. +00:03:27.301 --> 00:03:30.480 +what to do and explain what everything +is doing. -00:03:35.840 --> 00:03:39.840 -Speaking from my personal +00:03:30.480 --> 00:03:35.840 +Using the same packages can really help +us working together on a project. -00:03:39.840 --> 00:03:40.720 -experience, +00:03:35.840 --> 00:03:40.720 +Speaking from my personal experience, 00:03:40.720 --> 00:03:42.959 it took me decades to get to the point -00:03:42.959 --> 00:03:45.040 -where I was excited to program in Emacs +00:03:42.959 --> 00:03:45.226 +where I was excited to program +in Emacs Lisp. -00:03:45.040 --> 00:03:46.720 -Lisp. I've programmed in a lot of programming - -00:03:46.720 --> 00:03:47.840 +00:03:45.226 --> 00:03:47.840 +I've programmed in a lot of programming languages, -00:03:47.840 --> 00:03:51.200 -but Lisp wasn't on my list. I looked at - -00:03:51.200 --> 00:03:53.680 -my config that I was copy-pasting around +00:03:47.840 --> 00:03:50.252 +but Lisp wasn't on my list. -00:03:53.680 --> 00:03:56.319 -from generation after generation of +00:03:50.252 --> 00:03:53.680 +I looked at my config that I was +copy-pasting around -00:03:56.319 --> 00:03:57.519 -.emacs file or +00:03:53.680 --> 00:03:57.279 +from generation after generation of +.emacs file, -00:03:57.519 --> 00:03:59.519 -recrafting it from hand and from Internet - -00:03:59.519 --> 00:04:00.799 -searches, +00:03:57.279 --> 00:04:00.799 +or recrafting it from hand and from +Internet searches, 00:04:00.799 --> 00:04:03.519 to get the things that I needed when @@ -294,230 +243,170 @@ I would quickly go install Emacs at some 00:04:05.680 --> 00:04:07.680 new job or contract, -00:04:07.680 --> 00:04:10.959 -and - -00:04:10.959 --> 00:04:13.680 -be able to to quickly get through that - -00:04:13.680 --> 00:04:15.280 -workflow that caused me to install the - -00:04:15.280 --> 00:04:17.440 -program. - -00:04:17.440 --> 00:04:20.560 -You know, just +00:04:07.680 --> 00:04:14.016 +and be able to to quickly get through +that workflow -00:04:20.560 --> 00:04:23.440 -little simple one-liners that that +00:04:14.016 --> 00:04:17.440 +that caused me to install the program. -00:04:23.440 --> 00:04:25.199 -got committed to memory over decades +00:04:17.440 --> 00:04:24.049 +You know, just little simple one-liners +that got committed to memory -00:04:25.199 --> 00:04:27.120 -eventually just led me to a sort of "hey what's going on +00:04:24.049 --> 00:04:27.675 +over decades eventually just led me to a +sort of "hey what's going on here." -00:04:27.120 --> 00:04:28.880 -here." And I credit - -00:04:28.880 --> 00:04:31.680 -Jeff Goff, my good friend who died - -00:04:31.680 --> 00:04:33.520 -earlier in 2020, +00:04:27.675 --> 00:04:33.520 +And I credit Jeff Goff, my good friend +who died earlier in 2020, 00:04:33.520 --> 00:04:37.759 for my lifelong love of Emacs. 00:04:37.759 --> 00:04:39.280 -Perhaps EriK and I will talk about that +Perhaps Erik and I will talk about that -00:04:39.280 --> 00:04:40.800 +00:04:39.280 --> 00:04:42.000 a little bit more in another talk we +have scheduled, -00:04:40.800 --> 00:04:41.360 -have - -00:04:41.360 --> 00:04:43.280 -scheduled, but Jeff was a huge +00:04:42.000 --> 00:04:44.400 +but Jeff was a huge influence on us -00:04:43.280 --> 00:04:44.400 -influenceo on us +00:04:44.400 --> 00:04:46.027 +in a number of ways, -00:04:44.400 --> 00:04:47.280 -in a number of ways and a huge +00:04:46.027 --> 00:04:47.732 +and a huge contributor -00:04:47.280 --> 00:04:48.720 -contributor to the Raku programming - -00:04:48.720 --> 00:04:50.720 -language - -00:04:50.720 --> 00:04:54.840 +00:04:47.732 --> 00:04:54.840 +to the Raku programming language, which is very cool. -00:04:54.840 --> 00:04:58.880 -So, understanding how - -00:04:58.880 --> 00:05:01.039 -to make a good decision about splitting +00:04:54.840 --> 00:05:00.153 +So, understanding how to make +a good decision -00:05:01.039 --> 00:05:03.120 -up configuration in a way to share it +00:05:00.153 --> 00:05:03.680 +about splitting up configuration in a +way to share it across -00:05:03.120 --> 00:05:03.680 -across - -00:05:03.680 --> 00:05:05.600 +00:05:03.680 --> 00:05:06.292 people with really different uses of +Emacs... -00:05:05.600 --> 00:05:07.600 -Emacs... That's actually a - -00:05:07.600 --> 00:05:09.360 -complicated topic and I want to +00:05:06.292 --> 00:05:08.546 +That's actually a complicated topic -00:05:09.360 --> 00:05:11.039 -sort of back off and stare at it for a +00:05:08.546 --> 00:05:12.639 +and I want to sort of back off and stare +at it for a second. -00:05:11.039 --> 00:05:12.639 -second. - -00:05:12.639 --> 00:05:15.840 +00:05:12.639 --> 00:05:18.720 I think Emacs is about people, so that - -00:05:15.840 --> 00:05:18.720 means it's about community. -00:05:18.720 --> 00:05:22.000 +00:05:18.720 --> 00:05:24.960 And community means we're going to - -00:05:22.000 --> 00:05:24.960 invite disagreement. -00:05:24.960 --> 00:05:29.120 -In fact, that disagreement - -00:05:29.120 --> 00:05:32.160 -isn't necessarily a road-block to our - -00:05:32.160 --> 00:05:33.280 -project. In fact, +00:05:24.960 --> 00:05:32.687 +In fact, that disagreement isn't +necessarily a road-block to our project. -00:05:33.280 --> 00:05:35.680 -some of the work that a community +00:05:32.687 --> 00:05:37.759 +In fact, some of the work that a +community project can invite us to do -00:05:35.680 --> 00:05:37.759 -project can invite us to do +00:05:37.759 --> 00:05:39.505 +is to get closer to each other -00:05:37.759 --> 00:05:39.680 -is to get closer to each other by +00:05:39.505 --> 00:05:40.840 +by inviting those disagreements, -00:05:39.680 --> 00:05:40.960 -inviting those disagreements, by +00:05:40.840 --> 00:05:42.080 +by learning from them--learning from -00:05:40.960 --> 00:05:42.080 -learning from them--learning from +00:05:42.080 --> 00:05:46.880 +different people's styles and from how +they argue, -00:05:42.080 --> 00:05:43.280 -different people's - -00:05:43.280 --> 00:05:46.880 -styles and from how they argue, - -00:05:46.880 --> 00:05:49.120 +00:05:46.880 --> 00:05:50.058 and thinking about why they have that +perspective -00:05:49.120 --> 00:05:50.400 -perspective and - -00:05:50.400 --> 00:05:53.680 -what technical benefits that +00:05:50.058 --> 00:05:53.227 +and what technical benefits -00:05:53.680 --> 00:05:55.360 -perhaps radical point of view might +00:05:53.227 --> 00:05:55.800 +that perhaps radical point of view might +carry away. -00:05:55.360 --> 00:05:56.720 -carry away. Some people are really +00:05:55.800 --> 00:05:58.266 +Some people are really aggressive +arguers, -00:05:56.720 --> 00:05:59.039 -aggressive arguers, and others +00:05:58.266 --> 00:06:01.919 +and others are very passive and really -00:05:59.039 --> 00:06:01.919 -are very passive and really +00:06:01.919 --> 00:06:05.824 +couch their ideas in distancing terms, +to say, -00:06:01.919 --> 00:06:03.120 -couch their ideas +00:06:05.824 --> 00:06:07.906 +"well probably, this is a good idea" -00:06:03.120 --> 00:06:06.240 -in distancing terms, to say, "well - -00:06:06.240 --> 00:06:08.080 -probably, this is a good idea" or - -00:06:08.080 --> 00:06:12.479 -"please double check me." +00:06:07.906 --> 00:06:12.479 +or "please double check me." 00:06:12.479 --> 00:06:15.520 Those don't always necessarily indicate -00:06:15.520 --> 00:06:17.120 -how certain a person is, because we're - -00:06:17.120 --> 00:06:18.479 -different. We have different ways of +00:06:15.520 --> 00:06:17.497 +how certain a person is, +because we're different. -00:06:18.479 --> 00:06:19.520 -communicating +00:06:17.497 --> 00:06:19.520 +We have different ways of communicating 00:06:19.520 --> 00:06:23.380 ideas like certainty or excitement. -00:06:23.380 --> 00:06:24.560 -[Music] +00:06:24.560 --> 00:06:26.235 +When we think about a bunch of -00:06:24.560 --> 00:06:26.560 -When we think about a bunch of really +00:06:26.235 --> 00:06:30.000 +really diverse programmers +approaching Emacs, -00:06:26.560 --> 00:06:30.000 -diverse programmers approaching Emacs, - -00:06:30.000 --> 00:06:33.280 -probably one of our our first really big - -00:06:33.280 --> 00:06:36.479 +00:06:30.000 --> 00:06:36.479 +probably one of our first really big challenges is just -00:06:36.479 --> 00:06:39.759 -to pick what we're going to go - -00:06:39.759 --> 00:06:41.120 -after. There are a lot of - -00:06:41.120 --> 00:06:44.000 -existing kit +00:06:36.479 --> 00:06:40.085 +to pick what we're going +to go after. -00:06:44.000 --> 00:06:49.599 -installs and things like this. +00:06:40.085 --> 00:06:49.599 +There are a lot of existing kit installs +and things like this. -00:06:49.599 --> 00:06:52.880 +00:06:49.599 --> 00:06:54.400 My argument is that you could actually - -00:06:52.880 --> 00:06:54.400 get pretty far -00:06:54.400 --> 00:06:56.560 -just trading files around. Maybe the - -00:06:56.560 --> 00:07:02.240 -more valuable +00:06:54.400 --> 00:06:56.020 +just trading files around. -00:07:02.240 --> 00:07:04.720 -conversation to have is making the +00:06:56.020 --> 00:07:03.698 +Maybe the more valuable conversation +to have -00:07:04.720 --> 00:07:06.080 -hard decisions about, well, +00:07:03.698 --> 00:07:06.080 +is making the hard decisions +about, well, 00:07:06.080 --> 00:07:08.000 "should we have vertical completion," @@ -528,77 +417,56 @@ should that be the out of the box, 00:07:10.080 --> 00:07:11.759 and the people that want -00:07:11.759 --> 00:07:15.680 +00:07:11.759 --> 00:07:17.440 the traditional splayed out over a +single line completion, -00:07:15.680 --> 00:07:17.440 -single line completion - -00:07:17.440 --> 00:07:19.840 -for example in the mode line, those - -00:07:19.840 --> 00:07:20.800 -people are going to - -00:07:20.800 --> 00:07:24.160 -add a line of config - -00:07:24.160 --> 00:07:29.039 -to their own setup? - -00:07:29.039 --> 00:07:32.479 -The way to get there? I mean, how do we - -00:07:32.479 --> 00:07:34.080 -find out what works? We don't want to - -00:07:34.080 --> 00:07:35.520 -slow down the people that +00:07:17.440 --> 00:07:19.428 +for example in the mode line, -00:07:35.520 --> 00:07:38.800 -are super productive with Emacs by +00:07:19.428 --> 00:07:29.039 +those people are going to add a line of +config to their own setup? -00:07:38.800 --> 00:07:40.479 -asking them to completely break their +00:07:29.039 --> 00:07:30.979 +The way to get there? -00:07:40.479 --> 00:07:42.080 -workflows and make it easier for new +00:07:30.979 --> 00:07:33.344 +I mean, how do we find out what works? -00:07:42.080 --> 00:07:42.560 -folks. +00:07:33.344 --> 00:07:38.587 +We don't want to slow down the people +that are super productive with Emacs -00:07:42.560 --> 00:07:46.240 -At the same time, we do +00:07:38.587 --> 00:07:40.879 +by asking them to completely +break their workflows -00:07:46.240 --> 00:07:48.960 -want to make sure those new people are +00:07:40.879 --> 00:07:42.560 +and make it easier for new folks. -00:07:48.960 --> 00:07:51.280 -excited by Emacs and not turned off by +00:07:42.560 --> 00:07:48.673 +At the same time, we do want to make +sure those new people -00:07:51.280 --> 00:07:52.720 -having to learn +00:07:48.673 --> 00:07:52.720 +are excited by Emacs and not turned off +by having to learn -00:07:52.720 --> 00:07:56.319 -the entire jungle of Emacs +00:07:52.720 --> 00:08:00.363 +the entire jungle of Emacs history in +the form of its unique -00:07:56.319 --> 00:07:59.840 -history in the form of its +00:08:00.363 --> 00:08:07.610 +technical stylings for things like +frames, buffers, -00:07:59.840 --> 00:08:03.120 -unique technical stylings for +00:08:07.610 --> 00:08:11.668 +and other unique Emacs viewpoints -00:08:03.120 --> 00:08:06.160 -things like frames, - -00:08:06.160 --> 00:08:09.840 -buffers, and other unique - -00:08:09.840 --> 00:08:12.960 -Emacs viewpoints on important - -00:08:12.960 --> 00:08:16.240 -interface concepts, especially. +00:08:11.668 --> 00:08:16.240 +on important interface concepts, +especially. 00:08:16.240 --> 00:08:19.520 The encouragement here is to keep @@ -609,29 +477,25 @@ the initialization for a project team 00:08:21.680 --> 00:08:23.280 together as a crucible. -00:08:23.280 --> 00:08:25.280 -Rather than necessarily following our - -00:08:25.280 --> 00:08:31.440 -defaults of +00:08:23.280 --> 00:08:25.117 +Rather than necessarily following -00:08:31.440 --> 00:08:33.279 -finding the simplest configuration +00:08:25.117 --> 00:08:33.279 +our defaults of finding the simplest +configurations -00:08:33.279 --> 00:08:35.120 +00:08:33.279 --> 00:08:37.440 that generally work and letting people - -00:08:35.120 --> 00:08:37.440 customize it, 00:08:37.440 --> 00:08:40.479 what if we tried to look -00:08:40.479 --> 00:08:42.560 -for fairly specific configurations that +00:08:40.479 --> 00:08:42.346 +for fairly specific configurations -00:08:42.560 --> 00:08:44.159 -we'll expect essentially all of our +00:08:42.346 --> 00:08:44.159 +that we'll expect essentially all of our 00:08:44.159 --> 00:08:46.320 developers to be using, @@ -642,65 +506,52 @@ at least when they submit bug reports. 00:08:52.839 --> 00:08:55.920 In particular, with this, -00:08:55.920 --> 00:08:58.800 -I think that degree of - -00:08:58.800 --> 00:08:59.839 -experimentation +00:08:55.920 --> 00:08:59.839 +I think that degree of experimentation -00:08:59.839 --> 00:09:01.680 +00:08:59.839 --> 00:09:02.584 can drive back into the Emacs +development process. -00:09:01.680 --> 00:09:03.360 -development process. In the development - -00:09:03.360 --> 00:09:04.800 -mailing list... +00:09:02.584 --> 00:09:04.800 +In the development mailing list... -00:09:04.800 --> 00:09:07.760 -I'm hoping I'll get a timing cue +00:09:04.800 --> 00:09:15.120 +I'm hoping I'll get a timing cue here. -00:09:07.760 --> 00:09:15.120 -here. - -00:09:15.120 --> 00:09:17.760 +00:09:15.120 --> 00:09:18.835 In the context of Emacs development as a +greater entity, -00:09:17.760 --> 00:09:18.320 -greater - -00:09:18.320 --> 00:09:20.959 -entity, we see some of these struggles. +00:09:18.835 --> 00:09:20.959 +we see some of these struggles. 00:09:20.959 --> 00:09:22.399 Should we change this default? -00:09:22.399 --> 00:09:24.000 -Sometimes we can have the - -00:09:24.000 --> 00:09:26.720 -sense that defaults in Emacs will never +00:09:22.399 --> 00:09:27.146 +Sometimes we can have the sense that +defaults in Emacs will never change. -00:09:26.720 --> 00:09:29.279 -change. The conversation is too difficult. +00:09:27.146 --> 00:09:29.279 +The conversation is too difficult. -00:09:29.279 --> 00:09:30.959 +00:09:29.279 --> 00:09:32.560 I think one thing that can help us get - -00:09:30.959 --> 00:09:32.560 there is evidence 00:09:32.560 --> 00:09:36.160 that says, "hey my 30- to 40-person project -00:09:36.160 --> 00:09:38.880 -is using this set of bindings and +00:09:36.160 --> 00:09:38.560 +is using this set of bindings, -00:09:38.880 --> 00:09:40.399 -here's what we learned about +00:09:38.560 --> 00:09:40.111 +and here's what we learned -00:09:40.399 --> 00:09:42.240 -brand new Emacs users trying to come in +00:09:40.111 --> 00:09:42.240 +about brand new Emacs users +trying to come in 00:09:42.240 --> 00:09:46.800 and get work done with that." @@ -709,22 +560,20 @@ and get work done with that." (Amin: Yeah you still have 00:09:49.360 --> 00:09:50.720 -a couple more minutes) - -00:09:50.720 --> 00:09:52.640 -Oh, beautiful. Okay, great. I will try to +a couple more minutes.) -00:09:52.640 --> 00:09:54.160 -get through my last few slides that i +00:09:50.720 --> 00:09:51.984 +Oh, beautiful. Okay, great. -00:09:54.160 --> 00:09:54.720 -cut +00:09:51.984 --> 00:09:54.720 +I will try to get through my last few +slides that I cut 00:09:54.720 --> 00:09:56.320 -in my last walkthrough, but I think i'm +in my last walkthrough, but I think I'm 00:09:56.320 --> 00:09:58.320 -going quicker today thank you. +going quicker today, thank you. 00:09:58.320 --> 00:10:02.000 Thank you. @@ -732,41 +581,30 @@ Thank you. 00:10:02.000 --> 00:10:05.120 So let's just recap real quick: -00:10:05.120 --> 00:10:06.800 -in theory, Emacs works - -00:10:06.800 --> 00:10:10.720 -out of the box. That means we're +00:10:05.120 --> 00:10:08.760 +in theory, Emacs works out of the box. -00:10:10.720 --> 00:10:14.079 -free to experiment. We can +00:10:08.760 --> 00:10:12.853 +That means we're free to experiment. -00:10:14.079 --> 00:10:17.120 -throw it all away and start over. +00:10:12.853 --> 00:10:17.120 +We can throw it all away and start over. 00:10:17.120 --> 00:10:26.000 As an organizational principle... -00:10:26.000 --> 00:10:27.360 +00:10:26.000 --> 00:10:30.079 I don't know what I was thinking on that - -00:10:27.360 --> 00:10:30.079 slide, excuse me. -00:10:30.079 --> 00:10:32.240 -Bringing it back around - -00:10:32.240 --> 00:10:33.440 -to the free +00:10:30.079 --> 00:10:33.440 +Bringing it back around to the free 00:10:33.440 --> 00:10:35.680 and open source software community, -00:10:35.680 --> 00:10:36.480 -our goal - -00:10:36.480 --> 00:10:39.519 -is to enable users +00:10:35.680 --> 00:10:39.519 +our goal is to enable users 00:10:39.519 --> 00:10:41.440 to unlock their computers, to do as much @@ -774,158 +612,118 @@ to unlock their computers, to do as much 00:10:41.440 --> 00:10:43.040 with them as possible. -00:10:43.040 --> 00:10:45.600 +00:10:43.040 --> 00:10:47.680 That's the context to take with project - -00:10:45.600 --> 00:10:47.680 initialization, but sometimes 00:10:47.680 --> 00:10:49.560 -it could make sense to put... - -00:10:49.560 --> 00:10:50.800 -[Music] - -00:10:50.800 --> 00:10:53.040 -to put some gloves on. I've thrown up on - -00:10:53.040 --> 00:10:54.880 -the screen here just a couple of other +it could make sense -00:10:54.880 --> 00:10:57.279 -ideas, ways to maybe think outside of the +00:10:50.800 --> 00:10:52.032 +to put some gloves on. -00:10:57.279 --> 00:10:57.920 -box. +00:10:52.032 --> 00:10:53.766 +I've thrown up on the screen here -00:10:57.920 --> 00:11:00.399 -As you're putting together project +00:10:53.766 --> 00:10:55.276 +just a couple of other ideas, -00:11:00.399 --> 00:11:01.440 -nets, +00:10:55.276 --> 00:10:57.920 +ways to maybe think outside of the box. -00:11:01.440 --> 00:11:04.959 -my words of encouragement are to experiment +00:10:57.920 --> 00:11:01.440 +As you're putting together project nets, -00:11:04.959 --> 00:11:05.519 -with it, +00:11:01.440 --> 00:11:05.519 +my words of encouragement are to +experiment with it, -00:11:05.519 --> 00:11:09.200 +00:11:05.519 --> 00:11:09.941 try different things, and think really +specifically -00:11:09.200 --> 00:11:10.560 -specifically about how +00:11:09.941 --> 00:11:17.010 +about how different the development +users might be from each other -00:11:10.560 --> 00:11:14.320 -different the development users - -00:11:14.320 --> 00:11:17.760 -might be from each other as you - -00:11:17.760 --> 00:11:21.680 -define standards for configuring +00:11:17.010 --> 00:11:21.680 +as you define standards for configuring 00:11:21.680 --> 00:11:23.519 the user environment of Emacs -00:11:23.519 --> 00:11:25.360 -specifically for developing +00:11:23.519 --> 00:11:26.552 +specifically for developing on a +project. -00:11:25.360 --> 00:11:29.120 -on a project. That's pretty much my talk. +00:11:26.552 --> 00:11:29.120 +That's pretty much my talk. -00:11:29.120 --> 00:11:30.480 +00:11:29.120 --> 00:11:32.959 If there's any time, I would take a - -00:11:30.480 --> 00:11:32.959 couple questions. -00:11:32.959 --> 00:11:35.040 -Thank you for your awesome talk, +00:11:32.959 --> 00:11:36.480 +(Amin: Thank you for your +awesome talk, Corwin. -00:11:35.040 --> 00:11:36.480 -Corwin. - -00:11:36.480 --> 00:11:38.160 -I think we have one or two - -00:11:38.160 --> 00:11:49.519 -minutes for a few questions. +00:11:36.480 --> 00:11:49.519 +I think we have one or two minutes for a +few questions. 00:11:49.519 --> 00:11:52.000 Do you have the pad open or would you 00:11:52.000 --> 00:11:53.839 -like me to read the questions for you? - -00:11:53.839 --> 00:11:56.959 -Oh, I managed to close the +like me to read the questions for you?) -00:11:56.959 --> 00:11:58.000 -pad +00:11:53.839 --> 00:11:58.000 +Corwin: Oh, I managed to close the pad -00:11:58.000 --> 00:12:00.560 -and I am trying to open it again. All +00:11:58.000 --> 00:12:00.352 +and I am trying to open it again. -00:12:00.560 --> 00:12:03.519 -right, there it opened. +00:12:00.352 --> 00:12:03.519 +All right, there it opened. -00:12:03.519 --> 00:12:05.040 +00:12:03.519 --> 00:12:05.500 Bringing it onto a screen where I can +see it. -00:12:05.040 --> 00:12:06.880 -see it. Will you read me the +00:12:05.500 --> 00:12:09.360 +Will you read me the first question +while I drag windows around, please? -00:12:06.880 --> 00:12:08.399 -first question while I drag windows +00:12:09.360 --> 00:12:15.600 +(Amin: Sure. It says, "do you use Emacs +as a community building tool?") -00:12:08.399 --> 00:12:09.360 -around, please? - -00:12:09.360 --> 00:12:12.720 -(Amin: Sure. It says, "do you use Emacs as a - -00:12:12.720 --> 00:12:15.600 -community building tool?") - -00:12:15.600 --> 00:12:17.680 +00:12:15.600 --> 00:12:19.760 Do I use Emacs as a community building - -00:12:17.680 --> 00:12:19.760 tool, or how do I? 00:12:19.760 --> 00:12:23.519 (Amin: It just says do you.) Yes, absolutely. -00:12:23.519 --> 00:12:26.720 -I think Emacs is an ambassador to - -00:12:26.720 --> 00:12:29.920 -the GNU tool chain. - -00:12:29.920 --> 00:12:33.279 -I think that in the fullness of time, we - -00:12:33.279 --> 00:12:34.560 -will see an Emacs +00:12:23.519 --> 00:12:29.920 +I think Emacs is an ambassador to the +GNU tool chain. -00:12:34.560 --> 00:12:38.240 -that makes +00:12:29.920 --> 00:12:33.027 +I think that in the fullness of time, -00:12:38.240 --> 00:12:42.000 -and that makes iOS and Android and other +00:12:33.027 --> 00:12:36.558 +we will see an Emacs -00:12:42.000 --> 00:12:42.800 -closed-source +00:12:36.558 --> 00:12:43.760 +that makes iOS and Android and other +closed-source tools dream. -00:12:42.800 --> 00:12:45.680 -tools dream. That's why they mock us +00:12:43.760 --> 00:12:46.689 +That's why they mock us and call Emacs -00:12:45.680 --> 00:12:46.320 -and call - -00:12:46.320 --> 00:12:49.200 -Emacs an operating system. It's because +00:12:46.689 --> 00:12:49.200 +an operating system. It's because 00:12:49.200 --> 00:12:51.440 it could be, if we cared for it to be. @@ -936,65 +734,56 @@ It's quite a threatening product 00:12:55.680 --> 00:12:57.440 from the perspective of how many problem -00:12:57.440 --> 00:12:59.440 -spaces it can address, how many types of +00:12:57.440 --> 00:12:58.540 +spaces it can address, -00:12:59.440 --> 00:13:01.519 -users it can satisfy, +00:12:58.540 --> 00:13:01.519 +how many types of users it can satisfy, 00:13:01.519 --> 00:13:04.399 the things that we can do to make -00:13:04.399 --> 00:13:05.600 -it robust in those - -00:13:05.600 --> 00:13:07.839 -environments. I mean, we're always - -00:13:07.839 --> 00:13:09.760 -thinking about the weak points, but +00:13:04.399 --> 00:13:06.456 +it robust in those environments. -00:13:09.760 --> 00:13:11.839 -is Emacs a community building tool? Heck +00:13:06.456 --> 00:13:09.524 +I mean, we're always thinking about the +weak points, -00:13:11.839 --> 00:13:14.639 -yeah. +00:13:09.524 --> 00:13:14.639 +but is Emacs a community building tool? +Heck yeah. -00:13:14.639 --> 00:13:17.920 +00:13:14.639 --> 00:13:18.480 (Amin: There's like one or two more - -00:13:17.920 --> 00:13:18.480 questions. -00:13:18.480 --> 00:13:21.519 +00:13:18.480 --> 00:13:22.480 I think they're more long-form so it - -00:13:21.519 --> 00:13:22.480 might be better -00:13:22.480 --> 00:13:24.000 -if you took them off stream so you - -00:13:24.000 --> 00:13:26.880 -could keep the schedule on time.) +00:13:22.480 --> 00:13:26.880 +if you took them off stream so you could +keep the schedule on time.) -00:13:26.880 --> 00:13:28.959 -i would love to take those questions +00:13:26.880 --> 00:13:29.463 +I would love to take those questions +offline. -00:13:28.959 --> 00:13:31.040 -offline. I will respond to you in +00:13:29.463 --> 00:13:30.908 +I will respond to you -00:13:31.040 --> 00:13:32.399 -writing if we don't get to it in a +00:13:30.908 --> 00:13:32.237 +in writing if we don't get to it -00:13:32.399 --> 00:13:33.360 -breakout room. +00:13:32.237 --> 00:13:33.360 +in a breakout room. -00:13:33.360 --> 00:13:35.519 -Thanks so much for joining us. I +00:13:33.360 --> 00:13:35.451 +Thanks so much for joining us. -00:13:35.519 --> 00:13:36.639 -can't wait to see the rest of the +00:13:35.451 --> 00:13:36.639 +I can't wait to see the rest of the 00:13:36.639 --> 00:13:38.000 conference. See you there! diff --git a/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt index 14913a32..8bb1e882 100644 --- a/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt +++ b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt @@ -1,16 +1,17 @@ WEBVTT -00:00:02.960 --> 00:00:04.960 -"Far away in the heavenly abode of the +00:00:02.960 --> 00:00:04.644 +"Far away in the heavenly abode -00:00:04.960 --> 00:00:06.560 -great god Indra, +00:00:04.644 --> 00:00:06.560 +of the great god Indra, -00:00:06.560 --> 00:00:08.320 -there is a wonderful net which has been +00:00:06.560 --> 00:00:07.688 +there is a wonderful net -00:00:08.320 --> 00:00:10.160 -hung by some cunning artificer +00:00:07.688 --> 00:00:10.160 +which has been hung +by some cunning artificer 00:00:10.160 --> 00:00:12.080 in such a manner that it stretches out @@ -18,92 +19,85 @@ in such a manner that it stretches out 00:00:12.080 --> 00:00:14.320 infinitely in all directions. -00:00:14.320 --> 00:00:15.920 +00:00:14.320 --> 00:00:16.938 In accordance with the extravagant +tastes of deities, -00:00:15.920 --> 00:00:18.240 -tastes of deities, the artificer has hung +00:00:16.938 --> 00:00:18.240 +the artificer has hung -00:00:18.240 --> 00:00:20.960 -a single glittering jewel in each eye of +00:00:18.240 --> 00:00:20.277 +a single glittering jewel -00:00:20.960 --> 00:00:22.080 -the net, +00:00:20.277 --> 00:00:22.080 +in each eye of the net, -00:00:22.080 --> 00:00:24.000 -and since the net itself is infinite, the +00:00:22.080 --> 00:00:23.859 +and since the net itself is infinite, -00:00:24.000 --> 00:00:26.480 -jewels are infinite in number. +00:00:23.859 --> 00:00:26.480 +the jewels are infinite in number. -00:00:26.480 --> 00:00:28.400 -There hang the jewels, glittering like +00:00:26.480 --> 00:00:27.642 +There hang the jewels, -00:00:28.400 --> 00:00:30.480 -stars in the first magnitude, +00:00:27.642 --> 00:00:30.480 +glittering like stars in the first +magnitude, -00:00:30.480 --> 00:00:33.440 -a wonderful sight to behold. Were we to +00:00:30.480 --> 00:00:32.681 +a wonderful sight to behold. -00:00:33.440 --> 00:00:34.800 -select one of these jewels for +00:00:32.681 --> 00:00:35.680 +Were we to select one of these jewels +for inspection, -00:00:34.800 --> 00:00:35.680 -inspection, +00:00:35.680 --> 00:00:38.216 +we would discover that in +its polished surface -00:00:35.680 --> 00:00:37.760 -we would discover that in its polished +00:00:38.216 --> 00:00:39.520 +there are reflected -00:00:37.760 --> 00:00:39.520 -surface there are reflected +00:00:39.520 --> 00:00:41.451 +all the other jewels in the net, -00:00:39.520 --> 00:00:41.920 -all the other jewels in the net, infinite +00:00:41.451 --> 00:00:43.360 +infinite in number. -00:00:41.920 --> 00:00:43.360 -in number. +00:00:43.360 --> 00:00:45.140 +If we look still more closely, -00:00:43.360 --> 00:00:45.600 -If we look still more closely, we would +00:00:45.140 --> 00:00:48.960 +we would see that each of the jewels +reflected in this one jewel -00:00:45.600 --> 00:00:47.840 -see that each of the jewels reflected in +00:00:48.960 --> 00:00:51.264 +reflects all the others." -00:00:47.840 --> 00:00:48.960 -this one jewel +00:00:51.264 --> 00:00:54.000 +This is the metaphor of Indra's Net, -00:00:48.960 --> 00:00:52.239 -reflects all the others." This is the - -00:00:52.239 --> 00:00:54.000 -metaphor of Indra's Net, - -00:00:54.000 --> 00:00:56.840 +00:00:54.000 --> 00:00:57.615 which is told in some schools of +philosophy. -00:00:56.840 --> 00:00:59.359 -philosophy. Let's keep this metaphor in - -00:00:59.359 --> 00:01:00.160 -mind, - -00:01:00.160 --> 00:01:01.920 -because it'll help us understand the +00:00:57.615 --> 00:01:00.160 +Let's keep this metaphor in mind, -00:01:01.920 --> 00:01:03.760 -Emacs extension that we're about to +00:01:00.160 --> 00:01:01.773 +because it'll help us understand -00:01:03.760 --> 00:01:06.960 +00:01:01.773 --> 00:01:06.960 +the Emacs extension that we're about to discuss. -00:01:06.960 --> 00:01:10.080 -In editing text, there's two +00:01:06.960 --> 00:01:12.810 +In editing text, there's two main +paradigms: -00:01:10.080 --> 00:01:13.200 -main paradigms: one - -00:01:13.200 --> 00:01:16.880 -is editing at the ground level, +00:01:12.810 --> 00:01:16.880 +one is editing at the ground level, 00:01:16.880 --> 00:01:19.439 where the characters that we type @@ -114,83 +108,67 @@ actually appear on the screen, 00:01:22.159 --> 00:01:25.960 the changes we make actually occur. -00:01:28.479 --> 00:01:30.720 -The other editing paradigm is where we +00:01:28.479 --> 00:01:30.126 +The other editing paradigm -00:01:30.720 --> 00:01:33.439 -escape to a higher level +00:01:30.126 --> 00:01:33.439 +is where we escape to a higher level -00:01:33.439 --> 00:01:36.000 +00:01:33.439 --> 00:01:36.479 and now the characters that we type are - -00:01:36.000 --> 00:01:36.479 not... 00:01:36.479 --> 00:01:39.040 They don't actually appear on the screen -00:01:39.040 --> 00:01:41.600 +00:01:39.040 --> 00:01:42.748 because we're not at the ground level +with the text, -00:01:41.600 --> 00:01:44.799 -with the text, we are at a higher level +00:01:42.748 --> 00:01:44.799 +we are at a higher level 00:01:44.799 --> 00:01:48.479 looking down at the text -00:01:48.479 --> 00:01:51.920 -and regarding the text, referring to +00:01:48.479 --> 00:01:50.773 +and regarding the text, -00:01:51.920 --> 00:01:54.640 -this world of text in terms of a - -00:01:54.640 --> 00:01:56.159 -language. +00:01:50.773 --> 00:01:56.159 +referring to this world of text in terms +of a language. 00:01:56.159 --> 00:01:57.920 For instance, we could describe this -00:01:57.920 --> 00:02:00.640 +00:01:57.920 --> 00:02:03.404 world as having words and paragraphs and +sentences and lines and so on. -00:02:00.640 --> 00:02:02.079 -sentences and +00:02:03.404 --> 00:02:05.985 +We could reason about this text -00:02:02.079 --> 00:02:04.640 -lines and so on. We could reason +00:02:05.985 --> 00:02:13.120 +in terms of these textual entities and +this textual language. -00:02:04.640 --> 00:02:05.360 -about this - -00:02:05.360 --> 00:02:08.800 -text in terms of these - -00:02:08.800 --> 00:02:11.440 -textual entities and this textual - -00:02:11.440 --> 00:02:13.120 -language. - -00:02:13.120 --> 00:02:15.920 +00:02:13.120 --> 00:02:18.640 This is the second paradigm of text - -00:02:15.920 --> 00:02:18.640 editing. 00:02:18.640 --> 00:02:22.800 When we're in the second paradigm, -00:02:22.800 --> 00:02:24.800 +00:02:22.800 --> 00:02:25.304 there is a way to go down to ground +level. -00:02:24.800 --> 00:02:26.480 -level. You hit Enter - -00:02:26.480 --> 00:02:28.160 -now--or we'll hit Enter to go down to the +00:02:25.304 --> 00:02:28.997 +You hit Enter now--or we'll hit Enter to +go down to the ground level, -00:02:28.160 --> 00:02:30.480 -ground level, and you can hit Escape +00:02:28.997 --> 00:02:30.480 +and you can hit Escape 00:02:30.480 --> 00:02:33.200 to go back out to the referential level. @@ -198,182 +176,147 @@ to go back out to the referential level. 00:02:33.200 --> 00:02:35.200 Enter to go down to ground level -00:02:35.200 --> 00:02:37.280 -and Escape to go up to the referential - -00:02:37.280 --> 00:02:40.160 -level. - -00:02:40.160 --> 00:02:44.879 -Now, in Vim, the nouns +00:02:35.200 --> 00:02:40.160 +and Escape to go up to the +referential level. -00:02:44.879 --> 00:02:48.239 -in this world of text all +00:02:40.160 --> 00:02:47.565 +Now, in Vim, the nouns in this +world of text -00:02:48.239 --> 00:02:50.959 -share the same referential plane which +00:02:47.565 --> 00:02:52.319 +all share the same referential plane +which we call normal mode. -00:02:50.959 --> 00:02:51.519 -we call - -00:02:51.519 --> 00:02:54.319 -normal mode. So in normal mode, all of the - -00:02:54.319 --> 00:02:54.959 -nouns +00:02:52.319 --> 00:02:54.959 +So in normal mode, all of the nouns 00:02:54.959 --> 00:02:57.360 of the world of text are available, -00:02:57.360 --> 00:02:58.959 +00:02:57.360 --> 00:03:00.959 whether it's words or sentences or - -00:02:58.959 --> 00:03:00.959 paragraphs, -00:03:00.959 --> 00:03:04.400 -and they all share this same - -00:03:04.400 --> 00:03:08.319 -referential plane. +00:03:00.959 --> 00:03:08.319 +and they all share this same referential +plane. -00:03:08.319 --> 00:03:11.120 -They compete for space on the +00:03:08.319 --> 00:03:12.720 +They compete for space on the keyboard. -00:03:11.120 --> 00:03:12.720 -keyboard. +00:03:12.720 --> 00:03:17.037 +An alternative way to structure these +modes is -00:03:12.720 --> 00:03:15.760 -An alternative +00:03:17.037 --> 00:03:21.840 +instead of having a single mode where +all the nouns coexist, -00:03:15.760 --> 00:03:17.680 -way to structure these modes is instead +00:03:21.840 --> 00:03:24.005 +peacefully or otherwise, -00:03:17.680 --> 00:03:19.280 -of having a single mode where all the +00:03:24.005 --> 00:03:30.400 +you instead have a dedicated mode for +every noun. -00:03:19.280 --> 00:03:21.840 -nouns coexist, +00:03:30.400 --> 00:03:32.540 +In that case, what happens is -00:03:21.840 --> 00:03:24.959 -peacefully or otherwise, you instead +00:03:32.540 --> 00:03:35.440 +because your modal spaces are +now much smaller, -00:03:24.959 --> 00:03:30.400 -have a dedicated mode for every noun. - -00:03:30.400 --> 00:03:33.040 -In that case, what happens is because - -00:03:33.040 --> 00:03:35.440 -your modal spaces are now much smaller, - -00:03:35.440 --> 00:03:37.280 +00:03:35.440 --> 00:03:40.593 you're just talking about words or +paragraphs or lines or something, -00:03:37.280 --> 00:03:38.720 -paragraphs or - -00:03:38.720 --> 00:03:42.560 -lines or something, the keys that you use +00:03:40.593 --> 00:03:42.560 +the keys that you use 00:03:42.560 --> 00:03:45.760 can be much more targeted. 00:03:45.760 --> 00:03:48.560 -You can use the same keystrokes in +You can use the same keystrokes 00:03:48.560 --> 00:03:50.400 in all of your modes and they would have -00:03:50.400 --> 00:03:52.000 -the same ideas behind them, but +00:03:50.400 --> 00:03:51.845 +the same ideas behind them, -00:03:52.000 --> 00:03:53.280 -they would have different effects +00:03:51.845 --> 00:03:53.280 +but they would have different effects 00:03:53.280 --> 00:03:55.519 depending on which context you're using. -00:03:55.519 --> 00:03:57.519 +00:03:55.519 --> 00:03:59.120 It's the same keystrokes, different - -00:03:57.519 --> 00:03:59.120 contexts. -00:03:59.120 --> 00:04:01.360 +00:03:59.120 --> 00:04:04.244 The advantage of that is it's often +easier to change context -00:04:01.360 --> 00:04:02.480 -easier - -00:04:02.480 --> 00:04:05.519 -to change context than it is to - -00:04:05.519 --> 00:04:09.040 -learn new key bindings. So let's see +00:04:04.244 --> 00:04:07.888 +than it is to learn new key bindings. -00:04:09.040 --> 00:04:12.080 -an example of how that works. We go into +00:04:07.888 --> 00:04:11.289 +So let's see an example of how +that works. -00:04:12.080 --> 00:04:13.680 -character mode, and if you look at the +00:04:11.289 --> 00:04:14.039 +We go into character mode, and if you +look at the mode line -00:04:13.680 --> 00:04:15.439 -mode line at the bottom of the screen there, +00:04:14.039 --> 00:04:15.439 +at the bottom of the screen there, 00:04:15.439 --> 00:04:18.720 you'll see that we're in character mode. -00:04:18.720 --> 00:04:21.519 -Now, when we move up, down, left, and +00:04:18.720 --> 00:04:21.955 +Now, when we move up, down, +left, and right, -00:04:21.519 --> 00:04:23.919 -right, we're moving by character. +00:04:21.955 --> 00:04:23.919 +we're moving by character. -00:04:23.919 --> 00:04:28.479 -We can also transform the text, and +00:04:23.919 --> 00:04:28.088 +We can also transform the text, -00:04:28.479 --> 00:04:30.240 -the transformations occur in terms of +00:04:28.088 --> 00:04:32.400 +and the transformations occur in terms +of character. -00:04:30.240 --> 00:04:32.400 -character. +00:04:32.400 --> 00:04:34.207 +You can also go into word mode. -00:04:32.400 --> 00:04:34.320 -You can also go into word mode. In +00:04:34.207 --> 00:04:40.000 +In word mode, the transformations that +you do are on words. -00:04:34.320 --> 00:04:35.520 -word mode, - -00:04:35.520 --> 00:04:38.560 -the transformations that you do are on - -00:04:38.560 --> 00:04:40.000 -words. - -00:04:40.000 --> 00:04:42.320 +00:04:40.000 --> 00:04:43.440 and you try... Your movement is also in - -00:04:42.320 --> 00:04:43.440 terms of words. -00:04:43.440 --> 00:04:45.600 +00:04:43.440 --> 00:04:46.560 So that's the level of granularity that - -00:04:45.600 --> 00:04:46.560 you have. -00:04:46.560 --> 00:04:49.520 -You could also go to line mode. When +00:04:46.560 --> 00:04:49.191 +You could also go to line mode. -00:04:49.520 --> 00:04:50.720 -you're in line mode, +00:04:49.191 --> 00:04:50.720 +When you're in line mode, -00:04:50.720 --> 00:04:53.759 -you go up and down by line, and you can +00:04:50.720 --> 00:04:52.901 +you go up and down by line, -00:04:53.759 --> 00:04:54.240 -move lines +00:04:52.901 --> 00:04:54.240 +and you can move lines 00:04:54.240 --> 00:04:57.520 up and down left and right and so on. @@ -384,20 +327,19 @@ The transformations you do are in 00:05:00.880 --> 00:05:02.800 terms of lines. -00:05:02.800 --> 00:05:08.400 -You could also go to window mode, where - -00:05:08.400 --> 00:05:10.639 -now the objects that you're referring to +00:05:02.800 --> 00:05:07.682 +You could also go to window mode, -00:05:10.639 --> 00:05:12.400 -are windows. You can +00:05:07.682 --> 00:05:11.695 +where now the objects that you're +referring to are windows. -00:05:12.400 --> 00:05:15.759 -move spatially amongst the windows or +00:05:11.695 --> 00:05:15.578 +You can move spatially +amongst the windows -00:05:15.759 --> 00:05:17.520 -do transformations on the windows +00:05:15.578 --> 00:05:17.520 +or do transformations on the windows 00:05:17.520 --> 00:05:20.850 using the same keystrokes. @@ -408,197 +350,170 @@ So let's go to... 00:05:28.720 --> 00:05:32.800 Right. One of the things, -00:05:32.800 --> 00:05:35.280 -the principles that play here is - -00:05:35.280 --> 00:05:36.880 -something called the Rumpelstiltskin - -00:05:36.880 --> 00:05:38.000 -principle, which is something +00:05:32.800 --> 00:05:35.114 +the principles at play here -00:05:38.000 --> 00:05:40.720 -that's known in computer science. +00:05:35.114 --> 00:05:37.266 +is something called the +Rumpelstiltskin principle, -00:05:40.720 --> 00:05:42.320 -If you can name something, then +00:05:37.266 --> 00:05:40.720 +which is something that's known in +computer science. -00:05:43.759 --> 00:05:46.720 -you have power over it. This is +00:05:40.720 --> 00:05:42.113 +If you can name something, -00:05:46.720 --> 00:05:48.560 -kind of an adaptation of that principle +00:05:42.113 --> 00:05:45.824 +then you have power over it. -00:05:48.560 --> 00:05:50.479 -which says that if you can +00:05:45.824 --> 00:05:48.560 +This is kind of an adaptation of that +principle -00:05:50.479 --> 00:05:52.320 -name something and if you can talk about +00:05:48.560 --> 00:05:51.123 +which says that if you can name +something -00:05:52.320 --> 00:05:54.000 -it, then it's a noun +00:05:51.123 --> 00:05:52.572 +and if you can talk about it, -00:05:55.360 --> 00:05:56.960 -in your editing language. If it's a +00:05:52.572 --> 00:05:56.334 +then it's a noun in your editing +language. -00:05:56.960 --> 00:05:58.960 -noun, then it has... +00:05:56.334 --> 00:05:58.960 +If it's a noun, then it has... -00:05:58.960 --> 00:06:01.520 +00:05:58.960 --> 00:06:02.319 It's a mode. So if we can talk about it, - -00:06:01.520 --> 00:06:02.319 it's a noun. -00:06:02.319 --> 00:06:05.039 -If it's a noun, then it's a mode. One - -00:06:05.039 --> 00:06:06.479 -of the things we've been talking a lot - -00:06:06.479 --> 00:06:07.039 -about +00:06:02.319 --> 00:06:04.818 +If it's a noun, then it's a mode. -00:06:07.039 --> 00:06:10.800 -is modes. In fact, +00:06:04.818 --> 00:06:08.919 +One of the things we've been talking a +lot about is modes. -00:06:10.800 --> 00:06:14.240 -by this principle, modes also +00:06:08.919 --> 00:06:12.699 +In fact, by this principle, -00:06:14.240 --> 00:06:17.280 -should be a mode. +00:06:12.699 --> 00:06:17.280 +modes also should be a mode. 00:06:17.280 --> 00:06:19.039 You should have a mode that can reason -00:06:19.039 --> 00:06:21.120 -in terms of modes as objects, just like +00:06:19.039 --> 00:06:20.639 +in terms of modes as objects, -00:06:21.120 --> 00:06:22.080 -you have +00:06:20.639 --> 00:06:22.300 +just like you have modes -00:06:22.080 --> 00:06:23.759 -modes where you can reason in terms of +00:06:22.300 --> 00:06:23.759 +where you can reason in terms of 00:06:23.759 --> 00:06:26.560 words or lines as objects. -00:06:26.560 --> 00:06:28.800 -So let's do that. Let's go to mode - -00:06:28.800 --> 00:06:30.479 -mode. +00:06:26.560 --> 00:06:30.479 +So let's do that. Let's go to mode mode. 00:06:30.479 --> 00:06:34.000 -When you go to mode mode, you see that - -00:06:34.000 --> 00:06:36.080 -the objects that are depicted here are +When you go to mode mode, you see that -00:06:36.080 --> 00:06:37.919 -the modes that are +00:06:34.000 --> 00:06:35.915 +the objects that are depicted here -00:06:37.919 --> 00:06:40.960 -present in the buffer, +00:06:35.915 --> 00:06:40.960 +are the modes that are present +in the buffer, -00:06:40.960 --> 00:06:44.880 -which we knew about because the +00:06:40.960 --> 00:06:44.500 +which we knew about because -00:06:44.880 --> 00:06:46.400 -style of editing that we had in this +00:06:44.500 --> 00:06:46.797 +the style of editing that we had +in this buffer -00:06:46.400 --> 00:06:48.720 -buffer was the Vim style of editing +00:06:46.797 --> 00:06:48.720 +was the Vim style of editing -00:06:48.720 --> 00:06:50.479 +00:06:48.720 --> 00:06:51.143 where there's an insert mode at the +ground level -00:06:50.479 --> 00:06:52.400 -ground level and a normal mode that you - -00:06:52.400 --> 00:06:53.039 -can escape to. +00:06:51.143 --> 00:06:53.039 +and a normal mode that +you can escape to. 00:06:53.039 --> 00:06:57.280 You insert, enter the ground level. -00:06:57.280 --> 00:07:00.479 +00:06:57.280 --> 00:07:01.352 Enter to the insert mode and escape to +normal mode. -00:07:00.479 --> 00:07:02.880 -normal mode. When you look at the - -00:07:02.880 --> 00:07:03.680 -mode mode +00:07:01.352 --> 00:07:04.647 +When you look at the mode mode +representation, -00:07:03.680 --> 00:07:06.160 -representation, you see that in fact that +00:07:04.647 --> 00:07:06.160 +you see that in fact that 00:07:06.160 --> 00:07:10.479 is the structure that's depicted. -00:07:10.479 --> 00:07:12.720 -But in different situations, you might - -00:07:12.720 --> 00:07:14.080 -find +00:07:10.479 --> 00:07:14.080 +But in different situations, +you might find 00:07:14.080 --> 00:07:16.080 that these modes are not the -00:07:16.080 --> 00:07:17.680 -ones that you want. You want something - -00:07:17.680 --> 00:07:19.360 -more tailored for the specific +00:07:16.080 --> 00:07:16.922 +ones that you want. -00:07:19.360 --> 00:07:20.880 -application. +00:07:16.922 --> 00:07:20.880 +You want something more tailored for the +specific application. -00:07:20.880 --> 00:07:23.050 +00:07:20.880 --> 00:07:25.065 For instance, if you're editing +Lisp code -00:07:24.240 --> 00:07:27.360 -Lisp code (or code in general, but +00:07:25.065 --> 00:07:27.360 +(or code in general, but 00:07:27.360 --> 00:07:30.880 Lisp code is a particular example), -00:07:30.880 --> 00:07:32.960 -you might want to take advantage of the +00:07:30.880 --> 00:07:32.640 +you might want to take advantage -00:07:32.960 --> 00:07:34.000 -structure of +00:07:32.640 --> 00:07:34.852 +of the structure of the code. -00:07:34.000 --> 00:07:37.599 -the code. For Lisp code in particular, +00:07:34.852 --> 00:07:37.599 +For Lisp code in particular, 00:07:37.599 --> 00:07:40.960 we have a mode called symex-mode -00:07:40.960 --> 00:07:44.240 -which is able to reason +00:07:40.960 --> 00:07:45.414 +which is able to reason about your code -00:07:44.240 --> 00:07:46.720 -about your code in terms of its tree +00:07:45.414 --> 00:07:47.919 +in terms of its tree structure. -00:07:46.720 --> 00:07:47.919 -structure. - -00:07:47.919 --> 00:07:50.560 +00:07:47.919 --> 00:07:52.397 So you can use the same keystrokes: hjkl +goes left, right, up, and down, -00:07:50.560 --> 00:07:51.120 -goes - -00:07:51.120 --> 00:07:53.440 -left, right, up, and down, but you also have - -00:07:53.440 --> 00:07:54.960 -other keystrokes that are more - -00:07:54.960 --> 00:07:58.080 -specialized to the application. +00:07:52.397 --> 00:07:58.080 +but you also have other keystrokes that +are more specialized to the application. 00:07:58.080 --> 00:08:01.520 You can run the code. @@ -606,11 +521,9 @@ You can run the code. 00:08:01.520 --> 00:08:06.960 We'll see that happen here in a minute. -00:08:06.960 --> 00:08:10.080 -You can make changes to it really - -00:08:10.080 --> 00:08:12.240 -quickly +00:08:06.960 --> 00:08:12.240 +You can make changes to it +really quickly 00:08:12.240 --> 00:08:18.000 and see the effects of those changes. @@ -618,140 +531,128 @@ and see the effects of those changes. 00:08:18.000 --> 00:08:19.440 You're doing this all in a mode -00:08:19.440 --> 00:08:21.360 -that's convenient for - -00:08:21.360 --> 00:08:23.199 -this particular application, which is +00:08:19.440 --> 00:08:22.625 +that's convenient for this particular +application, -00:08:23.199 --> 00:08:25.039 -editing Lisp code, +00:08:22.625 --> 00:08:25.039 +which is editing Lisp code, 00:08:25.039 --> 00:08:28.960 and that is, in this case, symex-mode. -00:08:28.960 --> 00:08:31.039 +00:08:28.960 --> 00:08:31.631 Typically, when you're editing code +like this, -00:08:31.039 --> 00:08:32.640 -like this, you'd want to be +00:08:31.631 --> 00:08:33.435 +you'd want to be in insert mode -00:08:32.640 --> 00:08:34.800 -in insert mode actually typing out the +00:08:33.435 --> 00:08:36.640 +actually typing out the code, -00:08:34.800 --> 00:08:36.640 -code, - -00:08:36.640 --> 00:08:38.320 +00:08:36.640 --> 00:08:40.959 and then you'd want to escape to symex - -00:08:38.320 --> 00:08:40.959 mode rather than normal mode, -00:08:40.959 --> 00:08:42.159 -and then you could escape again and +00:08:40.959 --> 00:08:42.021 +and then you could escape again -00:08:42.159 --> 00:08:44.080 -you'd end up in normal mode. +00:08:42.021 --> 00:08:44.080 +and you'd end up in normal mode. -00:08:44.080 --> 00:08:46.720 -So this, if we go to mode mode, we see is - -00:08:46.720 --> 00:08:48.000 -depicted +00:08:44.080 --> 00:08:48.000 +So this, if we go to mode mode, we see +is depicted 00:08:48.000 --> 00:08:51.040 as this tower where insert is at the -00:08:51.040 --> 00:08:52.800 -bottom and normal is at the top, but - -00:08:52.800 --> 00:08:54.800 -symex-mode is in between +00:08:51.040 --> 00:08:52.604 +bottom and normal is at the top, -00:08:54.800 --> 00:08:57.200 -the two. You could also change that if +00:08:52.604 --> 00:08:55.305 +but symex-mode is in between the two. -00:08:57.200 --> 00:08:58.800 -you like. If you don't want symex-mode to +00:08:55.305 --> 00:08:57.551 +You could also change that if you like. -00:08:58.800 --> 00:09:00.640 -be there, you could just +00:08:57.551 --> 00:08:59.566 +If you don't want symex-mode +to be there, -00:09:00.640 --> 00:09:03.760 -move it to the top. Now you find symex is +00:08:59.566 --> 00:09:02.187 +you could just move it to the top. -00:09:03.760 --> 00:09:05.600 -at the top and you enter down to +00:09:02.187 --> 00:09:04.392 +Now you find symex is at the top -00:09:05.600 --> 00:09:06.160 -normal. +00:09:04.392 --> 00:09:06.160 +and you enter down to normal. -00:09:06.160 --> 00:09:07.600 +00:09:06.160 --> 00:09:08.848 You can see it on the status bar at the +bottom there. -00:09:07.600 --> 00:09:10.480 -bottom there. Enter to insert, - -00:09:10.480 --> 00:09:13.839 -escape to normal, escape to symex. +00:09:08.848 --> 00:09:13.839 +Enter to insert, escape to normal, +escape to symex. -00:09:13.839 --> 00:09:16.480 -In fact, you can even add more modes if +00:09:13.839 --> 00:09:16.344 +In fact, you can even add more modes -00:09:16.480 --> 00:09:19.380 -you don't like the existing ones. +00:09:16.344 --> 00:09:19.380 +if you don't like the existing ones. 00:09:21.519 --> 00:09:23.839 Now we have an additional mode here. -00:09:23.839 --> 00:09:25.440 -We have window mode. It goes down to +00:09:23.839 --> 00:09:25.855 +We have window mode. It goes +down to symex, -00:09:25.440 --> 00:09:27.519 -symex, it goes down to normal. +00:09:25.855 --> 00:09:27.519 +it goes down to normal. -00:09:27.519 --> 00:09:30.320 -Enter the insert, escape to normal, escape +00:09:27.519 --> 00:09:29.919 +Enter the insert, escape to normal, -00:09:30.320 --> 00:09:33.600 -to symex, escape to window. +00:09:29.919 --> 00:09:33.600 +escape to symex, escape to window. -00:09:33.600 --> 00:09:37.600 +00:09:33.600 --> 00:09:41.232 So we've talked... Okay, so another thing +actually to note here -00:09:37.600 --> 00:09:41.760 -actually to note here is that in editing +00:09:41.232 --> 00:09:45.360 +is that in editing modes, -00:09:41.760 --> 00:09:45.360 -modes, +00:09:45.360 --> 00:09:46.486 +if you look at the mode line -00:09:45.360 --> 00:09:46.720 -if you look at the mode line at the +00:09:46.486 --> 00:09:48.399 +at the bottom of the screen, -00:09:46.720 --> 00:09:48.399 -bottom of the screen, +00:09:48.399 --> 00:09:50.257 +you'll see that we are currently, -00:09:48.399 --> 00:09:50.640 -you'll see that we are currently, in this - -00:09:50.640 --> 00:09:51.519 -buffer, +00:09:50.257 --> 00:09:51.519 +in this buffer, 00:09:51.519 --> 00:09:54.560 we are currently in line mode. -00:09:54.560 --> 00:09:57.600 -I'm going to hit Enter now and +00:09:54.560 --> 00:09:57.296 +I'm going to hit Enter now -00:09:57.600 --> 00:09:58.720 -you'll see that when I hit +00:09:57.296 --> 00:09:59.119 +and you'll see that when I hit Enter, -00:09:58.720 --> 00:10:01.519 -Enter, nothing is happening. It's still in +00:09:59.119 --> 00:10:00.627 +nothing is happening. -00:10:01.519 --> 00:10:02.160 -line mode. +00:10:00.627 --> 00:10:02.160 +It's still in line mode. 00:10:02.160 --> 00:10:05.120 If you hit Escape, it's still in line mode. @@ -774,308 +675,232 @@ and line mode is the only one available 00:10:17.360 --> 00:10:19.519 in this tower -00:10:19.519 --> 00:10:21.760 -for editing the modes that are in +00:10:19.519 --> 00:10:21.556 +for editing the modes that are -00:10:21.760 --> 00:10:24.880 -operation in your ground level. +00:10:21.556 --> 00:10:24.880 +in operation in your ground level. -00:10:24.880 --> 00:10:26.560 +00:10:24.880 --> 00:10:26.898 In fact, line mode is all you need +here, -00:10:26.560 --> 00:10:28.320 -here, because this is just - -00:10:28.320 --> 00:10:30.320 -the nature of how these modes are - -00:10:30.320 --> 00:10:32.079 -laid out is - -00:10:32.079 --> 00:10:35.040 -in rows. So line mode is the most +00:10:26.898 --> 00:10:32.796 +because this is just the nature of how +these modes are laid out is in rows. -00:10:35.040 --> 00:10:36.399 -appropriate thing here. +00:10:32.796 --> 00:10:36.399 +So line mode is the most appropriate +thing here. -00:10:36.399 --> 00:10:37.680 +00:10:36.399 --> 00:10:39.740 But you could change it to something - -00:10:37.680 --> 00:10:39.740 else if you like. -00:10:40.959 --> 00:10:44.160 -Now we've seen two towers. We've - -00:10:44.160 --> 00:10:44.560 -seen +00:10:40.959 --> 00:10:43.659 +Now we've seen two towers. -00:10:44.560 --> 00:10:48.079 -the Vim tower and we've seen - -00:10:48.079 --> 00:10:53.680 +00:10:43.659 --> 00:10:53.680 +We've seen the Vim tower and we've seen also the symex tower, the Lisp tower. -00:10:53.680 --> 00:10:56.959 +00:10:53.680 --> 00:10:58.880 It turns out that, because we've been - -00:10:56.959 --> 00:10:58.880 talking about towers now, -00:10:58.880 --> 00:11:01.519 -by the rumpelstiltskin principle, towers +00:10:58.880 --> 00:11:06.399 +by the Rumpelstiltskin principle, towers +also can be talked about, -00:11:01.519 --> 00:11:02.800 -also +00:11:06.399 --> 00:11:09.127 +and therefore they also are a mode. -00:11:02.800 --> 00:11:06.399 -can be talked about, - -00:11:06.399 --> 00:11:09.279 -and therefore they also are a mode. So - -00:11:09.279 --> 00:11:11.200 -how do we go to tower mode? +00:11:09.127 --> 00:11:11.200 +So how do we go to tower mode? 00:11:11.200 --> 00:11:14.640 -The way we go to tower mode is +The way we go to tower mode is 00:11:14.640 --> 00:11:19.200 we go in a slightly different direction, -00:11:19.200 --> 00:11:20.800 +00:11:19.200 --> 00:11:23.360 and we find that we are now in tower - -00:11:20.800 --> 00:11:23.360 mode. -00:11:23.360 --> 00:11:27.440 +00:11:23.360 --> 00:11:29.279 We see that there are many towers - -00:11:27.440 --> 00:11:29.279 available. We're now... -00:11:29.279 --> 00:11:32.640 -We're seeing several possible +00:11:29.279 --> 00:11:33.440 +We're seeing several possible towers -00:11:32.640 --> 00:11:36.240 -towers that we have written +00:11:33.440 --> 00:11:40.344 +that we have written to be available and +for use in different buffers. -00:11:36.240 --> 00:11:39.120 -to be available and for use in +00:11:40.344 --> 00:11:42.110 +You can edit them on the fly. -00:11:39.120 --> 00:11:41.440 -different buffers. You can edit them +00:11:42.110 --> 00:11:46.630 +For instance, let's enter this tower. -00:11:41.440 --> 00:11:44.000 -on the fly. For instance, let's enter this - -00:11:44.000 --> 00:11:46.630 -tower. - -00:11:48.000 --> 00:11:49.920 +00:11:48.000 --> 00:11:50.180 Now you see that in the bottom of +the... -00:11:49.920 --> 00:11:51.519 -the... In the mode line, you see that we're - -00:11:51.519 --> 00:11:52.480 -going +00:11:50.180 --> 00:11:51.519 +In the mode line, you see that we're -00:11:52.480 --> 00:11:54.240 -across all of these different modes that +00:11:51.519 --> 00:11:53.944 +going across all of these +different modes -00:11:54.240 --> 00:11:56.480 -were in the tower. +00:11:53.944 --> 00:11:56.480 +that were in the tower. -00:11:56.480 --> 00:11:58.800 -You could escape and you could even +00:11:56.480 --> 00:11:59.724 +You could escape and you could even move +things around. -00:11:58.800 --> 00:12:00.399 -move things around. You could put window +00:11:59.724 --> 00:12:00.880 +You could put window mode -00:12:00.399 --> 00:12:00.880 -mode +00:12:00.880 --> 00:12:02.573 +all the way at the bottom, -00:12:00.880 --> 00:12:02.399 -all the way at the bottom, right above +00:12:02.573 --> 00:12:04.079 +right above insert mode. -00:12:02.399 --> 00:12:04.079 -insert mode. +00:12:04.079 --> 00:12:06.479 +Let's see that happen. There it is, -00:12:04.079 --> 00:12:06.880 -Let's see that happen. There it is, window +00:12:06.479 --> 00:12:10.444 +window is right above insert, and +so on. -00:12:06.880 --> 00:12:09.839 -is right above insert, and +00:12:10.444 --> 00:12:14.240 +The tower always reflects your current +position, -00:12:09.839 --> 00:12:13.040 -so on. The tower always reflects your - -00:12:13.040 --> 00:12:14.240 -current position, - -00:12:14.240 --> 00:12:15.760 +00:12:14.240 --> 00:12:17.600 so if you're in buffer mode here and you - -00:12:15.760 --> 00:12:17.600 go down to line mode, -00:12:17.600 --> 00:12:19.120 +00:12:17.600 --> 00:12:22.480 when you go back to mode mode, you see - -00:12:19.120 --> 00:12:22.480 that we are in line mode. -00:12:22.480 --> 00:12:24.000 +00:12:22.480 --> 00:12:25.620 But in practice, you wouldn't have a +tower this elaborate -00:12:24.000 --> 00:12:26.160 -tower this elaborate because - -00:12:26.160 --> 00:12:28.959 -you'd rather have several smaller towers - -00:12:28.959 --> 00:12:29.440 -you enter, +00:12:25.620 --> 00:12:29.440 +because you'd rather have several +smaller towers you enter, 00:12:29.440 --> 00:12:33.360 that you alternate between. -00:12:33.360 --> 00:12:36.639 -Okay. So one - -00:12:36.639 --> 00:12:39.839 -other thing of interest here is that +00:12:33.360 --> 00:12:39.839 +Okay. So one other thing of interest +here is that 00:12:39.839 --> 00:12:42.240 when you're in tower mode, -00:12:42.240 --> 00:12:43.839 +00:12:42.240 --> 00:12:44.740 if you look at the status line at the +bottom there, -00:12:43.839 --> 00:12:45.920 -bottom there, we are currently +00:12:44.740 --> 00:12:49.839 +we are currently in buffer mode while we +are in tower mode. -00:12:45.920 --> 00:12:49.200 -in buffer mode while we are in tower +00:12:49.839 --> 00:12:53.151 +Tower mode actually isn't a mode really. +Neither is mode mode. -00:12:49.200 --> 00:12:49.839 -mode. +00:12:53.151 --> 00:12:58.000 +They're really referential planes or +meta planes. -00:12:49.839 --> 00:12:51.600 -Tower mode actually isn't a mode - -00:12:51.600 --> 00:12:53.519 -really. Neither is mode mode. They're - -00:12:53.519 --> 00:12:53.920 -really - -00:12:53.920 --> 00:12:58.000 -referential planes or meta planes. - -00:12:58.000 --> 00:13:00.959 +00:12:58.000 --> 00:13:01.679 In any case, you can see that we're in +buffer mode. -00:13:00.959 --> 00:13:03.120 -buffer mode. We can take a meta jump - -00:13:03.120 --> 00:13:04.560 -out of this to confirm - -00:13:04.560 --> 00:13:07.120 -that buffer mode is the only mode - -00:13:07.120 --> 00:13:08.000 -available +00:13:01.679 --> 00:13:03.840 +We can take a meta jump out of this -00:13:08.000 --> 00:13:10.560 -when we're editing towers because that's +00:13:03.840 --> 00:13:08.000 +to confirm that buffer mode is the only +mode available -00:13:10.560 --> 00:13:11.200 -the one +00:13:08.000 --> 00:13:09.664 +when we're editing towers -00:13:11.200 --> 00:13:14.240 -we need, given that our towers are +00:13:09.664 --> 00:13:11.915 +because that's the one we need, -00:13:14.240 --> 00:13:15.200 -represented +00:13:11.915 --> 00:13:23.200 +given that our towers are represented in +individual buffers. -00:13:15.200 --> 00:13:23.200 -in individual buffers. +00:13:23.200 --> 00:13:26.320 +Right. So let's see where we're at. -00:13:23.200 --> 00:13:26.000 -Right. So let's see where we're +00:13:26.320 --> 00:13:27.785 +Rumpelstiltskin principle... -00:13:26.000 --> 00:13:26.320 -at. - -00:13:26.320 --> 00:13:28.240 -Rumpelstiltskin principle... We talked - -00:13:28.240 --> 00:13:30.160 -about mode mode. +00:13:27.785 --> 00:13:30.160 +We talked about mode mode. 00:13:30.160 --> 00:13:32.240 We talked about the strange loop -00:13:32.240 --> 00:13:33.920 -application of - -00:13:33.920 --> 00:13:37.820 -ground level modes in meta levels. - -00:13:39.600 --> 00:13:42.240 -We saw the different towers, and - -00:13:42.240 --> 00:13:43.199 -in fact, - -00:13:43.199 --> 00:13:46.639 -we're currently in - -00:13:46.639 --> 00:13:50.720 -Vim tower, - -00:13:50.720 --> 00:13:53.120 -where you can go to Emacs tower. Now, +00:13:32.240 --> 00:13:37.820 +application of ground level modes in +meta levels. -00:13:53.120 --> 00:13:54.720 -with a single keystroke, you can +00:13:39.600 --> 00:13:41.992 +We saw the different towers, -00:13:54.720 --> 00:13:55.760 -alternate +00:13:41.992 --> 00:13:50.720 +and in fact, we're currently +in Vim tower, -00:13:55.760 --> 00:13:59.040 -between Emacs +00:13:50.720 --> 00:13:52.860 +where you can go to Emacs tower. -00:13:59.040 --> 00:14:02.399 -and Vim, which are represented--which are +00:13:52.860 --> 00:13:54.720 +Now, with a single keystroke, you can -00:14:02.399 --> 00:14:05.519 -modeled as towers. +00:13:54.720 --> 00:13:59.695 +alternate between Emacs and Vim, -00:14:13.360 --> 00:14:15.360 -So there's... One thing that we've +00:13:59.695 --> 00:14:01.638 +which are represented-- -00:14:15.360 --> 00:14:17.040 -sort of alluded to is that there are two +00:14:01.638 --> 00:14:05.519 +which are modeled as towers. -00:14:17.040 --> 00:14:18.160 -directions +00:14:13.360 --> 00:14:14.760 +So there's... One thing -00:14:18.160 --> 00:14:20.480 -that you can travel in when you're going +00:14:14.760 --> 00:14:18.160 +that we've sort of alluded to is that +there are two directions -00:14:20.480 --> 00:14:22.399 -through this framework. +00:14:18.160 --> 00:14:19.494 +that you can travel in -00:14:22.399 --> 00:14:25.120 -One direction is--and we'll +00:14:19.494 --> 00:14:22.399 +when you're going through this +framework. -00:14:25.120 --> 00:14:33.760 -visualize it like so... +00:14:22.399 --> 00:14:33.760 +One direction is--and we'll visualize it +like so... 00:14:33.760 --> 00:14:35.120 There's two directions you can travel, @@ -1086,67 +911,53 @@ and you can either go sideways or you 00:14:37.040 --> 00:14:38.399 can go up and down. -00:14:38.399 --> 00:14:40.399 +00:14:38.399 --> 00:14:41.680 If you go sideways, you're changing your - -00:14:40.399 --> 00:14:41.680 perspective. 00:14:41.680 --> 00:14:45.440 So normal mode, word mode, line mode, -00:14:45.440 --> 00:14:47.360 -window mode, and so on are all different - -00:14:47.360 --> 00:14:49.120 -perspectives on your +00:14:45.440 --> 00:14:46.544 +window mode, and so on -00:14:49.120 --> 00:14:51.680 +00:14:46.544 --> 00:14:51.680 +are all different perspectives on your ground editing experience. -00:14:51.680 --> 00:14:53.040 -The other direction you can travel - -00:14:53.040 --> 00:14:55.519 -in is up or down, which takes you - -00:14:55.519 --> 00:14:57.920 -through meta levels. So you go from the +00:14:51.680 --> 00:14:53.265 +The other direction you can travel in -00:14:57.920 --> 00:14:59.600 -ground level editing experience +00:14:53.265 --> 00:14:56.811 +is up or down, which takes you through +meta levels. -00:14:59.600 --> 00:15:01.920 -up to mode mode and then up to the tower +00:14:56.811 --> 00:14:59.600 +So you go from the ground level +editing experience, -00:15:01.920 --> 00:15:03.440 -plane and so on +00:14:59.600 --> 00:15:07.040 +up to mode mode, and then up to the +tower plane, and so on, and so on. -00:15:03.440 --> 00:15:07.040 -and so on. +00:15:07.040 --> 00:15:12.568 +So this all sounds very complex, -00:15:07.040 --> 00:15:10.800 -So this all sounds +00:15:12.568 --> 00:15:18.160 +but the truth is it's not really that +complicated, -00:15:10.800 --> 00:15:14.880 -very complex, but the truth is +00:15:18.160 --> 00:15:20.699 +even though it feels that way. -00:15:14.880 --> 00:15:18.160 -it's not really that complicated - -00:15:18.160 --> 00:15:21.519 -even though it feels that way. The reason - -00:15:21.519 --> 00:15:22.959 -it isn't that complicated +00:15:20.699 --> 00:15:22.959 +The reason it isn't that complicated 00:15:22.959 --> 00:15:26.480 is because no matter how many levels -00:15:26.480 --> 00:15:28.800 +00:15:26.480 --> 00:15:30.160 up or down you go and no matter where - -00:15:28.800 --> 00:15:30.160 you are, 00:15:30.160 --> 00:15:32.399 @@ -1155,131 +966,102 @@ whether you're in at the ground level 00:15:32.399 --> 00:15:34.079 editing the actual text -00:15:34.079 --> 00:15:36.000 -or whether you're at a meta level, some +00:15:34.079 --> 00:15:35.802 +or whether you're at a meta level, -00:15:36.000 --> 00:15:37.600 -unknown meta level and you don't know +00:15:35.802 --> 00:15:39.279 +some unknown meta level and you don't +know where you are, -00:15:37.600 --> 00:15:39.279 -where you are, +00:15:39.279 --> 00:15:41.133 +no matter where you are, -00:15:39.279 --> 00:15:42.320 -no matter where you are, the way in which - -00:15:42.320 --> 00:15:44.399 -you interact with it +00:15:41.133 --> 00:15:44.399 +the way in which you interact with it 00:15:44.399 --> 00:15:47.519 is the same at every level. -00:15:47.519 --> 00:15:52.000 -That is the great power of - -00:15:52.000 --> 00:15:55.440 -this approach: that +00:15:47.519 --> 00:15:54.751 +That is the great power of this +approach: -00:15:55.440 --> 00:15:58.720 -all of the different levels are the - -00:15:58.720 --> 00:16:00.880 -same. +00:15:54.751 --> 00:16:00.880 +that all of the different levels +are the same. 00:16:00.880 --> 00:16:03.839 In fact, the complexity of the whole -00:16:03.839 --> 00:16:05.759 -is exactly identical to the - -00:16:05.759 --> 00:16:08.720 -complexity of each part, so if you know - -00:16:08.720 --> 00:16:10.000 -how to edit words - -00:16:10.000 --> 00:16:12.959 -in the ground level buffer and you know - -00:16:12.959 --> 00:16:13.440 -how to move +00:16:03.839 --> 00:16:05.545 +is exactly identical to -00:16:13.440 --> 00:16:15.839 -lines around using line mode, then you +00:16:05.545 --> 00:16:07.657 +the complexity of each part, -00:16:15.839 --> 00:16:16.720 -know how to edit +00:16:07.657 --> 00:16:10.000 +so if you know how to edit words -00:16:16.720 --> 00:16:19.519 -any aspect of your editing experience at +00:16:10.000 --> 00:16:12.048 +in the ground level buffer -00:16:19.519 --> 00:16:22.800 -any level. +00:16:12.048 --> 00:16:15.378 +and you know how to move lines around +using line mode, -00:16:30.079 --> 00:16:32.000 -So this is a pre-release demo. This +00:16:15.378 --> 00:16:22.800 +then you know how to edit any aspect of +your editing experience at any level. -00:16:32.000 --> 00:16:33.839 -doesn't exist on MELPA +00:16:30.079 --> 00:16:31.780 +So this is a pre-release demo. -00:16:33.839 --> 00:16:36.880 -yet, but you can follow updates +00:16:31.780 --> 00:16:40.079 +This doesn't exist on MELPA yet, but you +can follow updates at this repo on +github. -00:16:36.880 --> 00:16:40.079 -at this repo on github. +00:16:40.079 --> 00:16:43.850 +If you can also be a beta tester -00:16:40.079 --> 00:16:44.079 -If you can also be a beta tester or +00:16:43.850 --> 00:16:46.775 +or something like that, if you like, +that would be very helpful. -00:16:44.079 --> 00:16:45.199 -something like that, if you like, that - -00:16:45.199 --> 00:16:46.000 -would be very - -00:16:46.000 --> 00:16:49.199 -helpful. You can learn more about - -00:16:49.199 --> 00:16:50.560 -this at +00:16:46.775 --> 00:16:50.560 +You can learn more about this at 00:16:50.560 --> 00:16:53.920 drym.org, which is where I house -00:16:53.920 --> 00:16:55.920 -the research that I work on. In - -00:16:55.920 --> 00:16:57.279 -particular +00:16:53.920 --> 00:16:55.726 +the research that I work on. -00:16:57.279 --> 00:17:00.800 -the research on epistemic levels is what +00:16:55.726 --> 00:17:00.154 +In particular, the research on epistemic +levels -00:17:00.800 --> 00:17:03.600 -inspired this particular Emacs extension. +00:17:00.154 --> 00:17:03.600 +is what inspired this particular Emacs +extension. -00:17:03.600 --> 00:17:06.480 -You can also learn about dialectical +00:17:03.600 --> 00:17:05.600 +You can also learn about -00:17:06.480 --> 00:17:08.480 -inheritance attribution, which is the - -00:17:08.480 --> 00:17:10.880 -basis of +00:17:05.600 --> 00:17:10.880 +dialectical inheritance attribution, +which is the basis of 00:17:10.880 --> 00:17:14.559 a new economic system that could be fair -00:17:14.559 --> 00:17:16.959 +00:17:14.559 --> 00:17:19.439 and could lead to a prosperous and happy - -00:17:16.959 --> 00:17:19.439 world. -00:17:19.439 --> 00:17:22.799 -You can follow me on - -00:17:22.799 --> 00:17:26.319 -Twitter at @countvajhula. +00:17:19.439 --> 00:17:26.319 +You can follow me on Twitter at +@countvajhula. 00:17:26.319 --> 00:17:31.919 That's it! Thank you. diff --git a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt index 21222a11..a2e0ccae 100644 --- a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt +++ b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt @@ -30,7 +30,7 @@ have some time.) ([Amin:] Yeah, go for it.) 00:00:19.039 --> 00:00:20.720 -Well, I'll just drive into my +Well, I'll just dive into my 00:00:20.720 --> 00:00:22.384 prepared thing here then. diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt index 3c8dd20c..c60bd115 100644 --- a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt +++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt @@ -1,286 +1,274 @@ WEBVTT 00:00:02.800 --> 00:00:09.200 -I can yes +I can, yes. 00:00:09.200 --> 00:00:13.120 -okay um yeah so I'm uh zachary canfer +Okay, yeah, so I'm Zachary Kanfer, 00:00:13.120 --> 00:00:14.920 let's go to the 00:00:14.920 --> 00:00:17.520 -questions uh the first question uh why +questions. The first question, "Why 00:00:17.520 --> 00:00:19.119 do we go top to bottom for time 00:00:19.119 --> 00:00:19.840 -progression +progression, 00:00:19.840 --> 00:00:23.920 -uh and left to right uh for low to high +and left to right for low to high?" 00:00:23.920 --> 00:00:27.279 -interesting I think uh so the initial +Interesting, I think…, so the initial 00:00:27.279 --> 00:00:30.000 -uh thing I was copying that initial app +thing I was copying, that initial app -00:00:30.000 --> 00:00:31.599 -work this way - -00:00:31.599 --> 00:00:35.280 -um and +00:00:30.000 --> 00:00:35.280 +work this way, and 00:00:35.280 --> 00:00:36.960 -yeah I mean certainly traditional music +yeah, I mean, certainly traditional music, 00:00:36.960 --> 00:00:38.960 -you know on a staff uh +you know, on a staff 00:00:38.960 --> 00:00:43.040 -does go left to right uh like this +does go left to right like this. 00:00:43.040 --> 00:00:46.000 -um I mean going top to bottom does make +I mean, going top to bottom does make 00:00:46.000 --> 00:00:47.440 it easier to add more beats without 00:00:47.440 --> 00:00:48.960 -having to wrap but certainly that could +having to wrap, but certainly that could 00:00:48.960 --> 00:00:49.920 -be managed +be managed. 00:00:49.920 --> 00:00:52.239 -um yeah I I had not really thought about +Yeah, I had not really thought about 00:00:52.239 --> 00:00:53.760 -it but it is definitely something worth +it, but it is definitely something worth 00:00:53.760 --> 00:00:55.199 -looking into +looking into. 00:00:55.199 --> 00:01:02.480 -uh yeah you are now unmuted +Yeah. 00:01:02.480 --> 00:01:05.680 -ah good point thank you let me go ahead +Ah, good point, thank you. Let me go ahead 00:01:05.680 --> 00:01:06.960 -and do that +and do that. 00:01:06.960 --> 00:01:14.240 -uh the entire screen +The entire screen… 00:01:14.240 --> 00:01:16.880 -okay so the screen share should be +Okay, so the screen share should be 00:01:16.880 --> 00:01:18.320 -starting +starting, 00:01:18.320 --> 00:01:21.439 -there we go cool all right uh +there we go. Cool, all right. 00:01:21.439 --> 00:01:24.880 -two will be placed on the song um not +Two, "Will you play us another song?" Not 00:01:24.880 --> 00:01:26.640 -now I can I can make some recordings of +now, I can make some recordings of 00:01:26.640 --> 00:01:28.080 -it or certainly you can try it +it, or certainly you can try it. 00:01:28.080 --> 00:01:30.720 -um I couldn't quite get the the +I couldn't quite get the 00:01:30.720 --> 00:01:33.119 microphone and the webcam and everything 00:01:33.119 --> 00:01:37.040 -to work with the sound playing now um so +to work with the sound playing now. So, 00:01:37.040 --> 00:01:40.079 -uh I can record some also please uh +I can record some. Also, please… 00:01:40.079 --> 00:01:43.520 -I put a link at the uh here in the uh +I have put a link at the… here in the 00:01:43.520 --> 00:01:46.640 -etherpad https://zck.me/emacsconf2020 +Etherpad, zck.org/emacsconf2020 [updated], 00:01:46.640 --> 00:01:48.479 -where you can go and get the source +where you can go and get the source, 00:01:48.479 --> 00:01:49.920 -and you can try it yourself uh there's +and you can try it yourself. There's 00:01:49.920 --> 00:01:51.920 -no dependencies needed so it's just all +no dependencies needed, so it's just all 00:01:51.920 --> 00:01:54.560 -in Emacs um so please you know try it +in Emacs. So, please, you know, try it 00:01:54.560 --> 00:01:57.040 -yourself +yourself. 00:01:57.040 --> 00:02:00.079 -any chance for an Emacs tracker or mod +"Any chance for an Emacs tracker or mod 00:02:00.079 --> 00:02:01.040 -player +player?" 00:02:01.040 --> 00:02:03.680 -um I don't really know what a mod player +I don't really know what a mod player 00:02:03.680 --> 00:02:04.479 or tracker 00:02:04.479 --> 00:02:08.000 -are but I mean I'm sure +are, but I mean, I'm sure 00:02:08.000 --> 00:02:09.679 -that would be cool uh maybe there's one +that would be cool, maybe there's one 00:02:09.679 --> 00:02:11.599 -on now but I don't know uh +on now, but I don't know. 00:02:11.599 --> 00:02:13.920 -my musical background so I've played +My musical background. So, I've played 00:02:13.920 --> 00:02:15.200 various instruments since about the 00:02:15.200 --> 00:02:15.840 -third grade +third grade. 00:02:15.840 --> 00:02:18.160 -uh started recorder uh play cello I play +Started recorder, play cello, I play 00:02:18.160 --> 00:02:19.520 -guitar now +guitar now. 00:02:19.520 --> 00:02:22.560 -um but yeah so just kind of random +But yeah, so just kind of random 00:02:22.560 --> 00:02:23.680 -instruments and +instruments, and 00:02:23.680 --> 00:02:26.959 -uh yeah I guess kind of some of those +I guess kind of some of those 00:02:26.959 --> 00:02:27.280 things 00:02:27.280 --> 00:02:30.480 -influence how I think about music um - -00:02:30.480 --> 00:02:33.519 -uh yeah um +influence how I think about music. 00:02:33.519 --> 00:02:35.360 -are there any open source musical +"Are there any open source musical 00:02:35.360 --> 00:02:36.640 management sample libraries that could 00:02:36.640 --> 00:02:37.840 -be used +be used?" 00:02:37.840 --> 00:02:41.200 -um good question I'm sure there are um I +Good question, I'm sure there are, I 00:02:41.200 --> 00:02:42.400 -don't know any that integrate really +don't know any of that integrate really 00:02:42.400 --> 00:02:43.360 -well with Emacs +well with Emacs. 00:02:43.360 --> 00:02:44.560 -one of the cool things that I liked +One of the cool things that I liked 00:02:44.560 --> 00:02:45.680 about this is that there are no 00:02:45.680 --> 00:02:47.440 -dependencies +dependencies, 00:02:47.440 --> 00:02:49.360 -you know you don't need any external +you know, you don't need any external 00:02:49.360 --> 00:02:50.800 program to 00:02:50.800 --> 00:02:53.040 -uh generate the music I mean it it does +generate the music. I mean, it does 00:02:53.040 --> 00:02:54.160 shell out to 00:02:54.160 --> 00:02:57.280 -to play um but that +to play, but that 00:02:57.280 --> 00:02:58.640 should be able to be done on any 00:02:58.640 --> 00:02:59.840 -operating system as always you have +operating system, as always, you have 00:02:59.840 --> 00:03:03.519 -something that can play wav files +something that can play WAVE files, 00:03:03.519 --> 00:03:05.599 -um but yeah it is interesting to kind of - -00:03:05.599 --> 00:03:06.879 -try the different +but yeah, it is interesting to kind of -00:03:06.879 --> 00:03:10.000 -uh different sounds and different +00:03:05.599 --> 00:03:10.000 +try the different sounds and different 00:03:10.000 --> 00:03:12.239 -tones uh that you could get with +tones that you could get with 00:03:12.239 --> 00:03:14.400 -different instruments +different instruments. 00:03:14.400 --> 00:03:16.959 -have I written any actual songs um +Have I written any actual songs? -00:03:16.959 --> 00:03:17.599 -nothing - -00:03:17.599 --> 00:03:21.040 -super uh +00:03:16.959 --> 00:03:21.040 +Nothing super 00:03:21.040 --> 00:03:23.680 -uh well put together just I kind of just +well put together, I kind of just 00:03:23.680 --> 00:03:25.519 -been playing around with this +been playing around with this. 00:03:25.519 --> 00:03:27.440 -it's kind of I making this was one of +It's kind of… making this was one of 00:03:27.440 --> 00:03:29.040 -those things where like once I made it I +those things where once I made it, I 00:03:29.040 --> 00:03:30.080 -was like okay +was like, okay, 00:03:30.080 --> 00:03:31.280 -now I can play with it and I did a +now I can play with it, and I did a 00:03:31.280 --> 00:03:32.720 -little bit and was like I don't know if +little bit, and was like, I don't know if 00:03:32.720 --> 00:03:33.920 -I feel like it right now +I feel like it right now. 00:03:33.920 --> 00:03:37.280 -you know which I've I've found that to +You know, which I've found that to 00:03:37.280 --> 00:03:38.720 be the case with some things that I've @@ -289,7 +277,7 @@ be the case with some things that I've implemented 00:03:39.599 --> 00:03:41.360 -in Emacs where it's I make it and then +in Emacs where it's… I make it, and then 00:03:41.360 --> 00:03:43.519 it's the kind of some of the desire to @@ -298,7 +286,7 @@ it's the kind of some of the desire to use it all the time 00:03:44.480 --> 00:03:46.879 -goes away but I'm sure I'll circle back +goes away, but I'm sure I'll circle back 00:03:46.879 --> 00:03:47.760 around @@ -310,121 +298,118 @@ at some point especially kind of maybe once I add in different tones or 00:03:52.400 --> 00:03:54.640 -something +something. 00:03:54.640 --> 00:03:56.400 I guess a similar question for 00:03:56.400 --> 00:03:57.840 -pre-recorded sounds yeah I mean +pre-recorded sounds. Yeah, I mean, 00:03:57.840 --> 00:04:01.120 -if it's part of what I did what I wrote +if it's… part of what I did, what I wrote 00:04:01.120 --> 00:04:02.080 was a 00:04:02.080 --> 00:04:04.720 -wave generation library so if you kind +WAVE generation library, so, if you kind 00:04:04.720 --> 00:04:06.720 -of have the data +of have the data, 00:04:06.720 --> 00:04:08.400 -you could use those and like chop them +you could use those and chop them 00:04:08.400 --> 00:04:10.159 up and take certain lengths of them 00:04:10.159 --> 00:04:13.360 -and make a wav file so it's not plug and +and make a WAVE file, so it's not plug and 00:04:13.360 --> 00:04:14.959 -play right now but you could certainly +play right now, but you could certainly 00:04:14.959 --> 00:04:19.120 -add those notes uh to do it - -00:04:19.120 --> 00:04:21.040 -um any knitting midi mapping +add those notes to do it. -00:04:21.040 --> 00:04:22.720 -possibilities um +00:04:19.120 --> 00:04:22.720 +"Any MIDI mapping possibilities?" 00:04:22.720 --> 00:04:24.560 -I haven't looked into it but I'm sure +I haven't looked into it, but I'm sure 00:04:24.560 --> 00:04:26.160 -you definitely could output to midi +you definitely could output to MIDI 00:04:26.160 --> 00:04:28.800 -um which is another benefit of having +which is another benefit of having 00:04:28.800 --> 00:04:30.400 that multiple layers with the top layer 00:04:30.400 --> 00:04:31.520 -is just like +is just, 00:04:31.520 --> 00:04:33.360 -um you know if the root note is this +you know, if the root note is this, 00:04:33.360 --> 00:04:35.120 we're just two semitones up or seven 00:04:35.120 --> 00:04:36.560 -semitones up or whatever it is +semitones up or whatever it is. 00:04:36.560 --> 00:04:38.160 -uh it should be relatively simple to +It should be relatively simple to 00:04:38.160 --> 00:04:40.720 kind of switch out that layer underneath 00:04:40.720 --> 00:04:44.479 -uh from wave to midi or other things +from WAVE to MIDI or other things. 00:04:44.479 --> 00:04:45.759 -what were some of the challenges with +"What were some of the challenges with 00:04:45.759 --> 00:04:47.520 -writing a special mode for Emacs +writing a special mode for Emacs?" 00:04:47.520 --> 00:04:49.759 -uh interested in getting into this not +Interested in getting into this, not 00:04:49.759 --> 00:04:51.040 -sure where to start +sure where to start. 00:04:51.040 --> 00:04:54.960 -um there uh yeah it so +There… yeah, it so… 00:04:54.960 --> 00:04:57.120 -this isn't the first mode I've written +this isn't the first mode I've written, 00:04:57.120 --> 00:04:58.320 -um so that's right +so that's right…, 00:04:58.320 --> 00:05:01.759 -certainly that helps um I actually +certainly that helps. I actually… 00:05:01.759 --> 00:05:05.600 -um I have a video that we recorded it +I have a video that we recorded it 00:05:05.600 --> 00:05:08.240 -as part of Emacs nyc on making a major +as part of EmacsNYC on making a major 00:05:08.240 --> 00:05:09.039 -mode +mode. 00:05:09.039 --> 00:05:10.720 -that's basically like starts from +That's basically starts from 00:05:10.720 --> 00:05:12.639 -nothing and kind of builds up to +nothing, and kind of builds up to 00:05:12.639 --> 00:05:15.680 -an implementation of tic-tac-toe um +an implementation of tic-tac-toe, 00:05:15.680 --> 00:05:17.039 but so it kind of goes into printing @@ -433,76 +418,73 @@ but so it kind of goes into printing things out and buttons and making the 00:05:19.600 --> 00:05:21.280 -mode +mode. 00:05:21.280 --> 00:05:22.800 -I mean one of the best parts about Emacs +I mean, one of the best parts about Emacs 00:05:22.800 --> 00:05:24.560 -is because it's so +is, because it's so 00:05:24.560 --> 00:05:26.479 -uh configurable and so introspectible +configurable and so introspectible, 00:05:26.479 --> 00:05:28.479 -you can start pretty simply +you can start pretty simply, 00:05:28.479 --> 00:05:30.320 -and just kind of asking max about things +and just kind of ask Emacs about things, 00:05:30.320 --> 00:05:32.320 and then make one little 00:05:32.320 --> 00:05:34.960 -change um it's really it's not that bad - -00:05:34.960 --> 00:05:36.479 -so uh +change. It's really… it's not that bad, -00:05:36.479 --> 00:05:39.039 -I'll try to throw a link up on that uh +00:05:34.960 --> 00:05:39.039 +so, I'll try to throw a link up on that 00:05:39.039 --> 00:05:40.560 -on on that page I put up or +page I put up, or 00:05:40.560 --> 00:05:42.000 please email me for whoever asked this 00:05:42.000 --> 00:05:44.479 -question uh to get a link to that video +question to get a link to that video, 00:05:44.479 --> 00:05:46.240 -um or just look at look at the source +or just look at the source 00:05:46.240 --> 00:05:47.919 -code of this or any other major mode +code of this or any other major mode. 00:05:47.919 --> 00:05:50.479 -um it it's pretty ems breaks it makes it +Emacs makes it 00:05:50.479 --> 00:05:52.880 -pretty easy to extend uh +pretty easy to extend 00:05:52.880 --> 00:05:56.479 -major modes and I think that's that's +major modes. And I think that's 00:05:56.479 --> 00:05:57.600 the last question 00:05:57.600 --> 00:06:00.240 -in the ether pad so uh thanks so much +in the Etherpad, so, thanks so much 00:06:00.240 --> 00:06:02.479 -everybody for coming +everybody for coming. -00:06:02.479 --> 00:06:06.720 -you are now unmuted uh thank you so much +00:06:04.033 --> 00:06:06.720 +(Amin: Thank you so much 00:06:06.720 --> 00:06:09.039 -to curry for your awesome talk +to Zachary for your awesome talk, 00:06:09.039 --> 00:06:12.960 -and for doing live questions +and for doing live questions. 00:06:12.960 --> 00:06:19.840 -thank you thank you cheers +Thank you.) Thank you. (Amin: Cheers.) diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt index 8fce6e98..57837210 100644 --- a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt +++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt @@ -1,106 +1,109 @@ WEBVTT 00:00:04.080 --> 00:00:04.960 -hi +Hi. 00:00:04.960 --> 00:00:08.559 -i'm zachary canfer and this is waving +I'm Zachary Kanfer, and this is waving 00:00:08.559 --> 00:00:11.679 -and repetitive repetitive repetitive +at repetitive repetitive repetitive 00:00:11.679 --> 00:00:15.759 -music over quarantine i've been bored +music. Over quarantine, I've been bored, 00:00:15.759 --> 00:00:18.400 -and i found this android app that has a +and I found this Android app that has a 00:00:18.400 --> 00:00:19.680 -bunch of mini games +bunch of mini-games, 00:00:19.680 --> 00:00:23.519 -one of which lets you compose music +one of which lets you compose music. 00:00:23.519 --> 00:00:26.640 -and it works but i +And it works, but I 00:00:26.640 --> 00:00:28.160 want a little bit more functionality 00:00:28.160 --> 00:00:30.720 -than it offers it's not very flexible +than it offers, it's not very flexible. 00:00:30.720 --> 00:00:33.760 -so i thought what if i made this +So, I thought what if I made this, 00:00:33.760 --> 00:00:35.360 -what and what programs could i make this +and what programs could I make this 00:00:35.360 --> 00:00:37.760 -in that are really flexible are really +in that are really flexible, are really 00:00:37.760 --> 00:00:40.320 -customizable +customizable. 00:00:40.320 --> 00:00:44.239 -emacs so i looked into it and +Emacs. So, I looked into it, and 00:00:44.239 --> 00:00:46.320 -emacs can play sounds right if you hit +Emacs can play sounds, right? If you hit 00:00:46.320 --> 00:00:47.840 -control g a couple times you'll hear +control g a couple of times, you'll hear 00:00:47.840 --> 00:00:49.760 -like an error tone +like an error tone, 00:00:49.760 --> 00:00:51.360 -and it turns out that that is actually +and it turns out that, that is actually 00:00:51.360 --> 00:00:54.559 -playing a wave file +playing a WAVE file, 00:00:54.559 --> 00:00:58.960 -but what's a wave file +but what's a WAVE file? 00:00:58.960 --> 00:01:01.920 -well it turns out that wave is a musical +Well, it turns out that WAVE is a musical 00:01:01.920 --> 00:01:03.440 -file format +file format, 00:01:03.440 --> 00:01:07.840 -or really an annoying file format +or really an annoying file format. 00:01:07.840 --> 00:01:12.080 -so data in it can be an unsigned integer +So, data in it can be an unsigned integer 00:01:12.080 --> 00:01:15.360 -or a science integer it's not consistent +or a signed integer, it's not consistent, 00:01:15.360 --> 00:01:17.920 -and it's little ending by default which +and it's little-endian by default which 00:01:17.920 --> 00:01:20.320 -is not the way i like to think about it +is not the way I like to think about it. -00:01:20.320 --> 00:01:23.200 -now you can set a wav file to be big +00:01:20.320 --> 00:01:21.600 +Now, you can -00:01:23.200 --> 00:01:25.200 -endian but if you do that +00:01:21.600 --> 00:01:23.733 +set a WAVE file to be big-endian, -00:01:25.200 --> 00:01:28.640 -emacs can't play it so little ending it +00:01:23.733 --> 00:01:25.200 +but if you do that, -00:01:28.640 --> 00:01:30.479 -is +00:01:25.200 --> 00:01:26.600 +Emacs can't play it. + +00:01:26.600 --> 00:01:30.479 +So, little-endian it is. 00:01:30.479 --> 00:01:33.520 -there's also duplicate data fields +There's also duplicate data fields. 00:01:33.520 --> 00:01:35.360 -here are some fields that are fine but +Here are some fields that are fine, but 00:01:35.360 --> 00:01:36.960 then there's a fourth field that's @@ -109,46 +112,46 @@ then there's a fourth field that's calculated based on multiplying two of 00:01:38.960 --> 00:01:40.799 -the other ones together +the other ones together, 00:01:40.799 --> 00:01:42.399 and then there's another data field 00:01:42.399 --> 00:01:44.880 -that's you multiply those three ones +that's… you multiply those three ones 00:01:44.880 --> 00:01:48.479 -together so it's just repetitive and +together. So, it's just repetitive and 00:01:48.479 --> 00:01:50.479 -unnecessary but you have to do it or +unnecessary, but you have to do it, or 00:01:50.479 --> 00:01:54.159 -it's not a valid wave file +it's not a valid WAVE file. 00:01:54.159 --> 00:01:56.479 -also the last part of the file is +Also, the last part of the file is 00:01:56.479 --> 00:01:58.159 described as data 00:01:58.159 --> 00:02:01.759 -or as one website i found said +or as one website I found said, 00:02:01.759 --> 00:02:05.200 -the actual sound data now +the actual sound data. Now, 00:02:05.200 --> 00:02:06.960 -i don't know about you but when i see +I don't know about you but when I see 00:02:06.960 --> 00:02:09.039 -that i think +that, I think, 00:02:09.039 --> 00:02:12.080 -what is a data it turns out +what is data? It turns out 00:02:12.080 --> 00:02:15.120 -that sound is just a wave and +that sound is just a wave, and 00:02:15.120 --> 00:02:17.760 the data is just a bunch of measurements @@ -157,43 +160,43 @@ the data is just a bunch of measurements of the height of that wave forming each 00:02:19.120 --> 00:02:20.400 -sample +sample. 00:02:20.400 --> 00:02:24.480 -so this wave starts at 8 goes 9 11 13 +So, this wave starts at 8 goes 9, 11, 13, 00:02:24.480 --> 00:02:27.840 -14 15 and then back down and if you just +14, 15, and then back down. If you just 00:02:27.840 --> 00:02:29.520 -take those measurements those numbers +take those measurements, those numbers, -00:02:29.520 --> 00:02:32.080 -put them in a file that's all your data +00:02:29.520 --> 00:02:30.700 +put them in a file, -00:02:32.080 --> 00:02:35.200 -is +00:02:30.700 --> 00:02:35.200 +that's all your data is. 00:02:35.200 --> 00:02:36.560 -all right let's go to a demo of my +All right. Let's go to a demo of my 00:02:36.560 --> 00:02:38.959 -program +program. 00:02:38.959 --> 00:02:41.920 -so this is what z music looks like the +So, this is what zmusic looks like. The 00:02:41.920 --> 00:02:44.080 -blue highlighted row is a single beat +blue highlighted row is a single beat, 00:02:44.080 --> 00:02:48.319 -there's 16 of them in this z music file +there's 16 of them in this zmusic file, 00:02:48.319 --> 00:02:52.000 and each dash in the row 00:02:52.000 --> 00:02:55.040 -is a single note increasing starting +is a single note increasing…, starting 00:02:55.040 --> 00:02:57.920 really low all the way on the left and @@ -202,109 +205,112 @@ really low all the way on the left and going up 00:02:58.959 --> 00:03:01.680 -as we go to the right so if we started +as we go to the right. So, if we started 00:03:01.680 --> 00:03:02.400 -playing +playing, 00:03:02.400 --> 00:03:05.040 -we won't hear anything but we'll see the +we won't hear anything, but we'll see the 00:03:05.040 --> 00:03:06.400 highlighted beat is the currently 00:03:06.400 --> 00:03:07.680 -playing one +playing one, + +00:03:07.680 --> 00:03:09.833 +and we see that it loops. -00:03:07.680 --> 00:03:11.120 -and we see that it loops so we can stop +00:03:09.833 --> 00:03:12.720 +So, we can stop it, -00:03:11.120 --> 00:03:12.720 -it +00:03:12.720 --> 00:03:20.633 +and now we can click to add some notes. -00:03:12.720 --> 00:03:30.879 -and now we can click to add some notes +00:03:20.633 --> 00:03:30.879 +[Music] 00:03:30.879 --> 00:03:33.120 -even more than one note at the same time +Even more than one note at the same time -00:03:33.120 --> 00:03:43.920 -works +00:03:33.120 --> 00:03:37.333 +works. -00:03:43.920 --> 00:03:56.160 -and we can even add notes while it's +00:03:37.333 --> 00:03:43.920 +[Music] -00:03:56.160 --> 00:03:58.840 -[Applause] +00:03:43.920 --> 00:03:45.567 +And we can even add notes -00:03:58.840 --> 00:04:00.150 -playing +00:03:45.567 --> 00:03:56.160 +while it's playing. -00:04:00.150 --> 00:04:08.239 -[Applause] +00:03:56.160 --> 00:04:08.239 +[Music] 00:04:08.239 --> 00:04:10.480 -okay here are some other features that i +Okay, here are some other features that I 00:04:10.480 --> 00:04:12.959 -didn't have time to demo +didn't have time to demo. 00:04:12.959 --> 00:04:16.000 -so you can save the music to a file and +So, you can save the music to a file, and 00:04:16.000 --> 00:04:18.239 this is interesting because normally 00:04:18.239 --> 00:04:20.880 -if there's no note in a beat we just +if there's no note in a beat, we just 00:04:20.880 --> 00:04:22.800 -don't play that beat +don't play that beat, 00:04:22.800 --> 00:04:24.639 but if you're writing to a file you have 00:04:24.639 --> 00:04:25.919 -to put something in +to put something in, 00:04:25.919 --> 00:04:27.840 so when it's playing it knows to not 00:04:27.840 --> 00:04:31.360 -make a sound there +make a sound there. -00:04:31.360 --> 00:04:34.479 -we can also use different scales we're +00:04:31.360 --> 00:04:33.800 +We can also use different scales. -00:04:34.479 --> 00:04:36.240 -using the minor pentatonic +00:04:33.800 --> 00:04:36.240 +We're using the minor pentatonic 00:04:36.240 --> 00:04:38.080 -in the demo but you can use the major +in the demo, but you can use the major 00:04:38.080 --> 00:04:39.680 scale the minor scale -00:04:39.680 --> 00:04:42.400 -or anything else and there's also +00:04:39.680 --> 00:04:40.967 +or anything else. -00:04:42.400 --> 00:04:44.400 -keyboard support but it sounds really +00:04:40.967 --> 00:04:43.367 +And there's also keyboard support, -00:04:44.400 --> 00:04:45.199 -bad +00:04:43.367 --> 00:04:45.199 +but it sounds really bad, 00:04:45.199 --> 00:04:48.240 -and i'll explain why later +and I'll explain why later. 00:04:48.240 --> 00:04:50.800 -here are some things i learned while +Here are some things I learned while 00:04:50.800 --> 00:04:53.520 -writing z music +writing zmusic. 00:04:53.520 --> 00:04:56.479 -emacs has buttons which are great as +Emacs has buttons which are great as 00:04:56.479 --> 00:04:58.240 long @@ -313,412 +319,412 @@ long as you don't put two of them right next 00:04:59.919 --> 00:05:02.160 -to each other so if you do that +to each other. So, if you do that, 00:05:02.160 --> 00:05:04.400 mousing over one of them highlights both 00:05:04.400 --> 00:05:06.160 -of them +of them. 00:05:06.160 --> 00:05:07.919 -now that's because a button is really +Now, that's because a button is really 00:05:07.919 --> 00:05:10.080 just a series of characters with a text 00:05:10.080 --> 00:05:11.680 -property to highlight them +property to highlight them. 00:05:11.680 --> 00:05:15.120 -so the fix is you put another character +So, the fix is, you put another character 00:05:15.120 --> 00:05:16.479 -between the two buttons +between the two buttons, 00:05:16.479 --> 00:05:18.080 then mousing over one of them only 00:05:18.080 --> 00:05:19.759 -highlights the one you want +highlights the one you want, 00:05:19.759 --> 00:05:21.600 but even this doesn't work really great 00:05:21.600 --> 00:05:22.800 -for z music +for zmusic, 00:05:22.800 --> 00:05:25.440 -because the music has a lot of very +because zmusic has a lot of very 00:05:25.440 --> 00:05:27.120 -small buttons in a row +small buttons in a row. 00:05:27.120 --> 00:05:29.840 -so it's really easy to accidentally put +So, it's really easy to accidentally put 00:05:29.840 --> 00:05:31.600 your cursor over the space 00:05:31.600 --> 00:05:34.639 -and click on that instead of the button +and click on that instead of the button. 00:05:34.639 --> 00:05:37.120 -so i looked into unicode and i found +So, I looked into unicode, and I found 00:05:37.120 --> 00:05:38.160 this character called 00:05:38.160 --> 00:05:40.800 -a zero width space so we should be able +a zero-width space. So, we should be able 00:05:40.800 --> 00:05:42.560 to put that between buttons and not be 00:05:42.560 --> 00:05:45.120 -able to accidentally click on it +able to accidentally click on it. 00:05:45.120 --> 00:05:46.960 -unfortunately a zeroth space isn't +Unfortunately, a zero-width space isn't 00:05:46.960 --> 00:05:50.080 -actually zero width +actually zero width. 00:05:50.080 --> 00:05:51.680 -if we put a hundred of them between two +If we put a hundred of them between two 00:05:51.680 --> 00:05:53.759 -other characters you can see there's +other characters, you can see there's 00:05:53.759 --> 00:05:54.880 -space there +space there, 00:05:54.880 --> 00:05:56.240 -and i think what's happening is the +and I think what's happening is, the 00:05:56.240 --> 00:05:58.160 space is zero width 00:05:58.160 --> 00:06:01.360 -but then emax put uses one pixel between +but then Emacs `put` uses one pixel between 00:06:01.360 --> 00:06:02.800 each pair of characters 00:06:02.800 --> 00:06:08.080 -for the cursor so it's almost zero width +for the cursor, so it's almost zero width. 00:06:08.080 --> 00:06:09.919 -some ways to play sound that don't quite +Some ways to play sound that don't quite 00:06:09.919 --> 00:06:12.960 -work play sound plays music +work! `play-sound` plays music, 00:06:12.960 --> 00:06:14.800 -but it blocks you can't do things like +but it blocks, you can't do things like, 00:06:14.800 --> 00:06:17.280 -set other notes or even pause the music +set other notes or even pause the music. 00:06:17.280 --> 00:06:19.600 -and if you throw it into async.el it's +And if you throw it into async.el, it's 00:06:19.600 --> 00:06:21.600 -silent and i don't know why +silent, and I don't know why. 00:06:21.600 --> 00:06:24.479 -so the solution i went with is taking +So, the solution I went with is taking 00:06:24.479 --> 00:06:25.440 -that wav file +that WAVE file, 00:06:25.440 --> 00:06:27.039 -ran into the file system and then +ran into the file system, and then 00:06:27.039 --> 00:06:29.199 shelling out to a native executable to 00:06:29.199 --> 00:06:30.639 -play the sound +play the sound. 00:06:30.639 --> 00:06:32.880 -and that works fine as long as you only +And that works fine as long as you only 00:06:32.880 --> 00:06:34.240 -do it once +do it once, 00:06:34.240 --> 00:06:36.080 -because if you do it a couple times at +because if you do it a couple of times at 00:06:36.080 --> 00:06:37.600 -the same time like if you have a chord +the same time like if you have a chord, 00:06:37.600 --> 00:06:38.639 and you want to play three notes 00:06:38.639 --> 00:06:40.000 -simultaneously +simultaneously, 00:06:40.000 --> 00:06:42.319 -you get this weird interference and +you get this weird interference, and 00:06:42.319 --> 00:06:43.680 that's actually why the keyboard from 00:06:43.680 --> 00:06:46.319 -before didn't work +before didn't work. 00:06:46.319 --> 00:06:49.199 -also side effects have this unexpected +Also, side effects have this unexpected 00:06:49.199 --> 00:06:50.240 -impact +impact, 00:06:50.240 --> 00:06:53.039 -uh when you saw the demo it was running +when you saw the demo it was running 00:06:53.039 --> 00:06:55.120 -pretty smoothly +pretty smoothly, 00:06:55.120 --> 00:06:57.680 -but if i just add one message statement +but if I just add one message statement 00:06:57.680 --> 00:06:58.479 every beat for 00:06:58.479 --> 00:07:00.960 -debugging purposes i was getting lag and +debugging purposes, I was getting lag and 00:07:00.960 --> 00:07:03.759 -jitter +jitter. 00:07:03.759 --> 00:07:05.440 -here's the one thing i learned about +Here's the one thing I learned about 00:07:05.440 --> 00:07:08.319 -music theory music theory +music theory, music theory 00:07:08.319 --> 00:07:11.599 -is not easy to program +is not easy to program. 00:07:11.599 --> 00:07:12.880 -i was looking around to see what +I was looking around to see what 00:07:12.880 --> 00:07:15.440 -concepts we can use to code the scales +concepts we can use to code the scales, -00:07:15.440 --> 00:07:16.080 -to code the +00:07:15.440 --> 00:07:16.933 +to code the notes, -00:07:16.080 --> 00:07:18.160 -notes the first thing that i saw is +00:07:16.933 --> 00:07:18.160 +the first thing that I saw is 00:07:18.160 --> 00:07:20.240 -scale degrees +scale degrees, 00:07:20.240 --> 00:07:23.360 -and this when i looked into it you don't +and this when I looked into it, you don't 00:07:23.360 --> 00:07:26.319 -want to program in scale degrees +want to program in scale degrees. 00:07:26.319 --> 00:07:28.240 -so you see we have the first second +So, you see we have the first, second, 00:07:28.240 --> 00:07:29.759 -third fourth fifth sixth seventh but +third, fourth, fifth, sixth, seventh but 00:07:29.759 --> 00:07:32.080 -then it wraps around that octave up +then it wraps around. That octave up 00:07:32.080 --> 00:07:33.919 -is also a first and that's because both +is also a first, and that's because both 00:07:33.919 --> 00:07:36.000 -of those notes are c +of those notes are C, 00:07:36.000 --> 00:07:38.479 -uh so that didn't work and also you +so that didn't work, and also you 00:07:38.479 --> 00:07:39.759 couldn't really easily 00:07:39.759 --> 00:07:43.599 -specify a flat or sharp you could say +specify a flat or sharp. You could say 00:07:43.599 --> 00:07:47.680 -a sharp third uh or +a sharp third or 00:07:47.680 --> 00:07:50.879 -you know a flat seventh or whatever but +you know, a flat seventh or whatever, but 00:07:50.879 --> 00:07:52.319 then you kind of have these two pieces 00:07:52.319 --> 00:07:53.759 -of data that indicate the note and i +of data that indicate the note, and I 00:07:53.759 --> 00:07:55.840 -didn't i didn't love that +didn't love that. 00:07:55.840 --> 00:07:57.440 -so i looked a little looked again and i +So, I looked again, and I 00:07:57.440 --> 00:07:59.280 -found intervals +found intervals, 00:07:59.280 --> 00:08:01.120 -and then i thought about it and you +and then I thought about it, and you 00:08:01.120 --> 00:08:02.080 don't really want to program in 00:08:02.080 --> 00:08:03.440 -intervals either +intervals either. 00:08:03.440 --> 00:08:05.520 -it fixes some of the problems with scale +It fixes some of the problems with scale 00:08:05.520 --> 00:08:07.039 -degrees you see +degrees, you see, 00:08:07.039 --> 00:08:08.319 all the way on the right you have an 00:08:08.319 --> 00:08:10.319 -octave so you wrap to 8 and you +octave, so you wrap to 8, and you 00:08:10.319 --> 00:08:13.039 -go 9 10 and that works but you solve the +go 9, 10 and that works. But you solve the 00:08:13.039 --> 00:08:14.319 -same problem you see you have a major +same problem, you see you have a major 00:08:14.319 --> 00:08:16.400 third but below we also have a minor 00:08:16.400 --> 00:08:18.080 -third so you saw that problem of having +third, so you saw that problem of having 00:08:18.080 --> 00:08:20.160 -two pieces of information +two pieces of information. 00:08:20.160 --> 00:08:23.360 -uh so i thought about it music's really +So, I thought about it. Music is really 00:08:23.360 --> 00:08:27.120 -frequencies like an a is 440 hertz +frequencies. Like an A is 440 hertz. 00:08:27.120 --> 00:08:28.400 -so at a low level that's what we're +So, at a low level that's what we're 00:08:28.400 --> 00:08:29.360 -going to do we're just going to use +going to do, we're just going to use 00:08:29.360 --> 00:08:30.560 -frequencies +frequencies. 00:08:30.560 --> 00:08:32.800 -and then at the one level above that uh +And then at the one level above that, 00:08:32.800 --> 00:08:34.159 that's a little bit easier for humans to 00:08:34.159 --> 00:08:35.360 -think about +think about, 00:08:35.360 --> 00:08:37.039 we're going to use semitones up from the 00:08:37.039 --> 00:08:39.519 -root which is kind of like scale degrees +root, which is kind of like scale degrees, 00:08:39.519 --> 00:08:40.959 but instead of just counting each note 00:08:40.959 --> 00:08:42.880 -as one more we're going to say how many +as one more, we're going to say how many 00:08:42.880 --> 00:08:44.560 -semitones up it is +semitones up it is. 00:08:44.560 --> 00:08:47.200 -so if there's a sharp between two notes +So, if there's a sharp between two notes, 00:08:47.200 --> 00:08:48.480 that's going to be two steps up instead 00:08:48.480 --> 00:08:50.000 -of just one +of just one. 00:08:50.000 --> 00:08:51.279 -and then we translate those two +And then we translate those two 00:08:51.279 --> 00:08:54.160 -frequencies so your a is 440 hertz +frequencies, so your A is 440 hertz, 00:08:54.160 --> 00:08:56.920 another note might be 00:08:56.920 --> 00:08:58.480 -613.5 +613.5, 00:08:58.480 --> 00:09:00.720 -or whatever and we that's we use the low +or whatever, and that's we use the low 00:09:00.720 --> 00:09:02.959 -level to play +level to play. 00:09:02.959 --> 00:09:05.200 -some future work i have i want to add +Some future work I have, I want to add 00:09:05.200 --> 00:09:06.480 -some drums +some drums. 00:09:06.480 --> 00:09:08.240 -i want to make that keyboard actually +I want to make that keyboard actually 00:09:08.240 --> 00:09:09.680 -work uh +work, 00:09:09.680 --> 00:09:12.399 -and uh computers and synthesizers are +and computers and synthesizers are 00:09:12.399 --> 00:09:14.320 the only place you hear a pure sine wave 00:09:14.320 --> 00:09:16.000 -like the one we have here +like the one we have here, 00:09:16.000 --> 00:09:17.680 -so i want to add overtones or other +so I want to add overtones or other 00:09:17.680 --> 00:09:19.440 -octaves above it uh just to make it +octaves above it just to make it 00:09:19.440 --> 00:09:23.120 -sound a little bit more realistic +sound a little bit more realistic. 00:09:23.120 --> 00:09:25.360 -i've put notes references in the source +I've put notes references and the source -00:09:25.360 --> 00:09:28.480 -code up at zck dot me slash emacs conf +00:09:25.360 --> 00:09:26.000 +code up -00:09:28.480 --> 00:09:31.839 -2020 i'm one of the organizers of emacs +00:09:26.000 --> 00:09:30.067 +at zck.org/emacsconf2020 [updated]. -00:09:31.839 --> 00:09:33.040 -nyc +00:09:30.067 --> 00:09:33.040 +I'm one of the organizers of EmacsNYC 00:09:33.040 --> 00:09:36.080 -check that out and if you take a look +check that out. And if you take a look 00:09:36.080 --> 00:09:38.240 -or have any thoughts i'd love to hear +or have any thoughts, I'd love to hear 00:09:38.240 --> 00:09:39.839 -them and +them, and 00:09:39.839 --> 00:09:46.160 -thanks so much for coming to my talk +thanks so much for coming to my talk. diff --git a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt index fd313f52..89dc142e 100644 --- a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt +++ b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt @@ -3,17 +3,17 @@ WEBVTT 00:00:00.320 --> 00:00:03.280 Hello, I'm Richard Stallman, -00:00:03.280 --> 00:00:08.080 -founder of the GNU project. In 1976, I +00:00:03.280 --> 00:00:07.816 +founder of the GNU project. -00:00:08.080 --> 00:00:09.200 -developed the first +00:00:07.816 --> 00:00:09.200 +In 1976, I developed the first -00:00:09.200 --> 00:00:12.000 -Emacs editor with some help from Guy +00:00:09.200 --> 00:00:12.320 +Emacs editor with some help -00:00:12.000 --> 00:00:13.440 -Steele. +00:00:12.320 --> 00:00:13.440 +from Guy Steele. 00:00:13.440 --> 00:00:15.839 Then, shortly after starting to develop @@ -24,14 +24,9 @@ the GNU operating system in 1984, 00:00:19.119 --> 00:00:22.240 I wanted an Emacs editor for it. -00:00:22.240 --> 00:00:24.640 +00:00:22.240 --> 00:00:29.519 So I started writing GNU Emacs in - -00:00:24.640 --> 00:00:25.560 -September - -00:00:25.560 --> 00:00:29.519 -1984. +September 1984. 00:00:29.519 --> 00:00:32.640 Several years ago we decided to move @@ -39,47 +34,38 @@ Several years ago we decided to move 00:00:32.640 --> 00:00:35.920 many of the Emacs Lisp packages outside -00:00:35.920 --> 00:00:36.559 -the core - -00:00:36.559 --> 00:00:39.760 -Emacs distribution into a separate - -00:00:39.760 --> 00:00:42.960 -package archive that we call the Emacs +00:00:35.920 --> 00:00:39.866 +the core Emacs distribution into -00:00:42.960 --> 00:00:43.280 -Lisp +00:00:39.866 --> 00:00:46.480 +a separate package archive that we call +the Emacs Lisp package archive ELPA. -00:00:43.280 --> 00:00:46.480 -package archive ELPA. +00:00:46.480 --> 00:00:49.555 +There were two main reasons for this. -00:00:46.480 --> 00:00:48.719 -There were two main reasons for this. One +00:00:49.555 --> 00:00:51.520 +One is to make the Emacs +distribution smaller -00:00:48.719 --> 00:00:51.520 -is to make the Emacs distribution smaller +00:00:51.520 --> 00:00:54.870 +so every user wouldn't have to -00:00:51.520 --> 00:00:54.320 -so every user wouldn't have to get all +00:00:54.870 --> 00:00:55.680 +get all the packages -00:00:54.320 --> 00:00:55.680 -the packages +00:00:55.680 --> 00:00:58.820 +and install all the packages. -00:00:55.680 --> 00:00:58.320 -and install all the packages. And the +00:00:58.820 --> 00:01:00.480 +And the other reason was to make it +possible to -00:00:58.320 --> 00:01:00.480 -other reason was to make it possible to +00:01:00.480 --> 00:01:03.485 +release individual packages -00:01:00.480 --> 00:01:01.520 -release - -00:01:01.520 --> 00:01:04.559 -individual packages separately - -00:01:04.559 --> 00:01:08.880 -from Emacs releases. +00:01:03.485 --> 00:01:08.880 +separately from Emacs releases. 00:01:08.880 --> 00:01:13.119 Now, at that point somehow we decided to @@ -87,10 +73,8 @@ Now, at that point somehow we decided to 00:01:13.119 --> 00:01:17.040 support loading packages from -00:01:17.040 --> 00:01:19.520 +00:01:17.040 --> 00:01:21.119 a variety of different Emacs Lisp - -00:01:19.520 --> 00:01:21.119 package archives 00:01:21.119 --> 00:01:25.520 @@ -99,56 +83,52 @@ and ours would be called the GNU ELPA, 00:01:25.520 --> 00:01:29.280 but ELPA could be any other. -00:01:29.280 --> 00:01:32.079 -Now, I think that naming was a mistake. We - -00:01:32.079 --> 00:01:32.799 -should have +00:01:29.280 --> 00:01:32.945 +Now, I think that naming was a mistake. -00:01:32.799 --> 00:01:35.119 -meant, we should have decided that ELPA +00:01:32.945 --> 00:01:35.119 +We should have meant, we should have +decided that ELPA 00:01:35.119 --> 00:01:37.759 referred to our package archive -00:01:37.759 --> 00:01:39.759 -and any other package archive should be +00:01:37.759 --> 00:01:39.297 +and any other package archive -00:01:39.759 --> 00:01:42.479 -called some other name. +00:01:39.297 --> 00:01:42.479 +should be called some other name. -00:01:42.479 --> 00:01:46.079 -Oh, well! Uh this +00:01:42.479 --> 00:01:46.128 +Oh, well! Uh this is a mistake, -00:01:46.079 --> 00:01:48.320 -is a mistake I believe, because it leads +00:01:46.128 --> 00:01:48.320 +I believe, because it leads -00:01:48.320 --> 00:01:50.240 -to a lot of confusion it would have been +00:01:48.320 --> 00:01:49.397 +to a lot of confusion. -00:01:50.240 --> 00:01:51.119 -clearer +00:01:49.397 --> 00:01:51.119 +It would have been clearer 00:01:51.119 --> 00:01:55.759 -if we had uh used the other naming. +if we had used the other naming. -00:01:55.759 --> 00:01:59.600 -Because the difference between having a +00:01:55.759 --> 00:01:59.812 +Because the difference between -00:01:59.600 --> 00:02:00.399 -package in - -00:02:00.399 --> 00:02:04.159 -core Emacs and having it in GNU ELPA, +00:01:59.812 --> 00:02:04.159 +having a package in core Emacs and +having it in GNU ELPA, 00:02:04.159 --> 00:02:07.840 is purely a practical convenience matter. -00:02:07.840 --> 00:02:09.679 -Convenience of distribution and +00:02:07.840 --> 00:02:10.501 +Convenience of distribution -00:02:09.679 --> 00:02:12.000 -convenience of maintenance. +00:02:10.501 --> 00:02:12.000 +and convenience of maintenance. 00:02:12.000 --> 00:02:14.879 We wanted to be able to move packages @@ -156,11 +136,11 @@ We wanted to be able to move packages 00:02:14.879 --> 00:02:16.800 between the two -00:02:16.800 --> 00:02:20.160 -whenever that was convenient. So, to make +00:02:16.800 --> 00:02:19.258 +whenever that was convenient. -00:02:20.160 --> 00:02:21.200 -that possible +00:02:19.258 --> 00:02:21.200 +So, to make that possible 00:02:21.200 --> 00:02:23.200 we insisted on getting copyright @@ -168,10 +148,8 @@ we insisted on getting copyright 00:02:23.200 --> 00:02:26.319 assignments for packages in GNU ELPA -00:02:26.319 --> 00:02:28.800 +00:02:26.319 --> 00:02:31.360 just the same way we do for packages in - -00:02:28.800 --> 00:02:31.360 core Emacs. 00:02:31.360 --> 00:02:33.760 @@ -192,28 +170,22 @@ Unfortunately there was a problem with 00:02:44.879 --> 00:02:46.560 the way that was done. -00:02:46.560 --> 00:02:49.120 +00:02:46.560 --> 00:02:50.000 For the most part, the developers of - -00:02:49.120 --> 00:02:50.000 these packages -00:02:50.000 --> 00:02:52.480 -wouldn't even tell us about them. They - -00:02:52.480 --> 00:02:53.599 -posted them +00:02:50.000 --> 00:02:52.218 +wouldn't even tell us about them. -00:02:53.599 --> 00:02:56.720 -in another package archive where we +00:02:52.218 --> 00:02:56.027 +They posted them in another package +archive -00:02:56.720 --> 00:02:58.480 -didn't know about them +00:02:56.027 --> 00:02:58.480 +where we didn't know about them -00:02:58.480 --> 00:03:02.000 -and (where they) no attempt was made to - -00:03:02.000 --> 00:03:03.120 +00:02:58.480 --> 00:03:03.120 +and no attempt was made to try to fit them 00:03:03.120 --> 00:03:06.560 @@ -225,41 +197,40 @@ as parts of the Emacs distribution. 00:03:10.879 --> 00:03:14.480 This led to both moral problems, -00:03:14.480 --> 00:03:16.959 -packages that depended on non-free +00:03:14.480 --> 00:03:16.375 +(packages that depended on -00:03:16.959 --> 00:03:19.599 -software in order to be usable +00:03:16.375 --> 00:03:19.599 +non-free software in order to be usable) -00:03:19.599 --> 00:03:22.159 -and technical problems because the +00:03:19.599 --> 00:03:21.354 +and technical problems, -00:03:22.159 --> 00:03:24.319 -developers of those packages didn't +00:03:21.354 --> 00:03:24.877 +because the developers of those packages -00:03:24.319 --> 00:03:26.159 -coordinate with us +00:03:24.877 --> 00:03:26.159 +didn't coordinate with us 00:03:26.159 --> 00:03:29.519 about how to make it useful and -00:03:29.519 --> 00:03:33.040 -convenient and clean to have them - -00:03:33.040 --> 00:03:36.560 -in Emacs. +00:03:29.519 --> 00:03:36.560 +convenient and clean to have them in +Emacs. 00:03:36.560 --> 00:03:41.120 So, the idea of NonGNU ELPA -00:03:41.120 --> 00:03:44.840 -is an effort to smooth these things +00:03:41.120 --> 00:03:45.337 +is an effort to smooth these +things out. -00:03:44.840 --> 00:03:48.319 -out. The fundamental plan of +00:03:45.337 --> 00:03:48.319 +The fundamental plan of 00:03:48.319 --> 00:03:51.680 -NonGNU ELPA is that, +NonGNU ELPA is that 00:03:51.680 --> 00:03:54.480 we won't ask for copyright assignments @@ -267,134 +238,101 @@ we won't ask for copyright assignments 00:03:54.480 --> 00:03:56.159 for those packages. -00:03:56.159 --> 00:03:58.560 +00:03:56.159 --> 00:04:00.000 So, we won't be able to put them into - -00:03:58.560 --> 00:04:00.000 core Emacs; -00:04:00.000 --> 00:04:04.080 -at least not easily, but we will - -00:04:04.080 --> 00:04:06.959 -have some control over how we distribute +00:04:00.000 --> 00:04:03.550 +at least not easily, -00:04:06.959 --> 00:04:09.519 -them. +00:04:03.550 --> 00:04:09.519 +but we will have some control over how +we distribute them. -00:04:09.519 --> 00:04:12.640 -We can put any package into +00:04:09.519 --> 00:04:14.691 +We can put any package into NonGNU ELPA -00:04:12.640 --> 00:04:15.439 -NonGNU ELPA as long as it's free +00:04:14.691 --> 00:04:16.320 +as long as it's free software. -00:04:15.439 --> 00:04:16.320 -software. +00:04:16.320 --> 00:04:23.360 +If we like it, we can set up that way +for users to get it. -00:04:16.320 --> 00:04:19.440 -If we like it we can - -00:04:19.440 --> 00:04:23.360 -set up that way for users to get it. - -00:04:23.360 --> 00:04:25.919 -We could put the package in exactly as - -00:04:25.919 --> 00:04:26.720 -it is +00:04:23.360 --> 00:04:26.720 +We could put the package in +exactly as it is 00:04:26.720 --> 00:04:29.919 if there's no problem at all with it. -00:04:29.919 --> 00:04:32.160 -We can make an arrangement with the +00:04:29.919 --> 00:04:32.647 +We can make an arrangement -00:04:32.160 --> 00:04:34.160 -package's developers +00:04:32.647 --> 00:04:34.160 +with the package's developers 00:04:34.160 --> 00:04:38.000 to work on it with us and maintain it -00:04:38.000 --> 00:04:40.880 -directly for distribution by NonGNU - -00:04:40.880 --> 00:04:42.560 -ELPA - -00:04:42.560 --> 00:04:45.280 -but if they are not interested we can - -00:04:45.280 --> 00:04:46.080 -put it in - -00:04:46.080 --> 00:04:49.680 -ourselves and if we need to make any - -00:04:49.680 --> 00:04:52.000 -changes we can do so. +00:04:38.000 --> 00:04:42.560 +directly for distribution by NonGNU ELPA, -00:04:52.000 --> 00:04:55.120 -So, NonGNU ELPA +00:04:42.560 --> 00:04:45.778 +but if they are not interested, -00:04:55.120 --> 00:04:59.040 -is not meant to be just a way +00:04:45.778 --> 00:04:48.729 +we can put it in ourselves, -00:04:59.040 --> 00:05:01.360 -that others can distribute their +00:04:48.729 --> 00:04:50.453 +and if we need to make any changes, -00:05:01.360 --> 00:05:02.720 -packages. +00:04:50.453 --> 00:04:52.000 +we can do so. -00:05:02.720 --> 00:05:05.039 -It's meant at least in a minimal +00:04:52.000 --> 00:04:58.688 +So, NonGNU ELPA is not meant to be -00:05:05.039 --> 00:05:06.000 -technical +00:04:58.688 --> 00:05:02.720 +just a way that others can distribute +their packages. -00:05:06.000 --> 00:05:10.479 -sense to work with GNU Emacs, and we'll +00:05:02.720 --> 00:05:04.336 +It's meant, at least in -00:05:10.479 --> 00:05:12.800 -make changes if necessary so that it +00:05:04.336 --> 00:05:07.574 +a minimal technical sense, -00:05:12.800 --> 00:05:14.240 -works smoothly with +00:05:07.574 --> 00:05:10.686 +to work with GNU Emacs, -00:05:14.240 --> 00:05:18.720 -Emacs. And +00:05:10.686 --> 00:05:12.305 +and we'll make changes if necessary, -00:05:18.720 --> 00:05:22.160 -this means that we're going to maintain +00:05:12.305 --> 00:05:17.928 +so that it works smoothly with Emacs. -00:05:22.160 --> 00:05:23.280 -it differently +00:05:17.928 --> 00:05:25.365 +And this means that we're going to +maintain it differently from GNU ELPA. -00:05:23.280 --> 00:05:27.600 -from GNU ELPA. Well, GNU ELPA - -00:05:27.600 --> 00:05:29.759 -is hosted in a way that is actually - -00:05:29.759 --> 00:05:31.520 -rather inconvenient. +00:05:25.365 --> 00:05:31.520 +Well, GNU ELPA is hosted in a way that +is actually rather inconvenient. 00:05:31.520 --> 00:05:35.600 It is one single Git repository. -00:05:35.600 --> 00:05:38.639 -And so anybody that has access to write - -00:05:38.639 --> 00:05:39.039 -it - -00:05:39.039 --> 00:05:42.560 -can write any part of it. There are many +00:05:35.600 --> 00:05:39.039 +And so anybody that has access +to write it -00:05:42.560 --> 00:05:44.639 -different packages in there maintained +00:05:39.039 --> 00:05:41.239 +can write any part of it. -00:05:44.639 --> 00:05:46.080 -by different people, +00:05:41.239 --> 00:05:46.080 +There are many different packages in +there, maintained by different people, 00:05:46.080 --> 00:05:48.080 and we have no way to give each one of @@ -402,47 +340,40 @@ and we have no way to give each one of 00:05:48.080 --> 00:05:50.960 them access to per own package -00:05:50.960 --> 00:05:54.720 -and not to the others. Well, with NonGNU +00:05:50.960 --> 00:05:53.122 +and not to the others. -00:05:54.720 --> 00:05:58.400 -ELPA we plan to fix that. The idea is to +00:05:53.122 --> 00:05:57.035 +Well, with NonGNU ELPA, +we plan to fix that. -00:05:58.400 --> 00:05:59.440 -have +00:05:57.035 --> 00:06:01.411 +The idea is to have +a single Git repository -00:05:59.440 --> 00:06:02.479 -a single Git repository where you can +00:06:01.411 --> 00:06:05.600 +where you can download various packages from. -00:06:02.479 --> 00:06:05.600 -download various packages from. +00:06:05.600 --> 00:06:08.400 +But they won't be maintained there. -00:06:05.600 --> 00:06:08.800 -But, they won't be maintained there. Each +00:06:08.400 --> 00:06:10.800 +Each of those packages will be -00:06:08.800 --> 00:06:10.800 -of those packages will be +00:06:10.800 --> 00:06:15.280 +copied automatically from some other place. -00:06:10.800 --> 00:06:14.080 -copied automatically from some other +00:06:15.280 --> 00:06:18.311 +Probably some other repository -00:06:14.080 --> 00:06:15.280 -place. +00:06:18.311 --> 00:06:22.960 +where the right people have access to work on it. -00:06:15.280 --> 00:06:18.800 -Probably some other repository where +00:06:22.960 --> 00:06:26.375 +And this way we can avoid giving -00:06:18.800 --> 00:06:21.759 -the right people have access to work on - -00:06:21.759 --> 00:06:22.960 -it. - -00:06:22.960 --> 00:06:26.479 -And this way we can avoid giving a - -00:06:26.479 --> 00:06:28.160 -gigantic number of people +00:06:26.375 --> 00:06:28.160 +a gigantic number of people 00:06:28.160 --> 00:06:32.240 access to every part of it. @@ -453,20 +384,17 @@ So far NonGNU ELPA is just a plan, 00:06:37.039 --> 00:06:40.479 we need people to implement the plan. -00:06:40.479 --> 00:06:43.280 -So, if you would like to help please - -00:06:43.280 --> 00:06:45.120 -write to me. +00:06:40.479 --> 00:06:43.825 +So, if you would like to help, -00:06:45.120 --> 00:06:47.759 -I think this is a very important step +00:06:43.825 --> 00:06:45.120 +please write to me. -00:06:47.759 --> 00:06:49.520 -for progress +00:06:45.120 --> 00:06:49.520 +I think this is a very important step for progress 00:06:49.520 --> 00:06:52.639 and it's got to be implemented. 00:06:52.639 --> 00:06:57.919 -Thanks and happy hacking!
\ No newline at end of file +Thanks and happy hacking! @@ -75,3 +75,5 @@ tbody td { padding: 0.5em; border: 1px solid #ced4da; } + +.subtitle { cursor: pointer } diff --git a/templates/page.tmpl b/templates/page.tmpl index 576f3d66..0ccf7af6 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -69,26 +69,40 @@ let qnaVideo; // some pages have a questions and answers video let timestamps; - // expects a string like "mm:ss" + // expects a string like "mm:ss.mmm" function parseSeconds(timeString) { - const times = timeString.split(":"); - const minutes = parseFloat(times[0]); - const seconds = parseFloat(times[1]); - return (minutes * 60) + seconds; + return timeString.split(":").reduce(function(prev, o) { + return prev * 60 + parseFloat(o); + }, 0); } window.onload = function initScript() { - mainVideo = document.getElementById("mainVideo"); - qnaVideo = document.getElementById("qnaVideo"); - timestamps = document.getElementsByClassName("time-link"); - let len = timestamps.length; - for (let i = 0; i < len; i++) { - timestamps[i].onclick = function () { - const videoType = this.href.split("/").pop(); - const video = (videoType == "#mainVideo") ? mainVideo : qnaVideo; - video.currentTime = parseSeconds(this.innerText) - }; + mainVideo = document.getElementById("mainVideo"); + qnaVideo = document.getElementById("qnaVideo"); + timestamps = document.getElementsByClassName("time-link"); + let len = timestamps.length; + for (let i = 0; i < len; i++) { + timestamps[i].onclick = function () { + const videoType = this.href.split("/").pop(); + const video = (videoType == "#mainVideo") ? mainVideo : qnaVideo; + video.currentTime = parseSeconds(this.innerText) + }; + } + let handleSubtitleClick = function(event) { + let video = event.target.attributes['data-video'].value; + let start = event.target.attributes['data-start'].value + let videoElem = document.getElementById(video); + if (videoElem) { + videoElem.currentTime = parseSeconds(start); + videoElem.scrollIntoView(); } + } + + let subtitles = document.getElementsByClassName('subtitle'); + for (let i = 0; i < subtitles.length; i++) { + subtitles[i].onclick = handleSubtitleClick; + } + } // @license-end </script> diff --git a/templates/subtitle.md b/templates/subtitle.md new file mode 100644 index 00000000..67906b4b --- /dev/null +++ b/templates/subtitle.md @@ -0,0 +1,3 @@ +<TMPL_IF new> + +<a href="#<TMPL_VAR video>" class="subtitle" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>">[<TMPL_VAR start>]</a> <span class="subtitle" data-start="<TMPL_VAR start>" title="<TMPL_VAR start">" data-video="<TMPL_VAR video>"><TMPL_VAR text></span><TMPL_ELSE><span class="subtitle" title="<TMPL_VAR start>" data-start="<TMPL_VAR start>" data-video="<TMPL_VAR video>"><TMPL_VAR text></span></TMPL_IF>
\ No newline at end of file |