Welcome to office hours.
We're gonna go ahead and get started.
Uh,
this is the section where I answer questions about,
uh,
and,
uh,
today we've got like,
basically a diagram.
I,
I don't know what to do,
like,
um,
do I leave these as audio only?
Do I go full Twitch stream like everyone else?
Do I do a hybrid?
Like if I keep doing diagrams,
then like
you.
Uh,
you can listen into the recording,
but like,
you don't have the diagram,
so I'm gonna like,
uh,
no.
Like,
do I switch to recording it with OBS and then I can cut
it down a bit like Fruits when he cuts his stuff down.
Uh,
I think them being searchable with a subtitle file is,
is really cool,
but,
you know,
yeah,
no sound,
great,
cool,
we're having a
fantastic day today.
Um,
no,
just disconnect quietly and then rejoin and then speak,
hello,
hello.
Excellent,
so I'm gonna say what I was saying before,
which is like,
I don't know what to do cos like I,
I've got to draw the diagram today,
um,
but like the,
the recording won't make sense unless I also record my screen.
So I might just record the diagram twice,
once in audacity and once in uh
uh OBS and and see what can happen there.
Uh,
I don't know if my computer can like handle that,
but,
but we're gonna go ahead,
right?
So we are recording,
well we're gonna get started.
We'll get the,
the usual questions out of the way.
How am I doing?
Um,
actually not too good today.
I didn't sleep very well,
woke up with a headache,
um,
I just decided that like the,
the best way to fix the headache was just like a large quantity of cold liquid,
and I was gonna go to 7-Eleven.
I've been talking to a bunch of people about this.
7-Eleven does like a,
A double XL
big gulp of of fountain soda,
which is really good cos it's syrupy,
um,
for like $2.19
which is like a really good deal these days.
If you go like,
I,
I checked,
I went to like a a Walgreens,
which is like a drugstore,
and they had like regular bottles of,
of Coke,
and it was like 299 cents and a double XL Big Gulp
is about the size of like a 2 litre bottle of soda.
Basically,
so it's like I could go get like a like a fountain of soda
from from 7-Eleven
and they allow dogs in,
or I could buy like a
tiny bottle and stuff like that.
I've got to stop doing it cos it's sugar and sugar's bad for you,
soda's bad for you,
etc.
but like
really been
keeping me alive recently.
But I was like,
no,
no more.
Um,
I'm gonna go ahead and,
and I'll go,
I was like,
I'm gonna go down to Starbucks,
and I was like,
I fancy there like they do a matcha latte.
I was like,
I fancy that.
So I went all the way down to Starbucks,
and by the time I got to Starbucks and I had the drink in my hand,
I was like,
we might as well continue to walk to the dog park.
So we continued to the dog park and we hang out there for like 40 minutes.
Usually when I go there,
we go for like 1 hour or like 2 hours,
etc.
and that's really good,
but um.
Yeah,
just 40 minutes was fine,
um,
fellow ran around and then we stopped by the burger joint.
I picked up,
I think like 2 burgers,
ate them and came home.
Uh,
I feel a lot better now.
I still do want
the big gulp.
I'm probably just gonna like stick to water and try not to,
try not to drink soda today.
I,
I might,
uh,
might get that,
um,
get that habit like kicked again.
Soda's horrible,
like even diet soda,
although I might switch to diet soda cos at least that's like slightly better,
who knows,
whatever,
anyway,
that's how I am.
What the dog doing,
dog's hiding in the bedroom right now,
um,
they're in their crate,
um,
they injured their paw over the weekend at the dog park,
um,
for those who have dogs,
uh,
the dewclaw,
which is the sort of claw that's like halfway up the foot.
Um,
that
can,
uh,
get nicked or sort of torn or caught on things and that,
that leads to it like frequently bleeding,
like it's a,
it's a common problem for
90% of dogs basically.
Um,
he's fine.
It just bled a tiny little bit,
and he's been limping occasionally when he remembers it's sore,
uh,
but that didn't stop him running around the park today,
so I think he's fine now.
So with the dog,
um,
and me out of the way,
I guess we're on to the promised,
the promised diagram.
So for those who are not aware,
um,
I,
I just like
native libraries are fun,
but I,
I'll talk about.
once I've got the diagramming up,
but I need to open up OBS cos I'm also gonna record this as a as a video.
So whilst I'm,
I'm doing that and get everything ready for that,
uh,
Jay has said pharmacies have Coke.
Yeah,
so like Walgreens is like
difficult to explain.
It's not really a pharmacy.
There is a pharmacy attached to it,
but like it's,
it's not really a store that makes sense.
Like you couldn't do your weekly.
Grocery shop there,
but you could get like random like segments of your grocery shop.
Like you could get like mayonnaise or cereal or bread,
but you couldn't get.
I actually think you can get milk.
But the point being is like it's a,
it's weird,
like it's just,
it's a weird place.
It's,
it doesn't,
it doesn't make sense.
Like all the things that are in there don't make sense.
It's like just.
Like one aisle is like snacks,
it's just like wall to wall like candy and
chocolate and crisps and chips and all sorts,
right?
But
the next aisle along is like
stationary.
And then another aisle is
toothpaste and mouthwash and dental products.
And then there's like
a bunch of aisles which are,
you know,
like,
um,
body wash,
shampoo,
all sorts of stuff like that.
And then there's makeup as well,
it's just,
it's a very confusing place,
um.
Right,
so for this diagram,
we're gonna go ahead and and and launch my screen,
uh,
get this into just one window.
How about that scaly.
Uh,
this is an old diagram.
Um,
what is this even showing?
Oh,
it's talking about like
how everything we're doing is performance even
though it doesn't look like performance.
I remember.
Yeah,
we don't,
we don't need any of that right now.
All right,
now I've gotta
swap over here,
make sure this is set up and simultaneously start recording on PS.
Alright,
so yesterday,
actually sort of last week as well,
I was working on um a library that we have called Comresonator and everyone was like,
oh why are you doing that?
I was like,
it's easier if we just draw draw a diagram.
So here is said diagram.
So
um.
We have the asset variant system.
Uh,
oh,
look how tiny that text is very.
Life,
life is fun,
life is fun.
Uh,
where is text?
I'll make text big?
Text font size.
Font size is extra large.
Are we like zoomed like what?
Excuse me,
that's extra lush.
Oh yeah,
we could,
we could zoom in and we can make,
oh,
I see,
I see what's happening.
If I just like refresh,
will it just be like,
no,
it's remembering stuff.
Make the box smaller,
zoom in.
All right,
we've got to get back to,
ah,
there you go,
there you go.
Right,
so we've got the asset variant system.
Now everyone's like,
what does the asset variant system do?
Um,
the asset variant system,
um,
takes assets and it makes them more optimised.
So
let's say that you give,
uh,
resini just a a PNG,
um,
of a dog.
Uh,
we send that to the asset variant system
and we say,
hey,
could you make this PNG of a dog
more uh optimised,
um.
So the,
you know,
it's,
it's better to be rendered,
it's better to be stored,
it takes up less space,
it takes up less uh memory,
it's more optimal.
And the asset variant system goes like,
sure,
but instead of just generating one PNG of a dog,
um,
it actually generates several PNGs of a dog
at different formats.
And it groups them all together and says like,
hey,
these are the variants of uh
of the PNG of the dog.
And then you're able to get those and and use those and it makes everything
more uh optimal when it comes to to loading in the PNG of a dog.
Now part of that system
handles
any asset you can think of.
The PNG of a dog is just an example,
but it could also be things like a skybox
or uh a model.
Or a uh what are they called a a lookup table file or anything like that,
basically everything.
One of the,
the new assets that we're adding to the asset variant system soon is actually um a uh
Gaussian splat as well,
if I can spell this correctly.
Cos that also can be um a variant.
What we're actually gonna do there is basically if you give us like a
PLL PLY we can actually convert it to an SBZ thanks to SIRO's library.
SBZ is the like 10x smaller when it comes to um
file size,
so it's a lot better.
Let's make that a different colour.
So all of these go into the Sitar system and
all of these are computed in a different way.
Um,
so sometimes it uses a library called Crunch.net,
sometimes it uses a library called Compressorator that we're about to talk to,
sometimes it uses,
uh,
other stuff depending on what's going on.
We also do some 3D model stuff that I don't quite understand,
um,
but,
but there we go.
All of this requires different libraries,
and all of these libraries are
basically a pain in the butt.
One of the libraries that we have is called uh Compressorator.
And compressorator
uh is part of the asset variant system,
and
it
computes uh more optimised versions of mostly bitmaps,
so PNG of the dog,
like PNG anything like an image,
it computes most of that.
And Compressorator is actually a two-part library.
Uh we have uh.
Compressorator.net,
which is the
C portion of it.
And then we have the main compressorator library.
So I'm just gonna call compressorator native,
let's add that to the dictionary,
yeah,
compressor n native.
Both of those compound together make the,
the,
the compressorator stuff that we're dealing with,
and it's actually more like,
oh dear,
it's actually more like
this.
Like compressorator native does the actual native compilation.
dotnet is just coolly into the native compilation,
and then it goes back to the asset variant system and goes like,
hey,
we're good.
Now,
the asset variant system has a worker,
and the worker does all this work.
It uh currently runs on a Windows VM that is part of a Linux machine.
So if we go over to here.
Remember people asked why,
and this is like the explanation,
it does take a while though.
It's like we've got this
uh Linux uh
it's a Linux bare metal machine
and
on the Linux bare metal machine
there's a Windows VM.
And
the Windows VM,
whoa,
the Windows VM
is what's running
the asset variant system.
And the reason behind that,
the entire reason why this runs on Windows
rather than uh Linux is because of Compressorator.
There were other um libraries that we needed to make work on Linux,
but the Compressorator was just the last one for some reason.
Uh,
and it's a problem because
it's a virtual box machine
on a bare metal Linux machine.
And because we need people to have access to it,
it's exposed to the internet and so it's,
it's just undeal.
Um,
the compressor,
sorry,
not the compressor,
the,
the.
The Windows VM keeps crashing as well,
and I do not know why.
Like it will just stop responding,
and the best thing I can do is to just restart it.
And so that's what I've been doing
for,
like,
basically a year and a half at this point.
I've just been restarting the Windows VM
and
there we go,
right?
I've just been restarting the Windows VM and it'll start up again,
and it'll start the asset variant system again and it
will start running again and everything will be fine.
But I'm like,
I'm done with that now.
Like I'm done with like that being a problem.
I don't want to do that anymore.
So what we need to do is to get compressorator Native running on
Linux,
and to do that we needed to compile it to
uh to Linux.
And we got that working thanks to the
uh PR by.
Uh,
a combination of J4,
Josh,
and,
uh,
Julian,
um,
who provided all the parts together
that have made us able to for the first time in forever,
we now have.SO files.
DotSO files are the uh Linux way of,
of,
of doing shared native libraries.
They're called a shared object library or a shared
library or whatever you want to call it.
On Windows,
you'll know these as.
DLL files.
And so when they both
get combined together for compressorator native,
we now have a native version of that code that can run on Windows
and
can run on Linux.
So once this works,
and that does now thanks to this,
you can see those files there,
we just have to integrate them into compressorator.net.
Once they're integrated into compressor Data.net,
the entire compressorator flow will work on Linux.
The entire asset variance system will work on Linux,
and then I'm going to take this Windows VM and it's going to be yed
into the next galaxy,
because I hate it.
And uh
the asset rating system is then gonna run on Linux.
Once it runs on Linux,
I'm also gonna give it some performance tweaks because it'll then
be on Linux and we can do a little bit more.
This will include additional metrics about what's going on.
To explain that,
I'm gonna grab another tab for a second,
hopefully this uh
maintains its use on the um
on the recordings and on the screen share,
so I'll double check.
Yep,
it has.
Right,
so if we scroll down to asset variant system here.
You see,
this number keeps going up and then will go down again.
Usually that's when I notice that it's crashed and I've restarted it.
In fact,
if we go to our max length right now,
which is,
that'll do,
but it'll run off,
you see,
like every single time this is going up,
it's like,
particularly this kind,
where there's a slow build up and then a gran like it burns off.
That is when the VM crashes.
So we gotta,
we gotta fix that.
Additionally,
if you notice,
if we,
we zoom in here,
let's go to
this area.
There's been a general baseline of jobs stuck
on the asset variant queue at around 10,000.
And you can see that dipped the last couple of days down to 8000.
These items,
this 10,000 and this lower part,
are in what's called the poison queue.
The poison queue are assets that have been through the variant
system once or twice and then an issue has occurred,
or the job took too long or something went wrong.
And um,
what that does is it means like,
OK,
this is a problematic asset,
we'll shove it into the,
the poison cue,
and what that's meant to signal to us is
process the poison cue separately and with more scrutiny,
with more inspection to sort of see,
hey,
what's wrong?
Why is this in the poison cue?
And then we can fix bugs of that.
The problem is that some of those bugs
are,
we think,
in compressorator.
You can take a look at the um.
At the GitHub and I'll,
I'll get some links to the,
the issues at the moment,
but there is a couple of bugs to do with HDR images,
uh,
reflection probes,
and even skyboxes that are causing people's CPU to go to like a bajillion%.
And we think that this is lying somewhere in
this area,
right?
Compressorator,
asset variant system,
compressorator.net,
compressorator.
Native.
We can't figure that out because we don't have a good
workflow for making incremental changes to the compressed native library.
So in order to get that going,
what I wanted to do was to get it building so that if I
did have to make changes to the source code of the native library,
I wouldn't be stuck,
right?
I could just PR to master and then uh the GitU
actions will kick off and we'll get.SO files back off,
um,
the,
the stack.
Uh,
if you remember back in the day when we had an issue with,
uh,
free image,
there was a,
uh,
critical security vulnerability over in free image.
We had to do all of that work then
to like try and figure out how to compile it,
and that was like extra work.
We've done that ahead of time,
so if we
do a bunch of diagnostics and why reflection probes are doing all this,
or HDR images are doing all of that,
the goal is to make it so that the entire compressed data asset variant system,
um,
flow is easy.
And that includes being able to deploy the asset variant system worker,
um,
dynamically and being able to say,
hey,
uh,
update and deploy.
Update and deploy and only run the poison cue.
Run the poison cue now for 3 hours,
then run the regular queue.
Let's deploy two copies of it,
one running the regular queue,
one running the,
the,
uh,
poison cue.
Let's run the regular queue of less logging and the poison cue with more logging.
All of this stuff
is,
is what we can do by moving it to.
Linux,
because once it's on Linux,
um,
those who are aware of,
you know,
how Linux works,
etc.
it's like one step away from Docker.
And once it's on Docker,
it means I can spin it up and pull it down
incredibly quickly on as many machines as is necessary.
So like,
let's say we suddenly get like a 10X viewership base jump,
um,
or we have a lot of stuff that needs assets to be computed.
MMC,
wink wink,
um,
then.
We can
scale it up or scale it down beyond just the one machine.
We could take this um this
this Linux bare metal machine,
and we can have 2 of them.
We could have 3 of them,
we can have a million of them.
There's also these systems that might not be Docker,
there might be other container types.
It doesn't really matter,
like once it's containerized,
once we can easily containerize it in another container system.
That will allow us to not deploy these to bare metal service anymore.
We can basically give the Docker file to
Azure or other container um managers and they'll say,
Sure,
we'll run your container
on our machines,
provided you tell us what it needs.
And I'll basically say,
hey,
we need a lot of CPU.
Here's our container.
They run the container and then we don't need to manage the actual machine,
it just handles it for us.
And so we have a big event,
MMC again.
Um,
we need more compute,
we can just go,
hey,
here's a container,
run it.
That's the goal and that's what's going on,
and that's why,
um,
what the work that was done by J4 and Nosh,
um,
and,
uh,
Julie,
which was basically it was like one sentence that like unlocked everything,
so I'm so happy about that,
is making this next part done.
Um,
this part I've pretty much got like established,
like I know what I need to do.
Um,
Josh has some stuff there to to help me out,
but I'm,
I'm pretty
sure I know what needs to go on there.
Once this works,
I will then be running,
um,
the asset variant system on Linux on one of my
Linux machines just to sort of see what happens.
Um,
and everything looks good,
we'll be able to,
to move forwards.
And you should never,
ever,
ever again
see the asset variant.
System Q being high in the alerts channel,
or at least that's the goal.
When I do the update,
I'll also add a bunch of additional um metrics that we'll be able to see.
Um,
I'll be able to give you things like
how big the poison cue is,
uh,
the
type of the queue as well.
We'll see like graphs that sort of show like,
hey,
the queue is
processing
500 bitmaps a second,
but only 200 models a second.
That.
It's
interesting information,
stuff that
could help us sort of figure out what's going on.
It can also help us alert better.
We could basically say like,
hey,
the um failures on this specific type of asset
are increasing.
Let's fire an alert to the alert channel.
Instead of the alert channel being queue is high,
shrug,
it'll be
the queue of this specific type of asset is high.
And then we can go great,
and then we can go check the logs which you'll also be updating,
and it will say,
here is the problematic asset,
here it is on the logs,
here's what the problem is,
we can fix it,
and then that'll all go away.
Uh,
I think
that's all for this diagram.
If anyone has any questions,
let me know.
Um,
but I'm going to go through the rest of the questions that,
um,
up here,
and uh I think we're done with the diagram.
I hope that was,
was useful.
All right,
uh,
I'll leave this open just in case anyone's interested,
I guess.
Um,
let's move on.
Uh,
OK,
next question.
OK,
we did dog doing,
we talked about Walgreens for a bit.
Uh,
red says,
what's your favourite interface interfaceable with Protoflux data type?
Uh,
the grabable
like the grabable nodes are always my favourite.
They were my favourite over in the previous system,
and they're my favourite still cos they're just silly names,
like grabable grabber and is grabable grabbed?
It's they're just funny,
right?
They're just funny.
Uh,
he says I'm talking about security vulnerabilities.
The Windows VM is exposed to the internet,
right?
That is a problem,
like security wise and everything like that,
but
talking about it
doesn't increase the security or decrease the security.
It's like,
and I'm actively going to remove it in like a couple of days anyway,
so it doesn't really matter.
Um,
Mr.
Thomas's virtual box?
Yeah,
I know,
I was surprised too.
Um,
I don't want virtual box running,
um,
like Prox box would have been a a a a better idea or or something bare metally.
Um,
you gotta remember that
a lot of the things that we did when we launched were to get us out as soon as possible.
You know,
it was like we could have done all of this stuff where before launching,
but it would have delayed the launch,
um,
particularly because I,
I would have had no idea what was going on
if I couldn't talk about this with other people.
Um,
I just,
I just don't understand how,
um,
for some of these native libraries,
you're meant to figure out what you're meant to be doing
to use them.
You know,
it's like we've made this super cool library that does.
It really efficient image compression,
etc.
but
all of our development guides are out of date and
we make about 1 commit a month to this repository,
and it's like,
uh,
cos like at the same time as you being agitated and annoyed about that,
like you understand as well,
right?
I can't like stamp my feet and then click my fingers and this problem be fixed,
but like
I just,
I just.
If you write a,
if you write a C++ or a C project and you don't have good like developer
setup instructions that are up to date,
please just consider making some time to to make them there.
Um,
or if you come across like a native library and
you're struggling to figure out how to compile it,
and you figure it out,
please comment somewhere.
Like all this stuff that Josh and J4 have got,
like,
I'm gonna be documenting it
on an issue,
like on the original non-fork as well,
like I'm gonna go back to the source and I'm gonna go like,
you know,
we had some struggles,
here's what we did,
linked to the actions file,
etc.
and what that means is in 5 years when someone else
is looking into this library for a completely different reason.
And they bump into the exact problem that we had,
they've got this like paper trail of other people that had an issue,
and they should then feel free to reach out and contact us,
right?
If someone in 5 years sends me an email and goes,
bro,
I was trying to use the compressor library and I had no idea what was going on.
But I followed the paper trail back through all the GitHub issues
you made about it to do with your problems with it,
and I fixed the problem,
and I just wanted to say thanks.
Like I've done my job.
Like in open source,
that's like job done,
and that's what we wanna do there.
Uh,
Josh is linking a commit,
which will open here.
Uh,
yes,
I did see this.
Uh,
I've got to,
uh,
I've gotta like fix this stuff up,
um,
and
like actually see if this all works.
Did you get the output texture like readable?
Gosh?
Yeah,
OK,
um,
the asset variant system has,
like,
by the time it gets to the compressorator library,
it's a raw byte stream,
um,
and it comes out the raw byte stream,
uh,
as a raw byte stream as well,
so
we,
we gotta figure it out.
Like once,
once the problem is fixed,
I can then grab some variants from the variant system.
And put them into this code that Yosh has here,
and we'll be able to actually like prove that this library works,
uh,
and put this sample into the library,
and that will allow other people to use it and take a look at it.
And it will also allow us to write a C file about this length
that fully demonstrates the HDR and the,
uh,
skybox.
In the uh reflection probe issue.
And at that point we can start diagnosing and debugging and figuring out like,
is it this library,
is it something on resonates end,
is it something in the middle?
I have an idea,
um,
but I can't prove that idea until all of this stuff is done.
Um,
because right now.
There's there's no way to just sort of like
run this code except within the realm of the asset variant system
where I wouldn't even begin
to know how to pull that out right now.
So this is where we're like starting to pull it out from the start.
All right,
let's take a look at next questions.
Uh,
Mr.
Thomas says,
I bet you've been asked this about 1000 times,
if there are plans to open at XMA into resonate.
I don't even know what that means these days,
like I'm so like behind the times on like the
the VR like landscape that I just get confused.
I thought we already supported Open X so I don't
like.
I don't understand.
Uh,
Red says,
does anyone have a an AMD epic?
Yeah,
we do.
That's what the ass of very system runs on.
Well,
it runs in a virtual box VM.
That's another reason for moving it to Linux is like we can
better performance tweak it once it's uh running closer to bare metal.
Uh,
still won't be
actual bare metal because,
uh,
probably be in Docker,
but like Docker sort of is just
Docker doesn't work how you think.
I used to think like Docker was like virtual machines,
but it's not,
it's
different.
Yeah,
the overhead from Docker is so minimal,
it's basically native history.
Yeah,
that,
that's exactly that.
The reason I like,
um,
getting it all the way to Docker is it takes all the complexity out of running it.
Like right now running the asset variant system,
like it's a,
it's like a page and a half of how to set it up and run it.
Once it gets to Docker,
it's just like Docker run enter and it's running,
and that just makes it so much easier for us to develop on it as well.
And for those who use dock,
you'll know how accurate my noises were like that's,
that's how easy it could be.
Right,
uh,
let's move on to additional questions.
Let's see what we've got.
Oh,
long question from Nuki.
I like these.
Um,
I am building
a procedural generation systems.
This requires a tonne of C.
Based pseudorandom numbers being calculated,
one for every float I'm putting in.
Is there a command that would do such a
calculation without me writing it out right now,
I have piles a code which multiply the seat
by a static modifier for the particular variable setter.
Modulus,
the modified seat by the at the hm,
I,
I understand your problem.
I'm just trying to figure out how to resolve it,
but I think I like.
This is the um stock random number generator in um
C or .NET. It isn't uh obviously cryptographically secure.
I put that as a caveat so people can just stop going.
It isn't cryptographic.
Yeah,
I know.
We're talking about randomised procedural generation,
not crypto uh cryptography,
so we're fine,
we can use this.
Um,
it allows you to put in seeds,
I think.
Hold on.
Uh,
yes,
here,
see,
initialises a new instance of the random class using the specified seed value.
So we could,
we,
I don't think we expose this right now,
but we could expose it where you can put a seed value in,
and that might
prevent
um
a couple of the steps there,
cause like right now our random stuff just has like a static seed,
but we could like
have some sort of structure around this um random object to do so.
Um,
it also gives us,
uh,
what does that do?
It seems like that shouldn't be on the random thing,
separation of concerns,
etc.
Like shuffle
will randomly shuffle an array.
Like I don't,
why is that there?
Anyway,
um,
that might help.
Uh,
I would need a,
a GitHub issue for that though.
As for everything else that you're saying,
like moduluing and adding,
it's,
it's if it's basic mathematics,
the best answer for like making basic mathematics easier is is nested notes.
Depending on what you're doing,
there is like a component though,
there's like a random object spawner,
random event generator.
Like,
if you could constrain what you're after to
fit within the realm of those components,
there is a possibility that
with a GitHub issue we could
adjust that component or that system to have stuff that you need.
So make sure you take a look at those.
I was playing with a random,
uh,
whatchama call it,
a while back to make some art,
and I crashed my word a couple of times,
but,
but that's all I remember really about it.
I,
uh,
don't have the code base open.
So,
uh,
I could open it,
but oh,
what time will we get?
1633.
Um,
red says,
can you run Resin on the AMD Epic system?
No,
the Epic that we have access to is a server,
and,
uh,
it,
it specifically as a server that I won't allow headlesses onto it.
Um,
and the reason behind that is like it's doing everything else,
it's doing the variant system,
it's doing our emails,
right?
It's doing too much already.
um,
and there was a brief,
briefclosure of running headlesses on it,
and I'm like,
no,
please,
like no more on that.
Uh,
Red says something about
stuff running at Fris's house.
Nothing
runs at Fris's house.
Actually,
it's not right.
Sometimes
a beta version of the asset variance system runs at Fris's house.
So we do this like versioning thing where uh you'll see
it coming up like in the L&L in engine version,
all sorts of stuff
where we signal to
things.
That
wouldn't otherwise know
if they're compatible with each other.
So the asset variant system has that as well.
It says like,
hey,
when you start up,
it says,
hey,
I'm asset variant system,
and I am able to operate
asset variant version 5.
And if another asset variant worker comes up and says like,
hey,
I'm asset variant worker 4,
it won't pick up jobs that target like a version 5 flow.
Um,
and so because of that,
sometimes Fris has to run
parts of the variant work on his
hardware,
uh,
because he's,
he's modifying stuff.
Like a good example there would be the Gazian Splat
stuff that would probably run on a machine in his house
for a little bit until it gets merged in,
and then he'll ask me to deploy it.
And right now me deploying it is,
uh,
I have to,
let me go back to my diagram.
I have to
RDP into this Windows VM.
And then
manually copy and paste the files into a folder
and then restart
the EXI.
Once it's on Docker,
I'll just be like,
hey,
just Docker pull restart,
you know,
like it it it easy,
easy,
easy.
Uh,
Terminus says you support Steam VR and Open VR.
Open XR is its own thing.
It's that's,
that's the confusion.
That's another reason for GitHub um issues as well,
it,
um,
helps us remainer focused,
right?
Uh,
otherwise I can get lost,
right?
Uh,
I talk about this a few times,
various places,
but
one of the things you have to do is,
I think there is one,
double check there is.
If there isn't,
go ahead and make one if there isn't.
Well,
if there isn't,
go ahead and make one if there is fantastic as well,
um.
You have to declare bankruptcy on your memory at some point,
and it isn't because you're getting old,
it isn't because your memory's bad,
it's just because like,
there's like a weird fleshy neat
circle inside like inside your head
and it's gonna forget stuff.
So if you
put it into a notepad document.
And it's on your computer,
that's better.
If you put it into a GitHub issue,
10 times better.
If you put it into a GitHub issue that's got as much effort as you can put into it,
that gives us all the information we need to proceed,
fantastic.
I can pick that up easily.
Um,
you should see some of my personal management
for lists and stuff like that and notes.
I've got a page called,
um,
in my personal notebook called That one Guy You Keep
Forgetting from the WWE because I keep forgetting their name.
Um,
I referred to them
offhand when I like,
I lived in an apartment,
sorry,
a house with like other people who were into
WWE and so I would like passively observe it.
And
so I didn't know any of the wrestler names,
so I gave them all nicknames
and I would like walk in and I'd go,
oh,
how are you doing?
I'd look at them watching WBD and I'd be like,
oh,
San Tres on.
And it's because like the,
the wrestler in the attire he was in and the way he was standing,
he reminded me of the Pokemon card.
Um,
for Santry,
um,
I will open up my note because,
uh,
um,
Nuki's asked,
I will go ahead and open up my,
um,
ujama whatsit and do it,
uh.
Yeah,
my notepad page for this in my notepad
is called uh Sanru WWE and the answer is Jack Swagger.
Um,
so if I go here,
you guys can still see this,
right?
This is Jack Swagger and
he was standing,
I'm not gonna be able to get it,
but like if we were to also do.
The Pokemon.
You see how he's standing with his hands like that,
and he's,
he's wearing,
well,
he's not wearing,
he is made out of this colour.
Jack Swagger was wearing,
um,
what do you call these like leotards or something,
he was wearing a a yellow leotard and he was standing in that sort of pose.
Uh,
and,
you know,
the spiky blonde hair as well,
so they were called Sandhu.
Yeah,
I suppose,
it was like,
uh,
I'm gonna,
I'm gonna punch you whatever wrestlers do and stuff.
Do you have any other questions,
cause at the moment I'm just talking about Pokemon.
One thing I wanna do,
um,
I don't know if I want to start it today,
but like I want to get the tech tree going,
and I thought like the best way of doing it is maybe if we split office hours in half
and like for half the office hours.
I mean like you can ask questions throughout it.
But like the second half of the office hours,
I'll just be like in a diagramming tool,
putting on features that people are talking about
onto the tech tree until it's done.
Uh,
Lucas says,
what do you think about Pokemon?
I don't think about Pokemon a lot.
Um,
I know the original 150 quite well,
um.
I do
Mimi.
MimiQ is my favourite Pokemon.
I don't particularly know why,
but it just is.
It just is.
Uh,
for context,
Mimi you um is a Pokemon that isn't loved by anyone,
and so to
try and,
you know,
be appreciated by people,
they made themselves a Pikachu outfit which they wear,
um,
and so
like this is the Pokemon's eyes here and this is just an outfit.
There's a,
a mimi cue with a top hat and bow tie,
and it's.
No chance.
If that was like
$20.15 bucks,
something like that,
I would have instantly bought it.
Not,
not the $71.
Uh,
if you wear this,
um,
I understand that you like mimicu,
but maybe don't wear this.
It's like a little weird.
Actually,
no,
you can wear that.
This one's even worse.
It's just like,
oh,
my entire chest is this like poker on,
it's just,
I don't know,
it's weird.
That's OK,
like this is fine,
like,
you know,
but it's just like,
yeah,
look,
here you go.
It's like you could walk around like that,
it's just,
it's a little weird.
It's a little weird.
Anyway,
let's get,
let's get back to questions.
I'm actually gonna stop the screen share because it will prevent me from um
getting sidetracked.
Uh,
red says,
hey prime,
can you load up the source code and take a hyper quick look at tool
simulator real quick and see if you can somehow instantly see why this occurs.
OK,
cool.
Uh,
when trying to use tools Simulator to simulate the dev tool,
it's not possible to move gizmos.
Uh,
yeah,
I don't have the codebase open right now.
I do need to get it open,
it's because I started my day with a dog walk and then I had a bunch of meetings,
so.
I haven't done actually like anything technical today.
I mean that's a lie,
like I merged a couple of KitHub pull requests,
but those are just like the start
of my journey into fixing the,
the,
the stuff we talked about in that diagram.
Like a huge,
like,
massive thank you to everyone again,
like I was like daunted.
I was like slightly stressed.
At the possibility of not being able to figure out how to do exactly what now has been
worked on,
um,
out of context,
Pokemon is bigger than Jesus
being tagged in the,
uh,
OK,
that's fine,
I was being tagged in the team just cord.
Um,
OK,
so Codebase is now open.
Let me see if there's additional questions I can
do whilst it does it's like opening thing.
Uh,
VT wants to know if there's any items from CS that piqued my interest.
No.
Um,
I don't know,
no,
I lie,
I lie.
There is one item
that piqued my interest.
I've gotta grab it for you,
one second.
Uh,
I don't know where to find this.
I posted it in so many meme channels that I don't know where to find it.
Maybe I just like YouTube it,
uh.
Yes.
You guys aren't prepared.
This is my favourite CES thing.
He's just not prepared.
For like creepy robotic talk.
But I get the idea behind it.
I get the,
the meaning,
I get what they're trying to do,
um,
and all of that.
I understand that,
you know,
you need to try these things,
but
why did you make it look like that?
Why did you make it look like that?
Um,
Red says,
favourite genre of music,
non lyrical,
anything non lyrical.
Just it needs to not have lyrics,
I'll love it.
Um,
if it's got lyrics,
I hate it.
I know that's really weird,
but um.
Here's what I want you to do,
uh,
like,
go find lyrical tracks of your favourite songs that don't
have the music and just listen to the lyrics,
and then
imagine that you're analysing them
for their logical meaning,
and you can't not do that.
Cause I remember like talking to like friends and
family about that as I was growing up,
I'm like,
the words in this song make no sense,
and they're like,
yeah,
but it sounds good.
And I'm like,
yeah,
but the words they're saying don't make any sense.
All right,
let's take a look at this.
We got Dev Tool primary hold,
got it.
If,
um,
if I don't understand what the lyrics mean,
that's OK,
cos then the,
the like,
it sounds good takes over,
right?
Like it sounds good takes over.
But,
um,
actually,
sorry,
I'm just like meming today,
I hope it's OK,
um,
where are we?
Here,
here's the perfect example.
So it's it's Adele,
I don't know the name of the the song,
but
you'll,
you'll hear it when I say the phrase set fire to the rain.
Like that played in your head in like Adele's singing voice when I said that,
or at least for most of you it will have,
uh,
but the lyrics go,
I set fire to the rain,
watched it pour as I touched your face.
Let it burn while I cried,
cos I heard it streaming out your day.
So.
The rain was was saying
like,
presumably like a romantic um interest for Adele.
um,
it was saying
their name,
and that was bad somehow,
uh so
uh she set fire to it,
the,
the rain,
which is water,
by the way,
um,
and then just to be sure that you can't
observe what she's doing to like hide her crying.
Um,
she
touched your face for some reason,
like did she like blindfold you?
No,
ignore me,
just committing mass murder on the rain over here.
Um,
I'm jealous.
Like you could read this a different way as I
am jealous of the rain cause it knows your name.
Like it doesn't,
it doesn't make any sense.
Anyway,
codebase is open.
I'm taking a look at the,
the question from right now,
um,
on primary hold,
so I predict that's what's happening,
um.
On primary hold,
active gizmo question mark.
I don't need a vacation.
I could go on like a a a like
spiritual retreat in like a yurt in the middle of the Mongolian wilderness,
and I would come back and I would still think Adele's lyrics don't make any sense.
Um.
And,
and for those people who are like,
yeah,
but it sounds good,
like I get it,
like it's a really phenomenal track in terms of like singing and
melody and tonality,
but it just doesn't make sense.
I won't head bang that gives me a headache.
um I also won't dance cos I don't like doing that.
Um,
I also won't go to a concert because I don't understand it.
Like,
look,
OK,
so,
um,
you can't tell me that some of the people at the back of that picture
can see
the performers at all.
They can't see them.
Um,
and so they're forced to look at the television
screens
that the performer is on.
And
because,
you know,
the performer doesn't have lungs that can fill a concert hall,
the performer has to be amplified
and projected through speakers.
So in other words,
a television and speakers is what you go to
to watch at a concert,
and I can do that at home.
And at home I can adjust the volume,
and at home I don't have to stand next to other people.
At home I can choose to pause the music and go to the bathroom if I need to,
as many times as I want to.
I could only really even enjoy the cinema now,
because like,
I can watch films at home and pause them and go to the bathroom.
OK,
so I'm,
I'm looking at this bug and basically there's a part of the,
um,
the dev tool
that
needs to sort of go up the hierarchy and,
and find out who's equipping
the dev tool to,
to move a gizmo.
And because the tool tip simulator bypasses the equipping system,
that's why you get the,
the stack trace there.
Um,
so the stack trace is basically I've lost the tab now cos
I've got so many concert and Adele lyrics open and everything,
um.
Let me find this again.
I'm sorry that these are so chaotic.
Like I don't know if it's like OK or like OK,
you know,
like,
OK,
here we go,
um,
thank you.
Yeah,
so,
um,
shifty posted a,
uh,
stack trace
and you'll see it says,
um,
dev tool on primary hold.
So if we go to the code base.
Can you see this?
This is on primary hold,
and you'll see that it does all of this stuff,
but one of the things that it does here is it goes through the activehandler.
laser.
And if we look at active handler,
you'll see active handler
goes to the equip link,
and the equip link
goes to the underscore equip link,
which is like basically
who
it's like,
it's,
it's only specified when a tool is equipped.
Uh,
you can see here it's like,
hey,
we're updating the equip link.
So because there is no equip link there,
it's,
um,
having a,
a problem.
If
it looks like this thing here,
override active handler,
is what we should be using there somehow,
like maybe the tooltip simulators,
whatever,
that maybe the tooltip SIM needs to interface with this override active handler,
but I'd have to look into more into what override active.
Handler does,
um,
and,
and stuff like that.
That's what's going on though.
It can't,
it can't be fixed instantly.
Whilst I've got the code base open,
anyone like,
name a random component,
let's go on a journey.
Go on.
First component in chat,
we're gonna go there live.
Oh,
component clone tool,
um,
we'll do all three,
it's fine.
Uh.
So the um
most important part of the component attached is right here,
where it just basically goes like,
yo,
I'm gonna duplicate the component and
put them on the slot.
There you go,
that's,
that's that's component clone.
Yosh wants to go to Val field,
sure.
There you go.
This is why um
this by the way,
is why I also don't,
I don't like the existing licence component.
So
if you were to take
um
value field here
uh and compare it
to licence,
it's like,
it's identical.
And so this is why like I don't recommend using this because there is no logic,
like,
like look,
no references,
and
no references.
So like just,
just use a value field
of type string and put your credits in there.
Let's see what else we got.
Oh,
someone else for grab a ball,
that's not a good one to read.
It's,
it's like,
it's huge.
Oh,
you can see,
I,
I really like this sort of programming by the way,
um,
anyone who is uh
unaware,
this is like,
um,
bail early,
exit early,
whatever you wanna call it,
it's basically like,
can we grab this,
this,
can this grab be grabbed by this,
this grabber?
See the terminology is always funny,
and it's like,
is removed,
return false.
It means like past here,
don't need to worry.
He isn't removed.
Don't need to worry,
it is enabled,
right?
It removes cognitive load as I scroll through the
code because I don't need to look at it.
It's the only sane way to do it.
Um,
if you do it the other way,
like this would be horrific,
right?
You could,
you could nest this and you could say,
um.
If it's removed
and
um enabled
and is gra you know like you could just like
nest,
it would be it would be crazy.
Uh,
so that's grabable for you,
uh,
someone wants to go to flatt too,
the old one or the new one?
Cos like flat lit tune material,
um,
actually all materials are just,
um,
they're just a bunch of syncs.
Um,
so they're just a bunch of syncs,
um,
of various types,
right,
and whenever you see sync it's like it will
take that value and sync it across,
um,
uh,
across everyone in the session.
That's what what sync does,
um,
and
because it's not actually a shader,
it's gonna just,
uh,
or this,
by the way,
will upgrade it to Zixies for you.
Um,
so if you head over to Zixies,
it'll show you more stuff.
But all it basically does is it just updates shaded keywords
and,
uh,
you can see this,
when you start reading this,
like looking at this code,
you can see why we don't allow custom shaders yet,
right,
cos we have to
manually type all of these shaded keywords ourselves,
depending what's going on.
Like these are commented out and I don't know why,
but
you know,
this,
this doesn't scale to
to custom shaders.
And there's no actual shaded code here,
the shaded code is elsewhere.
Uh,
what this basically does is it goes to the shaded keywords,
updates them,
and then it goes through the pipeline and all sorts.
No wonder why those don't work.
Yeah,
there's a reason why these are commented out,
and we would usually put the reason here,
like it would maybe say like these options are stinky.
Um,
I'm right,
and,
and that gives me some information about like where I
can go to find out why those are there.
If they're never going to work though,
I would,
I would rather that they got deleted,
um,
or maybe a,
a note left here like
noticing missing keywords,
see GitHub.com/chee123,
right?
And it would,
it would give you somewhere to go to figure out
what's what what's going on or what's wrong there.
Let's see,
do we have any other components?
Um,
no,
um,
actually,
um.
Uh,
Ny wants to,
whatever is being used to hold input values for protoflux nodes.
Sure,
we can do that.
Uh,
input T.
So that's an input
which has a source,
which is an I output,
I output to go to implantation.
Val source.
I'll probably do right.
Object value source,
it's just,
it's a source
of type global ref,
and Global ref is of type global ref,
which is of type IGlobal ref
uh no more components we've,
we've,
we've mean you have to have to wait,
get your,
get your fingers on the buzzer.
Uh,
cause we've got other questions.
Um,
yeah,
we're done with the old one,
the old one,
like,
uh,
like we will literally be removing the old shader file at some point,
so just use Xixies if you want to use the old one,
just,
just don't.
Um,
Erin says the
uh community health board,
let me navigate to that.
I need to update all of these descriptions cos some are out of date.
I did remove a couple um
I did remove a couple that were invalid,
but uh you're looking at the keyboard ones,
let's take a look.
Uh,
what's the notes say?
Uh,
yeah,
so what that's basically looking for is
some,
um,
database system,
library,
structure,
like maybe there's an API or something
that
provides information about keyboard layouts that we can use.
Like there might be something in the operating system libraries for that,
but
I don't know.
Like what we want to do.
If we want to come up with a piece of code that
will
um
given that information,
right,
you put in
keyboard layout Dvora,
right?
It will
interrogate some API,
some system,
some library,
some operating system thing,
and it'll figure out,
OK,
Dvora,
Dvora looks like this.
Here is the code to generate a keyboard,
put Dvora into that code to generate a keyboard and you get a Dvorak keyboard.
And then we'll be able to say like,
hey,
you don't want Dvorak,
you want a Japanese keyboard,
boom,
generate a Japanese keyboard.
Uh,
what Jay said about allowing other people to make their own keyboards,
absolutely,
um,
and you can do that,
like if you wanted an Azerti or a Dvorak,
you could totally do that.
Um,
I know from experience that making custom keyboards sucks though,
cos it's basically a.
Uh,
multidimensional array of UIX elements that you have to like manage and control.
It'd be a lot easier if like say you could throw a JSON file at
something and then it would output a keyboard or something like that.
That's what we're trying to do with that issue.
OK,
so that's done.
Uh,
Mr.
Thomas says,
is it true that 62 material is CPU computed and not GPU computed?
Uh,
askings at their office hours,
it's like I would have to go into the shade.
Land and I don't,
I don't understand shaders.
Uh,
go look up like a,
just,
there's like a course or a video,
like,
go like look at shaders.
In fact,
actually a YouTube,
uh,
that I watch,
uh,
just try to learn it and they've got like the right energy,
I think for a lot of you.
So this might be an interesting video.
I haven't watched it.
I,
I have watched other videos by that creator.
So,
um.
Yeah,
maybe that's cool.
Whilst you're at it,
uh,
you might want to give this one a watch as well,
um,
because he talks about and reads through,
um,
this blog post by a software engineer in prison,
which I didn't realise was a thing,
but,
um,
they're in an appropriate state that can do it,
so they're actually employed as a software engineer
and they have full access to like GitHub,
Visual Studio and everything like that,
but they're still behind bars,
and I'm just like,
wow.
Like if I do ever end up in prison,
I'm doing what they do.
Uh,
Jay said,
you said something about being assigned to issues,
what's the place to do that?
Yeah,
go to the issue and comment on it and say,
I'd like to give this a shot,
could you assign it to me,
please?
And then I'll go,
yes,
and I'll assign it to you.
Um,
the reason why,
uh,
it's important is because the,
the biggest thing I have issues with in open source management,
particularly if I own the library,
which I like pseudo do because I work for the company,
is that I don't want
people to feel like their work isn't valued.
And so like if 3 people open up the same PR for the same thing at the same time,
I am forced to basically choose one of those 3 PRs as the chosen one and merge that,
right?
Let's say PR 1 adds feature A,
PR2 adds feature A,
PR3 adds feature A,
and they all do it like slightly differently.
I then have to choose one and
like
two people have got to feel bad about that,
no matter what I do.
Um,
so that's why like,
if it's like a really big thing and you want to help out,
comment on the issue and say I'd like to.
Take a scratch at this.
If we don't respond because we're busy or we don't assign it to you literally,
it means that the next person through who looks at that issue can see like,
0,
J4 said they wanted to take a look.
Um,
that was 6 months ago.
I'm gonna go message J4 and see what the holdup is,
or like,
if they need help,
or are they still looking at it?
Uh,
for an added context that
might help you,
uh,
understand why I recommend that particular content creator,
by the way.
Um,
they used to be addicted to meth,
so they are recovered sober now,
and
they used to work at Netflix,
and now they don't,
but the way that they deal with like engineering
is like
it sucks,
but we can make it better.
Um,
and so I,
I just,
I like their channel for it.
There's like a whole lot of things like coming together that make it good.
As a funny thing as well,
I don't know if in that video they're doing it,
but recently they switched their office chair to be a yoga ball,
and sometimes they'll get excited and bounce on it and it's funny,
and a couple of times they've fallen off of it.
So,
so there you go.
Um,
Nuki says,
how does Protofox know what to name a display
for what is basically a bunch of Protofox-related components?
Um,
I'm gonna generalise this,
so don't like,
quote me literally,
technically,
but this is still approximately correct.
Um,
if you take a look at,
say,
like a JSON file,
and then Imagine rendering that using
a website or something like that.
It's,
it's pretty much the same thing,
right?
We,
we hand resonate a list of notes and it isn't JSON,
but like it effectively it is,
right?
Um,
it's like an array of JSON objects and it goes through all of them and it says like,
all right,
so there's a plus node
and it's linked to this other plus node.
And that linkage um
under the hood isn't like a ribbon,
right?
It's not literally a ribbon,
it's like a programming reference.
But
when it runs through that generation code,
it says like,
oh,
it's linked.
I can see that there's a reference here.
So I will draw a ribbon,
and then it draws the visual representation of it.
Like it's,
it's,
it's theoretically possible
that you could write a different renderer for Protoflux.
So Protoflux doesn't have to run inside resinate.
So you could write a um
like a HTML renderer for Protoflux nodes,
and then you could edit Protoflux in HTML or or or stuff like that.
Like you could theoretically do all of that stuff,
right?
It just.
Takes a list of nodes
that are basically C classes and
generates resonate UI for them.
There's a lot of code,
uh,
that does what,
um,
what it's called in in Cland in other languages.
They might call it that,
I don't know,
but
you see it a lot more in,
in,
in
C than I do see it in other languages,
but it's called reflection.
And so reflection basically says
rather than being established with like the code that's in front of me,
what if I could look at like the code itself?
What if I can look at the data types?
So reflection allows you to sort of look through
a class and look at all of its properties,
look through the types on those properties and figure out what they are,
what they're named,
and what they're called.
So we do a lot of reflection to
Um,
make everything dynamic.
In fact,
if reflection as a concept didn't exist,
most of,
most of the internet stuff wouldn't exist.
Lots of,
of other things use reflection,
but resinite wouldn't be as dynamic if reflection wasn't possible.
It's all about like estab cos like when
you learn programming or when you learn computers,
uh,
particularly if you're learning them at the base level,
you're like,
computers are programmed to do one thing,
you know,
you write a programme,
it does that one thing,
it goes.
Through those steps and it does them every single time.
But if that isn't true when you look at resin,
because like you're smushing together bits of code
that do do that,
right?
So like the add node will always add two numbers together,
but you're passing it
not like a static number,
you're passing it like a
complicated
mathematical equation and then giving it that.
But,
but there we go.
We are over time,
so I'm gonna go ahead and leave off here.
Um,
if you have any further questions,
do,
oh,
your question got buried,
I'm so sorry,
you're right,
no,
you're right.
If your question gets buried,
yell at me,
it is very important that you're heard,
uh,
heard.
Uh,
so let me scroll up.
I'm trying to find it.
I'm sorry.
Uh,
oh,
got it.
Has any thinking going into mobile asset variant generation?
Uh,
I think we are generating in some cases,
um,
mobile assets.
It's a little bit difficult to
figure out
exactly like if they're mobile or not,
because right now it wouldn't be on the level that is like,
it's a mobile one or not a mobile one,
it's more detailed than that,
right,
so.
Um,
let me go to compressing.net for a second.
Uh,
Yeah,
here it is.
So these are all the formats that Compressorator supports,
and what you could probably do is draw circles around some
of those formats being better or more suited for mobile environments.
I don't know which ones of those are,
but that's the sort of thing that we'll be able to make the determination of,
and that's one of the reasons why the asset variant system exists.
So,
um,
for example,
here,
if you open up that,
that link here.
Uh,
you'll see RGBA as common.
That basically means red stored first,
then green,
then blue,
then alpha.
But there's also ARGB,
which is where
alpha's stored first.
Uh,
and then there's various other things like that,
and you can kind of read them a little bit.
Sometimes they get a little bit more confusing,
like the BC stuff,
cause those are block compressed,
or the
80s or the DX's,
etc.
All of these formats are.
Mix and match,
you know,
what's there,
but some of those formats,
and again,
you'd have to draw a circle around those,
are gonna be more efficient or more likely to succeed for
um
the mobile platform.
And so what we would need to do is go through those and be like,
all right,
if Resonate's running on an Android device,
a quest or whatever,
then we want to use the
ET2_RGBA1 variant.
And then we would programme that in to say like,
hey,
if you're the Android version,
fetch just this variant of the cute cat picture,
rather than the,
the other variant.
And that's like how we would do it.
There might be other variants that we need
to,
to work on,
on,
on mobile devices that will have to be sort of like when we look at the
The rendering path of those devices,
we might need different stuff for the memory path,
memory constraints,
stuff like that.
Um,
I think that's it,
so I'm gonna go ahead and leave off here.
And if you've got any other questions,
you know where to find me.
Um,
keep an eye on the compressor air stuff.
There's gonna be a lot of activity now that we've got that moving,
and I will speak to you soon.
Bye bye.