Episode: 4411
Title: HPR4411: The Pachli project
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4411/hpr4411.mp3
Transcribed: 2025-10-26 00:27:20

---

This is Hacker Public Radio episode 4,411 for Monday the 30th of June 2025.
Today's show is entitled The Patchly Project.
It is part of the series interviews.
It is hosted by the Love Bug and is about 72 minutes long.
It carries a clean flag.
The summary is Dave and Kevvie interview Nick from The Patchly Project.
Hello and welcome to another exciting episode of Hacker Public Radio.
My name is Dave and I'm joined this time around by Kevvie.
Hello, hello.
Everybody knows who Kevvie is from the, well, many episodes he puts out plus also the
monthly community news as well.
So on this particular episode, we are going to be talking to Nick from The Patchly Project.
And rather than me actually going through and explaining what Patchly is, I thought I
would pass over to Nick to explain.
Before we do that, Nick, welcome.
Thank you so much for joining us.
Can you just give us a little bit, a little bit of information about you, who you are,
and your development background?
Thank you very much.
So I am, old time, I would say, open source developer, cutting my teeth on open source
unique systems back in the 1990s, free BSD, at that point was my system of choice back
in university, and somehow managed to parlay that into a bit of a career when the internet
was beginning to take off in the sort of the 1990s in the UK.
And then for the past almost 20 years, I've been based out in Switzerland, working with
different companies out here, and a couple of you, well, almost two years ago, now I started
the Patchly Project with, and I sort of consider myself to be in the role of sort of steward
of that project.
So with a sort of this specific idea that people will come after to continue the work.
Excellent.
Well, thank you for that.
So I suppose the next logical question is, what is Patchly?
So Patchly is a client for Masterland and other servers on the Fediverse that support the
Masterland client API.
It is for Android devices going back as far as API version 23, which if I thought about
it, I would actually be able to talk about what Android version that corresponds to.
But yeah, these devices, like 10 years old, all they're about, up to the present day.
Right.
Um, what is Patchly, was, was the name come from?
Ah, so I mean, this is one of the most probably difficult decisions when you're starting an
open sort of project is trying to come up with the name, and I remember I spent a good sort
of 10 days to two weeks brainstorming different ideas in an obsidian notebook, as they would
sort of come to me.
And then you go through this whole process of, well, I can't use that because it's somebody
else's trademark, or I can't use that because it is a dirty word in some language that
I'd never heard of before.
So you sort of, you go through this whole process and you whittle the list down to sort
of three or four.
Um, and then Patchly sort of stuck with me for a couple of reasons.
Um, one is, uh, it's derived from, uh, Pacidum and a lot of, like, sort of mastered and related
projects use elephant imagery in some form or another.
And then the L.I. suffix is a particular feature of Swiss German.
So it's a sort of a nod to, uh, where I'm living now.
Um, you might, you see this in some other open source projects, uh, they're also started
around this area.
So there's the, um, Broadly and Zopfle compression algorithms, um, where Broadly, um,
brought bread, so Lee, like a little piece of bread or like a little bun or something,
um, in there.
And then sort of what sealed it for me was when I was trying to come up with logo ideas
and realize that a sort of a stylized capital P, if you look at it in a particular light,
looks like an elephant's head facing left with sort of the stem of the pea being the
trunk and the, um, I don't know what the type of harmful term for it is, but the sort
of the cup terrier of the round right being, yeah, the, um, the big round bits at the
top is critical.
Uh, yes.
So that's on the technical.
Do we need to?
Yeah.
So, so when I sort of looked at that, sort of all of these pieces came together and it
was like, yeah, okay, that, that will absolutely do.
Oh, fantastic.
Okay.
Uh, I think that's probably the, the one thing that had I not researched it, uh, I would
be curious as to where the name came from.
It was like you quietly said, the name of something is what the entire thing hangs off of.
Um, um, okay.
So the market at the moment is, is quite, um, I wouldn't say saturated, but it's quite
well provisioned for, uh, with mastodon and Fediverse, uh, enable clients, particularly
for the Android platform.
What prompted you to create a new application to service the Fediverse?
So I think some of this is down to, um, software that I was sort of previously familiar with
and the aesthetics of that.
So when I first started, um, uh, and joined, uh, I mastered and server and this was around
mid-22, I think.
Um, so I was coming from Twitter, so I was part of that, uh, Exodus at that point and was
looking around for different Android clients to use and quite quickly bounced off the official
mastodon app.
Um, I sort of no shade on that app and the developer there, but the, the UI, um, that it has
just sort of didn't work for me.
I was familiar with the, uh, Twitter open source Twitter client, um, and it sort of, it
didn't behave like that and there were bits about the UI, um, that, for whatever reason,
like didn't suit me, similarly with, um, another, I believe, like sort of very good app,
uh, Fedilab, um, and then I eventually found the Tusky client, um, which I used for about
a year.
And in the course of that year, also then started, uh, contributing, uh, to that project,
um, in the last, like, sort of eight months before the packet project started, I think
I ran two of the Tusky releases and was, like, sort of, replying to user support questions
from the Tusky account and things like that, um, and then, uh, aspects of how the Tusky
project was being run, um, and, like, this is probably not the place to relish against
any of that, um, sort of didn't sit well with me and sort of my philosophies around,
like how open source projects should be run, um, so I sort of left that project and we're
still then using Tusky on a regular basis, but we're seeing all of these things that
I wanted to, uh, change, like, either they were bugs or features that I wanted to add
or whatever.
I thought, right, well, then the, the best way to do this, um, is to, uh, then fork, uh,
that project.
Um, and if I'm going to be raising issues around things like open source project
governance and best practices and so on, it's one thing to be able to talk about that,
but I should also then be prepared to actually put those practices in practice.
I guess, and actually demonstrate yet that, uh, yes, this is a realistic and feasible
way to run an open source project, um, so that would be, um, quite a, quite apart from
any of the project governance, uh, type of issues.
This is things like having a, uh, a regular release process so that people who are contributing
to the project know when their contributions are going to be in the hands of people using,
uh, the application, things like that.
Okay.
That does make a lot of sense and I, I personally quite appreciate the, the non-functional,
uh, attention that you're obviously, uh, putting into this project.
Um, I want to touch on that a bit more in a moment, but I think my, my last question
with regards to, um, the end user side of pack liars and app is, what's pack liars
us pay?
Uh, I understand that's quite a provocative question, but what would, what would make,
wake me as a user or as somebody who is going to join the Fediverse for the first time?
Why would they use pack li?
That's a great question.
Um, I think if there's probably a number of different angles to that, I think depending
on what you as a user, um, care about, uh, so one might be the, uh, the general aesthetic
was sort of look and feel of the app.
So the UI, um, quite deliberately does not follow some of the, the latest, uh, like UI trends,
like the very newest, uh, Google material libraries, for example, because I personally, um, don't
get on with those terribly well.
Um, and I know I'm sort of not the only person, um, that's like that.
And this idea of like sort of the app, UI, changing very regularly to sort of chase these
latest trends, um, I think can be of put into people.
If you are somebody who has, uh, particular accessibility requirements from a Fediverse
client, then that is one of the things, uh, that I focused on quite heavily.
I've been quite fortunate to have, uh, a number of, uh, users who have different accessibility
needs, who have been very gracious with their time and explaining where, um, aspects of
the app sort of don't work for them.
I'm being, I'm providing quite detailed feedback on if you did this or if the app behaved
in this particular way or whatever, it would be more accessible to us.
And then that carries through into, um, new, uh, feature design, uh, or improvements to
the UI.
So one of the things, for example, that shipped in the most recent release was a significant
UI change when you're writing a new post and you attach media to that post, where previously
a user who had to do that.
And this is pretty common across all of the client apps, um, at the moment is you attach
the media and then you have to tap multiple times before you get to the bit of the UI that
lets you provide the caption for that media, um, that is particularly useful to people
who have different sort of accessibility needs.
And based on feedback from them and my own use, one of the things that the new version
now does is when you attach media to a post you get within the main UI, the fields to,
uh, provide the caption immediately.
There's no having to click around the UI, um, if you don't know even that providing captions
is a good practice on the video as you might not even know to, to look for that.
So things like that, um, I think are important.
If you are a user who regrettably, um, faces, uh, forms of harassment online, then patty
contains controls that I don't think any other client has, um, to not remove the, uh,
harasses, um, but certainly to help minimize the impact of that when young in some cases
prevent you from saying it.
So patty has controls, for example, to, that you can turn on to prevent you saying, say,
a notification or a message sent from an account that you do not follow or from an account
that is younger than 30 days.
So if you're being targeted for abuse by people who are just like creating accounts to harass
you, then your harasses have to go through these extra steps.
And this is one of the things, um, that I think fedivized clients as a whole could be doing
more of, um, there's, uh, this came to me in the, uh, last year, I think around the middle
of last year, um, was when the last big sort of blow up online happened around, um, uh,
people on the fedivist being harassed like sort of, um, uh, African Americans, for example,
I think we're making a lot of complaints.
I'm justifiably so, obviously, um, and the response, I think, from a lot of people was
to explain to them, well, this is just how federation works or, uh, we've got all of these
other problems to fix or whatever.
And I remember, sort of listening to or reading a lot of those conversations and thinking,
well, I wait a second, like this could be fixed, um, client side, not necessarily perfectly,
but we shouldn't be letting the, the perfect, um, be the enemy of the good, um, and then
if you are an open source developer, um, and you're interested in contributing, then there
are aspects around things like the project governance, um, the deliberately release processes
that I put in place, um, one of the things that I'm, uh, quite passionate about is making
sure that in every release, like everybody who's contributed, um, gets credited in
the release notes, in the announcement post, in the blog post about it as well, because
I think those are just good open source governance, um, practices to follow.
Yes, absolutely.
And that's of course one thing that gets so often gets overlooked is just the, the fact
that people, you know, people who may be, you know, contributing small parts, but of
course, these small parts are actually very essential.
And one of the benefits of open source, now you were talking there about people, contributing
and suggesting things, uh, for, I mean, we, we take it for granted to be honest, the,
the more technical users, we take it for granted that we'll look, we'll grab the source code,
uh, page or somewhere and go and put it in a blog reporter, a feature request, etc.
And let's just say this is for a more average dual blogs, who has discovered patchy,
patchy, uh, who, and they're saying, right, I want to, I want to suggest this, or I want
to help out what's the best way to contact you?
Um, through the, uh, the official, uh, packet master on dot social, uh, account, um, which
will be on the, the fediverse, um, there's also the, the team at packley dot app, uh, email
address, um, for people who are more technically minded than GitHub, uh, issues or GitHub discussions,
uh, also work.
I try not to funnel people down sort of one particular path.
I think you have to, uh, meet people who have got feedback wherever it is that they want
to try and provide that feedback.
And then it's kind of on me to bring that into whatever sort of like project management
types system I want to have to try and make sure that it, uh, it doesn't get lost, um,
which can be a whole, like, proper minute zone right.
Totally.
I mean, that's great to hear because I mean, so often, we, I mean, I'm so guilty of it
as well, uh, we, we can all be quite like that because we're just a super, well, that's
fine.
Raise an issue and good to have an, you know, you might as well say to people, go make
a samurai sword, some people that's, you know, it, it, it's just that you've just talked
gibberish to them.
Yeah.
A thing that's really important to keep in mind is that any time, uh, a user of your, of
your software is trying to give you, uh, feedback about some problem.
It's because they were trying to do something with your application and it didn't work for
them.
And they're probably going to be frustrated about that, trying to root them to different,
um, uh, systems to report that problem is not going to be helpful to them.
Um, and I think this is one of the differences.
And again, it's kind of a project, governance or like project philosophy type thing where
I, there is a difference, I think, between somebody who is working on our open source
project, um, like sort of purely as a hobbyist, like they've built something for themselves.
If other people use it, that's great, but they are still the primary audience perhaps.
And then at the other end of that continuum, you have like sort of the large open source,
um, projects that may have started as close source projects from different companies,
for example, um, but that have like a lot of that corporate backing and perhaps like dedicated
project managers and so on.
And then in between those two, you have like sort of the, what I'm trying to carve out
with the Pacty project is, um, deserves like no, the project is still like, it's an open
source project.
There's no paid developers, um, working on it, other things like that at the moment.
But this is a project that doesn't exist just to fulfill my needs for an Android
message and client.
I very deliberately want other people to use it and then to tell me when it doesn't work
for them so that it can be made better.
Is there a risk of, is there a risk of scope creep?
If you're building an application, which is intended to meet the needs of the end user.
Now, please don't misunderstand me.
I work in software.
I'm not, I'm a developer by like historical trade, but I don't develop at the moment,
but I'm definitely the user of a, of a service.
And I'm very demanding individual.
So how, how would you cope with, with that and avoid scope creep?
Um, I think it's a combination of prioritization and then having an idea, um,
both at the back of my mind and also it's public on GitHub, um, of what the sort of
medium to long term plan is for some features.
So when you asked earlier about, um, why should somebody choose, uh,
packly, for example, there are also like people who, uh,
probably shouldn't choose it at the moment.
So for example, if you're, um, if you're primary fediverse server is, um,
one that is not compatible with a master and API in many cases or has built
additional features on top of that, then pat it at the moment.
It supports a few of them that I've sort of bolted on here and there.
But the plans for making it more, um, cross server compatible are one or two,
like sort of major releases out.
And so if somebody comes to me and says, oh, I really wished you supported, uh,
reactions on posts, which some other client taps you do.
Um, I'm going to, uh, take that feedback.
It goes in the big pile of things to look at when the work to support other servers
starts, but unless there's something that indicates that suddenly become a big
priority, uh, for people, then it sort of, it will wait until that.
Um, another area would be if you are looking for a fediverse client that works
very well on large devices, so like foldables or tablets, um, things like that.
The UI for packet at the moment is pretty much targeted apps, sort of typical
phone size devices.
And again, I've got, uh, plans to change that, um, and that's in the, sort of
the long term project plan that's online, but, uh, that helps me sort of keep
the scope.
So maybe a little bit tighter, because I know that some of these things are going to
sort of push off to the future.
Um, and then other stuff, when I'm prioritizing work, uh, to implement, it's,
I've got a sort of a hierarchy of urgency for some of these things.
So obviously like any, anything that's a crashing bug, um, under common
circumstances goes to the sort of top of the list.
Um, then in terms of features, it's any, uh, feedback I get from people who've
got accessibility needs, um, but particular requirements, because I think that,
that is like sort of very important.
Um, and then it is a mix of, um, things that I want to fix, because just
being deeply embedded in the code, I know where all the problems are.
And that can be sort of very frustrating, because you just want to fix all of
them as soon as possible.
Um, I've also got ideas for features, uh, that I want to see and feature requests,
um, from other people.
And I try and balance those based on, uh, the feedback that I get about those
feature requests, um, if it's a number of people asking for it, then that'll sort
of bump it up the list, um, but things like, like Packley is never going to be a,
um, ah, what was it?
Uh, I think JWZ has a quote about, um, all programs eventually evolve to the
point where they can send email.
And I'm, Packley, Packley is not ever going to evolve, um, to that point.
For example, I'm quite happy to hear that personally.
Yeah.
Um, um, but there are these things around eventually support for other
servers, support for other types of devices and display sizes and things like
that.
To make it a better experience, um, for users, uh, because that ultimately is
the, is the, the, the driving force, I think, um, and the, the reason why I
spend, like sort of a lot of time on this, like, is incredibly satisfying to
get feedback from somebody and now some new feature, uh, that you've launched
or where they've maybe requested this, like, sort of six months ago, and
it's gone on the back burner because I've had other things to, to work on.
But to then be able to turn around and deliver it to them and say, this
exists because you highlighted this requirement that I hadn't even thought
of, um, I think is, is really gratifying for them and getting the, the
feedback from them when it works for them is very gratifying for me as well.
Right.
Um, you used the word earlier.
You mentioned the word hobby, um, it's, it's listening to you talking
about this and the passion with which you're describing so many of the
different facets of, of the, of the project.
This is clearly not a hobby for you.
This is a, this is a serious development project.
Presumably, this is something that is only limited and constrained by your
own capacity.
So is there any, anywhere, any particular areas of the project, either in
terms of development or any other of the non functional areas that could
benefit from more expertise?
Absolutely.
Um, I think the, the overall UI, um, and consistency around it, um, is
something that I sort of keep bumping into and discovering that bits of the
code have re-implemented the same thing like sort of 15 different times.
Um, and just to be very clear, like because this is a, a fork, I don't want that
to come across as like sort of throwing shade on the, uh, the previous
history of the goat, right?
So the, the Tusky project, um, I think was started in 2018, um, and a lot of
how Android apps are developed has changed a lot since then.
Um, and so like sort of design decisions and things, um, and implementation
decisions that were made back then aren't necessarily the right way to do
things now, but that doesn't mean they weren't the right decision.
Back then and with the, the constraints, uh, that they were operating under.
Um, there is, uh, definitely work to be done around improving the, uh, the
testability, I would say, of the code and the level of, um, certainty, um,
around the quality, uh, of each release and I sort of making sure that, uh,
regressions don't happen.
Um, I'm going to actually, I'm going to use that as an opportunity to maybe
sort of segue into, uh, something slightly different.
So, uh, one of the things that the project does or is, is under the umbrella
of the, uh, nivenly foundation, um, which is, um, and at the moment, U.S.
place organization, um, that exists to support, uh, different open source
projects. And one of the things that I want to be able to do through them is
offer, uh, internships on the project paid to people who would otherwise
maybe want to be able to contribute to open source, but are not financially,
uh, able to and be able to work with the nivenly people to provide, uh,
grants for that work.
So what, and one of the projects that I've got in mind, which is,
why this just occurred to me is the idea of writing a lot of screenshot tests
for the app. If that's something, if that's something you're familiar with.
So the idea that, um, you start the app, you drive the UI into a particular
state and then you take a screenshot of what it looks like in that state.
And then future code changes, um, run those same tests and you take the same
screenshots. And as long as they are pixel for pixel identical,
then you know that you have inadvertently broken the UI. Okay.
But, um, if they are different, then you know that you have it inadvertently
made a change that has caused some UI elements to move or a dialogue box that
should have popped up and no longer popping up, um, or, um, I don't know, uh,
in a mode G that should have appeared in somebody's, uh, name on the screen,
is up, is appearing as the short code instead of the emoji.
And then you get to scratch your head and think, oh, okay, what's if I broken
now? Um, and of course, like trying to do that through, um, regular, like,
sort of unit or end to end testing, um, is very complex, um, and
quite sort of tricky to do. Um, and, but it's, it's important to have those sorts
of controls in place so that every time you push out the new BC release or whatever
you don't get users, banging on your door, saying, oh, wait a second, this
thing that used to work is stopped working, um, because it's incredibly
embarrassing when that happens. Yeah. How, how automated is your, um, your
testing suite? Um, so the testing suite itself, uh, is pretty automated and
covers most of the, um, the side of, do we get data from a remote server?
Uh, and then mangle it in the appropriate way and does it end up in the
local database and ends up in the expected format. And if the, um, it's a
bookmark function is called, for example, does that result in a network call
out to the, the other end. Um, but that sort of tests the intent of the
code and not how things can necessarily appear on the screen. So if that book
not called fails, you kind of really want to make sure, well, does the
error message pop up on the screen for the user? Do the, with the little
retry button so that they can retry it and so on. And while you can write a
lot of code to try and do that, the simplest way to do it that I know of,
um, that gives you the most bang a few back in terms of effort to expanded
versus useful result out of it is, uh, screenshot tests, because that,
it, it tells you something is very definitely gone wrong here. Um,
even if you don't know what the cause of that is.
Very interesting, very choosing indeed. Um, you mentioned earlier about the
Nivellany Foundation. I was going to ask you about that. But now I don't
have to. But you mentioned on the Nivellany website that packly is an
application, which we've already spoken about. Yeah. Um, but also a
spice to be an association. What does, what does that mean exactly? Um,
so funny enough, I have a PR out at the moment that might actually change that
language. So when I first started the project, um, and so this, and this was
before coming under the umbrella of the Nivellany Foundation, um, one of the
ideas that I had in my head, uh, was to start, um, a legal entity that could do
things like properly, uh, own a copyright, the, um, the resources acquired by
the project. So things like the domain name, um, and things like that. And
then could operate as a cooperative with members. And then the membership fees
would be what would fund things like, um, grants to provide internships.
For example, I was talking about earlier. Um, in the very early days of the
projects, I then contacted a number of organizations that also provide, um,
those that sort of functionality. So there was the pre-sortware foundation, um,
I'd benefit to get their name software freedom conservancy. I think, um,
SFC, yeah, um, and, uh, Nivellany, um, on all of those three, um, sort of
talkative, then Nivellany seemed to be, uh, the best fit for the project,
because they're already, um, very active on the, the Fediverse and, um,
providing, uh, funding for the, uh, the Hacquidum, uh, project, which is a,
method and, uh, server. And so there was sort of this natural fits there. They also, um,
have the same, like sort of, uh, cooperative principles. So the idea is that you,
you pay to become a member and then membership grants you the ability to vote on, uh,
different proposals on, say, how that money might be spent. And since that was one of the things
I wanted to be able to, uh, to do coming under the Nivellany foundation meant that I'd have to
start my own association to do that. And all of the hassle that that would take,
including interest and finding a second person to be the sort of, uh,
co-chair on the board, um, and things like that, I could instead slot under, um,
that Nivellany umbrella and let them, uh, deal with that side of things instead. And then,
this also exposes you to like a larger user base. Um, uh, people who've got more experience with,
governance and non-profits, uh, and things like that as well. So this expands the number of people
that you can, uh, get advice from as well, which is sort of super important. I think a common
failure mode in this, of course, is to, um, be sort of quite good in one, uh, area of expertise.
I think that that just then translates into, oh, well, I must be good at all of this other stuff
as well, right? And of course, that's not the case. I don't really know the first thing about
running an association or a non-profit or whatever. So, um, rather than discover all myriad ways,
it's possible to, um, uh, get that wrong. It's much better to believe that to people who know more
about this than I do. Yeah. We see that a lot in, in some, uh, open, open source and open cultural
organizations, uh, there's an event that happens on a mostly yearly basis called OgCamp,
uh, that was imaged the last year, um, which is like, uh, an unconference of, it's, it's a,
it's a geeks get together. That's what it is. Um, but a lot of the, uh, the, the, the legal
sonny of it has been given to a organization. I've completely forgotten the name of, um, right,
um, no, uh, no, Simon's group, uh, oh, um, yeah, it's going from me. I can't remember the name of it,
but they, they, they look after the, um, they don't, they look, yeah, they basically look after the
finances and the legal and the, um, the, I suppose the boring stuff, right? There isn't actually
organizing or arranging an event. The stuff that has to be considered that W really wants to do
is being, being given to this other organization to take care of. Um, governance is a service,
if you're like, yeah, I'm back to back in the day, back in, um, 1999, I think it was myself and
three others, um, organized the first European BSD conference, um, with like no experience of
organizing conferences, um, at all, and we just figured, right, well, how hard can it be? It turns out
damn hard. Um, so that was sort of, sort of quite eye opening. Uh, and then in the years, since
now, I think there are a lot of sort of dedicated organization that does exactly like sort of what
you've just said, um, right. But for that, um, yeah, exactly. Uh, public software CIC is the organization,
yep, um, that was behind, uh, the PC underpin dog camp last year. Well, that's them for a few years.
So now, totally understand. And if it takes some of the pressure away from you as, as, can I say,
project lead? Uh, you can. Um, the term I'm trying to use, um, is sort of project steward, um,
because I feel like that conveys the idea that this is a, a role that in the future is hopefully
going to get handed off to somebody else, um, understood. If I'm still doing this in like sort of
five or six years time, then maybe my idea is about how this works with the size of the fediverse
or whatever turn out to be wrong. Um, in many ways, like this is an experiment, um, to, to see what
happens there. Understood. Yeah. Hack up, public radio works in a very, very similar way. We don't have
project leaders or administrators. We have janitors. Yep. They just basically keep the floors clean.
And I don't mean that in the two wrong countries, huh? They do, they, they are effectively running the
show. Yep. Um, but yeah, they want to be known as genesis and I completely respect that.
Yes. Now, just before we actually move on there, you spoke about, uh, spoke about the financial
and things they are just if anyone's listening. And again, I don't know why, but I seem to be kind of
a voice of the non geek tonight, which is not me at all normally. I actually don't get why I'm doing
this, but let's just say, I mean, there's, there's plenty of times where certainly somebody that's,
you know, has coding ability can get involved with things or as graphical ability or as experience
with, but if somebody's like, uh, again, we're just going to see average Joe and they want to say,
I'd like to contribute. I'm, I'm not going to contribute much, uh, as far as expertise, but can I
set up a donation scheme or anything like micropayments or give a one off? Do you accept that?
So if somebody was wanted to do that, um, then the way to do that would be to, uh, join
nivenly as a member. Um, one of the things that I'm sort of trying to avoid is there's certainly,
there's certainly space in like, in open source projects for those projects that were, um, it is
like, say, uh, a solo developer and they're operating under the sort of the tip jar type model,
right? So whether that's Patreon or co-fi, I know, I'm never sure if that's supposed to be
pronounced co-fire, or is it really coffee? I think so. I've always assumed coffee. Yeah. Yeah.
And things like that, where the understanding is that that money is going direct to the developer
to spend however they want, right? And for, like, smaller projects, like, that's absolutely,
absolutely fine. Like, no couples about that, um, at all. But with, uh, particularly,
sort of what I'm trying to do with, um, patty is, I don't want people to feel like they just throw
many into these, uh, at a developer who's going to sort of spend it however they want. I would
might rather that they use that money to become a member of Nivellany because that then
gives them, if they choose to use it, some control over the project as well. By which I mean, um,
wait, I've got my, uh, intern RFP document up here at the moment, um, which I'm sort of drafting.
And then when that goes out, um, the packet membership will be able to, sorry, the
Nivellany membership will be able to review that. Ask questions, provide feedback. Um, it will
eventually go up for sort of some sort of vote as to whether or not the membership wants to
approve to spend Nivellany funds on that. And that's the sort of direction, um, sort of, I
personally would like to see these types of open source projects go down where you don't have,
um, like a large, um, company that's making the decisions about some of the stuff but it's
like still expecting, um, open source contributions or maybe funding or whatever, but that if you are
going to provide funding, then that provides you with, uh, more or say in the project as well.
And now that say doesn't go as far as, for example, paying money to get a particular feature
implemented. For example, like I don't think that's a route I would particularly want the,
the project to go down. Um, but then again, um, ultimately that's not a decision for me to make.
That's, that will be a decision for the Nivellany membership, uh, to make something like some
hypothetical future. The Nivellany member was to, uh, propose that, uh, Nivellany spend some amount
of money on hiring or, or paying it available to work on, like say, some specific feature. Um,
then I get to sort of talk of that about that proposal and maybe say well, then I think it's a
good or a bad idea and vote in the same way as every other member. Um, and this is the, um, the,
the cooperative model. And so there are a few master and service providers that operate under
the same model. There's one in Canada, for example, um, co-social.ca where you pay to be a member of
the server. Um, and then that grant you some sort of rights and responsibilities, uh, as well.
Okay. That obviously is from, from your perspective, as project steward, by granting,
delegating, I suppose, um, control of the project to the members of the Nivellany foundation.
Is there not a risk or even a fear perhaps that the rug could be pulled out from under your feet
that you could lose, um, either control of or creative or, um, aspirational control of the project?
Yeah, absolutely. But this, this I think comes back to, um, what I was saying earlier about,
like sort of deliberately using the term steward and that I ideally want this to be a, like, not a
super, super long term thing. Um, the, the code that started the project, only some of it was
written by me. A lot of it was written by other people on the, uh, the Tusky project who contributed
over the years. Um, and as and when, uh, we're at the point where there are other people who are
contributing and other people who are capable of stewarding the project through and sort of
I reached the point where, um, I'm able to move on, uh, to something new. Then, uh,
the, the half life, I guess, is the code that I've written will probably shrink down a little bit
as well. Um, I think it's, uh, something I see a lot sometimes from, uh, more,
uh, junior developers in open source is this idea that their sense of self or their sense of
self was is, is deeply tied to their code or the quantity of code or how quickly their code is
um, admitted into a project or whatever. And I very firmly believe like that is not the case.
You aren't, you are not your code. Um, and attitudes like that I think makes things like sort of code
review. Um, so much easier and can sort of reduce the, um, the, I was going to say fights
was maybe the wrong word. Um, the arguments that sometimes happen when I know somebody,
somebody who has, has written some feature and somebody else comes along in six months time and says,
oh, I actually know there's a faster, better, safer, more bug free implementation of this.
Here it is. Um, and I, you know, you know, good, well run project, somebody's going to look at that
and go, great. Thank you very much for your contribution. But what often happens is,
whoever the original sort of that code, can you so then come back and go, oh no, wait a second,
like they're saying this thing that I did six months ago was terrible and needs to be replaced.
It's like, oh, I feel personally attacked by that. It's like, no, no, no. It's like, I'm the first
person to admit that code that I wrote six months ago is probably terrible and needs to be replaced.
But it worked. Um, at the time. And so, yeah, I think there is, there is a real danger that people
can become too attached to this. And then that results in a lot of the, um, the problems that we see
in open source projects that don't think about stuff like this or like governance issues and things
from the very get go. Um, I think that's, yeah, that's a, that's a common failure mode.
Something that I was aware of and something I wanted to very deliberately avoid, um, with this project.
Yeah, understood. Yeah, totally. And I think it's, I think we've all experienced it, especially when,
you know, with, uh, I mean, uh, in the past, I've reached out and I've said, you know, I've
not criticized. I've just said, I've been using this. I've done a few times on for tux chant reviews.
I've been using this. This could maybe do with them proving that this experience that I had,
not intending to slate them, just trying to give them, you know, constructive criticism or
say, but I put a feedback to say, have it this. And of course, you get the more or less ranty email
it's the card man that kind of screw you guys. I'm going home kind of mentality. You know,
it's like, oh, no, it wasn't meant to insult you. It was a bit to try and make your project better.
And I think you said it earlier, you know, it says somebody who's taken the time to actually give
you feedback, then the reason is because they've tried using it and it's not behaving in the way
they were thinking it should or expecting it to. Yep. Yeah, for sure. I think, um, one of the,
one of the things that I try and do, um, I don't know if I'm sort of not perfect and probably
fairly this many times, but is if I'm getting feedback from a user of the app, like whether it's
feedback or Macedon or they've reported a GitHub issue or they send an email or whatever.
The first thing I try and remember to do is like, if it's a bug that they're reporting is apologize.
Because it sort of, it's almost like it, it almost decouples me from the code a little bit.
Hopefully makes them realize that their feedback is appreciated and that this isn't about to be
like sort of combative interaction. And then take it from there. I saw this, I mentioned earlier about
the, um, a lot of the conversations that were happening around, uh, people being harassed
around the middle of last year. And I saw this a lot in the conversations there where people were
applying with lots of technical reasons about why this was still happening or how difficult it was
to solve the problem, um, or, oh, I don't even see that as being a problem or whatever.
But it was very, very rare for me to ever see, um, anybody in those interactions, like whether
it is, whether it was somebody from Macedon, GMBH, um, or a server operator or, um, somebody responsible
for one of the other server projects, starting by apologizing to the people that were reporting
the harassment. It was all very much straight into the technical side of, oh, well, you just don't
understand how federation works or it would be really difficult to fix this or whatever. I like
just remember watching these interactions and scratching my head slowly and thinking like this could
be so much better. Um, but it's, when it's people arguing backwards and forwards across the screen,
it's really easy to fall into that mode of, that mode of thinking, um, and forget that it is
somebody on the other side of the screen who has been affected by this. Yeah, yeah.
Um, I suppose if, if some, the way to look at it is, if somebody is willing to approach you
and say, I think this could be approved by doing it this way, more than anything else, it demonstrates,
hopefully demonstrates that that person cares enough about your product, they want to help improve it.
Oh, I'm, yeah, absolutely. Um, I mean, like everyone happy, everyone happy user is still the user
at the end of the day, I guess. Um, and certainly with some of those interactions, I found it,
um, very rewarding to them, I actually probably have a conversation with them about,
okay, well, you're asking for this particular thing, but if we do that, then I can like maybe
ratloft, like, well, here are three or four consequences of that that maybe you haven't thought of
that we would need to mitigate in some way. So maybe we can have a bit of a pack and force about
how we might actually achieve what it is that you want to achieve with that necessarily achieving
it in the way that you've suggested that we achieve it. Yeah, what they need, not what they want.
Yeah. Yeah, exactly. And, um, I sort of found that to be, to be very helpful as well. Of course,
sometimes some people just want to fire, if we, fire and forget, um, a request in or whatever,
and don't have the time to, uh, fill up or contribute further or whatever. And then I kind of
looping back to what you're asking earlier about things like sort of prioritization. That's the
sort of thing that might, depending on the nature of the problem, deprioritize it a little bit,
um, because I'm then coming away from that interaction with a bit of a sense of, well,
if it, if it wasn't that important for you, it's not necessarily going to be that important,
um, for me to fix, especially if it's a sort of a, a throwaway, or comes across perhaps,
there's a bit of a throwaway suggestion. But like anything else, it's a, it's a bit of a balance
to be found. Yeah, I understand that. You've, um, mentioned a few times, Nick, that, uh,
Packley is, is a fork of, of Tuskegee. Yep. Um, I wanted to ask you, uh, the status of that is,
is Packley now, um, a completely distinct co-base as in a hard fork of that project,
or is there still some form of upstream downstream, downstream collaboration between
Packley and Tuskegee? So it's now effectively a hard fork, just because the co-base has diverged,
um, various, very significantly. Um, some of that, some of that is bug fixes. Um, some of that is,
features, um, that have either been implemented differently or implemented, or are going to be
implemented in different ways. Um, an example, a very recent example, um, might be one of the,
one of the future requests I've been getting is, uh, to have a different visibility for replies.
So in Packley and in Tuskegee, you can say, well, I'm posting, do I want to be posting,
like publicly or just to my followers or direct messages or whatever. Um, and there's been
requests to say, well, I want to be able to post publicly, but I want my replies to be unlisted.
Hmm. And I was doing a little bit of research into those requests and looking at what other,
uh, uh, Macedon clients do. Um, and most of them just give you like sort of a checkbox,
um, or a switch to say, I want my replies to be unlisted. A couple of them give you the ability to
say, no, I want my replies to be public or unlisted or only to my followers or direct messages.
And I was looking at that and thinking, well, well, I need to sort of truth table out kind of all
of these different options and see which ones actually make sense. And once I've gone through that
whole process, I realized that actually a single switch for unlisted, uh, is going to be both
the simplest thing to do. And I think the thing that matches up with actual user intent. So that's good.
Um, but in the course of doing that investigation, I discovered the Tuske, the Tuske project
has already implemented this feature. Um, but they have done it with a menu of you can choose
public unlisted, follows only in direct. And having gone through that process and asked for feedback
online, um, about what makes sense. My conclusion from that is the approach of things like
Fedelab and the Moshodon project of just having a single checkbox is the correct one. And so that's
what I will do. And things like that will mean just again, mean that the code base diverges further
and further and further. Um, that's not to say, um, if the Tuske project would ever to, uh,
want any assistance bringing some of the features that Packley has over into, um, Tuske,
like I'm always I sort of very happy to, uh, you provide feedback and sort of knowledge about that
because I think overall, like I guess, um, it improves the overall, I sort of health of the ecosystem.
Um, I talked about the, the anti harassment controls earlier. Um, and at the moment, Packley is the
only client that I'm aware of that has anything like that. I would be overjoyed if one or more other
clients decided that they wanted to implement the same thing. They probably wouldn't be able to do
it in exactly the same way. But I would very happily spend time, um, with any of the other client
developers about, okay, this is why I did it this way. Packley is the problems that I had. This
is some things that you might want to consider and so on because that sort of feature shouldn't be
something that she's locked away, um, in a single client. I love the fact that your, um,
your approach to this is so not a, this is my boy, you can't play with it. This is very much, uh,
uh, an ongoing collaborative effort. I mean, the fact this is an open source project in,
you know, in an obvious home, right, means that people can go in and have a look at the code.
And if they wanted to reuse it for any purpose, subject to license, of course,
they could take a feature out of Packley and put it into Fedelaab or put it into, um,
into Tuskegee, I presume. Yep. Yeah, absolutely. Um, I mean, so package, uh, KPL3 license, um,
as I think most of the other open source clients out there, um, I don't, I'm not aware of any commercial
ones for Android. There are a few commercial ones, I think, for, uh, iOS, um, but that's about it.
And I mean, you're coming about sort of holding onto the ball too tightly. Um, I think I think
about quite often is I'm only sort of where I am both, like, sort of physically in Switzerland
and the position that I'm in through the sort of very unlikely chain of circumstances, a lot of
which has involved other people being prepared to spend a lot of their time and energy teaching me
different things. And I think you have to find ways to sort of pay that forward, um, whether
like sort of teaching other people, um, online, offline, making your code available, things like that.
Yeah, amazing. Um, Kaby, do you go any, uh, any further questions?
I don't think so. If, uh, I mean, I had a few, I went ahead and then Nick was the answer in
them. I said, so you've done a really good job there. Uh, I'm assuming you're not using some
mind protege, isn't there? But no, the only one thing I think that I was, I had it in the back of
my head, but, uh, I'll say it now that I've said, I've said this much was, would, are you going to
consider, maybe you do an I just don't know about this. Do you offer like a pre-release
for a tester? Yes. Um, so there is a very intrapackly called, um, we're studying it on
originality, uh, packly current. Um, so that is also in the, it's in the Google Play Store. Um,
you can also download it from the GitHub, uh, releases page or if somebody uses, um, uh, what's
called, um, there's an app called obtaining them, which makes it very easy to install these, um, as
well, that tends to get releases every three to four days, um, with either like sort of pre-releases
of new features or if some library dependency has been bumped, um, and it works for me, but I need
to make sure it works for, uh, for everybody else. Um, for people that use eftroid, um, as their
repository, unfortunately it's not available there just because of how eftroid builds things, um,
is not really feasible to, uh, to make that happen. But on, um, on the packly.app website, um,
at the top there are, uh, there's a link to the installation instructions and somebody there
can go and from there they can see how to install packly and packly current and you can install
both of them side by side. So if packly currently starts cracking, that's my actual next question.
I was going to see candy runs side by side. So you've got something to fall back to, um,
and one of the features that came out in the, uh, the release just before this one. So,
was it two 11 or two 12 one on, um, there's now experimental support for exporting and then being
able to import your, um, uh, different preference settings from within packly. So if something happens
for example and, uh, packly current starts crashing as long as you've got a reasonably up-to-date
export of your settings, then, uh, it is now much less painful, um, to, uh, before you had to
sort of relocate and then set everything up the way that you wanted. Now you just have to relocate
in and re-import the settings. Now does that support cross-version, uh,
import export? So if you, if you have, so for example, I've got a packly on my phone. Yep.
Um, if I want to do install packly current, could I then export my settings from packly and import
them into packly current? Yes. Um, the, so the export file contains a version number. And so,
as long as the version number is, uh, lower or equal to a version number that, that version of
packly supports, they know, then it will work. And that's specific to the file format, not the
version of packly. I understand that. So that, I'll buy it, go check. Yeah. So that should,
right. So as long as nothing, nothing's changed in the structure, you should be able to just
light back and forth. Yes. What it, what it doesn't do is it doesn't export your account credentials.
Because I don't know enough about how to do that securely and safely on Android.
So I wasn't sort of going to text that particular large box. So you still have to log in with
all of your accounts. Um, but then once you've done that, you can then just go into, um, there's a,
there's a section in the preferences called lab preferences and you jump into there. And then
there's a whole bunch of stuff in there that's, um, currently sort of baking and waiting for you
to use a feedback. Um, so there's features in there like, uh, experimental support for markdown
or being able to reverse your timeline. So instead of scrolling up to seeing your stuff,
you can scroll down. Got it. Okay. Um, one more question for me. And then we'll probably wrap up.
Right. Um, I recently replaced my phone. Yep. And because I am getting old and I have holes
in my head that leak very relevant, a recent information, I cannot recall whether I had to
re-log into everything and set everything up again or whether it went across with the phone.
So I'll ask you directly. Does Packley support the Android configuration backup thing through
Google Drive, the automatic one? As of a version or two ago. Yes. And that does restore your account
credentials because the Android backup stuff is set up so that it is encrypted, you know,
in a trustworthy way. So then yes, you can migrate from one device to another. Um,
they're in the sort of the normal Android way. Um, and that sure that's really that should just work.
If it doesn't send me a bug report. Well, I'll let you know in three years time if I was on my phone.
Uh, but either that works and I didn't notice because I took take a lot of things like that for
granted. Sometimes, no, it just worked. Yeah. Or I actually went through the pane of it and the
trauma of that have just blocked out. Right. So I can't remember either way.
You've got me. You've got matters. Now it's to which is to which version this came in. Um, oh
yeah. So, uh, 2.12, which was the version released at the end of people. I don't know because I
got my new phone in March. Uh, okay. Right. And in which case, no, it wouldn't have done.
No, but as of as of the 2.12 release, um, at the end of April, that's now all gets backed up and
restored. If you, if you have a Google account on the, on the device. Yeah. See, that's a big
if I like to make my life, Missouri, you know, install everything individually again and read stock,
read, read login, of course. Yes. Of course. A lot, a lot of our listeners will be
very much of the, I don't want anything to do with the Google, um, camp. So it's unlikely they
will have any of the Google Play services, let alone have a Google account, uh, which I get.
It works both sometimes difficult as an Android software developer to sort of walk that line
because it does make some things a lot more complicated or you end up having to drop or limit
um, some features. So one of one of the things that Patty can do, for example, is you're supposed to,
um, when you are writing a post, you can write it in whatever language you like.
But it is still up to you to sort of set the, the toggle when you're posting this, I'm posting
this in English or German or French or whatever. And a feature that I put in Patty quite a while back
will try and run language detection on, uh, the text that you've written. And it will warn you,
if it looks like say you said you've written in German, maybe because you were applying to somebody
in German, who are originally writing German, um, but you've actually written it in English. And it
will prompt you and say like, do you want to change the, uh, the language of the post that you've
written into to say actually it's in English. And on Google devices with the Google Play Services,
you get the Google machine learning stuff that tells you what language something is in, um, with a
higher degree of fidelity than you do just on sort of base Android devices. Um, and trying to sort
of juggle that feature and figure out what the correct thresholds were for different types of
devices was, was quite complex, but I didn't want to leave one particular group or another, um,
out when it came to implementing stuff like that. Yeah, I suppose trying to accommodate
everybody is, uh, is not easy. That is certainly more difficult on the Android ecosystem with the
range of different device sizes, um, and things like that. And that again, actually where taking
this is all most all the way back to the beginning where like screenshot tests are so useful,
because instead you can say, oh, I want to see what it looks like on a tablet. And on a device that's
yay big and a device that's much smaller, um, or is landscape or whatever. And it makes these sorts of
things a lot easier. I'm going to ask you one more question because you just prompted it by
when something you just said. Um, if you suddenly disappear, I will understand that I offended you.
Have you considered porting developing whichever for iOS? Um, very briefly, and then I realized that,
I just don't have the time. Um, it is something that I think is technically becoming
um, a lot more feasible, um, with how the, the language that is written in, which is Kotlin,
which is a sort of a descendant of Java. Yeah. Um, and the Kotlin project has made a lot of headway
on multi-platform support. Um, but a lot of the patty code base was written, um, they inherited
through the touchy code base was written at a time where having a very clear separation of concerns
between like your network data model and your database data model and your user interface data
model and how data flows between all of those and how, um, user interactions on the device,
those actions flow back down. Of course, things that happen. Um, best practices now is to keep all of
that very clearly separated. Um, and a lot of the patty code base at the moment because of where
it's come from doesn't do that. Right. One of my ongoing bits of refactoring work is to improve
that situation. Um, but that's what they get slotted in amongst bug fixes and new features,
and things like that. And these are one of the things where I've almost like sort of, um,
trace myself by my own petard a little bit with this idea of,
releases happen on a monthly basis. This does mean that anything that takes more than a month of
work to work on has to get slotted in amongst everything else and can, when your context switching
between lots of things potentially can then take a lot longer as well. Um, that again is why
things like this, um, idea for, um, internship projects. I'm looking very much at things that are
uh, self-contained, tightly scoped, don't necessarily interact too much with the
the rest of the code so that somebody can go off and work on them. Um, uh, but yes, at the moment, um,
iOS support from me, certainly is not something that's going to happen any time soon. However,
if anybody lives into this, has it on Android and also has a iPhone or an iPad or whatever
thing? I would really like this one here. I'm not going to turn, turn down contributions that make
that, uh, happen or bring us close to that goal. Absolutely, because it also improves the overall
quality of the code. Yeah, understood. Yep. Great. Right. Before we sign off, actually, I was just
going to see that the one last thing we always do is if people want to get in touch with your
self, Nick, what is the best way to do it? Um, so if they want to talk about anything other than
badly, then on Macedon, then the easiest way to do it is just to, uh, message me on there. Um,
either a private message or like public on the thread that I'm happy to discuss a lot of stuff
in public. So that is just, uh, at Nick Clayton, uh, at Macedon. social, um, and the Nick is
spelled NIK because when I was growing up, that's how many lessons you could get on the arcade
high school tables. Oh, which game you've got to tell us now? Oh, good. Um, so many ghosts and goblins
kicked my backside reliably and regularly when I was growing up. Um, and then of course, uh, bubble,
bubble. Oh, yeah. Words were just, yeah, fantastic. Um, and then if it's stuff, uh, about
packing, then my preference is, uh, send it to the at the packley at Macedon. social
account just because, um, I'm much more likely to then remember to copy that into like different
project management systems. Um, and stuff, if it is something, uh, that they want to talk about,
uh, privately or like a security issue or something like that, um, then an email to team at
packley.app, uh, or reach made well. Thank you so much for taking your time to come on and
thank you for all the work you're doing on packley. Well, thank you very much. Thank you both for
the, uh, the questions. I've really enjoyed this. Oh, good. Glad to hear it. I, I've, I've been using
packley ever since we reviewed it on tux tram. So one 14, we should back in August last year.
Um, I was a, what was I using at the time? I was using husky at the time, which I think is also a
dusky for. Yep. Um, and I, I really enjoyed husky, but packley for me, it, it ticked just a couple more
boxes of the way that I wanted to use, uh, a Macedon client. And so that's the reason why I stuck with
it. And it, yeah, it's, it's a, it's a really amazing piece of, uh, piece of software. So thank you
from me. Oh, thank you very much. Um, I mean, I can't emphasize enough though. Like a lot of that is
the foundation that it's, that it's built on. And then many other people that, um, have contributed
over the years. Um, but yeah, there is a lot in there as well where I'm looking at it. And I'm just
going, this feature should exist. Or we should be able to do this other thing. Um, I think that's
maybe a, a failure of the master of an ecosystem. I think perhaps is there is a, um, a mindset of
a lot of the stuff should only be done in the server. And then the client should be as dumb as
possible. Um, and I get the sense, or I get, I feel like I understand why the Macedon organization
would sort of want that level of control. But at the same time, it also makes it more difficult
for clients, I think, to, uh, innovate in this space. Um, and with things like the, the anti-RS
network, for example, um, that really was like something where I was looking at this and going,
yeah, like clients could do better about this. We don't need to wait for the servers to implement
particular features. Um, and then of course, it works on other servers as well, like
go to social or pluroma or, uh, cameo, or, um, uh, what's the other one? Um, Sharky, I think I'm
thinking of awesome. Well, thank you, Nick. Very, very, very, thank you. It's appreciate your time.
Um, it's been really, really good. Yeah, I, I, I, I, I, it's, it's always nice to be able to sort of
talk about, uh, a lot of the stuff with other people, like so much, so much of like coding is,
they're not necessarily a solitary activity, but you don't get to, um, talk about the, the meaning
of the reasons for off of this, um, like it would be, um, I'm not going to start talking about the
philosophy of some of the stuff in the release loads. For example, um, yeah, but I'm hoping that
these ideas will resonate with, uh, at least some of the audience. Um, some of you may be,
even then, uh, might feel like they want to contribute. Yeah, so, yeah, thank you very much for joining us
and tune in to model for another exciting episode of Hacker, public radio, you have been listening
to Hacker, public radio at Hacker, public radio does work. Today's show was contributed by a
HBR listener like yourself. If you ever thought of recording podcasts, you click on our
contribute link to find out how easy it really is. Hosting for HBR has been kindly provided by
an honesthost.com, the internet archive and rsync.net. On the Sadois stages, today's show is
released on their creative commons, attribution, 4.0 international license.
