Anyway,
we'll,
we'll let that run.
Um,
I don't know where I put the old recording cos they want me to stop.
Uh oh,
where are we?
I in here and here.
OK,
here we go.
Uh,
so
to office hours,
sorry for the delays and everything.
Promise I'm trying to get more automation going.
Here it's just like uh I've been trying to fix a problem uh
um
the corporate stuff for many,
many weeks
and I just like keep hammering away at it and it keeps not being so we go.
I need to like search primetime dash and then 2026.
Where are they?
They should be on my desktop.
I didn't
apparently I accidentally deleted them.
Uh,
they are in recycle bins so I can just go ahead and restore them.
What happened?
I must have been like smoking some stuff or something.
OK,
um,
so with all that done.
Uh,
are you planning to add a toggle to remove April Fool's events for business clients?
It won't be a toggle,
it'll be like a,
a manual process.
Basically,
April Fools is,
is driven by an engine property.
I don't know what exactly it is,
but it's something like engine is April Fools or something.
And right now that is like due date maths is at April 1st,
but what that.
B is
due date maths,
is it April 1st
and
not in uh engine in universe,
which is uh
like a property which indicates if something is in a universe.
Just tag that with like member not null as well.
Member not nulls is,
is really where are we?
Member
not null when,
um.
Mr.
Cyro helped me understand this,
uh,
but
what I can do
is I can tag
in universe,
no,
I can tag engine.universe,
which is the universe that you're in,
with
member not null when,
uh,
in universe true,
and then it will prevent a bunch of like
universe null.
Anyway,
there we go.
I do still plan to do that,
it's not going to make tomorrow though.
Um,
most of the people
involved at.
The corporate client are on vacation so we're probably good,
um,
but I don't wanna lose momentum,
right,
you know,
it was like a weird countdown,
so I will do it this week,
but it won't be,
uh,
cos like if I,
if I delay it,
it'll be this time next year and I'll be like fuck I didn't do it again.
So I,
I have to,
I have to do it,
otherwise,
uh,
I'm gonna.
I guess I could just do it right now.
Let's do it right now whilst we wait for some questions.
How about that?
I won't release it to them,
like I wouldn't do that
this close to
the date and like I said,
they're all on vacation,
but there we go.
cos they're giant.
Corporate client,
they've got like a common
software delivery mechanism.
It's common in corporate IT whereby like,
you know,
maybe
like
Softpedia or all those other like weird janky download websites are blocked,
right,
for good reason cos they're mostly full of viruses.
But like if you want an application,
you can go to like the
uh corporate
software like
distribution
UI somewhere,
like it's usually like a desktop application or maybe it's like a website.
And it lists like validated and approved applications and in
some cases depending on like how cool it is,
it will also keep them up to date.
So it's like a business steam but for more than just games.
And we wanna get
um resona into that
and being automatically delivered from,
from CI as well.
um,
but right now I basically email them a zip
and then they have to like slowly distribute it around
so it wouldn't make it any.
Uh
OK,
control April's.
There is one
L in April.
If
engine,
so we don't need to engine cos we're in the engine.
If in
uh I,
yeah,
public ball in universe.
Oh,
it's not static and is April Fools is static.
I guess we can do engine not current for the singleton.
Engine not current in universe
return false.
Here you go.
Here's how you turn off April Fool's mode
for the corporates.
It is two lines of code,
ideally,
like it could be one.
Could be one like the uh
enter an indentation there is,
is,
is not needed,
but you know,
two lines.
Uh,
so let's just
check the
error list.
Yeah,
that's fine.
OK,
so I can just literally shove that up to,
up to their branch and it falls first.
OK,
it's fixed.
It's not like in their hands,
but it's,
it's in the commit chain.
It's in the commit chain,
OK?
It's in.
In the,
like
the next build I publish for them
will not have,
uh,
will not have
computers it says current activity of canine companion.
Um,
they're in their bark at the door mode.
Um,
uh,
that's why I shut the baby gate,
but they are sat on one of their beds.
They've got like 2 or 3 at this point,
um,
staring at the baby gate,
um,
intermittently barking.
They also don't like,
um.
I swapped to a new dog food.
I usually do like a delivered food,
but I'm moving soon and I didn't want there to be like an overlap of just like.
A giant box of
uh
of frozen dog food,
particularly when I'm moving.
So I cancelled that and I'm like,
we'll go,
we'll go dry food until I've moved and then,
you know,
we'll go back to whatever we go from,
from now after relook at prices.
And so I bought like a 18 pound bag of dry dog food that he's previously liked,
but he doesn't like it
and
so he's not eating,
but I'm like,
does he not like it because he doesn't like it or does he
not like it because there's a problem with his teeth because he.
He has a softer,
so I'm gonna book him into the vet whenever I remember,
uh,
to.
It's meant to be booked in today,
maybe I could do that,
it's already 4 though.
Uh,
just book him into the vet,
be like,
yo,
hey,
you know,
double check his teeth.
Um,
he also might need some,
some vaccinations.
I've got a trip coming up,
a travel trip,
and he's gonna need to be boarded,
so I've gotta,
I've gotta check up on his,
his vaccinations anyway.
Um,
if they're like,
hey,
his teeth are fine,
then,
um.
Um,
I will
probably just like
get like a smaller bag of a variety of dog foods and to try,
um,
and donate the rest of this 18 pound dog bag to a rescue organisation which visits
the pet store around the corner to do an adoption event about once a quarter.
I'll be like,
hey,
my dog hates this food.
Here's like,
I don't know,
17.5 pounds of dog food.
He will eventually eat it causes like hunger takes place
and I've also had some mixed success with uh dumping.
In like a cup of water
onto
the food,
which like makes it moist and smell a bit better.
There we go.
Um,
I missed a question from Fusa about something else.
Uh,
I'm enjoying the current cheese theme of April Fools.
I believe it's only,
um,
an excellent event,
um,
in Resmonic,
which is,
is cheese.
I am aware of what
ressonite's gonna do tomorrow for April Fools.
I cannot tell you,
but I'm aware,
um,
it is not cheese related.
But yes,
I'm always happy to see.
Cheese related item.
We talk about this every year as well when it comes to
um
like April Fools,
but like Frukes is happy for like other engineers to
uh well it's like,
you know,
the Dogman Studios event but like it's uh you know uh the event
is like Nexcellon's responsibility and then the code changes for the
engine are Fruke's responsibility and as I was just saying,
um,
Frukes is open to
other engineers submitting,
um,
April Fool's content.
That doesn't
tend to work out in my brain though because
usually
um
you know,
we need code reviews and things like that and I,
I kind of just,
I don't want meme content being code reviewed
cos it's very difficult to write anyway.
It's like,
hey,
she didn't use the most optimal and idiomatic
open
object orientated
public static void made string arg's version of whatever
the hell this is to like make everyone fart
on the hour,
every hour.
That and it's kind of been beaten into me from
uh my Microsoft days that like I kind of just don't do April.
For those who aren'taware,
Microsoft and therefore any product under their umbrella including.
Box,
um,
and listen it now,
I guess,
are not allowed to do April Fools.
It is a directive from
the
chief
legal officer of Microsoft.
I think one of the problems with April Fools
as well when you get to a company that large
is that it's very difficult
for everyone to understand
that it is a,
a joke,
right?
Let's say like 80% of people understand that it's a joke,
like whatever you do.
The 20% who don't
might not buy anything that day,
and so you've still got like a 20% decrease in sales for a day,
and that's like unacceptable to most businesses.
Moving forward,
skipping over the April Fool's question,
I know exactly
what's in the April Fool's update,
like down to the latter,
I was reading the commits last night,
but I can't tell you.
Um,
moving forwards,
Hecker,
how much did the death of Resi of Resi,
at least I didn't say Rizzi,
how much did the death of Rizzi Player be,
uh,
Ready Player B.
Affect the provision of business for any normal humans,
uh,
that
went by the wayside for a bit.
Lots of times the corporate client will,
um,
shove stuff over our way and be like,
could you theoretically do this?
And we're like,
yeah,
sure.
Um,
but they never actually ask us to do it.
So like it goes on my list and I think about it
and,
uh,
you know,
then it doesn't happen.
Right now in,
in corporate land,
I've actually got a break
and for anyone who knows corporate internet security,
uh,
you're about to like love it,
OK,
so.
We created a second copy
of Resonate's cloud infrastructure
with inside their cloud infrastructure in Azure.
Um,
the way that that's been done is using what's called a hub and spoke model.
So,
uh,
there is network isolation between the rest
of corporate's products and our corporate products,
but they're still under the same,
like,
overall wheel,
which means that
the corporate client is paying for the Azure resources and not me.
Oh,
yeah,
they're my studios.
But they're also Means that there's a bunch of security involved,
such that I
don't understand
the network topology of everything that I have deployed.
Now we were OK for things like the API,
the asset worker,
um,
the account websites,
you know,
things like stats,
messages,
inventory,
stuff like that,
cos that's all HTTP.
HTTP is like
everyone like,
whoa,
you know,
chef kiss,
everyone knows HTTP.
And yes,
it's HTTPS but I just can't be bothered to say the yes,
so just leave me alone,
um.
It's all HTTP so it's all like really easy to understand.
Firewalls are built for it,
uh,
firewalls are built to handle it really well,
so it just works.
So the corporate cloud is up and running and you can connect via HTTP
and,
and get all your data,
all your contacts,
all your inventory stuff and register accounts and all of that.
That's great.
What what they also wanted was,
let's stick a headless VM in the same subscription.
And I'm like,
this makes sense,
we can have a headless VM,
um,
but to do that,
I then Needed to orchestrate it in such a
way where it could be what's called unattended.
So,
uh,
what they want
is like infrastructure as code standards,
you know,
no one has actual access to the like Azure subscription.
Infrastructure as code is the one that has to provision it,
which means I had to like write code
to provision a headless VM
without my hands,
right?
I can't use my hands.
I have to just use words that I can type.
Uh,
so
Terraform
stands up the,
the,
the virtual machine.
Uh,
the virtual machine runs,
um,
a version of Linux called Flat Car Linux,
which is an immutable OS similar to Fedora Core OS or Core OS.
Um,
I had to get that
clear through security as well cause,
uh,
it's technically a third party marketplace image
even though
Azure stre Microsoft own the company that that that
makes Flat Car and Flatcar is open source.
I still had to open a security ticket for them to say like,
yes,
you can install.
This third party,
even though it's not a third party operating system,
um,
so I can include,
you know,
flat car,
great.
Now,
flat car,
it runs,
um,
this language called Ignition at start and it will
spin up whatever the ignition tells it to do.
But Ignition is adjacent,
it's really difficult to write,
so you actually write it in a language called butane.
Now butane is just Yamal,
it's very,
very,
very similar to,
um,
like how you might structure.
Like a docker compose file or basically any other like YAL thing,
um,
so you write that as butane
and then you
transpire it to ignition,
which is basically just like YAML to
Jason with like a couple of like extras,
right?
And then you pass that to the machine and
the machine uses that as instructions to build it,
um,
because it's an immutable OS it's not the same as like running commands on there,
like it actually like makes changes,
like it's,
it's a bit com anyway.
The uh ignition stroke butane,
what that does is instals Docker and Docker composer,
then starts a docker headless component uh instance.
That all works and if you log into
the corporate client's version of Resonite right now,
you will see their test headless up and running,
but no one can reach it.
And the reason you can see it up and running is cos like the hi,
I'm here,
that's all HTTP but the actual connection to them
is uh UDP over the LNL.
Um,
system.
Now,
the problem with that
is that
all corporate files are like ancient and they don't understand UDP.
They barely understand TCP,
but they,
they don't understand UDP.
Um,
so yeah,
I can't connect.
And then everyone's like,
oh,
what about the bridge or the relay?
No,
no,
I can't get
any traffic to the VM,
so bridge and relay won't fix it here.
Like you do a trace route to the VM's IP,
it doesn't,
doesn't resolve.
You do a ping to the,
the headless.
It doesn't resolve.
You deliberately open a port
with a basic UDP like
um echo server
operating with LLL doesn't respond.
So then the problem is like I don't understand
what
the client wants and what security can offer cos like,
uh,
number one would be
headless VM is only exposed to corporate networks.
So that would be um if you're
logged into a machine on site like at.
Corporate building,
uh,
or if you're off-site,
you'd have to log in through the VM,
uh,
not VM,
VPN,
and then you'd gain access to it.
And I don't understand if that's OK.
Like,
if that's OK,
that's great.
Um,
but if they also want off-site non-VPN,
then what I need you to basically do is like,
hi,
corporate client Azure security team,
can I open this headless VM
to like the entire internet on these ports?
And they're probably gonna be like,
no,
um,
but like I,
I just,
I simply don't understand their topology.
So I was very brave and I typed up a,
a,
a very long,
very complicated,
very thoroughly explained and researched,
um,
ticket to their team that basically said like,
don't know what the right move here is,
here's what I would like,
let me know,
uh,
but they haven't
like responded to me today.
So today I get to do,
uh,
non-corporate stuff.
Yeah,
they may be on vacation.
Uh,
so that was a long tangent,
but onto Heo's second question.
How do the impending deaths of Horizon of,
uh,
worlds and Recrum affect stuff in general?
Oh,
they haven't really affected anything at all.
We're talking internally like maybe we could
like time something for the Recrum demise,
like at a welcome event or something,
but,
um,
it's like,
hm,
what is going on
that like can capitalise there.
So like the Recrum dying,
it's like.
Well,
that's mostly
people who we can't host on our platform because it's
mostly like kids and they're mostly like 16 or,
or younger,
so we can't really host them.
Uh,
and then Horizon Worlds,
no one really played that,
so
we haven't really got some like,
you know,
um,
we haven't really got some like market to capitalise on there,
but like,
hey,
we'll see.
Lots of uh businesses and industry people are using the,
the collapse of both of those platforms as like a,
Uh,
you know,
like a fire or a signal that like VR is dying.
Um,
obviously we,
we,
we don't think,
I do think that like,
you know,
heavy,
heavy headsets are dying.
Like that's the problem I think.
We need like lighter headsets.
I am tired of like having radiators.
Uh,
Josh says something about the lines of like not,
not knowing when
you're running down the wrong
path of type analysis and utilisation.
It's subverting the type system rather than working with it.
I agree,
but like if it was up to me,
we wouldn't have null on our codebase at all.
Like I would just enable a rule globally on the entire codebase and say,
hey,
null isn't isn't allowed.
And uh
then that would,
it would self resolve it.
All the code I write,
I try and make it like it doesn't allow null.
Like any entry point to new code I write,
it's like,
hey,
if that parameter's null,
piss off.
Um,
you guys will know that as
argument null exception.
throwbi null.
You just shove that at the top of your entry point to like an area of code,
it's just like,
guys,
you're,
you're just using me wrong,
I don't,
I don't allow.
What,
what bothers me more than anything is when people use a nullable bull
to be a tri-state boolean,
right,
so you've got true,
false,
and null.
I'm like,
I think you want an enum,
right?
Result.s success,
failure,
and unknown.
Much better than a tri-state fucking bill.
It's weird cos like I don't,
I don't understand how functional
code bases grow to the size
of like
enterprise software without object oriented,
but
there we go.
Um,
but I do wish there was more functional matters
in
object orientated codebase.
Like the result pattern is so much better than like
I am a.
OK,
here's,
here's the worst result signature
task bull nullable.
OK,
so it's an async method
that
can fail,
but if it succeeds,
it's the option to tell you that it doesn't know what happened.
Uh,
we have another question here though.
Uh,
Qua says,
inspired by a fairly brief and ultimately uneventful partial outage this weekend,
not really knowing if there was a way to harangue someone on call about it,
so I pinged you and freaks,
just freaks,
just freak.
Have a an SLA?
No.
Does the public universe have an SLA?
Or if something,
uh,
if something goes down at this point in a wider scale,
then I recommend things to do here
as a rando in the community for escalating if necessary.
Make a GitHub request and get people to it.
I don't,
I don't mean that like I do mean that both sillililily,
but also like,
um,
honestly as well,
right?
So
one of the problems we had during some additional outage that we've had.
Previously
is that everyone was pinging fruit saying it's down,
and they weren't specifying what was down or how they knew it
was down or what the symptoms were or anything like that.
And so the first thing he asked was like,
hey,
can you make a GitHub issue that describes why this is down,
and then I'll be easily able to fix it.
Uh,
I would never advise pinging fruits.
It's usually not the best way,
but I don't really have any other suggestions.
Um,
we do have what looks to be an outage in the
moderation portal,
an ex-cloud.
and wiki right now.
Um,
I do intend to resolve that immediately following office hours,
but I didn't want to cancel office hours,
so
we'll just,
you know,
have an hour of downtime there.
Uh,
if you are in a modern code base and you see task boo question mark,
and you can't really do much changes,
consider a topple.
You could do task,
tuple brackets or square bracket,
I don't remember,
but whatever,
you could do like boo,
question mark,
string
and
immediately,
slightly better.
Still got.
damn awful,
but slightly better,
because at least with the string,
you can kind of figure out what's going on,
or at least log it to the log file.
I mean,
like,
more optimally,
you just do
taskable,
uh,
result
as like an enum,
but at that point,
you don't need the ball,
so you just do task result,
and at that point you're like,
oh,
I could write my own result class,
and I'm like,
no,
just go use fluent results.
For anyone who doesn't like C and is wondering why,
if you read the fluent result page,
you might be like,
ah.
Yeah,
that's why I don't like it,
because I didn't have this.
And if that isn't enough,
um,
then you can go here
and die cause it's very,
very,
very complicated and thick.
But,
uh,
Luthi language extensions adds a bunch of functional programming stuff to C,
um,
but it is like,
it's one of the thickest
read mes I've ever seen.
It is like I've.
Read it like 5 times in a row,
um,
but it implements all the monads that you might be useful to.
It's like option,
either,
thin,
like all of them.
Babertine says,
when are you going to transition,
uh,
resonate to using an FX library?
It's interesting,
um,
that you say that because like
if you look into like UI based languages like,
um,
all the like Xama ones.
I,
I can't keep up to date with how many there are,
um,
but they have,
they have this interface called I notify property change,
um,
and there's,
there's various other types of it,
but like that's how you sort of
pick up on the fact that
stuff is reactive
and it,
it,
it tends up to be like
a lot like how we do our data model,
um,
that's the,
uh.
So what I,
I tend to use for UI is reactive UI,
um,
which I just linked,
uh,
but that even that
turns into
like
something like
our um
sinky doodad,
uh cos you can make
any model reactive with some like annotations and they just like generate a bunch.
So me as a naive uh person,
I'm like,
is this applicable to a resonate?
And the answer is probably not,
cos we're,
we're not synchronising between UI threads,
we're synchronising between computer.
Yeah,
I want,
um,
I don't
really understand why the feature is called this,
but
discriminated unions in C.
Like I,
I don't call them discriminated unions.
I'm like that thing I want.
Uh,
Kuala's is one of the best cheeses for a grilled cheese,
so you actually want
two cheeses in your grilled cheese.
You want a flavorful cheese,
which is like choice,
whatever you want for like cheese flavour,
but you wanna mix in some,
um,
like more goopy,
stringy cheese.
To get like the cheese pull,
uh for that you'd like want mozzarella or something like that,
there's there's cheeses that like
melt and cheese pull better and there are cheeses that taste a bit like concrete.
Do you know concrete's really complicated,
like you can add and remove so many different
like additives to concrete to change how it works.
Grilled cheese is a lot like concrete
2026.
I'm looking for a,
like a good guide into what discriminated unions would be for you guys,
but I don't understand some of these articles.
So like,
you know,
they're like,
here's discriminated unions in C,
and then they're like,
here's some mathematics and some latex diagram.
This is a great article,
but it talks about them before it knew that .NET was getting them,
so it's like using some like thing.
Uh,
and then here's the like learn.
Microsoft page for it.
But yeah,
it,
it's basically a solve to this whole problem of like
null,
it's like another solve for the null problem.
If you want like unions or stuff like that,
you,
you need new collection.
Like,
bro,
the day,
the day we get collections
and nested nodes,
alright,
do we have other questions?
Epic,
cos there's no more questions,
I've gotta take the dog for a walk around the block and then uh
fix the wiki
next.
And the moderation.
Uh,
it's,
it's very logical though.
It's a file space issue.
So what I'm gonna do is go find out what's like eating file space,
uh,
and then
shove as much of that as possible in R2.
I know for example,
you can configure,
um,
Nextcloud to use S3 as a document storage.
So with like a couple of edits,
I should be able to
be like,
hey,
all of our
PowerPoints and stuff are on Nex,
are,
are on.
R2 now but like surface to Nextcloud,
that'll be cool cos that would get rid of a lot of file space.
But then
one of the other problems I've noticed,
and actually you saw me make a,
a um a GitHub issue about this one,
in
the flat card Linux setup,
we don't want
the headless logging to file
because the logs are flowed through Journal,
which is System D's
like logging thingy the bobby.
Um,
and
that means we don't need additional file logging.
Like Journal already does that for us,
and,
and not only that,
Journal will rotate logs as well,
whereas I don't think there's any logic that would be like,
hi,
or like headless,
the machine you're trying to write a log file to is kind of full,
could you,
could you not?
One of the things I was thinking of doing with like uh
Docker setup is like,
hey,
uh,
if we bind the log directory to Devkull.
Will that work?
Like resident will be like,
yeah,
I'm writing log files,
and meanwhile the computer's just go,
yeah,
carry on.
Let's get you back to bed.
Resonite headless.
You're not writing log files,
you're writing to
know.
But yeah,
much easier to just turn those off.
Ah,
so
for the wiki and Nextcloud,
they aren't using journal,
um,
they'll be in the,
uh,
Docker log engine,
which I believe also handles rotating,
but I'm,
I'm not entirely.
As a reminder,
my goal for the machine.
That runs the wiki,
Nextcloud support and all that other stuff is to delete it.
Um,
so we,
we're getting there.
Some of this header stuff is actually helping.
Like,
I could
theoretically stand up like now a VM for us that would have the stuff that we need,
including the wiki,
but,
uh,
I'd also be stepping on someone's toes cause,
cause
Jay is trying to do that.
But that happens naturally.
It's never intentional.
It's just like,
hey,
corporate clients,
corporate clienting,
they want this thing this month,
next month,
they might want something.
Yeah,
I will.