@@ 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