diff options
-rw-r--r-- | 2019/transcripts.md | 2 | ||||
-rw-r--r-- | 2019/transcripts/10.md | 180 | ||||
-rw-r--r-- | 2019/transcripts/19.md | 49 | ||||
-rw-r--r-- | 2019/transcripts/22.md | 79 | ||||
-rw-r--r-- | 2019/transcripts/28.md | 104 | ||||
-rw-r--r-- | 2019/transcripts/29.md | 41 |
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. |