summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2019/transcripts.md2
-rw-r--r--2019/transcripts/10.md180
-rw-r--r--2019/transcripts/19.md49
-rw-r--r--2019/transcripts/22.md79
-rw-r--r--2019/transcripts/28.md104
-rw-r--r--2019/transcripts/29.md41
6 files changed, 454 insertions, 1 deletions
diff --git a/2019/transcripts.md b/2019/transcripts.md
index 7c4f5396..e297db49 100644
--- a/2019/transcripts.md
+++ b/2019/transcripts.md
@@ -15,7 +15,7 @@ Emacs community update - Sacha Chua - script at
## Dev talks
- [[Emacs: My awesome Java environment - Torstein Krause Johansen (skybert)|19]]
-- [[Packaging Emacs packages for Debian|22]]
+- [[Packaging Emacs packages for Debian - David Bremner|22]]
- [[Restclient and org-mode for Api Documentation and Testing - Mackenzie Bligh|29]]
To be completed later.
diff --git a/2019/transcripts/10.md b/2019/transcripts/10.md
new file mode 100644
index 00000000..862d71df
--- /dev/null
+++ b/2019/transcripts/10.md
@@ -0,0 +1,180 @@
+[[!meta title="Notmuch New(s) - David Bremner"]]
+
+```
+#+TITLE: Notmuch New(s)
+#+AUTHOR: David Bremner
+#+PROPERTY: header-args:sh :results output :session demo :output session
+
+* What is notmuch?
+** A tool(kit) for indexing and searching mail
+#+begin_src dot :file ecosystem.pdf
+digraph ecosystem {
+ size = "4,3"
+ margin=0
+ graph [fontsize=20]
+ node [fontsize=20]
+ edge [fontsize=20]
+
+ gmime
+ xapian
+ notmuch_cli [shape=record,style=filled, color=yellow,label="notmuch CLI"]
+ libnotmuch [style=filled,color=gold]
+
+ subgraph cluster_clients {
+ style=filled;
+ color=cadetblue3;
+ label="Mail user agents";
+ node [shape=record, style=filled, color=white];
+ notmuch_emacs [label="notmuch-emacs",color=yellow]
+ alot
+ bower
+ astroid
+ notmuch_web [label="notmuch-web"]
+ noservice
+ neomutt
+ notmuch_vim [label="notmuch-vim", color=lightyellow]
+ notmuch_mutt [label="notmuch-mutt", color=lightyellow]
+ }
+
+
+ subgraph cluster_tools {
+ style=filled;
+ color=darkolivegreen2;
+ label="tools";
+ node [shape=record, style=filled, color=white];
+ afew
+ nmbug [color=yellow]
+ notmuch_report [label="notmuch-report"] [color=yellow]
+ }
+
+ subgraph cluster_bindings {
+ label="Bindings"
+ style=filled;
+ color=lightyellow;
+ node [shape=record, style=filled, color=white];
+ ruby_notmuch [label="ruby", color=yellow]
+ python_notmuch [label="python", color=yellow]
+ notmuch_go [label="go"]
+ notmuch_rust [label="rust"]
+ }
+
+ neomutt -> libnotmuch
+ astroid -> libnotmuch
+ alot->python_notmuch
+ notmuch_emacs->notmuch_cli
+ notmuch_mutt->notmuch_cli
+ notmuch_vim->ruby_notmuch
+ bower -> notmuch_cli
+
+ noservice->notmuch_cli
+ nmbug->notmuch_cli
+ notmuch_report-> python_notmuch
+
+ python_notmuch->libnotmuch
+ ruby_notmuch->libnotmuch
+ notmuch_go ->libnotmuch
+ notmuch_rust ->libnotmuch
+
+ notmuch_web->notmuch_cli
+ notmuch_cli->libnotmuch
+
+ afew->python_notmuch
+
+ libnotmuch->xapian
+ libnotmuch->gmime
+ {
+ edge [style="invisible",arrowhead="none"]
+ notmuch_emacs->astroid
+ notmuch_emacs->neomutt
+ notmuch_emacs->notmuch_vim
+ notmuch_emacs->alot
+ notmuch_emacs->bower
+ bower->notmuch_vim
+ bower->astroid
+ notmuch_web->noservice
+ }
+
+}
+#+end_src
+
+** Emacs interface(s) to notmuch
+(notmuch-search "from:floris subject:cffi")
+(notmuch-tree "from:floris subject:cffi")
+
+#+RESULTS:
+
+* What is new?
+** Search Improvements
+*** separate message body indexing
+(notmuch-search "body:emacsconf and not subject:emacsconf")
+*** user defined headers, e.g. =List-Id=
+#+begin_src sh
+notmuch config set header.List List-Id
+notmuch reindex date:1month..
+#+end_src
+
+(notmuch-search "List:notmuch date:1month..")
+** Cryptography Support
+- (optional) indexing cleartext of encrypted e-mails
+- (optional) caching of session keys
+#+begin_example
+ ┌───────────────┬───────┬──────┬─────────┬──────┐
+ │ │ false │ auto │ nostash │ true │
+ ├───────────────┼───────┼──────┼─────────┼──────┤
+ │Index cleart‐ │ │ X │ X │ X │
+ │ext using │ │ │ │ │
+ │stashed ses‐ │ │ │ │ │
+ │sion keys │ │ │ │ │
+ ├───────────────┼───────┼──────┼─────────┼──────┤
+ │Index cleart‐ │ │ │ X │ X │
+ │ext using se‐ │ │ │ │ │
+ │cret keys │ │ │ │ │
+ ├───────────────┼───────┼──────┼─────────┼──────┤
+ │Stash session │ │ │ │ X │
+ │keys │ │ │ │ │
+ ├───────────────┼───────┼──────┼─────────┼──────┤
+ │Delete stashed │ X │ │ │ │
+ │session keys │ │ │ │ │
+ │on reindex │ │ │ │ │
+ └───────────────┴───────┴──────┴─────────┴──────┘
+#+end_example
+- indexing, searching, rendering /protected Subjects/
+ - sent by Enigmail and K-9 mail
+
+** Support for gzipped mail files
+(notmuch-show "id:1319286098.13821.57.camel@pc-jirka")
+#+begin_src sh
+bigfile=$(notmuch search --output=files id:1319286098.13821.57.camel@pc-jirka)
+ls -lh ${bigfile}
+gzip -9 ${bigfile}
+notmuch new
+#+end_src
+
+#+begin_src sh
+gunzip ${bigfile}
+notmuch new
+#+end_src
+
+* What is next?
+** notmuch-emacs improvements
+- better docs?
+- more asynch things
+- convenience features, e.g. jump to parent messages
+** Updating python bindings
+- based on CFFI
+- more /Pythonic/
+- less broken with Python >= 3.6
+
+** Protected Headers Support
+- authoring protected headers
+
+* Cleanup this buffer
+#+begin_src elisp
+(org-babel-remove-result-one-or-many 't)
+#+end_src
+
+* Configuration
+# Local Variables:
+# org-confirm-babel-evaluate: nil
+# End:
+```
diff --git a/2019/transcripts/19.md b/2019/transcripts/19.md
new file mode 100644
index 00000000..1419e1ea
--- /dev/null
+++ b/2019/transcripts/19.md
@@ -0,0 +1,49 @@
+[[!meta title="Emacs: My awesome Java environment - Torstein Krause Johansen (skybert)"]]
+
+## Emacs: My awesome Java environment
+
+by torstein @ skybert dot net
+
+## Hi, I'm Torstein 👋
+- Been in ❤ with Emacs since 2000
+
+## I've used many Java plugins/packages
+
+- java-mode (2000 → 2001)
+- [JDEE](//github.com/jdee-emacs/jdee) (2001 → 2009)
+- [gtags](//www.gnu.org/software/global/manual/global.html)
+- jtags
+- [Malabar](//github.com/m0smith/malabar-mode) (2011 → 2012)
+- [JDIbug](//github.com/udalrich/jdibug) (2009 → 2011)
+- [eclim](//github.com/emacs-eclim/emacs-eclim) (2013 → 2017)
+- [Meghanada](//github.com/mopemope/meghanada-emacs) (2017 → 2018)
+- [lsp-java](//github.com/emacs-lsp/lsp-java) (2018 → present)
+
+## My requirements
+- Zero conf: Easily setup a new Java project
+- Fast: must handle large projects
+- Large meaning ~7000 classes (Tomcat has 2200)
+- Easy to switch between projects
+
+## Seeing is believing
+
+Will use a wee app, [cheese-shop](//gitlab.com/skybert/cheese-shop) to
+show the Java features in Emacs.
+
+- Auto completion
+- Code navigation
+- Jump to source of 3rd party libraries
+- Import classes
+- Static import methods and fields
+- Run JUnit tests from within Emacs
+- Linting
+- Unused variables
+- Wrong syntax
+- Missing generics
+- Implement missing class
+- Implement missing method
+- Debug application from within Emacs
+- Debugger with conditional break points
+- Refactoring: rename variable
+- Refactoring: extract to variable
+- Refactoring: extract to method
diff --git a/2019/transcripts/22.md b/2019/transcripts/22.md
new file mode 100644
index 00000000..3a6daa49
--- /dev/null
+++ b/2019/transcripts/22.md
@@ -0,0 +1,79 @@
+[[!meta title="Packaging Emacs packages for Debian - David Bremner"]]
+
+```
+#+TITLE: Packaging Emacs packages for Debian
+#+AUTHOR: David Bremner
+#+PROPERTY: header-args:sh :results output :session demo :output session
+* Why Debian Packages for Emacs addons?
+** For users
+- Extra layer of curation
+- Integration testing
+- Non-emacs dependencies are easy
+- Co-operates with other =package.el= sources, e.g. /Melpa stable/.
+** For admins
+- Familiar tools
+- Known trust model
+- Building VM images
+- Stable releases
+
+* Packaging demo
+** setup
+#+begin_src sh :var dir=(expand-file-name default-directory)
+export SUDO_ASKPASS=/usr/bin/ssh-askpass
+export DPKG_COLORS=never
+export DEBIAN_FRONTEND=noninteractive
+cd $dir
+rm -rf build
+mkdir build
+cd build
+#+end_src
+
+** grab the source
+#+begin_src sh
+git clone -q -o upstream https://github.com/takaxp/org-tree-slide.git
+#+end_src
+
+** generate the packaging
+#+begin_src sh
+cd org-tree-slide
+dh-make-elpa --pkg-emacsen
+#+end_src
+
+** inspecting the results
+#+begin_src elisp
+(dired "build/org-tree-slide/debian")
+(dired-hide-details-mode)
+#+end_src
+
+** building the package
+
+#+begin_src sh
+dpkg-buildpackage -uc -us -b
+#+end_src
+
+** install the package
+#+begin_src sh
+sudo -A env NEEDRESTART_SUSPEND=y DEBIAN_FRONTEND=noninteractive \
+ apt-get install --reinstall -q -y ../elpa-org-tree-slide*.deb </dev/null
+#+end_src
+
+** activate the package
+#+begin_src elisp
+(package-initialize)
+(locate-library "org-tree-slide")
+#+end_src
+
+#+begin_src sh
+dpkg -L elpa-org-tree-slide < /dev/null
+#+end_src
+
+* Cleanup this buffer
+#+begin_src elisp
+(org-babel-remove-result-one-or-many 't)
+#+end_src
+
+* Configuration
+# Local Variables:
+# org-confirm-babel-evaluate: nil
+# End:
+```
diff --git a/2019/transcripts/28.md b/2019/transcripts/28.md
new file mode 100644
index 00000000..8befe3b8
--- /dev/null
+++ b/2019/transcripts/28.md
@@ -0,0 +1,104 @@
+[[!meta title="Play and control your music with Emacs - Damien Cassou"]]
+
+- Hi everyone. In this lightening talk, I would like to present
+ MPDel, which is a user interface for MPD, the Music Player Daemon,
+ that's implemented in Emacs Lisp and runs entirely within Emacs. So
+ it relies on Music Player Daemon, which is quite old because it's a
+ sixteen years old project serving music with many different clients.
+ So if I look at clients of MPD you see there are all different kinds
+ so this ?android? projects or web projects or GTK projects and a
+ curses project, web projects, so yeah many different kinds of
+ clients. MPDel is implemented in Emacs Lisp, it's divided into
+ three parts. So there is a library libmpdel, which is it's own
+ project. That's doesn't propose any user interface, but instead it
+ proposes a set of primitive functions to build user interfaces on
+ top. Then you have the screenshot here on top of the MPDel, so it's
+ mostly tabulated lists based, and then you have another UI which is
+ based on ?IV?, and I will present ?the? two user interfaces in this
+ context of this project. So let's start the video by navigating the
+ music database. So it's a simple job to get the list of all your
+ artists. You can navigate with ?turned-out? shortcuts. And you
+ have isearch obviously ?for? imenu, and so I can go to ?pink? sites
+ with quick shortcuts. When you select your artists you can go to
+ which album by pressing return, and to go from an album to a
+ particular artist's songs, you also press return.
+
+- So that is going ?deep? from the album to the artist and from the
+ artist to the songs, and with carrots or shift-6 on my keyboard you
+ go up to the parent from the song to the albums, and from the albums
+ to the artists. So the next thing we can see is the playlists, so
+ on the left you have the database, and on the right I will put the
+ playlist. So for now there is nothing to listen to, and I will add
+ things in these lists, so we can add either artists, albums or
+ individual songs, so let's add one of my favorite songs, ?So equals?
+ from Pink Floyd. So you can add it to the playlist, or add it
+ immediately stop playing it, so this time I want to immediately play
+ it, so I press P for play.
+
+- And then I will press the carrot to go back to the artists and add
+ some more music, I will add an album by Dire Straits. So if I press
+ P now it will add all the album and also start with the first song,
+ but because I don't want to interrupt ?ecos? I will just press a to
+ add all the songs from this album. What we want to do now is
+ manipulate the playlists, so for now ?ecos? has started playing and
+ I can modify the playlist to decide what will be next, so by default
+ it's Sultans of Swing, but I can change that for prioritization for
+ example.
+
+- Like that, so I can move one song, I can also mark multiple songs
+ and move them around.
+
+- It's also possible to play the next song and the previous song so
+ you have M-n to play the next. And M-p to play the previous one. If
+ you wanted to delete a few songs from your album you can select them
+ and then press k for deletion, and then they are removed from the
+ database, not from the database, but only from the playlists. With
+ t you can toggle the mark, so if I want to select everything by
+ ?except ...? I can just press t. And t again to ??, if I want to
+ select everything I can always press t when nothing is marked, so I
+ can erase everything at once.
+
+- Something I can do now is display some information about the
+ currently played song, so I can press v wherever I am to get the
+ list of songs. It's very important to notice that whatever view you
+ are in the shortcuts are always the same, so if I go back to the
+ navigator with n, I can press ?? information about the current song,
+ so v here, which ?? about the current song. So you see that there
+ is the time, and the album and artist and ?? status, so if I pause
+ the music, it ?? pause. And backplaying. I can move forward and
+ move backward with M-s and M-v, I can do that slowly or fast with
+ different shortcuts, and from the current song you can press carrots
+ to go to the parents, so it's exactly the same shortcut as how we
+ were navigating from the songs to the albums and from the albums to
+ the artists, so it's carrots, and you go from the song to its album
+ and then from the album to the artist.
+
+- I tried when designing the shortcuts to make the keybindings do
+ always the same thing wherever you are, so if I press M-f now I will
+ fast-forward the current song, so the same shortcuts work the same
+ everywhere. And if I press ?....? Another way to control the
+ current playlists or stop playlists is to use the Ivy based
+ interface so it doesn't pop up any buffer, but you can still
+ navigate your database and select the songs to play. So if I start
+ the interface I get the list of all my artists in the minibuffer, so
+ I can choose for example MCC artists and the ?? ?king? and the song
+ I will pick this one for example, and there are many things I can do
+ from here, so I can add to the current playlist I can start playing
+ immediately, I can start and stop playlists, so let's see I just p
+ for playing it immediately.
+
+- So MPDel is mostly based on tabulated lists, which I really liked.
+ And after I implemented MPDel, I liked that kind of view so much I
+ decided to use the views for other kinds of packages, so I
+ implemented a database navigator, and also a network manager client
+ using tabulated lists, and I realized that all of those libraries
+ and tools they were sharing the same kind of code. So I decided to
+ abstract away from all of those and I created navigel which makes it
+ very easy to implement tabulated lists if you have a model of your
+ domain data that you want to navigate.
+
+- There is a lightening talk at EmacsConf about navigel so I encourage
+ you to have a look at it if you're interested in how I reimplemented
+ MPDel so that it's much simpler, and how I implemented all the other
+ packages. This is the end of my talk, I hope you liked it. And
+ happy EmacsConf.
diff --git a/2019/transcripts/29.md b/2019/transcripts/29.md
new file mode 100644
index 00000000..8d8e1cec
--- /dev/null
+++ b/2019/transcripts/29.md
@@ -0,0 +1,41 @@
+[[!meta title="Restclient and org-mode for Api Documentation and Testing - Mackenzie Bligh"]]
+
+#TITLE Restclient and org-mode for Api Documentation and Testing - Mackenzie Bligh
+
+- Hi everyone, my name is Mack, I am a back-end software engineer with
+ ?Tarot? in San Francisco, and I'd like to talk to you today about
+ how I integrate Emacs with RestClient and Org-mode into my daily
+ workflow for documenting and testing APIs. All of the materials for
+ this talk can be found in EmacsConf 2019 repo with the url here
+ <https://github.com/mack1070101/emacs-conf-2019>. This example uses
+ restclient.el, which is a domain specific language for working with
+ restful APIs and OBRestClient to provide the wrappers for Org-mode,
+ however these are just the wrappers for what I use, the principles I
+ demo here can work with any set of programming languages that's
+ supported by Org-mode and has network calls.
+
+- So I find this way of writing documentation great because it helps
+ people get into using Emacs and provides a shallow learning curve
+ without being overwhelming of how to use Emacs. The second thing
+ that's great about it is it helps support maintenance of
+ documentation, because the documentation itself is actually used to
+ interact with APIs. Therefore it's providing utility to developers
+ and they can use it and maintain it all at the same time. As an
+ added benefit you have full Org-mode support for task management
+ doing things like exporting to other formats, building scripts via
+ tangling, as well as writing very complex API interactions by
+ feeding the output of one API into the input of another API.
+
+- I tend to favor using ELisp for simple things like building
+ requests, log in strings, things like that as you'll see. I do try
+ to avoid using languages or tooling that aren't integrated with
+ Emacs, however if it makes my life easier I'll use ubiquitous tools
+ like curl and jq as needed. I've included a mock server that I
+ already have running here, and you can find details about how to get
+ that set up if you're interested in the repo and link up above. So
+ let's jump right in.
+
+- Here is provided a sample document for a stock trading
+ application. We've got
+
+To be completed later.