WEBVTT

00:00.000 --> 00:10.080
Welcome everybody, this is Kerry for me, I've never talked to a room like this before,

00:10.080 --> 00:15.720
so big, so thank you all for coming, and let's have some fun.

00:15.720 --> 00:16.720
If the clicker works.

00:16.720 --> 00:17.720
Yes.

00:17.720 --> 00:21.400
All right, so we're going to talk about how to make package managers scream.

00:21.400 --> 00:27.400
First, a little bit about myself, I'm super computing, this admin at Genshin University

00:27.400 --> 00:28.400
here in Belgium.

00:28.400 --> 00:33.400
If you don't know what super computing is, there's a bedroom tomorrow about HPC, HPC,

00:33.400 --> 00:36.800
high-performance computing, come and check it out.

00:36.800 --> 00:40.920
I've been into open source software for quite a while now, yes, I'm getting old, I like

00:40.920 --> 00:46.080
other stuff as well, if you bring me a beer, I'll be happy, and I've been attending for

00:46.080 --> 00:51.440
them for a long time already, and organizing an HPC bedroom for a long time already.

00:51.440 --> 00:55.520
Some people know me from the easy-built project, maybe even the easy project, which is a bit

00:55.520 --> 01:01.200
more recent, but that's not what I'm going to talk about today at all.

01:01.200 --> 01:07.800
Some of you may have seen this, how to make package managers cry talk at Foss Dam, a thousand

01:07.800 --> 01:08.800
years ago.

01:08.800 --> 01:12.040
How many of you have seen it at Foss Dam in the room?

01:12.040 --> 01:15.040
Okay, how many so I don't line?

01:15.040 --> 01:16.680
Couple more.

01:16.680 --> 01:22.120
Everybody else hasn't seen it yet, you should be, you should be watching it, but I guess

01:22.120 --> 01:25.280
for you, this talk will be more fun than for the others.

01:25.280 --> 01:29.160
Let's see, so some people liked it back then, the deaf room was way too small, they put

01:29.160 --> 01:33.960
me in a bigger room this year, thank you very much for that.

01:33.960 --> 01:40.400
It was posted on Hacker News, sort of, like, they were got three uploads, so, okay, it did

01:40.400 --> 01:45.200
get posted on another thread, what's your favorite tech talk, so I must have done something

01:45.200 --> 01:46.200
right.

01:46.200 --> 01:48.960
So it's on YouTube, you can find it on the Foss Dam website as well.

01:48.960 --> 01:53.360
Today we're doing this sequel, I actually submitted this to the package management

01:53.360 --> 02:00.840
and the deaf room which happened this morning, but it got promoted to this, so, all right.

02:00.840 --> 02:05.560
It's sort of more of the same, but also kind of different, so you'll see, something just

02:05.560 --> 02:10.520
trying to have a bit more fun, and as many of you know, and as opening talk this morning

02:10.520 --> 02:17.680
as well, we are living in a different world compared to 2018.

02:17.680 --> 02:22.240
I was sitting here for the two talks before, the audience was very quiet, I hope it's

02:22.240 --> 02:26.200
going to be different for this talk, I want you to shout during the talk as well, speak

02:26.200 --> 02:32.760
your mind, yes, so let's, let's make this fun, all right, so it is going to be a little

02:32.760 --> 02:39.120
bit biased, I work in super computing, I work with scientific software, so there is a bit

02:39.120 --> 02:44.240
of an angle like this, but I hopefully, I will still translate well, how many of you have

02:44.240 --> 02:47.960
their own super computer?

02:47.960 --> 02:53.640
I sort of do, so yeah, the good news is super computers really like Linux, like Windows,

02:53.640 --> 03:01.400
macOS, BSD, just, yeah, no way, yeah, that's true, yeah, not only super computers do

03:01.400 --> 03:06.280
also regular ones, so most of this is actually in the Linux world, but we are at false

03:06.280 --> 03:11.840
names, so that's fine, on a super computer you typically build your software from source,

03:11.840 --> 03:17.920
and that's a lot of fun, I can tell you, so there's definitely an angle to that as well,

03:17.920 --> 03:23.840
the software that we install is often developed by scientists, scientists are very often

03:23.840 --> 03:30.960
not software engineers, so yeah, it does get interesting, and also yeah, super computer

03:30.960 --> 03:34.520
is built for many different people, not one person using it as a laptop, and there's an

03:34.520 --> 03:40.000
angle to that as well, but hopefully this will translate well, let's see, so yeah, package

03:40.000 --> 03:45.880
managers are people too, so they're not only the tools, package managers as a tool, but

03:45.960 --> 03:49.000
there's the people behind this as well, so that's actually what I'm focusing on on this

03:49.000 --> 03:56.920
talk, so I see package managers as the people who are installing software for either themselves,

03:56.920 --> 04:01.960
or somebody else, or at least packaging stuff, so it's easy to install and use, if you

04:01.960 --> 04:06.040
install software for somebody else, I consider you a package manager, so it's a very broad

04:06.040 --> 04:10.920
term, there's sort of first line with a sponder, so they're like the front line people,

04:10.920 --> 04:15.560
if there's a new software release, the package managers get to experience it first, so they

04:16.520 --> 04:21.640
are quite important, I would say, they also don't give up easily, they like solving puzzles,

04:21.640 --> 04:26.040
I consider myself to be a package manager, and I like solving puzzles, if you give me a challenge

04:26.040 --> 04:33.080
I'll spend hours to try and figure it out, what's the different, I don't know, difficult questions

04:33.080 --> 04:42.360
at the end, but the point, I guess, yeah, so package managers have seen a lot, but there's more

04:42.360 --> 04:47.960
of us, there's more of end users, and there's always going to be a minority, and we're also

04:47.960 --> 04:53.000
quite creative, and I'm going to help you with that. So who is this talk for? Well, if you're at

04:53.000 --> 04:58.200
fuzz them, you like computers, you like coding, you like computers, do what you want them to do,

04:58.200 --> 05:02.600
that's very good, you like open your software, again, you're at fuzz them, maybe you don't

05:02.600 --> 05:06.360
like dealing with people, though, you're in it for the computers in the coding, a lot less

05:06.360 --> 05:10.200
so for the people, and especially the people who are trying to use your software,

05:10.920 --> 05:14.600
yeah, maybe you're not a big fan of them, because they'll do weird stuff, right?

05:14.600 --> 05:19.400
They try to install your software and weird environments, they'll ask questions and often annoying

05:19.400 --> 05:25.080
questions, and you will have to come up with the answers, they'll even report problems, or bugs,

05:25.080 --> 05:30.840
what they call bugs, and probably you don't care about them, and they even dare to ask changes

05:30.840 --> 05:37.320
and features and more stuff for your software, so they are very annoying. So why do we want to

05:37.320 --> 05:42.200
make package manager screen then? Well, package managers make it easier for people to install

05:42.200 --> 05:47.240
and use your software, if they can't install a new software, they won't have any questions,

05:47.240 --> 05:52.360
right? So they are, again, the first line of defense. So we don't want that, because if a package

05:52.360 --> 05:57.000
manager is able to do their job really well, I don't only result in more work for us, for the

05:57.000 --> 06:02.840
people actually writing the software, so you want to make package managers give up, right? The best

06:02.920 --> 06:07.880
as we can, and if we can't make them, if we can't make them give up, we want to frustrate them,

06:07.880 --> 06:13.560
we want to slow them down, we want to do whatever we can. So there's a bunch of tips and tricks coming

06:13.560 --> 06:19.400
up that you can use, other any package managers in the room, so anyone installing software for

06:19.400 --> 06:24.600
other people, okay, that's quite a, keep your hand up, that's quite a bunch of people. If you're

06:24.600 --> 06:29.800
sitting next to a package manager, distract them, because we don't want them to know all the tricks,

06:29.880 --> 06:36.920
right? Send them an email, show them a bug, whatever, but distract them. So the goals for this

06:36.920 --> 06:42.200
talk are, well, we want to confuse them, right? We want to frustrate them if they can throw

06:42.200 --> 06:47.640
their computer away, that's good, they can't package manage for, they can't package software for a

06:47.640 --> 06:55.400
while, yeah, confusion, frustration, all of this is what we're really going for. Okay, so topics will

06:55.480 --> 07:00.440
be covering in this talk, it's quite a bunch of them. I'll just list them very quickly without

07:00.440 --> 07:05.880
going into too many details, that this is all prizes, prizes, this is what we are going, but it is coming

07:05.880 --> 07:13.240
up, right? All of this will cover, and we'll have examples as well. All right, so are we ready for

07:13.240 --> 07:23.160
all of this? Okay, okay, I don't know what happened here, right? Right, so first let's start with

07:23.240 --> 07:28.760
the question. So this is a graph coming from Wikipedia about the number of publications and

07:29.560 --> 07:34.040
books and all of this stuff published on LLMs. So you sort of see this increasing,

07:34.760 --> 07:43.240
in 2018, what happened in 2018? That's only made this boom. I haven't, yes, my last thoughts

07:43.240 --> 07:58.280
them talk happened in 2018. So I sort of cost this, maybe, I'm sorry, but they can help us, right?

07:59.320 --> 08:03.080
And yeah, of course I have to mention LLMs, I'll only do it in this slide, and then I'll give up on

08:03.080 --> 08:08.040
them, I promise, but if you use LLMs, you don't need to learn any of the trips or tricks or tools

08:08.120 --> 08:13.240
that I'm be showing you, you just ask LLM to wait for you. If somebody complains hallucinations

08:13.240 --> 08:19.080
by the LLM and you're done, you can even tell package managers, stop packaging software, just

08:19.080 --> 08:24.360
ask LLM to install the software for you. It sounds like a joke, it's not, people are actually

08:24.360 --> 08:30.920
proposing this as a standard, add an installed ND to your repository, tell LLM what to do,

08:30.920 --> 08:33.960
and the LLM will do it for you. So we don't need package managers anymore.

08:33.960 --> 08:40.680
Right? And of course, this is actually a bad idea, because this gives the package managers very

08:40.680 --> 08:49.400
good documentation on how to install your software. So don't do this. Naming things is hard,

08:49.400 --> 08:54.600
right? So naming or project is actually already a first line of defense, if they can't pronounce

08:54.600 --> 09:00.680
the name, if they can't find your package by searching for it. Great, very good. So make

09:00.760 --> 09:06.600
sure it's hard to search for, try to confuse people. If they search for something,

09:06.600 --> 09:10.840
Python is a very good one. It's a snake, right? A good luck finding help on that.

09:12.760 --> 09:17.080
You should also use a project name that implies something that's totally untrue about your project.

09:17.080 --> 09:21.640
That's a very good one. Use funny characters, like there's ASCII characters that you can use,

09:22.680 --> 09:26.760
that are not that common, like a pipe is very good. It's a regular ASCII character, but it's a

09:26.760 --> 09:32.760
nightmare to use it anywhere. Unicode characters are very good, of course, trademark signs.

09:32.760 --> 09:38.920
Maybe you're forced to use them. Unicode stuff, so excellent. Try to trigger typos.

09:39.800 --> 09:45.720
I encourage people to make typos. That's actually coming up. And just be inconsistent as much as you can.

09:45.720 --> 09:51.640
Name your package, name your project, give it one name, name it something else in the documentation,

09:52.360 --> 09:55.960
whatever. If you talk about it, name it something else, and people will just don't know what's

09:56.120 --> 10:01.640
up in there. So here's some examples. Rust, I kind of like Rust. That's a good one.

10:01.640 --> 10:07.240
It's a programming language, but it's also a color. It's a game. A pretty popular game. It's a chemical

10:07.240 --> 10:12.760
process. It's a movie that got a lot of new coverage for very bad reasons, but yeah, so there's already

10:12.760 --> 10:18.920
some room for confusion there. See, in our single letter names? Yeah, amazing to search for. So

10:18.920 --> 10:25.560
getting help for that is easy build is, it's as easy, but it has 250 configuration options. So how

10:25.640 --> 10:31.960
in what sense is it easy? It's not easy at all. This is a difficult one. Ask in this pack

10:31.960 --> 10:38.840
slack for help to install spark and the stack using a spec. It's a valid sentence. It actually makes sense.

10:41.000 --> 10:45.160
See, you can actually use this. Python packages, so there's this weird thing going on on

10:45.160 --> 10:49.480
pipeline that they don't like dashes, and they want to use underscores instead in file names,

10:49.480 --> 10:54.600
all over the place, in file names. So not then things that you import in Python, just the file name,

10:54.680 --> 11:03.240
and he's an underscore. It makes zero sense to me. Good. Excellent. Sorry. M dashes. I'm not sure.

11:03.240 --> 11:05.960
That's unique, so good. Yeah.

11:09.800 --> 11:14.280
These are actual names as well. Open pipes teach up. It's a real name of a project.

11:14.920 --> 11:20.840
Later, it's kind of funny when the camel casing omega has the omega in this omega omega. I don't know,

11:21.400 --> 11:28.120
very good. This is also a nice example of a project. Some of you may know, who knows this?

11:29.800 --> 11:36.200
Hopefully. So it's a bit niche in HPC. It's a dependency for open MPI. Open MPI is something for running

11:36.200 --> 11:44.200
big scale applications on supercomputers. It's short for this, which I can pronounce.

11:45.240 --> 11:50.040
First word is then short for something else. So the whole thing is like process management interface

11:50.040 --> 11:56.280
XSK or reference runtime environment. How do we even pronounce this thing? Is it pretty? Is it pretty?

11:56.280 --> 12:02.520
Are they going for pretty? Maybe. And the other thing is PMIX, PMAX. I don't know. Good. Confusion.

12:03.800 --> 12:08.440
They're very inconsistent in terms of how they use the name. So this is a screenshot from the documentation.

12:09.000 --> 12:15.000
It's formally referred to as, let's say, pretty. And you get to have a directory. It's a lower case.

12:15.080 --> 12:21.240
Okay, not bad. This is the second part of the screenshot. They say, yeah, has two consecutive

12:21.240 --> 12:28.120
arms, which is a bit annoying. So in everything that we do, we'll just use one arm. And that's way better.

12:37.240 --> 12:42.200
All right. So names that you should consider for your own project in the future. Phoenix is a very popular

12:42.280 --> 12:45.480
one. There's a hundred Phoenix's out there, a rise from the ashes. Very sexy.

12:46.360 --> 12:51.800
High-rise, similar, and especially with parallel software, multiple heads. All of this. Really anything

12:51.800 --> 12:57.880
mythology is good. Just pick something from a mythology and you're fine. Some play on snakes, especially

12:57.880 --> 13:03.880
in the Python ecosystem. There's always more snakes that you can use. There's no room for confusion at all.

13:03.880 --> 13:10.520
Everybody knows what each of these are. Maybe. Open something, even if, especially if it's not open.

13:12.600 --> 13:19.800
Use this. And another example is alpha something. If you want to win a Nobel Prize, go for alpha something.

13:21.560 --> 13:27.160
Next to naming the project itself, there's a terminology in your project or in the tools that you use.

13:27.160 --> 13:31.800
So you've stuff that's not standard. Right? To come up with new names for things that are well-established.

13:32.680 --> 13:37.000
Creates are just packages in Rust to me. But they call them crates. Okay.

13:37.960 --> 13:42.760
And then you're on terminology. Use tools that have custom terminology, so make people look up stuff

13:42.760 --> 13:48.360
to really understand what they're dealing with. That makes sense. Over load commonly used terminology.

13:49.000 --> 13:53.400
Like modules is a very good one. You should have modules in your project. Whatever they mean.

13:53.960 --> 13:58.760
There's this Linux kernel modules. There's four-term modules. There's C-make modules. There's Python modules.

13:58.760 --> 14:03.640
There's Ansible modules. There's Infirmable. They all are totally different things. Great.

14:03.960 --> 14:12.760
And also established terminology, like interface, just make sure you mean something slightly different for you than it does for most people.

14:15.160 --> 14:19.400
Yeah, structure of code and Rust of is located. This is one I have a lot of fun with.

14:20.440 --> 14:25.640
So first of all, it's your project. How you want the structure is up to you. Nobody else can tell you what to do.

14:25.640 --> 14:32.040
Right? It's your choice. It doesn't really need to make sense to other people. If it sort of makes sense to you, that's good enough.

14:33.720 --> 14:38.680
If you have source code in the repository, spread it across the whole thing. Deep directories,

14:39.560 --> 14:42.760
as many as you can, makes a lot of sense. Make people hunt for stuff.

14:44.200 --> 14:49.160
Why not? If you have configuration and build tools that you especially develop established ones,

14:49.160 --> 14:54.440
they look for things in standard places. But it doesn't mean you have to put them in the standard places.

14:54.440 --> 15:00.600
You can put them somewhere else. If you have binaries, don't put them in slash bin. Put them somewhere else.

15:01.560 --> 15:07.320
Same for libraries, same for header files. Lib includes, nah, this makes the merchants.

15:09.160 --> 15:13.800
Documentation is also nice. Of course, now you can only have the way with not having documentation.

15:14.360 --> 15:18.760
You'll get so many questions, people will get angry. You'll need to have some documentation.

15:19.160 --> 15:25.640
But it can still be very helpful to make package manager scream. It can be very minimal.

15:26.520 --> 15:30.920
In complete, it can be totally out of date. So not synced up with the source code.

15:30.920 --> 15:36.520
It can be explained, but in a very confusing way. Terminology helps a lot with that.

15:36.520 --> 15:41.800
It can be very long, very boring. Maybe someone you read me filed, maybe someone on the website,

15:41.800 --> 15:46.760
maybe someone actual documentation. We've got nosewant. You can make it hard to search.

15:48.360 --> 15:53.960
A research paper is something we see in scientific software. They only have a paper and that's the documentation.

15:56.600 --> 16:02.040
And they only do an MPDF because it's a bit annoying to search through. Or maybe it's just only the comments in the source code.

16:02.040 --> 16:05.720
That's the real documentation. Sorry.

16:06.840 --> 16:12.760
A word that I should have thought about this. Yeah, thank you. So suggestions are welcome. Yes.

16:15.560 --> 16:19.320
Actually, a word document is not good enough. It should be a word document in a zip file.

16:20.120 --> 16:22.600
Right. You can do levels.

16:24.760 --> 16:26.360
Well, this is getting confusing. Okay.

16:28.520 --> 16:29.880
Pay well. Wait. That's coming up.

16:31.560 --> 16:36.600
Host your project somewhere else. Like not why they expect to find it. I'm not going to call names here, but

16:37.720 --> 16:43.160
be creative. Look for other ways to post your stuff. Package managers like to have an account everywhere.

16:43.160 --> 16:48.120
On every possible platform. If they want to ask a question, make them open an account on

16:48.200 --> 16:54.440
somewhere that they don't have an account yet. Especially if it's slightly different in terms of user interface. So they have to learn stuff.

16:54.440 --> 17:03.160
Right. Self-hosted GitLab is interesting. Especially if you put it behind the wall guard and like you need an email in a certain domain to access the GitLab.

17:03.880 --> 17:13.080
No way to create an account from the outside. Excellent. Don't use Git. Right. Git is everywhere. Everybody knows it. There's many alternatives.

17:13.400 --> 17:17.480
CVS is nice. Look up CVS. On show. Yes.

17:23.960 --> 17:26.600
On share, but you should be giving the talk next year, maybe.

17:29.000 --> 17:36.280
Also scatter stuff. If you have releases, tag some things in the repository, mark some of them as a release.

17:36.280 --> 17:39.800
Have a mirror that mirrors some of the versions, but not everything.

17:40.440 --> 17:47.240
Upload then selections of those from PIPI or have releases from PIPI that don't have a tag in the repository.

17:47.240 --> 17:51.800
Have a website that has a release from five years ago that everybody still uses because they don't know their

17:51.800 --> 18:00.520
other stuff. Yes. Sorry. Sorry, taken.

18:02.120 --> 18:06.920
NFTP server. Yes. Back to the 90s. Yes. That's a very good option.

18:07.720 --> 18:14.200
Yeah. Well, questions at the end because I have many slides. You can include

18:14.200 --> 18:20.520
TARBALS, like zipped TARBALS, zipped files in a repository, in a GitHub repository. It's allowed.

18:20.520 --> 18:28.920
Right. And people do this. Levels, build levels. And you can split your project across many

18:28.920 --> 18:35.560
different repositories as well. Check out Rockham. Very good. Also name, excellent.

18:37.880 --> 18:41.320
You can also package things yourself. So beat them in their own game.

18:42.440 --> 18:48.920
If you do it first, then maybe you'll make it easy for them. Right. If you have installation instructions,

18:49.640 --> 18:55.240
only tell them only let them specify how to do a system-wide installation on a very specific

18:55.240 --> 19:00.200
distribution, like a bunch like a bunch, just an example. Why? Well, some people will think that

19:00.200 --> 19:05.080
you want to is required for your software and they'll figure out a way to install it. This has happened.

19:06.920 --> 19:12.520
We've had cases like this in support tickets, in super computing center. I tried to run

19:12.520 --> 19:18.520
pseudo-upget or apt install, for some example, and it didn't work. And the ticket actually said,

19:19.080 --> 19:22.120
and I entered my password and still didn't work, and I'm sure it's correct.

19:23.960 --> 19:28.040
Okay. And they were doing us on a rail-based distro, which doesn't even have apt. So,

19:28.360 --> 19:40.200
you can install apt. Yeah. Yeah. You can only provide the Docker file as installation instructions.

19:40.200 --> 19:44.840
That's good enough, right? It should help anyone. Why not? You can release your software

19:45.560 --> 19:53.800
as a Jupyter notebook. So the code and the notebook, that's it. This happens. There's a very good

19:53.800 --> 19:58.120
talk on, I don't like notebooks. He has a very complete example of that, where this is actually

19:58.120 --> 20:08.920
tough. As releasing a snap, I'm not familiar enough with snaps, but I guess so, if you're asking

20:08.920 --> 20:14.440
in the question, I guess. You can create your own package manager as well, right? If your thing

20:14.440 --> 20:19.080
is too complex, create your own one. If you're interested in the rock, there's a talk about it tomorrow

20:19.080 --> 20:26.200
and the HPC there. Dependencies, you all knew this was coming, right? The famous XKCD.

20:27.240 --> 20:31.000
There's this guy at the bottom. No, you don't want to be at the bottom. You want to be at the top.

20:32.040 --> 20:36.280
Right? Depend on as much stuff as you can. More dependencies is always better.

20:38.600 --> 20:44.040
Also choose them well, right? Yeah. Usually have many options. The libraries that implement

20:44.120 --> 20:49.080
similar stuff, use the ones that are causing most trouble or most likely to cost trouble.

20:49.080 --> 20:53.560
Obscure dependencies that nobody else is using, those are the ones you want. Right? If there's

20:53.560 --> 20:57.800
new stuff coming up, follow hacker news and jump on stuff as soon as you can, because it will

20:57.800 --> 21:03.080
be new to the package manager as well. You don't actually need to use all the dependencies you

21:03.160 --> 21:16.760
declare. Right? I mean, if the be a bit reasonable, keep yourself sane. Just make your

21:16.760 --> 21:22.600
configuration to like see make it required. Error out and then never use it. And include statements

21:22.600 --> 21:27.640
in your code like C++ and then you don't use the functionality at all, but they need to include files,

21:27.640 --> 21:32.600
so they'll need to install the dependency. If somebody complains, just that you're planning ahead

21:32.600 --> 21:37.160
for the future and you will, of course, actually use those dependencies. It is coming.

21:38.520 --> 21:46.280
So can you win any prizes with applying some of these tricks? Does anyone know the answer?

21:48.200 --> 21:57.880
The answer is yes. Yes, you can. If you look at alpha fold, so alpha fold is, I think everybody

21:57.880 --> 22:04.360
knows it from deep mind. Check the repository. It's a tool with proteins, la la. It's pretty well

22:04.360 --> 22:11.400
now. This is a screenshot from the read me. Step one and stole Docker. Step two and

22:11.400 --> 22:17.160
stole the Nvidia container toolkit, which you view support. Well, step two. One, I guess,

22:17.160 --> 22:22.840
1.1, 1.2 is an, make sure it's set up as an on-road user. Right? And then step two is a good

22:22.840 --> 22:30.520
clone and CD. Like compared to the first step is like this is the opposite of start with the

22:30.520 --> 22:35.320
now and finish the owl. It's actually the other way around. The hard stuff first and then CD.

22:38.120 --> 22:43.400
This is a more of the installation instructions, build a Docker image, right? And there's an error there.

22:43.400 --> 22:48.200
If you see the error link to the comment issue, or very easy, you put into 18. They're using

22:48.280 --> 22:54.280
you've been to 18. So can you in the prize with this? Yes. This one, the Nobel prize is

22:54.280 --> 23:03.640
essentially. Yeah, it's funny, I know. Hidden tricks in your project in your code. Because again,

23:03.640 --> 23:07.400
I mean, you want to keep yourself sane, right? If you apply all of this, you just,

23:08.440 --> 23:14.200
you may start screaming yourself and you don't want that to happen. You can add features to your

23:14.200 --> 23:19.000
software configuration options. Just don't document them, right? Keep them to yourself.

23:19.960 --> 23:23.400
The very easy way of doing that is using environment variables. You set an environment

23:23.400 --> 23:29.000
variable that's sort of hidden, right? And then if it is set, you're sort of to react to it and

23:29.000 --> 23:33.560
does something sensible. Right? They should be hard to find. If the package manages to discover them,

23:33.560 --> 23:38.360
you're screwed. Like don't use the project name as the pre-t fix for the environment

23:38.360 --> 23:43.240
variable. You use something else, otherwise it's too easy to find. And the value that is used for

23:43.320 --> 23:48.120
that environment variable should be something very specific, like not one or own, something else.

23:49.160 --> 23:54.280
So a small example in Python, I hope most of you know Python, right? So you just grab the environment

23:54.280 --> 24:01.000
variable. And if it is set to something, you don't run a test. Pad example, right? It's easy to find.

24:01.000 --> 24:05.480
It's right there. Any decent package manager will find it. Just make it a bit more involved.

24:07.080 --> 24:12.920
Right? So use it. Use a different prefix. Make sure it's not like a single string.

24:13.320 --> 24:17.320
Definitely make sure it's not uppercase, but uppercase it on the fly. And then make sure you have

24:17.320 --> 24:20.840
a magic value that has to be set, not just one, but something else.

24:23.320 --> 24:28.280
Built tools, you all know this is coming as well. So aim for maximum damage.

24:29.240 --> 24:30.600
Can never go wrong with CMake.

24:31.000 --> 24:43.400
See, make all fuses. Everybody, there's many talks, many blog posts that explain you why CMake is

24:43.960 --> 24:49.400
total to crap. It's all over Hacker News as well. Like I would give up my first born if I never

24:49.400 --> 24:55.800
have to, you see, make again. Many people are not very happy with CMake. There's more about

24:55.880 --> 25:00.440
built tools, you can say, you can combine multiple ones. You don't need to stick to just CMake.

25:00.440 --> 25:06.200
Like mix it up, use other ones as well. You can, you can call CMake and make from a set of

25:06.200 --> 25:10.360
dot pi. It's Python code, you can do whatever you want. We see this all the time in a while.

25:10.360 --> 25:17.160
That happens. Sure. Three? Yeah, sure. Cargo just levels. Again, combine stuff.

25:18.920 --> 25:24.360
Add some answer, but why not? Yeah. You can have a script called configured dot pi right at

25:24.440 --> 25:33.080
in Pearl. Nothing is stopping you from doing that. If you have a Python project, make sure you

25:33.080 --> 25:40.440
have all these files in there. And you can have good reasons to have all of them. Several of them

25:40.440 --> 25:45.400
allow you to declare dependencies, like requirement, text, pi project, environment, be

25:45.400 --> 25:50.440
homeless, more for Konda. But you can declare dependencies in all of them. Make sure it's inconsistent.

25:50.440 --> 25:58.040
Right? Don't do the same thing in the different files. It doesn't make sense. Sorry. It doesn't have

25:58.040 --> 26:01.560
this for Python. It's very easy to do. I guess for other things you can do this as well.

26:01.560 --> 26:05.880
It doesn't have to be only in Python. But you're right. Maybe you add them and it doesn't have any

26:05.880 --> 26:12.040
Python code. That's actually good as well. Also, build tools have their own dependencies, right?

26:12.040 --> 26:16.440
Pick a build tool that has like 10 dependencies just to get the build tool to work. Because again,

26:16.520 --> 26:22.040
levels make them sweat. And if you're not just about choosing the build, it's also how you use them.

26:23.240 --> 26:31.000
You can see make as a runtime dependency for your software. Why not? I mean it has functionality.

26:31.000 --> 26:36.520
If there's a function there that you find that does something useful, make it a runtime dependency.

26:36.840 --> 26:49.080
There was a comment there. Forking is coming up. Yeah, you're too fast. Forking is coming.

26:51.560 --> 26:56.680
If see make is not bad enough. Try basil, right? You can get stickers at fuzz them on basil.

26:58.360 --> 27:05.080
Basil, basil, I don't know. More build tools. Sure, why not? If there's documentation on the build tools,

27:05.160 --> 27:10.600
don't read it. Or if there is documentation only use like previous versions.

27:12.120 --> 27:17.480
If there's best practices, don't use them. But just copy stuff from random repositories that you

27:17.480 --> 27:22.200
find. Especially stuff that hasn't been touched 10 years for 10 years. That's the stuff you want.

27:22.200 --> 27:26.760
There's like a classic remake and a modern remake. Don't let me the difference. But I know there's

27:26.760 --> 27:34.200
a difference. Go for the classic stuff. It's more stable. Yes, the classic stuff is more stable. Of course.

27:34.280 --> 27:39.800
But do make sure that you require the very latest teammate version. There's a CMake 4.

27:39.800 --> 27:45.560
Stuff is broken in it. Use that. And if you're lucky if they do a new CMake release,

27:46.360 --> 27:51.960
it will have a regression. You will hit that regression. Perfect. There's actually very useful

27:51.960 --> 27:57.960
website. New releases.io. You can give them your email address. You register to specific projects.

27:57.960 --> 28:02.360
You can get an email as soon as there's a new release. That's when you want to adopt it. They want.

28:05.000 --> 28:10.120
You can use typos and file names and commands as well in your documentation. Just make things look a bit weird.

28:10.120 --> 28:20.920
Like this. Right? So this is... The NAIC-FC-Make lists and type it or take the output,

28:20.920 --> 28:27.080
pushing into pipe project.com. I don't know what this means. Now, some day, a package amount

28:27.080 --> 28:30.040
you will say they must have a good reason for doing it like this. They're going to spend their

28:30.040 --> 28:36.120
whole weekend on a trying to figure it out. Yeah, binary. One of these could be a binary,

28:36.120 --> 28:44.680
sure. Why not? So they have no idea what's going on. Sorry, you can only stuff like installs

28:44.680 --> 28:54.600
on a Tuesday? That's brilliant. That's a bit obvious, right? Just make it only on full moon or

28:54.600 --> 29:05.320
something. Yeah. Software testing. Sorry? Depending on your... Wait, that's also coming.

29:08.360 --> 29:13.400
Testing is important. If package managers install your software, they won't have to have some way

29:13.400 --> 29:21.000
of testing it. Very often they have no idea what the software does. Use this to your benefit. Make it

29:21.080 --> 29:26.680
difficult. Aim for a test with that just takes forever to run, because they'll get up. They'll

29:26.680 --> 29:33.720
machine will burn down. I don't know. Do you know what I think? Yeah, I'd like to make them guess.

29:33.720 --> 29:39.880
Yeah, how long it will take. Very good. Flake it tests are good, right? The package manager

29:39.880 --> 29:43.560
thinks that all the tests are important. They all have to pass. You know which ones are flaky,

29:43.560 --> 29:50.760
which ones you can ignore. Fine. Again, tests can have dependencies, right? You have testing tools.

29:50.760 --> 29:56.200
That may have dependencies themselves. You can build up the stack even more. So just make sure they

29:56.200 --> 30:00.440
have a lot of work to do before they can even run your tests, let alone run into the flaky ones.

30:01.240 --> 30:07.320
My torch is a very good example of this. It has a massive test to me. If you run the full thing,

30:07.320 --> 30:14.760
it's 250,000 tests. Well, over it. If you run it on a single machine, it takes easily 36 hours.

30:14.760 --> 30:20.440
If your machine is a bit too old, two full days is not an exception. They change it every release.

30:20.760 --> 30:25.240
Like, they throw stuff around, rename, restructured things. So if you had tricks, environment

30:25.240 --> 30:30.440
variables that they do have, they rename them across releases, all these things. Here's an example.

30:31.080 --> 30:36.680
I work on easy build. This is for the relatively recent version of PyTorch. It spits out a result.

30:36.680 --> 30:44.920
550 to test failures out of 261,000 something. So 99.98% of test is passing. Is that good enough?

30:45.320 --> 30:50.520
Are the tests that are failing important? How should I know?

30:50.520 --> 30:56.680
And a real package manager will always try to go for the 100%. So that's a very tempting to make

30:56.680 --> 31:03.640
sure the full thing passes. Okay. Put in a test that always fails on a full moon.

31:06.040 --> 31:10.280
Flake, you're in control over the test. You can make them flaky in an interesting ways.

31:11.000 --> 31:14.840
All right. I like the heckling. It's good. Excellent. Keep it going.

31:15.720 --> 31:19.400
Let's challenge you a bit as well. Let's do a live poll, right?

31:20.760 --> 31:24.440
I'll count to three. This is important. Wait for the three.

31:25.080 --> 31:29.320
Right? And then scream, you think is the correct answer. According to you, one answer.

31:30.200 --> 31:34.520
Each. Here comes the question. Don't scream yet.

31:35.080 --> 31:41.640
There's a countdown coming. Wait for the countdown. Which programming language is most likely

31:42.200 --> 31:48.520
to make package manager scream? Again, think about it first. No screaming yet.

31:49.880 --> 31:56.280
Here's the countdown. One, two, three.

31:56.280 --> 32:10.440
Ooh, no. It's C++. If you don't know it's C++, I don't know where to begin with this.

32:12.360 --> 32:21.400
The standard library is okay. It's a standard library. If you have, if you compile C++ program,

32:21.400 --> 32:29.560
it really, any compiler, the error messages are, this has been my life for 20 years.

32:30.760 --> 32:37.320
Trying to make sense. Again, Ella Lems. Yeah. Templates in C++. If you don't know what they are,

32:37.320 --> 32:42.040
look into them. You want to use them. You want to do meta programming in C++.

32:42.040 --> 32:46.600
Meta programming is when your stuff is building. It's actually running your code as well.

32:46.680 --> 32:52.760
So you can do a rate ratio while the thing is compiling. Why not? Yeah, it's perfect.

32:53.240 --> 32:58.920
Linus hates it. The FBI hates it. This is official. The US has done guidelines on don't

32:58.920 --> 33:08.200
use C++ for memory safety. So you want to use it, right? And the name plus plus searching for it.

33:08.200 --> 33:14.520
Yes. There's an excellent talk on this. The worst programming language of all time. It's a two-hour

33:14.600 --> 33:21.640
rant by a guy. And he's hitting exact point after point after point. It's all correct without

33:21.640 --> 33:28.040
repeating himself too much. Two hours in a row. You can not argue that C++ is not the correct answer.

33:29.480 --> 33:35.720
There are others though. Python is nice. All the installation tools, set of tools,

33:36.120 --> 33:40.200
combine them, especially in supercomputers, combine them as amazing. It fills up everybody's

33:40.280 --> 33:45.640
home directory, everybody likes it. Python 4 may be coming soon, right? So there's this free

33:45.640 --> 33:51.560
threading thing, no more gel. That would be a good reason to release a Python 4. How many of you are

33:51.560 --> 33:58.120
all enough to remember the Python 2, 2, Python 3 situation? Most of them. If Python 4 is coming,

33:59.080 --> 34:14.760
it's a bit weird. I think there's some interesting concepts in there. Poor wing of them, okay?

34:14.760 --> 34:23.560
Yeah. Lots of common custom terminology. No way too early. Monads are coming, sort of.

34:24.360 --> 34:30.360
Fortran is not dead. Not at all. It has new standards. It's been there since the 50s.

34:30.920 --> 34:36.120
It's number 12 and this Tiobi index of most popular programming languages. Everybody's still using it.

34:36.120 --> 34:41.400
In scientific programming, it's everywhere, right? So you use it. Learn it. Make people suffer.

34:43.160 --> 34:52.840
C sharp. C++ is enough. You can use C sharp. Java script is, I'm not even gonna, it's a crazy language

34:53.000 --> 34:58.040
and then there's NPM on top. It's amazing. Or there's many other options. There's OCamo.

34:58.040 --> 35:02.840
There's Haskell if you want to use Monads. I guess you can do another language as well. There's

35:02.840 --> 35:13.080
prologue. How many of you have tried to use prologue? Okay. Put things in make sense. There's a

35:13.080 --> 35:20.120
couple. Okay. Many other examples. Bash is a good one. Bash can get very weird, very quickly.

35:20.200 --> 35:24.280
And there's a new prologue language every day. So again, make sure you pick up on them. Use them.

35:24.840 --> 35:31.240
Make sure they are new to the package management as well. Right. You're all language. Yeah. It could be the new one.

35:31.240 --> 35:40.040
Sure. If you're doing software, prologue language that has to be compiled, first. Very good.

35:40.040 --> 35:44.920
Another tool to your toolbox that can be used to mess things up. The compiles makes you

35:45.000 --> 35:50.520
plus plus even worse than it already is. Compiles are massive. They're huge. They're complex.

35:50.520 --> 35:55.800
They're impossible to get into, to study them, to fix bugs that you may run into. If the compiler

35:55.800 --> 36:00.600
crashes, they're just lost. Like forget it. You'll never figure it out. And if you're doing any

36:00.600 --> 36:05.080
series work, especially in computing, you want to compile your stuff down to a binary so that

36:05.080 --> 36:10.040
can be fast. So you really need to use compiles. Again, the error messages I know, it wasn't the last

36:10.040 --> 36:15.800
slide as well. But screen filling error messages that you don't even know what all the words mean.

36:15.800 --> 36:23.240
It's amazing. Defaults of compiles change a lot. Like GCC has good documentation. Well,

36:23.240 --> 36:30.120
it has documentation. That tells you what has changed about the impact maybe. You get like disappearing

36:30.120 --> 36:34.520
include suddenly you need to add the include before it was automatic. Now it's not anymore. I'm sure

36:34.520 --> 36:40.840
they have good reasons to do it. Compiles have dependencies too. Like this XKCDC, this could be

36:40.840 --> 36:45.800
a compiler on top. It depends on all the stuff already. They even depend on each other. If you

36:45.800 --> 36:51.480
need to build a compiler, you need another compiler to be, how do you start this? Yeah. And there's

36:51.480 --> 36:58.040
a lot of diversity. There's GCC, there's LVM, Intel, AMD, Nvidia, I can go on. Explore the

36:58.040 --> 37:02.680
alternatives. Try to use compiles that the package menu is not familiar with. You don't need

37:02.760 --> 37:08.360
to stick to GCC. It's not because everybody else does that you need to. And even better,

37:08.360 --> 37:13.640
try to make sure that GCC doesn't work. You can do stuff in your code if you know about a good

37:13.640 --> 37:20.920
bug in GCC that's been long standing and you can trigger your code. Use it. Yeah. Compiler

37:20.920 --> 37:25.880
extensions, compiling trends exist as well. Yeah, there's all stuff you can make sure your code

37:25.880 --> 37:30.680
only works with one one. TensorFlow, the people who have seen my previous talk, this has been

37:30.680 --> 37:38.760
the pain of my existence for years. It's implemented in C++, number one. They have pre-built

37:38.760 --> 37:43.640
binaries on PIPI, but they're generic. So generic means they're slow, essentially. They work anywhere,

37:43.640 --> 37:48.440
but you don't really want to use them. You want to build them from source. This is real next thing.

37:48.440 --> 37:54.840
Don't look at them. It still uses base, less configuration too. Good. Everybody loves base.

37:55.560 --> 38:01.800
They stopped recommending GCC. They said, you need clang now to build TensorFlow. If you report

38:01.800 --> 38:06.920
problems to the MHCC, I think a recent version of TensorFlow even literally makes GCC crash,

38:06.920 --> 38:11.640
did you say, sorry, we'll recommend clang. So you're on your own. There's a magic environment

38:11.640 --> 38:16.200
variables everywhere when you install this thing. Guess what they start with, not with TensorFlow.

38:16.200 --> 38:22.040
They start with TF because TensorFlow would be too long. And bonus, if you know about one,

38:22.600 --> 38:27.560
like TF need clang, you can't find an indentmentation, so it doesn't exist.

38:29.080 --> 38:34.520
And this comment here, this is from even before my last talk, it's part of easy

38:34.520 --> 38:39.960
build that shows how to build TensorFlow. And it has a command where part of the command is slash,

38:39.960 --> 38:44.440
slash, TensorFlow something something. And they're going to comment it like the double slash must be a

38:44.440 --> 38:48.600
type of, right? No, it's not, that's how base it works, you know?

38:50.600 --> 38:55.800
Dr. reversioning, yeah, don't waste this opportunity, this is a very good one. You can confuse people

38:55.800 --> 39:01.240
quite a lot with software versions. You can suggest that you're using semantic versioning, but then

39:01.240 --> 39:07.640
don't, right? Ever since Python three years or least, almost every Python three version

39:07.640 --> 39:11.640
has breaking changes in them. So they're not using semantic version, they're not telling you

39:11.640 --> 39:15.240
that using semantic versioning, but it sort of looks like they do, same thing for Lua.

39:16.360 --> 39:21.080
If you want to, if you want to have creative, you can start with calendar version. Like you don't

39:21.080 --> 39:24.520
know you're working on it, don't know when it's going to be good enough. If it's good enough,

39:24.520 --> 39:29.560
release one dot zero, then change your mind. Next, please make it zero dot x, keep going like this,

39:29.560 --> 39:33.800
let the package manage to figure out what the latest version is. They will have no clue.

39:34.760 --> 39:39.160
Again, a real example is the F5, some people from the scientific community may notice,

39:40.120 --> 39:46.680
stable releases of HDF5 have an even minor number. So one dot eight, one dot ten.

39:47.640 --> 39:54.200
Development releases, like you mean trunk, no, no releases, but development, so don't use them,

39:54.200 --> 39:58.760
have an alt minor number. But the major number is one, which is odd.

40:00.200 --> 40:08.440
Okay. Now, I had this idea for a while to put this in the slides, but they have HDF5,

40:08.520 --> 40:13.560
2 dot zero and adopted semantic versioning. So no more even odd. Why did they do that?

40:13.560 --> 40:19.960
Is it because zero is not odd or even or, or they like on short and said that we do 2 dot

40:19.960 --> 40:27.560
2 was the first release? Yeah, you're always getting the best. You can read up on this on this

40:27.560 --> 40:35.320
URL. Look at the URL. It's not because it should be hard to find, I guess.

40:36.280 --> 40:40.840
Forking somebody mentioned forking. Forking encouraged people to forke your software,

40:40.840 --> 40:45.800
tell them not to rename the software. Use the same name just with a different versioning scheme.

40:45.800 --> 40:50.920
Open phone does this. It's scientific simulation software. There's like three different version

40:50.920 --> 40:55.080
of open phone. The only way you can tell them apart is based on the version number. One uses like

40:55.080 --> 41:00.360
year versioning, the other just one X2 X, and the other one and yet something else. But the only

41:00.440 --> 41:05.400
there are only open phone. Open from dot com, open from dot org are two entirely different versions.

41:07.400 --> 41:11.560
All right, I'm slowly getting to the end here, while on time. There's a couple of things we didn't

41:11.560 --> 41:16.040
get to cover. I talked a little bit about Python, but there's I could talk the whole day about

41:16.040 --> 41:23.240
Python. Don't look up UV. You don't want containers or you can build your own messy world

41:23.240 --> 41:27.880
and the container and you give it to someone else. You see, trust me, this is fine. I won't tell you

41:27.880 --> 41:36.120
how it's built, but it's fine. Make it all, how do you make your software, can you make your software

41:36.120 --> 41:44.360
depend on Kubernetes? Can oh yes, then you should. Yes, then you should. Make sure while the installation

41:44.360 --> 41:49.160
is going of your software, while the build is going, download stuff from the web. You want to make

41:49.160 --> 41:53.960
sure the system is online, the internet is there forever, nothing ever disappears,

41:54.120 --> 41:59.400
same thing in test, make tests, download one megabyte data files because you don't want them in

41:59.400 --> 42:06.360
your source code. That would be insane. Gargo is very good at this. So, private server. Yeah,

42:06.360 --> 42:16.680
I need a password. Yeah. Yeah. Again, build tools, test tools. Yes. If you produce error messages

42:16.680 --> 42:21.480
during installation, you're in control, right? You can make them very confusing, very misleading,

42:22.120 --> 42:25.720
print out errors that are religious warnings, print out warnings that are actually errors.

42:27.800 --> 42:32.200
The pip is very good at this. If you do pip that's called something else, it gives you like a wall of

42:32.200 --> 42:37.240
text and the actual error is like the tent line or something and then a whole bunch of junk below that.

42:40.600 --> 42:44.040
And one thing I didn't talk about, then which is important in scientific computing and I guess

42:44.040 --> 42:49.240
more general as well. There's upcoming CPU families, arm is really here everywhere, people have

42:49.320 --> 42:54.680
laptops with arm, risk five is coming soon, so all of this is going to get a lot more reverse than

42:54.680 --> 43:00.040
it already is very soon. All right, and there's probably stuff I missed, right? So if you know about

43:00.040 --> 43:05.240
other stuff, shout as long as there's time or come and talk to me, I'll be here all weekend,

43:05.240 --> 43:07.000
come have a beer. Thanks a lot.

43:20.200 --> 43:29.560
If there are now or any questions, I may be in trouble. Do we have any questions or heckles,

43:29.560 --> 43:37.480
suggestions? Raise your hand if you have any questions. My nickname is, that's a secret.

43:37.480 --> 43:42.600
I won't tell you how to pronounce it. If you want to learn how I got the nickname,

43:42.600 --> 43:47.960
if I understand it correctly, uh, lots of researchers from the physics department in New

43:47.960 --> 43:52.280
Amterpa are calculating again now. What is the worst thing you encounter with them?

43:53.400 --> 43:59.240
Sorry, researchers in the physics department of the anthrop university are now mostly calculating

43:59.240 --> 44:04.360
again. Now that Amterpa's made your money. What is the worst problem you had with them?

44:05.160 --> 44:10.440
What is the worst problem you had with them? The worst problem with the people from Antwerp.

44:10.440 --> 44:14.840
I don't tell people apart. I barely know names when I answer questions, so

44:15.800 --> 44:21.640
No, there's no, it's not like people from Antwerp were smarter or worse than in others. No.

44:26.200 --> 44:31.400
We got in build systems. You don't need to stick to see make a base. You can

44:31.400 --> 44:36.760
wide your own build system, just for your own project. Yes. Looking at your own form.

44:37.480 --> 44:42.440
Open form, yeah. I didn't mention that, but open form does this. Open form has W make,

44:42.520 --> 44:47.800
sounds familiar, something totally different. It always has exit code zero, whatever happens.

44:48.680 --> 44:52.040
If the build fails, all good.

44:57.000 --> 45:03.720
Here, I've got a question. Why didn't you mention about moving tags in the repo?

45:04.280 --> 45:08.760
Moving targets? Yeah, yeah, yeah, yeah. I didn't mention that, but it's not because you

45:08.760 --> 45:13.960
tag something that it has to stay there forever. This is something I mentioned in my last talk,

45:13.960 --> 45:19.160
I guess I didn't mention it here. But yeah, if you tag something today, change it tomorrow.

45:19.160 --> 45:22.840
Why not? I mean, just move the tag. We actually called PyTorch doing this at some point.

45:24.040 --> 45:31.880
Yeah, rewrite history. You forgot about keeping track of versioning in Excel.

45:32.440 --> 45:38.440
In the spreadsheets, in the zip file. Yeah. Yeah.

45:40.680 --> 45:49.400
In a word document, yeah. Levels. How many of these are applicable to automating your updates

45:49.400 --> 45:55.720
with dependable? Oh, sorry. Yeah, how many are these? I'm not sure if dependable is going to

45:55.720 --> 46:01.800
like what you're doing here. And if it likes it, what I'm doing here? Yeah. I don't know. Does it?

46:03.400 --> 46:07.480
Well, a dependable is running. This is my level of open source. Let the dependable do it

46:07.480 --> 46:13.480
with sting and make the noise. It's just ignore it. Everybody does. No. You get the emails,

46:13.480 --> 46:15.960
you get the alerts, and then you say, yeah, maybe tomorrow.

46:19.000 --> 46:24.520
Hello. Oh, you should do daily releases. Are your release pages?

46:25.480 --> 46:30.680
Hello. Are there? Yeah. Okay. You should have daily releases. So you could make your release pages

46:30.680 --> 46:34.760
as long as possible. You don't know. Oh, yeah. Yeah, release like every commit. Yeah.

46:37.320 --> 46:44.440
And you don't need to, the tag could be the commit idea itself. Because it doesn't sort, right?

46:44.840 --> 46:55.640
I recommend to not use a version control system, but just release tablets and only the latest one.

46:55.640 --> 47:01.640
For example, live media removes stuff that has been released before, because it has had bugs, right?

47:01.640 --> 47:06.920
So why would you ever, and also release on multiple platforms with different content in the

47:06.920 --> 47:12.280
tablets? Oh, yeah. And please make sure that the content of the tablet doesn't match the tag.

47:12.280 --> 47:16.040
Oh, yeah. Yeah. Pipi, tagging. Yeah.

47:18.280 --> 47:24.200
Only published patch files open phone. No, not open phone. Warf does this weather modeling software.

47:24.200 --> 47:28.520
They release something, and then they have not even patch files. They have a documentation

47:28.520 --> 47:33.000
page that says for Warf version 3. This is what you want to change. Go to line in this file.

47:33.960 --> 47:41.400
Check the previous talk. You think you have good ideas, but there are three levels deeper than you are.

47:43.400 --> 47:49.640
But we're not also work to ship your dependency source code in your repository.

47:49.640 --> 47:55.320
Yes. Yeah, and change it just enough. Yes, that you cannot use the system library.

47:55.320 --> 47:59.400
Even if they think they know what they're dealing with, no, they're not because you can't.

47:59.400 --> 48:05.880
Hey, you meant us this. Yeah, many people, many tools do this. It's way easier than, yeah, more.

48:07.480 --> 48:14.360
Something I have so wants in real life. In the link in the documentation, make and then link

48:14.360 --> 48:19.880
like randomly something else. Be creative. Be creative. It's great. Record them, yeah. Yeah.

48:20.040 --> 48:28.360
The fundamental question, why to use English? Why to use it?

48:35.800 --> 48:39.480
That that's falls into the confusing category for documentation. Use the Norwegian.

48:39.560 --> 48:43.000
In the way it's whatever.

48:47.000 --> 48:52.440
Maybe one more. I have a question. I didn't. You mentioned Homebo. I mean,

48:52.440 --> 48:57.640
Rust has its own terminology, but only for people who just Rust. Homebo has its own terminology for

48:57.640 --> 49:03.720
every package. Homebo and homebo. No, so Mike Mike made me still be in the room. He's bigger than me. I'm not going to.

49:04.680 --> 49:10.360
I mean, Blue has it's all related to beer, so it should be to your tests.

49:13.560 --> 49:15.800
I don't know if Mike is in the room, so I'm not going to answer that one.

49:18.840 --> 49:25.800
Looking at the time, I must say we should end here. It was a great fun. Thank you very much.

49:25.800 --> 49:35.800
Maybe give a warm applause.

