# Bard Bivou(m)acs - Building a bandcamp-like page for an album of music Grant Shangreaux [[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.webm" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt" other_resources="""[Download compressed .webm video (65.2M)](https://media.emacsconf.org/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--compressed32.webm) [Download compressed .webm video (20.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--vp9-q56-video-original-audio.webm) """]] [View transcript](#transcript) [[!template id=vid vidid="qnaVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.webm" download="Download Q&A video, 720p" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt"]] [Download compressed Q&A .webm video (40.1M)](https://media.emacsconf.org/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--compressed32.webm) [Download compressed Q&A .webm video (15.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--vp9-q56-video-original-audio.webm) [View transcript for Q&A](#transcript-questions) I hoped to become a successful musician someday, and while that has yet to happen, I've recorded a fair share of unreleased music over the years. I decided it was time to share some of it with the world through the power of Emacs! Rather than using the available non-free (or even free?) platforms out there, I decided to build a Bandcamp-like page from scratch. While I could have chosen many of the static-site building tools, I decided to use the tool closest to my heart and automate the process of building a web page from a directory of audio files with Emacs Lisp. I will share with you how I managed to create a personal workflow for releasing an album without leaving the One True Editor that includes editing audio metadata with EMMS and generating HTML while cobbling together yasnippet and the format macro. <https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.tar> <!-- from the pad ---> - Actual start and end time (EST): Start of Q&A: 2020-11-28T10.28.47 EST; End: 2020-11-28T10.43.49 # Questions ## What does "Bard Bivoumacs" mean? Bad pun on "Bandcamp" — a bivouac is an improvised campsite and bard = band. ## Does this meta-data workflow also support unsynchronized lyrics within ID3-tags (multi-line meta-data)? - The UI for EMMS is complex, a gazillion of functions in that namespace. - Check EMMS info manual `(require 'emms-lyrics)` this uses lyrics files outside of ID3-tags. - multi-line metadata may depend on the audio format? ## Is it possible to import batch meta-data? Not sure, guesses yes. It can connect to metadata services. Backend calls to shell programs for various purposes. ## My current workflow for tagging music is to first apply ReplayGain in foobar2000, fix egregious mistakes there (like funny directory structure, lack of album artist, …), then use beets to apply metadata from Musicbrainz/Discogs and go over the remaining albums with foobar2000 again. I wondered whether there's a chance textual tagging could allow doing it all in one program, have you experimented with mass tag updates/queries? No experience with that, but it could be possible if someone™ made the right textual interface and would be very powerful (for example wdired could be an interesting inspiration). ## Is there a link to some info expanding your philosophy of how to compensate musicians, I was interested to learn more about that. No; universal (basic?) income would solve a lot of problems. ## What Emacs theme are you using? kaolin theme, maybe aurora or bubblegum. ## Are you using Doom Emacs, per chance? - Answered in chat, vanilla Emacs with doom-modeline. - OK, thanks. ## Is SVG support built in to Emacs? It's builtin in Emacs 27 (and earlier: <https://www.emacswiki.org/emacs/EmacsSvg>). You can even take screenshots from within Emacs as SVG (if compiled `--with-cairo`). ## How do you take SVG screenshots within Emacs? <https://www.reddit.com/r/emacs/comments/idz35e/emacs_27_can_take_svg_screenshots_of_itself/> ## It seems Mac does not have support for Cairo? - Might need to manually compile Emacs with support for Cairo <https://www.reddit.com/r/emacs/comments/7ewewl/compiling_emacs_26090_with_cairo/> - Download source code then take a look at the `--help` flag when running `./configure`. Cairo support is experimental and can be enabled with `./configure --with-cairo`. - I see. Thanks again. # Notes - Musician. - Org document presented with org-tree-slide: <https://github.com/takaxp/org-tree-slide> - EMMS (<https://www.gnu.org/software/emms/>) for metadata authoring and organising playlists. - Creates HTML from EMMS metadata. - <https://github.com/jagrg/org-emms> - Publish music by Emacs. - I liked the example for beginners! - Uses literate programming style to be able to resume work without much time available for programming. - See `(info "(org) Working with Source Code")` for single blocks <https://github.com/casouri/ftable/blob/master/ftable.elhat> can be executed in Emacs with C-c C-c. - Several languages combined with noweb `(info "(org) Noweb Reference Syntax")`. - SVG support used for buttons. - <http://churls.world> °°° - Meta: "You can even take screenshots from within Emacs as SVG" — would it be possible to set up an SVG livestream…? - I doubt it would be practical to do it at a high framerate, but it's worth trying out. The other disadvantage of the approach is that there's few vector animation formats (Flash, HTML5), so saving it losslessly to disk will be tricky. <!-- transcript: 2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt --> <a name="transcript"></a> # 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 (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]]