0:00:01.360,0:00:07.279 hello my name is grant shangri 0:00:04.480,0:00:07.919 this is my talk titled bard beavermax 0:00:07.279,0:00:10.719 publishing 0:00:07.919,0:00:12.799 music with emacs i'm a software 0:00:10.719,0:00:14.400 developer with unabridged software in 0:00:12.799,0:00:16.800 lincoln nebraska 0:00:14.400,0:00:18.720 long time emacs user relatively new 0:00:16.800,0:00:20.480 emacs hacker 0:00:18.720,0:00:22.960 and uh hopefully i'll be able to show 0:00:20.480,0:00:30.480 you my workflow with 0:00:22.960,0:00:33.440 how i publish music with emacs 0:00:30.480,0:00:35.520 all right so as a musician i would like 0:00:33.440,0:00:37.200 to publish my music online 0:00:35.520,0:00:39.040 you know i could publish with popular 0:00:37.200,0:00:42.000 online music services 0:00:39.040,0:00:44.719 but i'm more of a diy type so i chose to 0:00:42.000,0:00:48.160 go ahead and publish with emacs 0:00:44.719,0:00:49.760 so what's the motivation behind this 0:00:48.160,0:00:51.600 a lot of it comes down to some 0:00:49.760,0:00:54.960 fundamental freedoms 0:00:51.600,0:00:57.920 that you know emacs gnu software 0:00:54.960,0:00:59.120 kind of represent to me as well as kind 0:00:57.920,0:01:01.840 of my 0:00:59.120,0:01:03.680 ideas on culture and my background i 0:01:01.840,0:01:04.080 don't believe that music is a consumer 0:01:03.680,0:01:06.080 good 0:01:04.080,0:01:08.320 um it's a form of knowledge like an 0:01:06.080,0:01:10.479 algorithm 0:01:08.320,0:01:13.119 and it's just like such a part of 0:01:10.479,0:01:16.640 culture like in tribal cultures music 0:01:13.119,0:01:18.000 was seen as a gift from the cosmos or 0:01:16.640,0:01:19.920 the gods and it was 0:01:18.000,0:01:21.920 a gift maybe through an individual 0:01:19.920,0:01:23.520 vessel but was shared with the people 0:01:21.920,0:01:26.799 and shared with everyone 0:01:23.520,0:01:29.840 kept alive by the culture itself 0:01:26.799,0:01:31.520 and so to me music is something that 0:01:29.840,0:01:34.640 should be shared and should be 0:01:31.520,0:01:36.560 freely enjoyed by everyone of course 0:01:34.640,0:01:39.040 artists should be compensated as well 0:01:36.560,0:01:41.040 but that's a whole different topic 0:01:39.040,0:01:42.720 and so when i want to share my music i 0:01:41.040,0:01:43.520 want to do it without impacting anyone's 0:01:42.720,0:01:45.680 freedom 0:01:43.520,0:01:48.960 using gnu software like emacs is a good 0:01:45.680,0:01:48.960 way that i can ensure that 0:01:49.200,0:01:55.840 i won't be requiring people to 0:01:52.840,0:01:57.119 uh sign away their freedoms for anything 0:01:55.840,0:01:58.799 there's a lot more i could say about 0:01:57.119,0:02:00.960 this but i don't have time 0:01:58.799,0:02:03.439 feel free to reach out to me by email or 0:02:00.960,0:02:06.479 irc 0:02:03.439,0:02:08.239 um and part of the motivation for me 0:02:06.479,0:02:10.720 personally is that emacs is super 0:02:08.239,0:02:12.720 magical it's an all-in-one solution 0:02:10.720,0:02:14.480 like i said the gnu software aligns with 0:02:12.720,0:02:16.800 creative commons ideas 0:02:14.480,0:02:18.879 i can do file management i can author 0:02:16.800,0:02:20.239 html all the web stuff i need even 0:02:18.879,0:02:22.640 illiterate style 0:02:20.239,0:02:24.640 i can handle media and metadata i've got 0:02:22.640,0:02:26.800 version control remote server access 0:02:24.640,0:02:28.080 all the tools i need are right under my 0:02:26.800,0:02:30.000 fingertips with this 0:02:28.080,0:02:31.440 tool that i use every day for a long 0:02:30.000,0:02:34.319 time i don't need to look 0:02:31.440,0:02:36.319 elsewhere and it was a challenge i 0:02:34.319,0:02:39.440 wanted to see if i could do this 0:02:36.319,0:02:41.680 all within emacs itself so 0:02:39.440,0:02:43.440 how do you use emacs to publish music 0:02:41.680,0:02:45.120 well for me i needed 0:02:43.440,0:02:46.480 a couple of things i needed to be able 0:02:45.120,0:02:48.319 to audition unlabel 0:02:46.480,0:02:50.000 unlabeled audio tracks i have a lot of 0:02:48.319,0:02:51.280 files that i don't know where they 0:02:50.000,0:02:53.840 came from i don't know what they are i 0:02:51.280,0:02:56.800 need to be able to listen to them 0:02:53.840,0:02:58.480 and i need to be able to add metadata to 0:02:56.800,0:03:00.800 whatever audio format it is 0:02:58.480,0:03:03.200 and rename the files based on that 0:03:00.800,0:03:05.120 metadata potentially 0:03:03.200,0:03:07.040 and in the end i wanted to take those 0:03:05.120,0:03:08.319 files and programmatically produce a web 0:03:07.040,0:03:11.920 page 0:03:08.319,0:03:14.159 for people to consume i found out that 0:03:11.920,0:03:14.879 emacs scores a hundred percent on all of 0:03:14.159,0:03:18.000 these 0:03:14.879,0:03:20.720 requirements that i had for this and 0:03:18.000,0:03:22.640 a lot of that came from emms the emacs 0:03:20.720,0:03:26.080 multimedia system 0:03:22.640,0:03:27.760 um emms is is great um 0:03:26.080,0:03:30.000 if you haven't checked it out please do 0:03:27.760,0:03:32.959 it's a little bit unintuitive but 0:03:30.000,0:03:34.000 once you get into it you know it works 0:03:32.959,0:03:36.640 um 0:03:34.000,0:03:38.720 and basically what emms gave me was the 0:03:36.640,0:03:39.680 ability to listen to the tracks organize 0:03:38.720,0:03:41.280 playlists 0:03:39.680,0:03:42.959 and on top of that it gave me super 0:03:41.280,0:03:45.040 powered metadata authoring 0:03:42.959,0:03:47.200 and i'm going to demonstrate that to you 0:03:45.040,0:03:50.879 so in order to do this 0:03:47.200,0:03:54.879 you have to require markable playlists 0:03:50.879,0:03:58.720 so require ems mark and so i'm going to 0:03:54.879,0:03:58.720 go through and i'm going to open the red 0:03:59.680,0:04:04.480 i've got this this these files here so 0:04:02.319,0:04:06.080 you can see these files are mp3s 0:04:04.480,0:04:07.599 um they're recorded on a digital 0:04:06.080,0:04:09.920 recorder 0:04:07.599,0:04:11.760 um if i had the choice i would have a 0:04:09.920,0:04:12.319 recorder that used a different format 0:04:11.760,0:04:14.640 but 0:04:12.319,0:04:16.160 so be it so i can mark all these files 0:04:14.640,0:04:20.000 and i can do ems 0:04:16.160,0:04:22.880 add to red and now they've been loaded 0:04:20.000,0:04:22.880 into a playlist 0:04:27.040,0:04:30.400 so you can see the playlist here there's 0:04:29.040,0:04:32.000 some leftover files 0:04:30.400,0:04:33.759 so i've got these three files in my 0:04:32.000,0:04:34.639 playlist and as you can see it's just 0:04:33.759,0:04:36.800 the file name 0:04:34.639,0:04:38.560 the path i don't have any metadata 0:04:36.800,0:04:41.360 associated with them 0:04:38.560,0:04:43.440 in this playlist i can hit e capital e 0:04:41.360,0:04:47.360 and it'll bring up a buffer showing 0:04:43.440,0:04:49.840 um the tag information that i have 0:04:47.360,0:04:51.520 and so i could edit these here and i 0:04:49.840,0:04:53.919 could edit them one at a time but that's 0:04:51.520,0:04:57.440 not really great i want superpower 0:04:53.919,0:05:00.320 metadata authoring so 0:04:57.440,0:05:00.320 by marking them 0:05:04.479,0:05:08.479 by marking them i can then hit e and i 0:05:07.680,0:05:10.479 have 0:05:08.479,0:05:12.639 all three of the tracks loaded up in 0:05:10.479,0:05:15.759 this tags buffer 0:05:12.639,0:05:18.800 on top of that i can do emms 0:05:15.759,0:05:22.840 tag editor set all ctrl c control 0:05:18.800,0:05:25.680 r and i want to set the artist 0:05:22.840,0:05:26.320 so these are some recordings of my 0:05:25.680,0:05:31.039 family 0:05:26.320,0:05:35.600 so shangri-lux set all three of them 0:05:31.039,0:05:40.160 i want to set the album um 0:05:35.600,0:05:43.600 spring walk with lap harp 0:05:40.160,0:05:43.600 and i want to set the year 0:05:45.520,0:05:50.840 and then i'm going to go ahead and put 0:05:48.960,0:05:53.759 these in 0:05:50.840,0:05:55.840 manually 0:05:53.759,0:05:57.039 but with the power of emacs keyboard 0:05:55.840,0:05:59.600 macros and 0:05:57.039,0:06:02.319 registers and so on i could do this 0:05:59.600,0:06:04.000 programmatically as well 0:06:02.319,0:06:06.000 which would make it a lot easier if i 0:06:04.000,0:06:07.440 hadn't met much more than three files to 0:06:06.000,0:06:09.919 do this with 0:06:07.440,0:06:11.520 submit the changes with ctrl c ctrl c 0:06:09.919,0:06:13.120 and now we've got the playlist you can 0:06:11.520,0:06:15.039 see the artist and track number have 0:06:13.120,0:06:17.360 been updated here 0:06:15.039,0:06:19.039 and then the final piece of this is that 0:06:17.360,0:06:20.479 if you look at this you can see that the 0:06:19.039,0:06:22.639 file name is still the same 0:06:20.479,0:06:24.560 so if i were looking to the directory i 0:06:22.639,0:06:26.479 would still have this file name 0:06:24.560,0:06:28.000 when packaging these up for a release 0:06:26.479,0:06:30.319 for people to download 0:06:28.000,0:06:32.400 it's nice to be able to have that file 0:06:30.319,0:06:34.800 name reflect the track number and the 0:06:32.400,0:06:35.680 artist and so on so there's another 0:06:34.800,0:06:38.240 command 0:06:35.680,0:06:38.240 mms 0:06:41.199,0:06:45.120 rename tag editor rename so it could be 0:06:44.160,0:06:47.199 just capital r 0:06:45.120,0:06:48.880 i think i need to mark all of these hit 0:06:47.199,0:06:50.000 capital r and then it's going to ask me 0:06:48.880,0:06:53.599 to confirm 0:06:50.000,0:06:53.599 and say yes to all of them 0:06:54.400,0:07:04.319 and now if you look in the dread 0:07:02.720,0:07:06.319 whoops i have to update it you'll see 0:07:04.319,0:07:09.840 it's been updated with the artist 0:07:06.319,0:07:11.120 the name track and track number and 0:07:09.840,0:07:14.639 track name 0:07:11.120,0:07:17.360 um so this format is a format string so 0:07:14.639,0:07:20.479 it's customizable of course 0:07:17.360,0:07:21.039 i just decided to go with the default so 0:07:20.479,0:07:24.160 that's 0:07:21.039,0:07:26.000 pretty great this workflow 0:07:24.160,0:07:28.080 just with emms i didn't have to do 0:07:26.000,0:07:30.960 anything this is all there it's all 0:07:28.080,0:07:32.639 all built in um it gave me exactly what 0:07:30.960,0:07:35.599 i was looking for in terms of being able 0:07:32.639,0:07:37.599 to process a lot of raw audio files 0:07:35.599,0:07:39.280 add metadata to them and get them ready 0:07:37.599,0:07:41.599 for publishing 0:07:39.280,0:07:43.520 and this is for publishing for playback 0:07:41.599,0:07:44.879 in any media player it'll it'll be 0:07:43.520,0:07:46.560 useful 0:07:44.879,0:07:48.479 not just for the web page that i'm 0:07:46.560,0:07:50.560 building so the 0:07:48.479,0:07:53.440 final part of course is um to build the 0:07:50.560,0:07:54.960 web page and emacs makes authoring html 0:07:53.440,0:07:57.440 trivial 0:07:54.960,0:07:59.039 like as i was going through this i 0:07:57.440,0:08:00.400 wanted to challenge myself and just be 0:07:59.039,0:08:03.120 like can i do this with all 0:08:00.400,0:08:03.520 just all with emacs like can i just make 0:08:03.120,0:08:05.440 this 0:08:03.520,0:08:07.039 i don't need a i don't need ruby i don't 0:08:05.440,0:08:08.960 need rails i don't need node i don't 0:08:07.039,0:08:10.560 need any of this other stuff i have my 0:08:08.960,0:08:12.560 tool right here it's a fully 0:08:10.560,0:08:15.039 it's a whole operating system basically 0:08:12.560,0:08:17.360 plus programming languages 0:08:15.039,0:08:19.919 so the first thing i started with was 0:08:17.360,0:08:22.560 buffer scripting for manipulating text 0:08:19.919,0:08:24.319 that's kind of the easiest way to do it 0:08:22.560,0:08:25.280 and basically anything you can do in a 0:08:24.319,0:08:28.479 buffer you can do 0:08:25.280,0:08:30.319 programmatically with e-lisp so this 0:08:28.479,0:08:33.919 might be a good example for beginners if 0:08:30.319,0:08:36.000 you haven't done any e-lisp yet 0:08:33.919,0:08:36.959 like a simple example is to create this 0:08:36.000,0:08:40.000 this div 0:08:36.959,0:08:41.760 output here i can you 0:08:40.000,0:08:44.240 can use this with temp buffer so 0:08:41.760,0:08:46.640 basically creating an imaginary buffer 0:08:44.240,0:08:48.800 insert is just like typing so you put 0:08:46.640,0:08:50.959 strings in you put new lines in 0:08:48.800,0:08:52.080 can cap build some strings together and 0:08:50.959,0:08:54.000 here you can see i'm 0:08:52.080,0:08:55.360 i'm doing a random number so every time 0:08:54.000,0:08:57.920 i execute this 0:08:55.360,0:09:01.040 my content changes so i can generate 0:08:57.920,0:09:04.399 dynamic content in html blocks 0:09:01.040,0:09:05.920 with e-lisp for my 0:09:04.399,0:09:08.000 web page builder it's a little more 0:09:05.920,0:09:12.080 complex i'm pulling data out 0:09:08.000,0:09:15.440 using emms data structures 0:09:12.080,0:09:16.080 so it's pulling that out from the track 0:09:15.440,0:09:18.720 data 0:09:16.080,0:09:19.440 and then i'm i'm using some program 0:09:18.720,0:09:21.440 program to 0:09:19.440,0:09:23.200 generate list elements so each track is 0:09:21.440,0:09:25.120 going to have the title 0:09:23.200,0:09:26.959 and track number and then a button for 0:09:25.120,0:09:29.519 playing it plus the source 0:09:26.959,0:09:30.480 of the audio file which will get added 0:09:29.519,0:09:32.640 here 0:09:30.480,0:09:34.839 right now this is hard coded for opus so 0:09:32.640,0:09:37.200 it won't work for my 0:09:34.839,0:09:39.120 mp3s um 0:09:37.200,0:09:41.200 i'm going to skip over snippets turns 0:09:39.120,0:09:45.519 out format strings were good enough 0:09:41.200,0:09:48.160 for me um snippets could be useful but 0:09:45.519,0:09:49.839 format is super powerful and i didn't 0:09:48.160,0:09:51.279 really even need all that much power 0:09:49.839,0:09:53.519 basically just doing string 0:09:51.279,0:09:54.560 interpolation so if you haven't seen 0:09:53.519,0:09:56.720 format before 0:09:54.560,0:09:59.120 you basically put these control strings 0:09:56.720,0:10:03.120 or control characters inside of a string 0:09:59.120,0:10:05.040 and you can generate you can generate an 0:10:03.120,0:10:07.600 output string that you want 0:10:05.040,0:10:08.720 so in my generator code basically it's 0:10:07.600,0:10:10.959 down here 0:10:08.720,0:10:12.800 um i'm calling format with this sparred 0:10:10.959,0:10:15.920 vivomax template 0:10:12.800,0:10:18.240 and that's basically a big 0:10:15.920,0:10:20.399 a big string of html it's just each you 0:10:18.240,0:10:21.200 know my whole page of html with a couple 0:10:20.399,0:10:22.959 places 0:10:21.200,0:10:24.399 with those control characters in just 0:10:22.959,0:10:26.399 four places 0:10:24.399,0:10:29.760 and one of them populates the track list 0:10:26.399,0:10:32.079 that's really the meat of the program 0:10:29.760,0:10:33.440 and again this is a combination of using 0:10:32.079,0:10:36.640 buffer scripting 0:10:33.440,0:10:37.279 using html mode inserting text format 0:10:36.640,0:10:40.000 strings 0:10:37.279,0:10:41.920 and then i can indent region so the html 0:10:40.000,0:10:45.200 actually looks pretty 0:10:41.920,0:10:50.160 when it comes out of it as well 0:10:45.200,0:10:52.560 um i will show that just really quick 0:10:50.160,0:10:52.560 actually 0:10:54.000,0:10:58.800 so you can see this is the html that got 0:10:56.880,0:11:02.560 generated i've got my template 0:10:58.800,0:11:05.760 i inserted the title here the style the 0:11:02.560,0:11:07.920 font was all inserted 0:11:05.760,0:11:11.200 and then this whole list of of tracks 0:11:07.920,0:11:14.399 here it's kind of messy to look at 0:11:11.200,0:11:15.920 but this track list this whole div here 0:11:14.399,0:11:18.560 is all generated by 0:11:15.920,0:11:20.800 my generator code and it works it's 0:11:18.560,0:11:20.800 great 0:11:22.480,0:11:26.160 okay moving on 0:11:27.120,0:11:32.079 um so the other thing was that as i was 0:11:30.240,0:11:33.200 developing this i decided to use ort 0:11:32.079,0:11:35.360 babel and some of his 0:11:33.200,0:11:36.880 its features um for multi-language 0:11:35.360,0:11:37.839 things because i needed to style it with 0:11:36.880,0:11:40.480 css and 0:11:37.839,0:11:42.480 and put actions in javascript and also i 0:11:40.480,0:11:45.519 used svg for authoring stuff 0:11:42.480,0:11:46.079 um and it was a little bit complicated i 0:11:45.519,0:11:47.680 probably 0:11:46.079,0:11:49.600 probably would have been simpler had i 0:11:47.680,0:11:51.440 not used org babble but it's also really 0:11:49.600,0:11:53.839 fun and it's i think it's a cool 0:11:51.440,0:11:55.839 cool idea to use literate programming my 0:11:53.839,0:11:57.600 idea was to create kind of like html 0:11:55.839,0:11:59.519 components like i could name it like 0:11:57.600,0:12:01.440 this 0:11:59.519,0:12:02.800 put a format string inside it and build 0:12:01.440,0:12:05.519 a function 0:12:02.800,0:12:07.120 in e-lisp to format it and spit out the 0:12:05.519,0:12:10.320 html that i want 0:12:07.120,0:12:12.880 and by doing this then i can like uh 0:12:10.320,0:12:14.320 just change things in my org file which 0:12:12.880,0:12:16.959 not getting a whole lot of time to work 0:12:14.320,0:12:19.839 on it i can come back to it and 0:12:16.959,0:12:21.920 i have a lot of notes and i can i can 0:12:19.839,0:12:24.399 kind of generate things as i'm going and 0:12:21.920,0:12:25.600 keep notes for myself and keep the 0:12:24.399,0:12:27.519 i don't know it's cool literate 0:12:25.600,0:12:29.279 programming is fun um so i don't need to 0:12:27.519,0:12:31.040 go into that too much but you can see if 0:12:29.279,0:12:33.360 i execute this here 0:12:31.040,0:12:34.880 i get the the div that i want um it's a 0:12:33.360,0:12:36.480 little bit funny you'll see i have the 0:12:34.880,0:12:39.200 string like this the way that 0:12:36.480,0:12:40.000 no web expands i can't do this on a 0:12:39.200,0:12:43.839 single line 0:12:40.000,0:12:45.440 it it it looks funny when you do that 0:12:43.839,0:12:48.560 so that might be something to work out 0:12:45.440,0:12:48.959 later css blocks can either be tangled 0:12:48.560,0:12:51.680 out 0:12:48.959,0:12:52.639 and referenced in the html source or 0:12:51.680,0:12:54.639 inlined 0:12:52.639,0:12:56.959 here's an example i have of inlining it 0:12:54.639,0:13:00.320 so i've got my little css block name 0:12:56.959,0:13:03.040 style javascript name script 0:13:00.320,0:13:04.839 and then i've got this html source block 0:13:03.040,0:13:07.519 with no web 0:13:04.839,0:13:07.920 expansion um these double angle brackets 0:13:07.519,0:13:09.839 here 0:13:07.920,0:13:11.680 are where i'm going to expand the block 0:13:09.839,0:13:12.639 name style i'm actually calling a 0:13:11.680,0:13:14.399 function 0:13:12.639,0:13:17.040 so i want the result of the function 0:13:14.399,0:13:20.560 here and then the script will just get 0:13:17.040,0:13:22.959 expanded here so or babel expand source 0:13:20.560,0:13:25.360 block 0:13:22.959,0:13:28.160 you can see what it looks like you know 0:13:25.360,0:13:29.920 i've got my style here i've got my title 0:13:28.160,0:13:31.279 i've got that main content class i 0:13:29.920,0:13:33.040 showed before 0:13:31.279,0:13:34.480 and the script as well so that's kind of 0:13:33.040,0:13:36.320 cool like 0:13:34.480,0:13:38.160 i could just run org babel tangle and 0:13:36.320,0:13:40.480 get my thing out and just 0:13:38.160,0:13:41.600 edit one file instead of multiple files 0:13:40.480,0:13:45.120 not for everyone 0:13:41.600,0:13:45.120 but i i thought it was kind of fun 0:13:45.839,0:13:49.199 all right oh and the final thing is that 0:13:47.760,0:13:52.880 in emacs you can 0:13:49.199,0:13:57.199 author and view svg so this is just an 0:13:52.880,0:13:59.519 org um this svg i used to make the play 0:13:57.199,0:14:02.800 and pause buttons but i didn't know this 0:13:59.519,0:14:04.959 but if you edit an svg file you can 0:14:02.800,0:14:07.360 toggle back and forth 0:14:04.959,0:14:07.360 between 0:14:08.800,0:14:13.120 between the code and the and the image 0:14:13.199,0:14:17.360 it's pretty sweet so i can kind of 0:14:16.160,0:14:19.680 iteratively work 0:14:17.360,0:14:20.560 work through this because of of how 0:14:19.680,0:14:24.480 emacs is 0:14:20.560,0:14:24.959 like that so um final considerations 0:14:24.480,0:14:27.360 here 0:14:24.959,0:14:29.279 like when doing this i want it to be all 0:14:27.360,0:14:30.079 free so i want to use fonts that use a 0:14:29.279,0:14:32.800 free license 0:14:30.079,0:14:34.800 i found gnu unifont it's kind of cool 0:14:32.800,0:14:37.600 the content license i chose 0:14:34.800,0:14:39.920 creative commons attribution share like 0:14:37.600,0:14:42.880 which is kind of like the gpl 0:14:39.920,0:14:44.800 ideally i could serve it with emacs i'd 0:14:42.880,0:14:46.320 like to remove idiosyncrasy so other 0:14:44.800,0:14:48.720 people can use it 0:14:46.320,0:14:51.040 it's pretty much just my tool right now 0:14:48.720,0:14:51.440 um not requiring the web browser i can 0:14:51.040,0:14:54.079 ship 0:14:51.440,0:14:54.480 playlists so that you can just you know 0:14:54.079,0:14:58.000 click 0:14:54.480,0:15:00.639 or link to a playlist on your favorite 0:14:58.000,0:15:02.639 player even emms if you want and then 0:15:00.639,0:15:04.320 packing up those albums in like a zip or 0:15:02.639,0:15:08.639 tar file 0:15:04.320,0:15:10.880 so um you can go to churls.world 0:15:08.639,0:15:14.000 it just has a link to this album i'll 0:15:10.880,0:15:17.519 display it here in just a second 0:15:14.000,0:15:21.040 you can contact me i'm shosheen on emacs 0:15:17.519,0:15:23.680 in irc and on sourcehut you can email me 0:15:21.040,0:15:26.800 grant at charles world personal or grant 0:15:23.680,0:15:28.320 on a bridge software all right now let's 0:15:26.800,0:15:32.000 see 0:15:28.320,0:15:32.000 about this 0:15:32.079,0:15:35.120 this is up online so if you want to 0:15:33.680,0:15:39.199 listen to my 0:15:35.120,0:15:43.040 college band's album from 20 years ago 0:15:39.199,0:15:47.680 here it is cassiopeia basement days 0:15:43.040,0:15:48.000 whoops i made this art in krita you can 0:15:47.680,0:15:51.199 press 0:15:48.000,0:15:55.040 play you can skip around 0:15:51.199,0:15:58.560 i did i do have the playlist up here too 0:15:55.040,0:16:00.880 so yeah thanks for listening 0:15:58.560,0:16:04.000 i hope you enjoyed it and enjoy the rest 0:16:00.880,0:16:04.000 of emacs conf 0:16:04.360,0:16:07.360 goodbye