Thank you for sticking with it so long.
So, great news. I wanted to do app.
I thought we might need one, but not enough to do apps.
I'm a multiple offender actually because a few years back I also gave a talk about writing
it to do app.
At that time it was building it with cute and rust and this time it will be totally different
because we're using forage to do apps, do they actually work?
That's a good question.
I think at least so here's some of my tasks.
This is moving boxes that need unpacking.
Here is a table full of materials for building window paints that need to be done.
Here's a picture of insulation materials.
I have to put on my roof and there's a nice thing to put on the task list.
As you can see these boxes are still empty.
I haven't done them, but I'm giving a talk at first time.
So at least something is being done.
To do apps, what are the desirable features?
I think to do apps are mostly too simple and I so before looking for one, I wrote down what
I actually want to be able to do with them.
I want to have notes I might to do, not just this one line.
There should be collaborative if I have tasks that other people are affected by.
They should be able to comment there as well.
I should be able to attach pictures, attach links.
There should be able to prioritize, have deadlines, dependencies between tasks.
Multiple devices would be nice, especially a nice mobile user interface.
That's important to me because I do lots of stuff behind the computer.
I don't want to be behind the computer all the time, but I still want to have my
to do list with me, so it should be on my phone.
It should be easy to use also for people that are not nervous, like me.
I want to label things, come down both would be nice, that's not a hard requirement.
Change tracking would also be nice.
This is important one, it should release dopamine.
I should go, yeah, I fixed another to do great and low maintenance of course nice.
So I looked at some of the options that I out there now, to do TXT is just a plain text file
with some grammar and that's not simple for normal people.
You have to know a grammar.
The view to do eye calendar is not implemented very well everywhere and the specification
doesn't have all the features that I just listed.
Next cloud tasks is I think an implemented or fee to do.
So while it's nice and it is collaborative and I'm saying that because you're sitting here.
I'm not just kidding.
Yeah, open projects, that's a bit too complicated for my needs.
TXT is a command line thing that I used for a while, but then we have the problem that I can't use
mobilely or I have to go and type too much on my mobile phone, which is not nice.
I don't want to reinvent the wheel completely.
Yeah.
So could I use a code for it?
Yeah, maybe a code for it has all the desired features that I just listed.
Except there's one thing.
You have to talk about issues.
So on a code for it you have a code base and you have a number of issues and it's always
called issues.
That's some trend I guess, but on a to-do list you have tasks.
So yeah, you have to talk about issues instead of tasks.
They have API support, which is great because then I can use the code for it as a back
end and I only have to write the front end.
Great.
I don't have to think about data modeling other people have thought about it already.
So which code for it should I use?
Well, there's a number of options, well Microsoft GitHub is closed, GitLab is good.
I use it at work, but it's heavy.
SourceHot, great project, a lot of fun, but complicated for me.
I have, yeah, it's a bit too complicated for me.
GitLab for you are for me the sweet spot because they have a really simple interface that
easy to host, it's just a go binary, so yeah, pretty easy.
OK, now is a request.
Can people please stop using GitHub?
It's a pain in my butt because a lot of reasons.
If you continue to use GitHub, you are using closed source software and you're saying,
I'm doing open source, I'm doing open source, but it's on a closed source platform.
That's not consistent.
And you are agreeing to bad terms of services that allow Microsoft to use your code
for training of their AI.
You are part of a bad network effects.
It's like smoking and other people are also smoking.
If you use GitHub, your project is there.
People want to contribute.
I feel forced to also have an account there.
And that's not good.
And you're doing product placement for Microsoft.
Your product URL starts.
First, it says, GitHub, GitHub.
And then, only comes your project name.
That's not cool.
You should just have your project name on your own domain.
And you're also teaching people not to care about free software.
You just ask them, go on there.
And all day, when they're on there, somehow they need to think to themselves,
it's not so bad because I have to use it.
That's just how humans psychology works.
So this is a great idea for Microsoft to offer this.
But it's undermining the free software movement.
So please trial to our tips.
That was, yeah, maybe we should have a break now,
so I can cool down a bit.
And you can move your code.
OK.
So what's for you, then?
Well, it's a code for.
It's just like GitHub, a GitLab.
It's written in Go.
It's formed from Gitty, which is also a great project.
There are, at this point, still exchangeable.
They don't have all the same features.
I chose Forjo for a reason that our will become clear later.
And it's easy to host.
My relationship with Forjo, well, I'm a user and a big fan.
I use it at my job at an outlet foundation
where we sponsor open source projects.
I use it at home for my private projects
that I would don't want to publish publicly.
And I use Codeberg.
Codeberg, who here knows Codeberg?
Great, nice.
Half the people.
So I have some education to do for the other half.
Codeberg is a place that will host your open source software
for free in an interface that looks very familiar.
Important stuff in there is easy.
And it's a membership organization.
So it's a non-profit for collaborating
on open source software.
It runs on Forjo, which is a software that I'm talking about.
So it's basically the same software that you can use at home.
And also, the Forjo Code is developed on Codeberg itself.
So it has an acceleration going on there.
Oh, sorry.
This is a complicated one.
It's a member organization.
I'm a proud member.
You pay a yearly fee and you are allowed to vote
on how they behave, what they do.
For example, they have some very ecologically positive
policies, which say that they try to optimize running
Cijops when the sun is shining.
Of course, you don't always want that.
Some Cijops, you want faster.
At work, we go around that by having our OCI
and coupling that to Codeberg, which is also possible.
Yes, easy to import from other forges.
So here is an overview of an issue page on Codeberg,
or actually Forjo.
And you see that all of these things are implemented.
There are somewhere there.
Some, like the Cumbendon, is not visible on this page,
but it's there.
There's a nice mobile interface, not a reason.
If you open this on your browser and your mobile phone,
it's not easy to work with.
So it's not easy to use.
So we need a solution for that.
Well, if you install Forjo on your machine,
you start it up for the first time.
You go to the homepage, you see this.
And here in the corner, if we zoom in, we see API.
Great.
So it has an API.
We can talk to it with software.
So what we can do is we can explore what the API looks
like.
We can see all the functions that I'm in there.
And we can code our own PWA on top of Forjo.
A PWA is a special concept.
It's basically just a web app, but a web app
that you can install on your mobile phone,
without needing to go to Android Store or an iOS store.
You go to the web page, and you say add to my home screen.
And it will be a local app.
It has storage.
It has the permission to go full screen.
There are a lot of benefits to doing that.
It will just look like a normal app.
It's great.
It's really, really great.
And it's cost platforms.
So you develop it only once.
And it runs on iOS, Android, on your Linux desktop,
it's very, very nice.
So yeah, what does it consist of?
HTML, JavaScript, JSON, SVG files.
This particular one, you can serve from a static file server.
You just copy the files there and it works.
So no need for a complicated backend.
The complicated backend is for Jo.
This is an extract from the API.
So here, the endpoint slash user has a get method.
So you can get information about the user.
And here it's described the 200 response.
We'll give you a user object.
The 400 on one gives you an authorized message.
And here is an idea for what you could use this endpoint
if it were a function in a programming language.
There's another example.
This time we are generating a token.
So what you can do with the API is you can create a token.
And this token will you can store in a cookie.
And you can use that to do further API requests.
Now here are the parameters that you
would normally put in a function call.
Here is another function named suggestion.
And you can also do this first search.
Actually, this is a bit redundant.
It's mostly more of the same.
So now we come to how can we use this API to easily
program a front end.
For that, there is the rest for client generator
called Oval.
This is an MPM package.
And it reads the API JSON and it writes TypeScript.
In the case today, we're going to generate a view application.
And we're going to use axios to do talking to the server.
10 sec queries is another library that we'll be using.
The name of Oval might be familiar to some people.
Yes.
It's a beer.
So 10 sec queries, that's just another MPM package.
And it makes it easier to keep the results of your
forger queries in memory, because it carries them.
And if you make a new issue, for example,
or you change it, it will invalidate the queries.
And you have a nice global object to get to everything.
So that's just a convenience.
So how do we create an application, a very rough steps?
I'm using viewify, which is a view application framework,
which looks nice and has nice widgets.
Once it's ready, you want MPM one-deaf.
Oh, this is the one, or it does matter.
But you get the API from this URL.
And if you host yourself, just change the domain name.
And then this Oval can be used with a configuration
to generate from the very large API file, which is 30,000 lines
to a 60,000-line TypeScript file.
Well, that's a bit much.
And the compiler gets slow when you do that.
So in the repo for this demo application,
I have added the script, where I only list six end points
and extract all the information needed to generate code
from that.
It's a bit of an implementation detail.
30,000 lines of code goes to 2,000 lines of code,
which is very nice for the compiler.
This is what the login screen looks like.
And there's one thing you should notice, which
is different from normal login screens.
You have to say to which forgeo instance you want to speak.
Then you just fill in your username and password
of that instance and press login.
What you see then is the list of all your repositories
because after all is just forgeo instance.
And you can choose one.
Now, how do we implement this list?
Here's a simplified fragment of a Google code.
So what's important here is the use repo search function,
which was in the API.
So this is generated for us.
And what we call it with these parameters.
So this is my user ID.
This is also my user ID, which is nice for searching here,
because it limits the number of repositories
to the ones I own and use some other specific things
that I'm just going to go into now.
But what you get back is a data object and an error object.
Now, if the error object is no, you can use the data object
and use it in a list here and just iterate
over the things that are in there, which you probably
familiar also without a framework.
And then you get a list like this.
So the to-do screen?
Yes, this is a very basic to-do screen, right?
This is much, much simpler than the forgeo page.
Basically, what you do is, if you want a new to-do,
you just type it here, you press enter and as added down here.
You can click the checkbox to make market as done.
You can filter in different ways.
And we have a great fallback.
Because if there is something that we want to have,
but which is not yet implemented in this UI,
you can press this link and you can go straight to the forgeo
instance and look at the full thing.
So any feature that's not completely done from the start,
you can just fall back to the full implementation,
the full user interface of forgeo itself.
Well, here's another bit of code that shows how this works.
We import again from the generated code.
And then we get here the create new item function,
which calls the create issue.
And the create issue is what we get from this API.
So the API gives us a use issue, create issue.
It's a bit of a weird name.
But what it does, it's give you just a function
to create new issues.
And there you have to just say what a title is.
You can add more information, of course.
But this is basically how it works.
And then at the end, you say invalidate the other queries
so that the list of items has to be fetched again.
Well, some observations I had while doing all this.
First, you have to enable course on forgeo.
So I'm not going to explain exactly what course is.
It just means that your forgeo instance will accept
web requests from other web pages than itself.
And codebook.org has that enabled by default.
These days, so that's great.
You don't have to do anything.
But if you install it yourself,
make sure to add that in the configuration.
The direct login, which you saw here,
only works since a few releases.
So if you have a slightly older forgeo running,
it won't work because the course was not working on there yet.
They fixed that in forgeo 14.
And it's fine.
You can work directly, but the initial versions of this app.
I had to also still one small proxy server
to route the request, which was a bit annoying.
But now it's totally clean.
So yeah.
And funny implementation thing, forgeo,
if you want to preview a comment that you're writing,
I would imagine that it would just use JavaScript to do that.
But what it does instead is they want to be so sure
that it's exactly the same as it's rendered on the server,
that it just sends the text to the server,
and it returns the preview.
I thought that particularly funny.
It's just one more round.
It doesn't matter, but it was.
I thought it funny to see that.
Yeah, so note of caution.
The API changes slightly every six months,
because forgeo has a very aggressive release cycle.
So make sure that the API that you're using corresponds
to the version of the forgeo instance that you're talking with.
And yeah, this is just a quad application meaning
that for everything I do, I talk to the server
and it talks back.
I don't store anything locally.
That's also, we have a whole track at forgeo for a software
which is awesome, but this is a simple thing.
It doesn't do that.
So you have to be online to use this.
That's it.
Conclusions, forgeo is fantastic in my opinion.
If you use it longer, you'll also find that it's great.
And so it's also a great backend for a to-do app.
For the future, will I continue working on this app?
Well, I can guarantee that I'm going to work on my issues.
Other than any questions.
Thank you.
So there's this issue.
I think it's that you have told y'all that there should be
all of that.
But it's a problem at the end point for issues.
And you could use your URL.
Yeah.
So the question is, could you make a cloud of bridge for forgeo?
I think you could.
You would have to somehow handle fields that are present in forgeo,
which are not present in the feed-to-do specification and vice versa.
So you might lose data or you have to be specific in, you know,
it's data which is temporarily temporarily stored in a different field.
But you know how to get it back.
So there is some mismatch.
I'm sure of it.
But the basics could be done.
I'm not sure I would really feel comfortable using something like that,
to be honest.
If you thought geo would to the supply that negatively would solve your problem.
But if the forgeo data model would be extended to also encompass all the fields
in the feed-to-do application, yes, then it would be fine.
Another question there.
Nope.
It's not so much.
The question is, to do apps are empty-heart.
Am I actually using it?
Yes, I am actually using it.
Yes, it's kind of sticky.
Yes.
What I especially enjoy is that when I'm done with the task,
I can take a picture and upload the picture.
And I have proof.
Yes, this is a clean chicken shit now.
Although for the chicken shit, I don't go that far that I do that every time.
For example, when I shove the whole field, that's kind of work.
Instead of bothering other people with that on the Fediverse,
I just put it in my to-do results.
Yes.
Thank you very much for your attention.
Thank you very much.
Thank you very much for the invitation.