Thank you for sticking with it so long.
So, great news. I wanted to do that. I thought we might need one, but then there are
not enough to do apps and 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 yeah this time it will be totally different because we're using forged
geo. So, 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 yeah there's a nice thing to put
on a task list right. 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. So yeah, to do apps
what are 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. So I want to have
notes I might to do is 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 that should be able to prioritize, have deadlines,
dependencies between tasks. Yeah multiple devices would be nice, especially a nice mobile
user interface. That's important to me because I program, 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 nerds 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
V2 do I calendar. It's 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 V2 do. So while it's nice and it is collaborative and I'm saying that because you're
also sitting here. Not just kidding. Yeah open projects. That's a bit too complicated for my
needs task square 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? The shell 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 projects, a lot of fun but complicated for me. Yeah it's a bit too complicated for me.
GitHub and for you are from either sweet spots because they have a really simple interface that
easy to host and just a go binary. So yeah pretty easy. Okay 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 and 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 also smoking. If you use GitHub your project
is there people want to contribute. I feel forced to also have an encounter and that's not good.
And you're doing product placement for Microsoft. Your product URL starts first. It says,
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 know you just asking them go on there and all that all day when they're on there somehow they
need to think to themselves, oh it's not so bad. 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 try alternatives. That was maybe
we should have a break now so I can cool down a bit and you can move your code. Okay. So what's
for Joe then? Well it's a code for it's just like GitHub, a GitLab. It's written and 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 for Joe for a reason that I will become clear later
and it's easy to host. My relationship with for Joe. 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 codebook. Codebook. Who
here knows codebook? Great nice. Half the people. So I have some education to do for the other half.
Codebook 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 for Joe 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
for your code is developed on codebook 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 CI jobs when the sun is shining.
Of course you don't always want that. Some CI jobs you want faster. At work we go around that
by having our own CI and coupling that to codebook which is also possible. It's important
other forges. So here is an overview of an issue page on codebook or actually for Joe and you see
that all of these things are implemented. There are somewhere there. Some like to come down. It's
not visible on this page but it's there. There's a nice mobile interface. Not a reason. If you open
this on 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 for Joe on your machine you start it up for the first time you go to
the home page 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 are in there and we can code our own PWA on top of forgeo.
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 platform. 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 complicated
backend. The complicated backend is forgeo. This is an extract from the API. So here the end point
slash user has a get method. So you can get information about the user and here it's described
the 200 response will 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 for such. Actually this
is a bit redundant. It's the most 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.
Ten stack queries is another library that we'll be using. The name of all might be familiar to some people.
Yes, it's a beer. So ten stack queries that's just another MPM package and it makes it
bit 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
very rough steps? I'm using view to fly which is a view application framework which looks nice
and has nice widgets. Once it's ready you want MPM one deaf or this is the one or it does matter.
But you get the API from this URL and if you host yourself just changes the domain name
and then this URL 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 scripts where
only list six endpoints 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 2000 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 forger
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 for your instance and you can choose one. Now how do we implement this list? Here's a simplified
fragment of a whole code. So what's important here is the use repo search function which was
in the API. So this is generated for us and where 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 these are some other specific things that I'm also 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 publish familiar also without a framework. And then you get a list like this.
So the to-do screen? Yes. This is a very, 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 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 they have to just say what the 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 then itself and code
code.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 it's fine you can
work directly but the initial versions of this app I had to also still run a small proxy server
to route the request which was a bit annoying but now it's totally clean so yeah and
not funny implementation thing for geo 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 of 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 first them
for local first 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 my opinion if you use it
longer you also find that it's great and so it's also a great back end for a to do app for the future
will I continue working on this app or I can guarantee that I'm going to work on my issues
other any questions
so there's this issue I think it's not these are audio that there should be all of that
the problem at the IP and point for issues and you could use your URL
yes 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
feet 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 temporary 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
but if the forgeo data model would be extended to also encompass all the fields in the field to do
apps specification yes then that would be fine another question there nope it's not so much
that's great for what you say that you've solved the answer to the problem of the perfect
to do and actually because I think it's in the heart the question is to do apps are
NP hard and 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 a 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 but for example when I shovel a whole field
that's kind of work and instead of both and other people with that on the fellowfers I just put it
in my to-do results yeah
okay thank you very much for your attention