One thing I wanted to mention was that
as with last year, I just released a new version of
hyperdrive.el and it depends on the latest release of
transient.el and so if you are going to install this
package, make sure that you restart your Emacs after you
install it, if you aren't already up to date with transient,
which was released yesterday. Otherwise, since it, this
latest version of transient.el updates the transient
prefix EIEIO class, and it won't work unless you restart
Emacs. Okay, well, good to know. I think that's a small price
to pay to be on a bleedingest of bleeding edges. All right, I
see there's a question here. Let me see if I can read it. Yeah,
sure. Do you want me to field it to you or do you want to read it?
Oh, sure. Go ahead. I'd love to hear you read it. Sure.
Thank you. So first question. Hi there.
Thank you for the talk.
I enjoyed watching it. I tried this tool last year and it
seemed to work well, but I don't know anyone who actually
uses it. Network effects are tricky. Do you know of any
public shares people can join to try to try this tool out
properly? Thank you. Network effects are indeed tricky.
Yeah. That's kind of part of the purpose of the peer graph is
to make it easier to discover peers in a way that's more, uh,
more reliable and consistent than just somebody puts a
public key on Reddit and then it's lost unless somebody
finds it. Um, but the, the public keys that I know of are,
there's the public key for the Ushin hyperdrive, which is
basically just the same content that's on the website
mirrored to a hyperdrive. Um, and then there are a few other
ones. There's like, uh, hypha.coop has some WebZine
content accessible via HyperDrive and also via IPFS. And
then mauvesignweaver has a blog that's also available on
Hyper. So that's blog.mauve.moe .
But besides that, that's kind of the purpose of this
peer graph thing is to make it easier to discover other
peers. Yeah, to make it also very visual in a way, because,
you know, I personally, it's funny because it reminded me of
talks that I did in the past about the trust system for PGP
keychains, because at the end of the day, you know, this
trust system, whether you trust someone absolutely or
relatively, the blocking system, it feels very related.
Any kind of a chain of trust like this, feels very
reminiscent, obviously, but it felt very nice that for you,
you had a dynamic display of this web of trust. Whereas for
me, I had to make fancy diagram in ticks, in latex, just to
make sure that people understood what was actually going
on. Yeah, one thing I want to point out is just the difference
in utility for something like the PGP web of trust versus
this kind of network of peers is, if I understand right, the
main purpose of web of trust is to identify that a certain
public key is actually created by the person that they claim
to be. So you have a way of identifying that a key actually
matches like a government identity. Whereas this kind of
network of peers has nothing to do with authenticating a key
or associating a key with an identity, like a government
identity. The purpose is exclusively just to get more peers
to be able to discover more peers who have things that are
worth reading.
Yeah, it's a different take on a concept, but even though the
concept might be the same, I find there's a wealth of things
that can be done thanks to this, because as you said, you
trust someone to send you a file that is trustworthy. Well,
with PGP, it's mostly about communication, but about file
sharing, it just opens up completely new avenues. Yeah. Do
you have anything else to add? And about that, I think one of
the barriers to the PGP web of trust is that it required
getting together to have key parties to meet people and
verify identities. Whereas with this kind of thing,
there's no need to do that because so long as your content is
interesting, it doesn't matter that you're not who you
claim to be or that you don't even claim to be anybody. Yeah, I
mean, again, as you mentioned, it's not about identifying
people, it's just about identifying value, in a way, in the
content that people share. It has nothing to do with
verifying their actual identity. But again, it's the same
technology, it's the same understanding, but for
different applications, which is lovely because
programming is fractals all over. The same problems repeat
themselves and the same solutions show up for widely
different scenarios, which is always good. Yeah. Anything
else? One more thing. Yeah. One more thing is that I wanted to
give some kudos to, um, some of the other projects that
inspired the pure graph work. One of them is Adam Porter's or
graph view, um, which is a, um, a tool for visualizing
different nodes in an org file and how they link to one
another. Um, he did. the pioneering work to figure out how to
render interactive graphs with GraphViz. And so we worked
together on it and kind of hacked down the last parts that
weren't working correctly. And so this is inspired a lot.
The user interface is inspired a lot by Adam's work. And then
also the idea of having people that you mark as blockers and
block is inspired by another project called TrustNet by
Alex Cobleigh. I can type in the link there. Alex, how do you
spell it? Cobleigh? Yeah, I'll type it in here. Thank you. And I
think the link is https://cblgh.org/trustnet. I think that is it.
I'm not totally sure. But yeah. Okay, well, that's very good.
and thank you for giving credits to the inspiration, because
again, nothing is done without context, and it's always nice
in the free software world to acknowledge people who have
influenced us, because it's very nice when people start
contributing, maintaining software, publishing stuff
that they actually start collaborating with people who've
inspired them, which is a nice way to climb over the shoulders
of giants, which this community likes so much. All right,
moving on to the next question. We are, we have about seven
more minutes for questions, so we're still good.
Second question, one use case for this sharing and building upon
second brain, sorry, one use case for this is sharing and
building upon second brains, i.e. Zettelkasten, that's
denote or what I'm actually doing, but a blocker for me
wanting to make one public is wanting to use a block list or
whitelist so that I can make them... Cautioning?
Quarantining? Containing. Yes, definitely containing.
Why did I go for quarantine rather than containing? I guess
my brain went to a dark place from the 2020s. So I can make
containing useful information for only me while also being
useful in a public sense. Yes, I think your question is about
how to keep some of the content of your Zettelkasten private
and only have certain parts of it be public. If your desire is
to only share certain files in your Zettelkasten, then you
can use the hyperdrive mirror command that we demonstrated
in the Emacs 2023 talk. In short,
It lets you specify either a regular expression that
matches only some of the files that'll get uploaded from a
directory of files on your machine. And only the files that
match that regex will be put into the hyperdrive and shared
with the world. But it doesn't have to be a regex. It could be a
lambda. So it could match based on file size or modification
time or really whatever you like. So I hope that answers your
question. Great. And I personally, as someone who loves
tinkering with my Elisp, I particularly like the ability to
specify things with a lambda because it just opens up the
ceiling of the possibilities with interactions between
different parts of software. And, you know, as I have worked
significantly in Org Roam, I could definitely see
interactions with lambdas here to make sure that we can send
and share files based on the filter list that is
incrementally added to thanks to those lambdas. So thanks
for this. One more thing I want to add about that is that the,
that same question of being able to upload only certain
files while leaving others to be private was something
that was inspired by Karl Voit. I had an email thread with
him in which he talked about how he uses his file tags project
to organize his files. And he'll put a public tag on the files
in his org database that he wants to have be published to his
website. And so you could very easily just set a regular
expression matches that public tag and then all of the other
files would be not shared. Yeah, and, oh, sorry, I was, I
misclicked, I was talking to production for a second. First
time it happens today, so I think this is a testament to the
level of tightness. But yeah, as you were saying, whatever
heuristics you want is actually a good thing. I think people
are a little antsy because they tend to brain dump into their
Org Roam, Zettelkasten, Denote, and they
really don't want some of their personal notes being out
there. And well, if you are worried about this, I think
learning some Elisp and implementing some Lambda function
that allows you to filter with intention might be the best
solution for you. So I hope we've covered the question as
well as we could have. Next question is more about an idea
about trying hyperdrive to distribute the Worg. Does that
make sense to you? Yeah, I mean, you could distribute
whatever you wanted. I think that'd be a great idea. Okay,
great. Moving to the next question, and we have about three
minutes, so I think we'll cover the last two questions and
we'll move on to the next talk after that.
Could you comment on the visualization thing,
Org visualization, and your
experience with this type of content in buffers and the
various possibilities, SVG, et cetera?
Sure. So one thing that we worked on was I added a patch that
was merged as part of Emacs 30, which fixes the way that image
maps scale when images are scaled. So as an Emacs 30, if you
zoom in on an image or shrink an image or rotate an image, now
the image map, which is the overlay, so it's not actually an
overlay, but it's, so to speak, it's an overlay that allows
the images to be clickable based on, you know, where the
actual visual display is. You can also click on it or hit help
echo. And as of Emacs 30, now that scales with the image
itself.
The code to make that work on previous versions of Emacs, you
can see the advice that we added in hyperdrive-sbb-view, that
file in hyperdrive.el, if you're curious to see how you
could polyfill that code, so to speak, to make it work on
previous versions of Emacs before Emacs 30. But it works
great. The way that this works is we generate a GraphViz
string that will be sent to GraphViz to render an SVG and also
render a CMAPX string. We pipe those back into Emacs and then
we generate the image map from the CMAPX file and then we put
that image map with the SVG, and we render it in a buffer.
Works pretty well. You can check out the code to see exactly
how it works. OK, great. Well, sadly, I think we are a little
short on time to cover the last two questions. So Joseph, if
you want to take a little bit of time maybe to answer the
questions in the BBB, you can just do this, even though the
stream will be moving to the next talk. But I'll use the
opportunity to thank you both for the talk and for your
answers, because they were very insightful. And thank you
so much for taking the time to be with us today. Thank you,
Leo. Enjoy the rest of the conference. Any last words in
about 15 seconds? Thank you. I'm grateful for your taking
all this time to make this conference possible. Well, you
know, the conference would be nothing without the speakers
coming and chatting, so you are the ones to thank. I mean, we
like the thanking, obviously, but it's mostly you doing the
work. All right. Thank you, Joseph. We'll see you later.
Bye-bye.