summaryrefslogblamecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt
blob: 24e598d542134d1d5a071eeb94dd3eb87ecb4cf8 (plain) (tree)
1
2
3
4
5
6
7
8
9




                                   
                             
                                        
                            
 


                                        
 
                             
                                    

             


                                   
 

                                    
 


                                    
 


                                   
 

                             
 


                             



                                  
                             
                              

                    
                             
                           
                
 


                                     

                             

                             
 


                                 
 

                                     
 

                             
 


                                        
 


                              
 

                              












                                 

                             
 


                             






                                   
                             
                                 

                 

                             
 

                                    
 

                             
 


                               
 


                              
 

                             

                             

                               



                              
                             
                                  
        
 

                             






                                         

                             
 


                                    
 

                                
 


                                       
 
                             
                                       






















                                          

                             
 


                                   
 


                                  
 

                             
 

                                    


















                                             

                             
 


                                       
 

                                       
 


                                     






                                         

                              
 


                                     
 

                                
 

                                    




                             
                          


















                                            

                                
 

                                    
 

                                       









                                        


                                    
 

                                 
 

                             
 

                             
 

                                   
 

                                  
 


                                    












                                   

                                
 


                                   
 

                                      
 


                                  
 


                                 
 


                               
 
                             
                                  













                                      
                             
                                      

                  


                             
 

                                        



                             

                                
 

                                      




                                

                               
 


                                       



                                        

                                     
 

                                













                                      
                                 
 

                                 
 

                             
 

                             
 

                               
 

                              
 

                                    
 


                                     












                                      

                             
 

                               
 

                               



                                      
                             
                                     
               
 


                                     
 


                                     
 


                                       
 

                                        




                                       

                                     
 


                                  
 


                                   
 

                                   
 

                             
 


                                     
 


                                  
 

                                    
 

                                      
 

                                     
 


                                 






                                         

                                 
 


                             



                                        


                                 
 

                                       
 


                                   
 

                                  
 


                                      
 

                                  
 


                                  
 

                             
 


                             

                             
                                    
 


                                   
 

                             
 

                             
 


                                      
 


                                      
 

                             




                             

                             






                                        


                             
 

                                 
 

                                  
 

                             
 

                                       
 

                             
 

                                
 


                                  
 

                             
 

                             
 


                             
 
                             
                            
              
 

                                     






                                         


                                     
 

                                   
 

                             
 
                             
                                 

                     


                                    
 

                               
 
                             
                                     







                                      
                             
                                     
                                  
 

                              
 

                             
 

                                 



                                
                             
                                   

         


                                     
 

                             
 

                                     
 

                             









                                           


                                      



                             
                             
                                    
                
 

                             
 


                             
 

                                     
 

                              
 

                                        

                             
                                
 




                                   
 

                             
 


                                     
 


                             
 

                             
 

                              
 

                             
 

                             
 

                                  
 

                             
 

                                        
 


                                      
 

                             
 

                             
 


                                    
 


                             
 

                             
 

                             
 

                             






                                         

                              
 

                             
 

                                       
 


                                      



                                


                             
 

                                    

                             

                                  



                                        


                               
 

                             









                                        

                             
 


                                   
 


                             
 


                                 
 

                              






                                          


                                  

                             

                       
 
                             
                                     
                
 


                                 
 


                                      
 


                             
 

                             
 


                                        
 

                             
 

                             
 

                             






                                       


                             



                             

                             
 

                             
 


                                      



                                       

                             
 


                                    



                              

                                     
 

                                        




                                        

                                
 


                                    
 


                                     
 


                                        



                               

                                 
 

                                      




                                         
                                          

                             
                                

                             

                             



                             


                             
 


                               



                                     

                                 
 

                                        






                                   


                                    
WEBVTT

00:00:01.360 --> 00:00:04.480
Hello, my name is Grant Shangreaux.

00:00:04.480 --> 00:00:09.519
This is my talk titled Bard Bivou(m)acs:
Publishing Music with Emacs.

00:00:09.519 --> 00:00:14.400
I'm a software developer with Unabridged
Software in Lincoln, Nebraska.

00:00:14.400 --> 00:00:18.720
Long time Emacs user, relatively new
Emacs hacker.

00:00:18.720 --> 00:00:22.487
Hopefully, I'll be able to show you
my workflow,

00:00:22.487 --> 00:00:30.480
with how I publish music with Emacs.

00:00:30.480 --> 00:00:35.520
All right. So as a musician, I would
like to publish my music online.

00:00:35.520 --> 00:00:39.040
I could publish with popular online
music services,

00:00:39.040 --> 00:00:41.061
but I'm more of a DIY-type,

00:00:41.061 --> 00:00:44.719
so I chose to go ahead and
publish with Emacs.

00:00:44.719 --> 00:00:48.160
What's the motivation behind this?

00:00:48.160 --> 00:00:51.600
A lot of it comes down to some
fundamental freedoms

00:00:51.600 --> 00:00:57.178
that Emacs and GNU software
represent to me,

00:00:57.178 --> 00:01:01.840
as well as my ideas on culture and my
background.

00:01:01.840 --> 00:01:04.080
I don't believe that music is
a consumer good.

00:01:04.080 --> 00:01:08.320
It's a form of knowledge, like an
algorithm.

00:01:08.320 --> 00:01:11.036
And it's just such a part of culture,

00:01:11.036 --> 00:01:12.780
like in tribal cultures,

00:01:12.780 --> 00:01:17.405
music was seen as a gift from the cosmos
or the gods.

00:01:17.405 --> 00:01:20.288
It was a gift maybe through an
individual vessel,

00:01:20.288 --> 00:01:21.920
but was shared with the people

00:01:21.920 --> 00:01:23.520
and shared with everyone,

00:01:23.520 --> 00:01:26.799
kept alive by the culture itself.

00:01:26.799 --> 00:01:29.840
So to me, music is something that

00:01:29.840 --> 00:01:31.520
should be shared and should be

00:01:31.520 --> 00:01:33.818
freely enjoyed by everyone.

00:01:33.818 --> 00:01:36.560
Of course, artists should be
compensated as well,

00:01:36.560 --> 00:01:39.040
but that's a whole different topic.

00:01:39.040 --> 00:01:41.040
So when I want to share my music,

00:01:41.040 --> 00:01:43.520
I want to do it without impacting
anyone's freedom.

00:01:43.520 --> 00:01:45.425
Using GNU software like Emacs

00:01:45.425 --> 00:01:49.200
is a good way that I can ensure that

00:01:49.200 --> 00:01:52.597
I won't be requiring people

00:01:52.597 --> 00:01:55.840
to sign away their freedoms for
anything.

00:01:55.840 --> 00:01:57.367
There's a lot more I could say
about this

00:01:57.367 --> 00:01:58.799
but I don't have time.

00:01:58.799 --> 00:02:03.439
Feel free to reach out to me by
email or IRC.

00:02:03.439 --> 00:02:06.479
Part of the motivation for me,

00:02:06.479 --> 00:02:08.775
personally, is that Emacs is super
magical.

00:02:08.775 --> 00:02:10.720
It's an all-in-one solution.

00:02:10.720 --> 00:02:12.720
Like I said, the GNU software aligns with

00:02:12.720 --> 00:02:14.480
Creative Commons' ideas.

00:02:14.480 --> 00:02:16.067
I can do file management.

00:02:16.067 --> 00:02:20.239
I can author HTML, all the web stuff
I need even, literate-style.

00:02:20.239 --> 00:02:22.171
I can handle media and metadata.

00:02:22.171 --> 00:02:24.640
I've got version control, remote server
access...

00:02:24.640 --> 00:02:28.080
All the tools I need are right under my
fingertips with this tool

00:02:28.080 --> 00:02:30.000
that I use every day for a long time.

00:02:30.000 --> 00:02:31.440
I don't need to look elsewhere.

00:02:31.440 --> 00:02:34.319
It was a challenge.

00:02:34.319 --> 00:02:36.319
I wanted to see if I could do this

00:02:36.319 --> 00:02:39.440
all within Emacs itself.

00:02:39.440 --> 00:02:41.680
So, how do you use Emacs to publish music?

00:02:41.680 --> 00:02:43.440
Well, for me, I needed

00:02:43.440 --> 00:02:44.258
a couple of things.

00:02:44.258 --> 00:02:47.564
I needed to be able to audition and
label unlabeled audio tracks.

00:02:47.564 --> 00:02:50.320
I have a lot of files that
I don't know where they came from.

00:02:50.320 --> 00:02:51.213
I don't know what they are.

00:02:51.213 --> 00:02:53.840
I need to be able to listen to them,

00:02:53.840 --> 00:02:56.800
and I need to be able to add metadata to

00:02:56.800 --> 00:02:58.480
whatever audio format it is

00:02:58.480 --> 00:03:00.800
and rename the files based on that

00:03:00.800 --> 00:03:03.200
metadata, potentially.

00:03:03.200 --> 00:03:05.120
And in the end, I wanted to take those

00:03:05.120 --> 00:03:08.319
files and programmatically produce a web page

00:03:08.319 --> 00:03:10.442
for people to consume.

00:03:10.442 --> 00:03:14.879
I found out that Emacs scores a hundred
percent on all of

00:03:14.879 --> 00:03:17.709
these requirements that I had for this,

00:03:17.709 --> 00:03:22.640
and a lot of that came from EMMS, the
Emacs multimedia system.

00:03:22.640 --> 00:03:26.080
EMMS is great.

00:03:26.080 --> 00:03:27.760
If you haven't checked it out, please do.

00:03:27.760 --> 00:03:29.736
It's a little bit unintuitive,

00:03:29.736 --> 00:03:34.000
but once you get into it, you know it
works.

00:03:34.000 --> 00:03:36.420
Basically, what EMMS gave me was

00:03:36.420 --> 00:03:38.720
the ability to listen to the tracks,

00:03:38.720 --> 00:03:39.680
organize playlists.

00:03:39.680 --> 00:03:41.280
On top of that, it gave me

00:03:41.280 --> 00:03:42.959
super-powered metadata authoring.

00:03:42.959 --> 00:03:45.040
I'm going to demonstrate that to you.

00:03:45.040 --> 00:03:47.200
So in order to do this,

00:03:47.200 --> 00:03:50.879
you have to require markable playlists,

00:03:50.879 --> 00:03:54.879
so (require 'emms-mark). I'm going to

00:03:54.879 --> 00:03:59.680
go through, and I'm going to open the red...

00:03:59.680 --> 00:04:02.092
I've got this. These files here.

00:04:02.092 --> 00:04:04.480
So you can see these files are mp3s.

00:04:04.480 --> 00:04:07.599
They're recorded on a digital recorder.

00:04:07.599 --> 00:04:09.920
If I had the choice, I would have a

00:04:09.920 --> 00:04:12.319
recorder that used a different format,

00:04:12.319 --> 00:04:14.640
but so be it. I can mark all these files

00:04:14.640 --> 00:04:27.040
and I can do EMMS add to .., and now
they've been loaded into a playlist.

00:04:27.040 --> 00:04:28.698
So you can see the playlist here.

00:04:28.698 --> 00:04:30.400
There's some leftover files.

00:04:30.400 --> 00:04:31.771
So I've got these three files

00:04:31.771 --> 00:04:33.361
in my playlist, and as you can see,

00:04:33.361 --> 00:04:35.194
it's just the file name, the path.

00:04:35.194 --> 00:04:38.560
I don't have any metadata associated
with them.

00:04:38.560 --> 00:04:41.360
In this playlist, I can hit E,

00:04:41.360 --> 00:04:43.440
and it'll bring up a buffer showing

00:04:43.440 --> 00:04:47.360
the tag information that I have.

00:04:47.360 --> 00:04:49.840
I could edit these here.

00:04:49.840 --> 00:04:51.129
I could edit them one at a time,

00:04:51.129 --> 00:05:03.101
but that's not really great. I want
superpower metadata authoring.

00:05:03.101 --> 00:05:07.159
So, by marking them, I can then hit E,

00:05:07.159 --> 00:05:12.639
and I have all three of the tracks
loaded up in this tags buffer.

00:05:12.639 --> 00:05:16.912
On top of that, I can do EMMS tag
editor,

00:05:16.912 --> 00:05:22.840
set all, C-c C-r, and I want to
set the artist.

00:05:22.840 --> 00:05:26.320
so these are some recordings of my
family.

00:05:26.320 --> 00:05:31.039
So, Shangreaux, set all three of them.

00:05:31.039 --> 00:05:35.600
I want to set the album:

00:05:35.600 --> 00:05:40.160
Spring Walk with Lap Harp.

00:05:40.160 --> 00:05:45.520
I want to set the year.

00:05:45.520 --> 00:05:53.759
And then I'm going to go ahead and put
these in manually,

00:05:53.759 --> 00:05:56.759
but with the power of Emacs
keyboard macros

00:05:56.759 --> 00:05:59.600
and registers and so on. I could do this

00:05:59.600 --> 00:06:02.319
programmatically as well,

00:06:02.319 --> 00:06:03.818
which would make it a lot easier

00:06:03.818 --> 00:06:07.440
if I had much more than three files to
do this with.

00:06:07.440 --> 00:06:09.919
Submit the changes with C-c C-c,

00:06:09.919 --> 00:06:11.232
and now we've got the playlist.

00:06:11.232 --> 00:06:15.039
You can see the artist and track number
have been updated here.

00:06:15.039 --> 00:06:17.360
And then the final piece of this is that

00:06:17.360 --> 00:06:18.875
if you look at this, you can see that

00:06:18.875 --> 00:06:20.479
the file name is still the same.

00:06:20.479 --> 00:06:22.639
So if I were looking at the directory,

00:06:22.639 --> 00:06:24.560
I would still have this file name.

00:06:24.560 --> 00:06:26.479
When packaging these up for a release,

00:06:26.479 --> 00:06:28.000
for people to download,

00:06:28.000 --> 00:06:30.319
it's nice to be able to have that

00:06:30.319 --> 00:06:32.044
filename reflect the track number

00:06:32.044 --> 00:06:33.609
and the artist and so on.

00:06:33.609 --> 00:06:40.250
So there's another command,

00:06:40.250 --> 00:06:42.970
EMMS rename tag editor, rename,

00:06:42.970 --> 00:06:45.120
so it could be just capital R.

00:06:45.120 --> 00:06:46.991
I think I need to mark all of these,

00:06:46.991 --> 00:06:50.000
hit capital R, and then it's going to
ask me to confirm

00:06:50.000 --> 00:06:54.400
and say yes to all of them.

00:06:54.400 --> 00:07:02.720
And now, if you look in the--

00:07:02.720 --> 00:07:04.319
whoops I have to update it--you'll see

00:07:04.319 --> 00:07:06.319
it's been updated with the artist,

00:07:06.319 --> 00:07:11.120
track number and track name.

00:07:11.120 --> 00:07:14.432
This format is a format string,

00:07:14.432 --> 00:07:17.360
so it's customizable of course.

00:07:17.360 --> 00:07:21.039
I just decided to go with the default.

00:07:21.039 --> 00:07:24.948
So that's pretty great, this workflow
just with EMMS.

00:07:24.948 --> 00:07:27.585
I didn't have to do anything. This is
all there.

00:07:27.585 --> 00:07:31.673
It's all built in. It gave me exactly
what I was looking for

00:07:31.673 --> 00:07:35.599
in terms of being able to process a lot
of raw audio files,

00:07:35.599 --> 00:07:39.280
add metadata to them, and get them ready
for publishing.

00:07:39.280 --> 00:07:41.599
And this is for publishing for playback

00:07:41.599 --> 00:07:44.026
in any media player. It'll be useful.

00:07:44.026 --> 00:07:47.639
Not just for the web page that I'm
building.

00:07:47.639 --> 00:07:51.440
So the final part, of course, is to
build the web page.

00:07:51.440 --> 00:07:54.960
Emacs makes authoring HTML trivial.

00:07:54.960 --> 00:07:57.357
As I was going through this,

00:07:57.357 --> 00:07:59.701
I wanted to challenge myself and just
be, like,

00:07:59.701 --> 00:08:03.520
can I do this just all with Emacs?
Can I just make this?

00:08:03.520 --> 00:08:05.134
I don't need a... I don't need Ruby.

00:08:05.134 --> 00:08:06.707
I don't need Rails. I don't need Node.

00:08:06.707 --> 00:08:08.528
I don't need any of this other stuff.

00:08:08.528 --> 00:08:10.560
I have my tool right here. It's a
fully...

00:08:10.560 --> 00:08:12.560
It's a whole operating system, basically,

00:08:12.560 --> 00:08:15.039
plus programming languages.

00:08:15.039 --> 00:08:17.171
So the first thing I started with

00:08:17.171 --> 00:08:19.919
was buffer scripting for
manipulating text.

00:08:19.919 --> 00:08:22.560
That's kind of the easiest way to do it.

00:08:22.560 --> 00:08:24.692
Basically, anything you can do in
a buffer,

00:08:24.692 --> 00:08:27.834
you can do programmatically with Elisp.

00:08:27.834 --> 00:08:30.217
So this might be a good example for
beginners.

00:08:30.217 --> 00:08:33.919
If you haven't done any Elisp yet,

00:08:33.919 --> 00:08:39.557
a simple example is to create this div
output here.

00:08:39.557 --> 00:08:41.581
You can use this with-temp-buffer,

00:08:41.581 --> 00:08:44.240
so basically creating an imaginary
buffer.

00:08:44.240 --> 00:08:45.945
insert is just like typing,

00:08:45.945 --> 00:08:48.800
so you put strings in,
you put new lines in,

00:08:48.800 --> 00:08:50.959
you can build some strings together.

00:08:50.959 --> 00:08:53.551
Here you can see I'm doing a random
number,

00:08:53.551 --> 00:08:55.360
so every time I execute this,

00:08:55.360 --> 00:08:56.790
my content changes.

00:08:56.790 --> 00:09:03.685
I can generate dynamic content in HTML
blocks with Elisp.

00:09:03.685 --> 00:09:06.493
For my web page builder, it's a little
more complex.

00:09:06.493 --> 00:09:08.000
I'm pulling data out

00:09:08.000 --> 00:09:12.080
using EMMS data structures,

00:09:12.080 --> 00:09:16.080
so it's pulling that out from
the track data.

00:09:16.080 --> 00:09:19.440
And then I'm using some program to

00:09:19.440 --> 00:09:21.440
generate list elements, so each track is

00:09:21.440 --> 00:09:24.086
going to have the title and
track number,

00:09:24.086 --> 00:09:25.869
and then a button for playing it,

00:09:25.869 --> 00:09:28.206
plus the source of the audio file,

00:09:28.206 --> 00:09:30.480
which will get added here.

00:09:30.480 --> 00:09:32.485
Right now, this is hard coded for Opus,

00:09:32.485 --> 00:09:37.200
so it won't work for my MP3s.

00:09:37.200 --> 00:09:38.867
I'm going to skip over snippets.

00:09:38.867 --> 00:09:42.017
Turns out format strings were good
enough for me.

00:09:42.017 --> 00:09:45.035
Snippets could be useful,

00:09:45.035 --> 00:09:47.267
but format is super powerful,

00:09:47.267 --> 00:09:49.839
and I didn't really even need
all that much power,

00:09:49.839 --> 00:09:52.187
basically, just doing string
interpolation.

00:09:52.187 --> 00:09:54.560
So if you haven't seen format before,

00:09:54.560 --> 00:09:56.720
you basically put these control strings

00:09:56.720 --> 00:09:59.120
or control characters inside of a string,

00:09:59.120 --> 00:10:05.040
and you can generate an output string
that you want.

00:10:05.040 --> 00:10:07.344
So in my generator code, basically,

00:10:07.344 --> 00:10:08.720
it's down here,

00:10:08.720 --> 00:10:12.800
I'm calling format with this Bard
Bivou(m)acs template,

00:10:12.800 --> 00:10:17.491
and that's basically a big string of
HTML.

00:10:17.491 --> 00:10:21.200
It's just my whole page of HTML

00:10:21.200 --> 00:10:24.399
with those control characters in just
four places.

00:10:24.399 --> 00:10:26.399
One of them populates the track list.

00:10:26.399 --> 00:10:29.760
That's really the meat of the program.

00:10:29.760 --> 00:10:34.746
Again, this is a combination of using
buffer scripting, using HTML mode,

00:10:34.746 --> 00:10:37.279
inserting text format strings,

00:10:37.279 --> 00:10:39.251
and then I can indent-region

00:10:39.251 --> 00:10:41.920
so the HTML actually looks pretty

00:10:41.920 --> 00:10:45.200
when it comes out of it as well.

00:10:45.200 --> 00:10:54.000
I will show that, just really quick
actually.

00:10:54.000 --> 00:10:57.540
So you can see, this is the HTML that
got generated.

00:10:57.540 --> 00:10:58.800
I've got my template.

00:10:58.800 --> 00:11:02.193
I inserted the title here, the style,

00:11:02.193 --> 00:11:05.760
the font was all inserted,

00:11:05.760 --> 00:11:07.920
and then this whole list of of tracks here.

00:11:07.920 --> 00:11:11.200
It's kind of messy to look at,

00:11:11.200 --> 00:11:14.399
but this track list, this whole div here,

00:11:14.399 --> 00:11:22.480
is all generated by my generator code,
and it works. It's great.

00:11:22.480 --> 00:11:27.120
Okay, moving on.

00:11:27.120 --> 00:11:30.945
So the other thing was that as I was
developing this,

00:11:30.945 --> 00:11:32.547
I decided to use Org Babel

00:11:32.547 --> 00:11:35.588
and some of its features for
multi-language things

00:11:35.588 --> 00:11:37.839
because I needed to style it with CSS

00:11:37.839 --> 00:11:39.835
and put actions in Javascript,

00:11:39.835 --> 00:11:42.480
and also I used SVG for authoring stuff.

00:11:42.480 --> 00:11:46.079
It was a little bit complicated.

00:11:46.079 --> 00:11:47.484
It probably would have been simpler

00:11:47.484 --> 00:11:48.680
had I not used Org Babel,

00:11:48.680 --> 00:11:49.894
but it's also really fun.

00:11:49.894 --> 00:11:53.663
I think it's a cool, cool idea to use
literate programming.

00:11:53.663 --> 00:11:57.001
My idea was to create HTML
components.

00:11:57.001 --> 00:11:59.519
I could name it like this,

00:11:59.519 --> 00:12:00.959
put a format string inside it,

00:12:00.959 --> 00:12:02.800
and build a function

00:12:02.800 --> 00:12:04.302
in Elisp to format it

00:12:04.302 --> 00:12:07.120
and spit out the HTML that I want.

00:12:07.120 --> 00:12:09.581
By doing this, then,

00:12:09.581 --> 00:12:12.388
I can just change things in my Org file,

00:12:12.388 --> 00:12:14.814
which, not getting a whole lot of time
to work on it,

00:12:14.814 --> 00:12:16.615
I can come back to it

00:12:16.615 --> 00:12:19.335
and I have a lot of notes.

00:12:19.335 --> 00:12:21.695
I can kind of generate things as I'm
going

00:12:21.695 --> 00:12:24.399
and keep notes for myself,
and keep the...

00:12:24.399 --> 00:12:25.308
I don't know. It's cool.

00:12:25.308 --> 00:12:26.672
Literate programming is fun.

00:12:26.672 --> 00:12:27.519
So I don't need to

00:12:27.519 --> 00:12:29.279
go into that too much, but you can see if

00:12:29.279 --> 00:12:31.040
I execute this here,

00:12:31.040 --> 00:12:32.983
I get the the div that I want.

00:12:32.983 --> 00:12:34.013
It's a little bit funny.

00:12:34.013 --> 00:12:35.786
You'll see I have the string like this,

00:12:35.786 --> 00:12:40.000
the way that noweb expands, I can't do
this on a single line.

00:12:40.000 --> 00:12:43.839
It looks funny when you do that,

00:12:43.839 --> 00:12:45.931
so that might be something
to work out later.

00:12:45.931 --> 00:12:48.959
CSS blocks can either be tangled out

00:12:48.959 --> 00:12:52.639
and referenced in the HTML source,
or inlined.

00:12:52.639 --> 00:12:54.639
Here's an example I have of inlining it.

00:12:54.639 --> 00:12:57.609
So I've got my little CSS block
named style,

00:12:57.609 --> 00:13:00.320
Javascript named script,

00:13:00.320 --> 00:13:03.040
and then I've got this HTML source block

00:13:03.040 --> 00:13:04.839
with noweb expansion.

00:13:04.839 --> 00:13:07.920
These double angle brackets here

00:13:07.920 --> 00:13:09.396
are where I'm going to expand

00:13:09.396 --> 00:13:12.639
the block named style. I'm actually
calling a function,

00:13:12.639 --> 00:13:14.737
so I want the result of the
function here,

00:13:14.737 --> 00:13:18.881
and then the script will just get
expanded here.

00:13:18.881 --> 00:13:22.959
So org-babel-expand-src-block,

00:13:22.959 --> 00:13:25.360
you can see what it looks like.

00:13:25.360 --> 00:13:28.160
I've got my style here. I've got my title.

00:13:28.160 --> 00:13:31.279
I've got that main content class I
showed before,

00:13:31.279 --> 00:13:34.480
and the script as well.
So that's kind of cool.

00:13:34.480 --> 00:13:37.527
I could just run org-babel-tangle and
get my thing out

00:13:37.527 --> 00:13:40.480
and just edit one file instead of
multiple files.

00:13:40.480 --> 00:13:46.455
Not for everyone, but I thought it was
kind of fun. All right.

00:13:46.455 --> 00:13:48.807
Oh, and the final thing is
that in Emacs,

00:13:48.807 --> 00:13:51.320
you can author and view SVG.

00:13:51.320 --> 00:13:58.297
So this is just an Org. This SVG, I used
to make the play and pause buttons.

00:13:58.297 --> 00:13:59.519
I didn't know this,

00:13:59.519 --> 00:14:02.162
but if you edit an SVG file,

00:14:02.162 --> 00:14:08.800
you can toggle back and forth

00:14:08.800 --> 00:14:13.199
between the code and the image.

00:14:13.199 --> 00:14:17.360
It's pretty sweet. So I can iteratively

00:14:17.360 --> 00:14:20.560
work through this
because of how Emacs is.

00:14:20.560 --> 00:14:24.959
Final considerations here,

00:14:24.959 --> 00:14:26.247
like when doing this,

00:14:26.247 --> 00:14:27.606
I want it to be all free,

00:14:27.606 --> 00:14:30.079
so I want to use fonts that use a free
license.

00:14:30.079 --> 00:14:32.800
I found GNU Unifont. It's kind of cool.

00:14:32.800 --> 00:14:34.333
The content license...

00:14:34.333 --> 00:14:37.600
I chose Creative Commons Attribution
ShareAlike,

00:14:37.600 --> 00:14:39.920
which is kind of like the GPL.

00:14:39.920 --> 00:14:42.663
Ideally, I could serve it with Emacs.

00:14:42.663 --> 00:14:46.320
I'd like to remove idiosyncrasy so other
people can use it.

00:14:46.320 --> 00:14:48.720
It's pretty much just my tool right now.

00:14:48.720 --> 00:14:50.734
Not requiring the web browser...

00:14:50.734 --> 00:14:56.648
I can ship playlists so that you can
just click or link to a playlist

00:14:56.648 --> 00:15:00.068
on your favorite player, even EMMS if
you want,

00:15:00.068 --> 00:15:04.320
and then packing up those albums in like
a ZIP or .tar file.

00:15:04.320 --> 00:15:08.639
So you can go to churls.world .

00:15:08.639 --> 00:15:10.644
It just has a link to this album.

00:15:10.644 --> 00:15:14.000
I'll display it here in just a second.

00:15:14.000 --> 00:15:17.519
You can contact me. I'm shoshin on #emacs

00:15:17.519 --> 00:15:21.040
in IRC and on sourcehut. You can email me:

00:15:21.040 --> 00:15:23.680
grant@churls.world, personal, or

00:15:23.680 --> 00:15:26.800
grant@unabridgedsoftware.com.
All right, now.

00:15:26.800 --> 00:15:32.079
Let's see about this...

00:15:32.079 --> 00:15:34.316
This is up online, so if you
want to listen

00:15:34.316 --> 00:15:39.199
to my college band's album from
20 years ago,

00:15:39.199 --> 00:15:43.040
here it is: Cassiopeia Basement Days.

00:15:43.040 --> 00:15:46.887
Whoops. I made this art in Krita.

00:15:46.887 --> 00:15:51.199
You can press play. You can skip around.

00:15:51.199 --> 00:15:55.040
I do have the playlist up here too.

00:15:55.040 --> 00:15:58.560
So yeah, thanks for listening.

00:15:58.560 --> 00:16:07.360
I hope you enjoyed it, and enjoy the
rest of EmacsConf. Goodbye!