~ushin/emacsconf-2023-presentation

457a5c8c28bcd91d4b577683a96fc2fe475c4a4a — Joseph Turner 1 year, 1 month ago 1082000
Add presentation slides
3 files changed, 276 insertions(+), 0 deletions(-)

A emacsconf-logo1-256.png
A presentation.pdf
A presentation.tex
A emacsconf-logo1-256.png => emacsconf-logo1-256.png +0 -0
A presentation.pdf => presentation.pdf +0 -0
A presentation.tex => presentation.tex +276 -0
@@ 0,0 1,276 @@
% Created 2023-11-05 Sun 23:41
% Intended LaTeX compiler: pdflatex
\documentclass[bigger]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usetheme{default}
\author{Joseph Turner}
\date{Sunday, 2023-11-05}
\title{hyperdrive.el: Peer-to-peer filesystem in Emacs}
\subtitle{EmacsConf}
\hypersetup{
 pdfauthor={Joseph Turner},
 pdftitle={hyperdrive.el: Peer-to-peer filesystem in Emacs},
 pdfkeywords={},
 pdfsubject={},
 pdfcreator={Emacs 29.1 (Org mode 9.6.9)},
 pdflang={English},
 colorlinks=true}
\begin{document}

\maketitle

\begin{frame}[label={sec:org2b66941}]{Hyperdrive: P2P File System}
\begin{itemize}
\item Developed by Holepunch, Javascript, Apache 2.0 license
\item Each peer runs a node
\item Create a hyperdrive; author files within it
\item Share the link to the drive or a file
\item Anyone with the link can access its content
\item Anyone with the content can seed it
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org9385ffe}]{Hyperdrive Features}
\begin{itemize}
\item Single-writer
\item Offline-first
\item Local-first
\item Sparse
\item Mutable
\item Versioned
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org6cccae3},fragile]{About USHIN}
 Tiny nonprofit whose mission is to promote personal, community, and global health through free and open Universal SHared INformation for everybody.
\begin{itemize}
\item Paula Maas, Steve Nash - USHIN founders
\item Joseph Turner (\texttt{breatheoutbreathein}) - coordinator
\item Mauve Signweaver (\texttt{rangermauve}) - P2P explorer
\item Adam Porter (\texttt{alphapapa}) - Emacs package author
\item Jonas Bernoulli (\texttt{tarsius}) - Magit maintainer
\item Protesilaos Stavrou (\texttt{protesilaos}) - philosopher
\end{itemize}
\end{frame}
\begin{frame}[label={sec:org3948418},fragile]{Main demo}
 \begin{block}{Intro}
Here's a potential way to start your demo.  Feel free to adjust it!

\begin{enumerate}
\item Start with \texttt{M-x package-install hyperdrive}
\item Open the hyperdrive.el manual in Emacs (mention that the manual is
available \href{https://ushin.org/hyperdrive/hyperdrive-manual.html}{on the USHIN website})
\item Say that you (Prot) have already installed the gateway server, and
direct users to the Installation section of the manual
\item Copy the example config into your init.el and evaluate the buffer
\item Start the gateway from within the menu bar
\item Open the USHIN hyperdrive in the "Open a hyperdrive" section
\end{enumerate}
\end{block}

\begin{block}{Org links between drives}
\begin{itemize}
\item Open an org file in the USHIN drive
\item Store a link to it
\item Create a new drive
\item Create a new file in that drive
\item Insert the stored link
\item Follow the link

\item Contrast the relative links that are inserted into files in the same
drive with absolute links that are inserted into other buffers,
e.g., files other hyperdrives.
\end{itemize}
\end{block}

\begin{block}{Version history}
\begin{itemize}
\item Create a file, make changes, delete it, recreate it, open
previous/next versions, show full history
\begin{itemize}
\item Open old version, view old version, diffs
\end{itemize}
\item Open history of a file in the USHIN drive
\end{itemize}
\end{block}

\begin{block}{Misc features}
This is an unordered list of features to include somewhere in the
demo.  Feel free to phrase these more clearly.

\begin{itemize}
\item[{$\boxtimes$}] Go back to directory listing (with \texttt{dired-jump} binding)
\item[{$\boxtimes$}] Sort the directory contents (mouse click, \texttt{s}, and \texttt{C-u s})
\item[{$\boxtimes$}] Show off keybindings in directory (same as those available in
\texttt{hyperdrive-menu})
\item[{$\boxtimes$}] Download
\item[{$\boxtimes$}] Upload
\item[{$\boxtimes$}] Copy link to a hyperdrive file to share with a friend!
\end{itemize}
\end{block}

\begin{block}{Notes}
\begin{itemize}
\item It appears there is a bug related to loading hyperdrives by their
DNS records. If it's not working, let's omit this feature from the demo.
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[label={sec:orgec45f12},fragile]{Demo 2}
 \begin{block}{Mirror upload (\texttt{hyperdrive-mirror})}
To demonstrate mirroring from within \texttt{hyperdrive-menu}, checkout and
load the latest transient.el \texttt{master} branch and the hyperdrive.el
\texttt{menu} branch.

\begin{itemize}
\item Start with a directory of files you want to upload to a hyperdrive
\item Open \texttt{hyperdrive-menu}, and press \texttt{h} then select a hyperdrive
\item Go over options

\begin{description}
\item[{source}] source directory on your local filesystem
\item[{target}] target directory on your hyperdrive
\item[{filter}] only upload the files matching filter
\item[{confirm}] Whether to confirm before uploading
\end{description}

Demonstrate \texttt{filter} by using a regex to match Denote tags!
Mention that a lambda or named function could be used to upload only
files under 2MB, for example.

Set \texttt{confirm} to \texttt{yes} at first.

\item Press \texttt{m m} to open the \texttt{*hyperdrive-mirror*} buffer

\begin{itemize}
\item The timestamps of the local files are compared against the
timestamps in the drive.  (I'm noticing a bug where the comparison
gets stuck sometimes.  You can workaround this by pressing \texttt{g})

\item A file will only be uploaded if it is "new locally" (it doesn't
already exist on the drive) or it is "newer locally" (the local
file has been modified since the previous upload).  A file which is
"unchanged" or "newer in hyperdrive" will not be uploaded.

\item Add some files to the filesystem directory and change the rest of
the files either on the filesystem or in the drive, then press "g"
in the \texttt{*hyperdrive-mirror*} buffer to compare the files again.

\item Press "C-c C-c" to upload the files to the hyperdrive.
\end{itemize}

\item Say or show what happens when \texttt{confirm} is set to \texttt{no}.

\item Mention that you can also run (\texttt{C-u}) \texttt{M-x hyperdrive-mirror}, which prompts
for the same information one at a time.
\end{itemize}
\end{block}

\begin{block}{Misc features}
\begin{itemize}
\item[{$\boxtimes$}] Scratch buffer
\item[{$\boxtimes$}] Start gateway
\item[{$\boxtimes$}] New drive
\item[{$\boxtimes$}] Open hyperdrive sub menu, explain names
\item[{$\square$}] Stream Prot's demo video
\item[{$\square$}] In hyperdrive-menu and the menu bar, notice that the previous
version says ? at first, but after loading the previous version,
subsequent visits say the version number (explain unknown versions)
\item[{$\square$}] Load "Unknown" history ranges
\item[{$\square$}] Load an HTML file, follow some links in EWW (show seamless
navigation between pages served over \texttt{http} and \texttt{hyper})
\item[{$\square$}] yank-media: copy an image to clipboard in an external program then
run \texttt{yank-media} in the hyperdrive-dir buffer for a writable drive
(maybe not worth showing off?)
\item[{$\square$}] Describe hyperdrive buffer
\item[{$\square$}] Bookmarks
\item[{$\square$}] Show version number in buffer name
\item[{$\square$}] hyperdrive-menu
\begin{itemize}
\item In the menu, \texttt{C-u h} prompts to select a hyperdrive
\item In the hyperdrive-menu-hyperdrive transient, \texttt{C-u f} prompts for a version
\item "?" gets help for a command; "?" again opens the manual
\end{itemize}
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[label={sec:orgb79a618}]{Extending Emacs with Hyperdrive}
\begin{center}
\includegraphics[width=.9\linewidth]{hyperdrive-architecture.png}
\end{center}
\end{frame}

\begin{frame}[label={sec:org3d98fb6}]{JSONRPC Plans}
\begin{itemize}
\item Fine-grained control allows for:

\begin{itemize}
\item renaming files atomically
\item diffing directories between versions
\item listing connected peers
\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[label={sec:org14eec82}]{Emacs Libraries}
\begin{itemize}
\item plz.el: HTTP Library
\item ewoc.el: Abstract Display Functions
\item persist.el: (c.f. multisession.el)
\end{itemize}
\end{frame}

\begin{frame}[label={sec:org694ce1c},fragile]{Actions}
 \begin{itemize}
\item Try out hyperdrive.el
\end{itemize}
\begin{verbatim}
hyper://
aaj45d88g4eenu76rpmwzjiabsof1w8u6fufq6oogyhjk1ubygxy
/hyperdrive/hyperdrive-manual.org

https://ushin.org/hyperdrive/hyperdrive-manual.html
\end{verbatim}

\begin{itemize}
\item Join the public conference room
\end{itemize}
\begin{verbatim}
xmpp:discuss@conference.ushin.org
#_bifrost_discuss_conference.ushin.org:aria-net.org
\end{verbatim}
\end{frame}

\begin{frame}[label={sec:org8672122}]{Thank you EmacsConf 2023!!!}
\begin{center}
\includegraphics[width=7cm]{emacsconf-logo1-256.png}
\end{center}
\end{frame}
\begin{frame}[label={sec:orgb951a0b}]{FAQ}
\begin{block}{Hyperdrive}
\begin{itemize}
\item Sparse replication

\item Versioning
\end{itemize}
\end{block}

\begin{block}{Petname Systems}
\begin{description}
\item[{Public key}] public, globally unique, not human-memorable
\item[{Nickname  }] public, not necessarily unique, human-memorable
\item[{Petname   }] private, locally unique, human-memorable
\end{description}
\end{block}
\end{frame}
\end{document}
\ No newline at end of file