diff options
author | EmacsConf Organizers <orga@front0.emacsconf.org> | 2021-01-30 17:00:44 +0000 |
---|---|---|
committer | EmacsConf Organizers <orga@front0.emacsconf.org> | 2021-01-30 17:00:44 +0000 |
commit | 0b487f878d36f62b7a29df13e4172cf04243e45f (patch) | |
tree | 5202f7dde992fa00dabd0ed90fb620231bc6e57a /2020/info | |
parent | 677d96158e0eb1d975bb76c7a6e0c695b42aabd2 (diff) | |
parent | 42831835bf8daf375e9515f84f5f9ff2adac7f94 (diff) | |
download | emacsconf-wiki-0b487f878d36f62b7a29df13e4172cf04243e45f.tar.xz emacsconf-wiki-0b487f878d36f62b7a29df13e4172cf04243e45f.zip |
Merge branch 'master' of git://git.emacsconf.org/emacsconf-wiki
Diffstat (limited to '')
-rw-r--r-- | 2020/info/01.md | 2 | ||||
-rw-r--r-- | 2020/info/02.md | 870 | ||||
-rw-r--r-- | 2020/info/03.md | 153 | ||||
-rw-r--r-- | 2020/info/04.md | 280 | ||||
-rw-r--r-- | 2020/info/05.md | 920 | ||||
-rw-r--r-- | 2020/info/06.md | 413 | ||||
-rw-r--r-- | 2020/info/07.md | 325 | ||||
-rw-r--r-- | 2020/info/15.md | 109 | ||||
-rw-r--r-- | 2020/info/20.md | 488 | ||||
-rw-r--r-- | 2020/info/35.md | 234 | ||||
-rw-r--r-- | 2020/info/39.md | 204 |
11 files changed, 2809 insertions, 1189 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 --> |