Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Speaker 1 (00:06):
Hello, welcome to another episode of Elextra Mix. Today I'm
the only one on the panel and this is Alan
Whyma and today we have Tess, the creator of wasam
X or washim ex. We're still debating what they call
that one tesse. How are you?
Speaker 2 (00:19):
I'm good. Let's say it wasn't Max. I don't say
this out allowed to often, so that's settled for wasn't x.
Speaker 1 (00:25):
Yeah, it's kind of I often hear that from people
just adding the ex either to the beginning or to
the end. I talked to the creator of XCODR. I
think you just called the CLDR on a lot of things,
but of course you said you have to add the
ex to it or else. It's not an official Elextra library,
you know, just the way the way it's done.
Speaker 2 (00:41):
It's always a balance, right. You have to be found
so you can call it wasn't. But then a few
college just wasn't as a library on XPM. It's easy
to find, but it's confuses everybody. And you want to
say it's for alex yas represent before Alexia. So that's
I think that's how it works.
Speaker 1 (00:54):
Well, I mean, there's that sentence alone is not super clear,
at least to me. But we're going to get into
into that. I think first let's kind of talk a
little bit about you know, who are you, right, why?
Why did you what brought you from your beginnings all
the way to where you are now? Or at least
we started working on this MX. Yeah, good, good question.
So you know, I started as like you know, in university,
(01:16):
going straight for computer science degrees, and actually I had
to earn some money to pay the rent, so I
started developing a Ruby and Rails at open source acually
a project management system, and to earn some money while studying,
and that helped me, right, I had the choice between
academic career professional programmer, and then helped me make the
choice for the non academic being a programmer.
Speaker 2 (01:35):
That was good. Switched over to a software development agency
bit quotem button based and started as a back end
developer Ruby and Rails. We switched to ALIXI Phoenix like
back before Phoenix context, so I vividly remember the time,
and we had to find context names for where our
users struck goes like that. That was fun.
Speaker 1 (01:53):
It was like one of the first I would say,
because we don't have that many like not full power, boar,
what's the word? It's like a drama sessions. That's what
I kind of took from that. I mean it was
many years ago. I remember that because I also was
like you, we started before context, and was like, what's
the context and why do we need this stuff? And
what's the point? And it was quite a lot of
complaints if I remember.
Speaker 2 (02:12):
Yeah, I don't see it as drama as too much,
but as confusion, right, and he was just now it's new. Sorry,
let me stop you here. If you compare it to
the russ drama, which we're both probably aware of, it's nothing,
but for a community that's quite calm, it was something.
And I'm not trying to say something bad about that.
It's just such an abrupt change, I think for most people,
(02:32):
because we were so used to things being kind of
more open, in my opinion, but then this became it's like, wait,
why are we doing this?
Speaker 1 (02:39):
What is this? And then there are lots of questions
about how to structure the code, like you said, what's
a context? All these kind of things. Sorry, I'm starting
to take over show from you, but I just remember
that one, and I don't want to gloss over that
because It's one of the few times where things were
just such suddenly change.
Speaker 2 (02:52):
It was definitely work to do right, and you know,
I was in the software development interesting, we had tons
of customers, right, and good luck convincing your stimus that
you have to spend upgrading Phoenix inventing contact. I mean,
it wasn't that much, right, but still it's also a
bit hard to communicate. On the other hand, it's a change.
You get a new chance to express what you really
want with U schemas right and how to structure them.
(03:14):
So if you see it dead way, it gives you
another tool to structure your code problem. So that's something.
Speaker 1 (03:19):
Yeah, And if you follow the I believe if you
follow the book by I can my mind has coming
blank today. It's a long day at work. If you
follow there's a book about structuring your code for a
lecture came up quite recently from pragmatic programmers. I have
his space in my mind, but the name is that
coming to me? Oh, Bruce, he has a book and
I think you structure, but I'm better at those two.
Speaker 2 (03:38):
But I know the book. I know what you talk about.
Speaker 1 (03:40):
Yes, yeah, it's like I forgot the acronym or something
like something with angry bees. I forget now, But it's
funny because they're supposed to happy term remember, but I
forget it now. But in any case, I do follow
his structure for the most part, especially if I'm working
with just normal Alextra code, which I was doing recently.
Usually I'm spending most of my time in Phoenix Lang,
where you have Acto and everything else to work with.
But sorry, I'm STI techn ever your episode continue what
(04:02):
You're right, it's good, it's good.
Speaker 2 (04:04):
That's what we do. We talk about Alexia, yes, and
I think it helps to get our hands held a
bit right if we have that support, like how to name,
how to structure, Like it's the same thing with like
I want to create something creative with my Alexia app,
but where do I put the file if it doesn't
follow the pattern. There's always these kinds of things that
cause a bit of trouble. And that's where I wouldn't
say it's even drama. It's it's you have to think
(04:25):
about it. You have to have a plan, and sometimes
you need a guide and then it's easier. Yeah, anyhow,
let's bring back you know back then, you know it
was software development, agency times. But I was there for
seven years. I guess I needed a change in scenery.
I you know, my wife was pregnant, I was about
to get a kid. There was this transition in life
and I needed a transition at the job too. So
I was looking for a you know, more product facing
(04:47):
company and still wanted to stay with Alexi because that
was arsome awesome. And at the software development agency at
bit Crowd, I was transitioning from back and to pull
stick to management, to talk into customers vironments, all the
managery stuff, right, and I needed to get my hands
dirty again. So that was the change. I went to
remote dot com. They employ like a lot, a lot
(05:09):
of back end Alexia. It's one of the biggest Elexi
code basiness I know of, right, So we have a
lot of backend developers, all ALEXIR, all the big Phoenix
up and then I could I should probably talk about
what remote is even because remote com is a pretty
generic name. We are a global HR software solution. So
if you want to hire someone, fire someone, promote, get
(05:29):
their sick days, all the HR management. You know that
every company needs speak and small. That's what we do,
but a bit more modern, right, there's these old game
players and we like a modern take on it. And
there's like a bit of a trick to it, which
is it doesn't even matter if you're like a proper employee,
employed or a contractor. You can have them in the
same interface. That's pretty good. And the next trick is
(05:50):
that you can like we are also an employer of record.
That means, let's say you have a company, but you
want to get the best Elixir coder, but they sit
in a different country.
Speaker 1 (06:00):
Right.
Speaker 2 (06:00):
Either you're lucky and you have like your company has
a shop there and you can employ them there, or
you they have to make them move right in your country.
But then maybe they don't want to move, maybe there's
a visa restriction like stuff like that. You don't want
to have that troublem and still employ the best people,
So you can go through remote dot com. You can
employ them through us. We will like technically employ them,
but it's your employee, your company's employee, and it's still
(06:21):
in the same matterface. It's it's your remote employee. That's
where then income's from remote come. And you know, there's
this one thing which is if your employee is in
a different country, you have to send the money over, right,
Like we invoice you in your country, but they are
paid in their country. And that's my team, like the
team that sends the money across the globe of not
not just you employee, but like all the thousands of
employees all across the globe in all the countries. That's
(06:43):
the team. And I became team leader of that team,
proud lead of a couple talented developers. Yeah, and that's
what I do for today.
Speaker 1 (06:50):
Now there's why are some MacX relate to this? This
is an outside Oh.
Speaker 2 (06:53):
Yeah, now I talked a bunch, so wasn't Max is
not specifically to my team. That's more invoices and you know,
comply and texts this sort of thing. But you can
easily imagine web assembly being a use for such a project,
for any software service. And let's be a bit more
general and just away from my day job. So maybe
should we say what websentily is because it's supposed to
be about WASSNX.
Speaker 1 (07:13):
Right, Oh, you know, you know you're you're totally right,
So that's kind of back up a bit. That's a
good point. So we have wire them. Do you even
know why some stands for oh yeah, web assembly. Sorry
I thought I think it's an act first, that's sally acronym.
But yeah, sorry, maybe you're the expert compared to me,
so you go ahead, he yes, So yeah, websmily. Actually
it's two things, right. It's like one part, it's a
(07:35):
binary format that you can compile your computer programs libraries in.
So take you have a C library or Rust or whatever,
elexy even, and you can can compile that down to
repressently and then you can use that's the second part.
You can use thatsenty block to then run it in
another environment, in another place, so you can use that
websentitley block, run it in your ELIXI back and in
(07:56):
your I don't know what nerves project, in your Rust server,
the cloud edge, or in your browser. I think every
browser now comes with a web persentary one time. So
that's the flexibility of websentry. You can take it from
lots of languages and run it execute the program library
in a bunch of different environments and languages. So that
was what represently is. And with that, like with that
flexibility comes a bunch of additional things like how do
(08:18):
you encode things? How do you interface with like how
do you pass down a screen or you struct or
whatever you have down to represently land. It's all running
in a sundbox so to be secure. So let's say
you build a plugin system with webresently, you want to
want to execute user provided plugins code and you don't
want this user provided plug and in websent d to
reach all of your data and your feelings back and right.
(08:39):
So that's all running in a sandbox. It only accesses
what you as the host give into it into the websently,
so it's it's quite secure there, and it's usually faster
than the native language, like probably faster than alixy, although
you have to trust me because they didn't have a
bench out there right now. Yeah, I mean, well it's
pretty fast, but there's it's still not necessarily native, right
because you're still like a VM in between.
Speaker 2 (09:01):
It's not native, that's that's correct. So that presently basically
the they invented an like an imaginary computer, and that's
the assembly code for that imaginary computer, and then every
run time just interprets as this computer. But some of
them compile with a JIT compiled this down to native code, right,
Like most of them actually, I think so. It's pretty
comparable to like the JVM, for example, in that sense
(09:23):
that you reach native speeds near na native speeds, and
I think oftentimes people use it in bad pages JavaScript
environments to be even faster than the native shaperscript. I
mean native in a sense of in the browser native,
not native code native.
Speaker 1 (09:36):
Well, I don't think you imagined this, but this kind
of product was, I don't how would you say that? Well,
there was something called ASM before WASM, if I remember correctly,
is adam JS.
Speaker 2 (09:46):
Oh yeahs smjsas MGS. I think it was right, Yeah,
that's where the idea started. Or but then I'm not
a historian. I don't know the history too much. I think, yeah,
someone really clever came up with, like you can compile
any program into JavaScript, and not just JavaScript that humans
can read, but you know, acting as like kind of
an ASM assembly JavaScript. It's like a bunch of things
(10:08):
somebody can read, but it's super fast to execute. And
suddenly you had a way I don't know. Let's say
you have a weird image format. You know, your iPhone,
if you have an iPhone, probably saves images in this
hype format that nobody can read. It's not a you know,
not a great and it's not a P ANDG or something,
but that code that converts images, maybe that's the c
library or rust library. And now he suddenly had a
way to compile this tough JavaScript like this assembly jobscript
(10:30):
or even web posently later, right, and you can run
this library to convert images or what have you anywhere.
Suddenly that it gives you a bunch of reader And
that's really the power of episently right, if you can
take a library or a program from like one environment
and run it and use it in your app.
Speaker 1 (10:45):
Well, that's also like the benefit. There's a couple of
things my understanding about where then they're trying to I
guess you can say solve. So one is about portability, right,
is that you don't need to think about the platform
because theoretically, like it can run on web or even
on your machine, as you kind of mentioned. That's one
thing that I think that they wanted to solve or
(11:05):
that they're looking to do with this. It's kind of
like usability, right, yeah, reasonability. And then the other one
is about safety, right, so that you're able to say, okay,
I'll give you access to a but not the b
so you can say, okay, you can you can go
to the web, but you like you can call outside
the web, but you can touch my hard drive stuff
like that.
Speaker 2 (11:24):
Yes, I think the defense The term is object capability model.
That's the academic you know term to express this, which
basically means in you know, normal human words, that whatever
we presently can use is only the stuff that you
give it. So if I give it a user struck,
that's what it can use. But it cannot access all
the other users in your database because it doesn't have
a handle to your database. You just don't give it
(11:47):
ever the handle to your database, except if you want
to give the handle to your database. Right then of
course it has no emission to use that. So it's
really up to you to the host program to think
about what is being given to the representd binary. And
that's where security comes and goes. Like if you give
everything to it, if you want to, you can, then
the security goes out the window, right because you can
do everything, but it can be really deliberate if you
(12:09):
want to to only provide the things that you really
wanted to have. That's where the pluck and system comes in. Right,
If I have myselfwa as a service, and I want
my users to give, you know, write plug ins for
my service. I only give it the things that the
plug and should have. Nothing else is accessible.
Speaker 1 (12:21):
Yeah, well, I mean. But the other cool thing too
is that's also interesting is usually for these kinds of
things that are cross platform, you know, like erlaining and Java,
you have to write in a specific language, right. But
the other thing with wism is that you can use
nearly any kind of language that you want, which is
really exciting because you can literally write with Python or
(12:43):
JavaScript or any of these other kinds of languages or
even whatever, as long as you can convert that into Watson, right,
which is quite exciting.
Speaker 2 (12:51):
Actually, at my day job, I have an experiment running.
It's not officially yet, so here here here the first time,
if you might Colique, I actually have an image conversion
service that for example, it takes like all weird image formats.
It's computing them, computing previous of those in websomentary. It's fast,
it's secure, we don't have to care if it's like
some unsafe thing that the user gives us as an image,
(13:12):
like some exploit, some hacker doing stuff. It's running in websentity.
It's secure, it's good, it's fast. So yeah, kind of good,
you say, is this but then you know, there comes
the part where you want to run this websomity in
all kinds of environments, not only US, not only jobascot,
not only the browser, about an alexir and this is
then you have to have a websentary run time that
embeds into your Alexi code. And this is what was
an X is really about. So we talk all about
(13:33):
websmity to you know, sell the benefits, But wasn't X
the thing that I wildn't write. That's the Elexi part
that when you have a websomity binary and you want
to run it and interface with it from Alexia.
Speaker 1 (13:44):
Well, let's kind of talk more about that. Well, actually, sorry,
before we talk about that. We did have a small discussion,
but we can be even higher level than that, because
I don't want to get into you know, this one's
better than that one. So you talk about watsom in
terms of it's kind of like this run time, right,
but if you try to get into wat them, there's
different kinds of run times that run That was and
(14:06):
that part is kind of confusing to me. But at
the same time, it's also not right, like we have
the beam, but then again, like you can think about
if we compile our earline code, but then we have
different versions of the beam that we could run on. Okay,
this is not that hard to think about. It's just
a little bit strange, you know. Yes, it's a little
bit confusing. How does that? Can you explain more about
why that is? Why don't we just have this a
single runtime? Sorry, yeah, go ahead, No.
Speaker 2 (14:29):
It's fine. I think your example with the beam is
a quite good one. Like, imagine we have the earl
and runtime to handle your beam file. It's right, But
then comes a company that maybe invents something on top
that makes it twice as fast, three times as fast,
and then maybe they have a good point to sell
that right, because it's only fair. It's running the same
beam file, it's just twice as fast, and maybe some
people want to pay for it, and that's the business.
(14:50):
So you can imagine that. Except with websent, we represent
is also your binary format. It's an open standard. Everybody,
you me, everybody can implement that format and build an engine.
It's you know, some people have fun doing that, and
maybe you can make a business out of it. If
you know, you can invent some things on top, maybe
not only being faster, like I think inventing a u
JIT to be even more performed, maybe things like interfacing
(15:13):
with representitly in creative ways, adding a GPU to it,
and maybe enable the graphics landscape, like all things or
features you can imagine. And that's where the variat variety
comes from. Also the places where you run representitly. Is
it the cloud, is it edge computing? Is it embedded
in your system somewhere? That's you know, all what companies
start to specialize in.
Speaker 1 (15:31):
Okay, that makes a little bit more sense. Just that
was always confusing for me for a long time, like
when in a minute, why is it I have this
run time and this run time? I guess it's kind
of like darker. We have like a consistent darker file,
but then you can run them on pot man or
darker and there could be another kind of run time.
All right. Actually, for some reason, your thing made much
more sense than all the ethodic thinking I've been doing
for the past couple of weeks about this stuff. Yeah, yeah, okay,
(15:53):
that makes sense. So then you have this kind of
trade off like hm, I want to follow this one
or this one and then you can kind of make
your choice. Now coming back to your library, right, how
does it work? I mean, are you using a special
run time or is there you said there's some kind
of open standard like meaning backed run time form. Is
that that's what you're working with?
Speaker 2 (16:13):
Yes, exactly. So what we actually do is we we
don't write or run racks with present in alex hear.
We actually use Rust on Rustler and Rust to interface
with wasn't Time. That's one of those engines that runs
websent and wasn't Max. Like the thing I write is
basically the glue code to make alex heir and the
beam with all its you know, special things like gen
(16:35):
service and processes and how memory works and interface that
with Rust and the sea level of thinking like the
memory layout that you know have you have in Rust
and in the Sea land of things and that's the
group that I have. But yeah, that wasn't time in
basically written in Rust. That's the thing that we use underhood.
And it's an open source engine, so not a I mean,
(16:55):
there's companies backing it, but the whole thing is open source.
They have that they are in all the stuff, not committees,
and that's where I saw the most you know, progressant
and future of web assembly. But other people may have
different opinions that I see that.
Speaker 1 (17:08):
Yeah, I see it from me on on here, I
think I wuck with them before interesting, I was just
looking at the bike Coode Alliance, which is which is
interesting too. Okay, thanks a very darker.
Speaker 2 (17:16):
It's the name I should have plopped the other bikout
alliance that's there behind that.
Speaker 1 (17:19):
Yeah. No, it's it's good to have some kind of consistency.
I'm not against specific runtimes having some special features. It's
just as somebody who wants to get into this, you
want to kind of understand, like, wait a minute, which
one should I go to? I mean, so both of
us have some experience with RUST as I do the
RUSS podcast. You know, it's kind of like which run time?
So in RUSS, just to give a background, it's not
(17:39):
like the Beam where we already have this run time
where it does all the multi multi ACYNC stuff. In RUSH,
you have to choose your a sync run time, which
if you don't know what you're doing, it's basically it's confusing.
Speaker 2 (17:51):
Right.
Speaker 1 (17:51):
There's like a sink STD I think is its own
run time. I forget now I think it is, isn't it?
Speaker 2 (17:56):
I have no idea whatsoever. I know that I looked
into Tokyo, but this whole acinc rust game that's confusing
to me. And actually that relates to Moss, you know,
I wanted to like today right now, wasn't it's interfacing
with rust, but it's like standard plane RUSS. It's not
acinc but it wasn't time. The underlying engine has some
really cool features. If you go acing, so you can
(18:16):
start and stop and like war wasn't modules any time,
Like I mentionine, you run multiple at once, not just
one representing module, but many of them at the same time.
And if you're asining, you can like run them in
separate basically threads under the hood, right and separate processes
and stuff, and acing does all that for you. You
can start stop them. It's pretty great. And today I
have to build this on my own. I have my
own thread spawning because you know, when you go into
(18:39):
a NIFT from Aleixia to put it down to rust,
like that's a NIF, the beam actually wants your NIF
to respond almost immediately, like within a couple of minutes
seconds to that core, because the beam needs to schedule
your ELIXI process, right, And basically that if if like
a represently call takes a while, like if your represent
the program just takes I don't know, a minute to
compute whatever it needs to compute. That's not immediate return.
(19:00):
So I have to spawn a thread, set that to
the side, let it compute, but return to the beam immediately,
wait for the response, send us back to the gen
server as a message. It makes all the things a
bit more complex, right, so I'm actually actively looking that's
one of my open proly trusts right now where try
to convert this to acincrust and I choose Tokyo, But really,
from my perspective, that whole acin crust thing, maybe I
(19:21):
need to ask the one who knows more is a
bit confusing, like which engine to choose? What would be better?
But I think you can't go wrong with Tokyo, right
they have all the kinds of engines you actually want
to have.
Speaker 1 (19:31):
But that's kind of my point is that once you
get more into rust, it's basically like I would shorten
the whole thing down to choose Tokyo unless you have
a good reason not to. And one of the reasons
that sticks out is like if you're doing something that
doesn't have threading, like or some specific like IoT hardware,
then there's like Minia or something else. But basically, if
you choose Tokyo, you're pretty much gonna probably get exactly
(19:53):
what you want. It does a lot of stuff for
you in Tokyo. I'm not sure how much in about Tokyo,
but basically Tokyo is like the Beam in terms of
it starts up a scheduler for every single thread and
you can also control how many you want when you
can figure it. And yeah, it's it's really it's really
quite an interesting thing. It's it's interesting to see that
this Tokyo run time actually does act like the Beam,
(20:14):
you know, which is just kind of mind blowing.
Speaker 2 (20:16):
Yes, yes, it's it's pretty great. And that's why it
kind of fits so nicely with my approach of having
gen service and all that. I could basically mirror many
of the things and between Rust and Alexia, and that
would be would be a good architecture. It makes things
simply easier to maintain, and that's you know, what I
want to I don't want to spend time and waste
time on programming overhead. I want to spend the time
on the fun features.
Speaker 1 (20:35):
Well, so now that you mentioned something and I was
a little bit curious about how you do it, So
are you when you're working with this net right? I
worked once with Rustler, and I basically just created a function,
just made a function call mm hm, and then I
just put it in a dirty schedule because then I
don't need to worry about you know, yielding, et cetera. Yes, now,
how so with yours, are you actually sending a message
(20:57):
in between from the ROSCO to clientition messages from the
ross code to the electri code.
Speaker 2 (21:03):
Yes, that's and that's one of the hard parts. Okay,
let me try to get this on a podcast without
any diagrams. And you know, so there's one cool thing
in websently, which is webs smily code can actually say wait,
what I need to run like a function from the host.
So you know, you're your Elexi program and want to
run some websently, but they have a message like I
don't know what fetch user, but fetching the user that's
(21:25):
Elexi code again, So we persently can call back into
Alexia and then fetch the user. Alexa gives the user
tossemily back and then represently continues. So there's this whole
message passing like calling methods back and forth between ALEXIIR
and Rust and represently and to make this happen, I
you know, I'm sitting in a NYF in a Rust environment.
In my code were program in, and there is no way,
(21:46):
at least that I know of where you can just
call an alexia or like airline function from a NTH.
You cannot just say execute function and then you get
the result, because that's not how the beam works. The
beam wants a message to be sent to a process, right,
So all the things I can do from Rust level
is I want to send this gen server a message
asking nicely, can you give me the result of this
(22:08):
function called then web at least they can come and
do that and give me the results sult and then
I can continue on Rust and you know, proceed. So
there's there is I have to have gen service. I
have to like send messages in between from Rust and
synchronize that. So I have like nutrixis and all these
like fancy things to make my threats weight on the
results from alex inland.
Speaker 1 (22:27):
Okay, I'm trying to follow in my In my mind,
the first question I have is the calling the host code.
How is that feature built into waresom or what is
that exactly?
Speaker 2 (22:42):
Calling into host code? That's a built in feature, so
we call that or like Lawson calls that imported function.
So a web as Hamily module basically exports functions that
you can call like I don't know, convert the image,
calculate fibonacci, whatever. Then Alista can call those exported functions
and get to salt. But there's also imported functions. So
from the point of websent ly, they need functions to
(23:05):
be imported, like coming from the host. So in Alexia,
I need to implement those functions and give them to
websentit to call to function. Imagine debugging, right, if websombly
wants to print out the debug spring, it cannot. It
doesn't have a screen or like printer attached or anything.
But you can import or give it a function that's
you know, your io oputs or something where you can
then forward it to the console or whatever you want.
(23:27):
So websentity can import functions from the host, for debugging,
for accessing file systems, like for all kinds of things.
You can implement a whole computer, like the whole posing
system because that VAZ that's as standard that basically as
a computer like file system, memory management or all these
things arguments, parameters, environments.
Speaker 1 (23:44):
Okay, so this part makes sense. So I'm aware of that.
You can write the code structure and you have this
WASM binary. But the part that doesn't make sense to
me is how does the rust part come in. It's
not part of the WASM build. Is that just the
way that you talk with the run time or where
does the rush russ park come in at?
Speaker 2 (24:03):
Okay, so when this weapsent, the binary wants to run
some Alexi code to you know, run this function. Wasn't
time the thing that the engine basically asked. My code
asks me like, hey, can you give me like the
result of this function? And I have to then go
to Alexi land and say, hey, alexir beam run time.
I need to run this function, which is the thing
I cannot do. The beam doesn't allow and live to
(24:25):
just run a function. There is no such a thing. Instead,
we send a message to a process and wait for
the response and hope and you know across our fingers
that a response comes because if not here, I don't know,
then yeah, some aerostates sometime ort the usual Okay, gotcha,
And actually I think that's for the show notes. I
have this whole thing explained in a GitHub issue where
someone extically asked the same question. Maybe you can put
(24:47):
this in a show notes. I have, Like, there's the
fancy diagram that I, you know, want to paint in
this podcast with words, but maybe having is having it
as an actual diagram helps.
Speaker 1 (24:56):
Yeah, definitely, because it it's just there's a lot of
things happen, and so that's why it gets you know,
there's a lot of things. And also this is still
I mean, WEASM has been around for quite some time,
but it's still quite new to a lot of people
because it is also confusing too because it's called WASM,
which is short for web assembly. So you're thinking, okay,
it must be in the browser, but that's not exactly true.
(25:17):
I think running on your machinists came later. It was
a little bit. Yeah, it's kind of something out there,
and we talked about the Fermion, right, so Fermion, if
I remember correctly, was started by a guy who used
to work on HELM if I remember correctly, Yeah, because
I talked with him a while ago. It is quite interesting.
And so he has this whole company on doing I
think tied or something. Well, it's been a long time
(25:38):
since I talk with him. I don't know why I even
brought him up now anyways, but yeah, there's like this
whole thing about running it on your machine and so yeah,
and then it seems like people wanted My understanding is
people are looking at using WASM kind of like processes
within the Beam, but in like a larger scale in
terms of like okay, let's spin up this WASM binary,
have an executed job and send the response to this
(26:00):
other pod, you know, which is it's kind of interesting.
It feels like we're going we're going back to what
Beam has been doing for a while, you know, with
message passing and spinning up jobs this kind of stuff.
Speaker 2 (26:11):
Yeah, I think that's also best how to think about
it from an Alexi perspective, that's how your busity interact
with websent the best, as like that's a separate process,
hyparate gen server gonna send messages and hope for the
best that the message comes back because you know also
your WEPSENTITD code can have box and can decide to
just break apart. So it's the same idea, the same
that you following the beam that maybe you're of a
module breaks apart and then you have a message and
(26:32):
it's safely encapsulated.
Speaker 1 (26:34):
Well, I think there's a couple more things that could
be interesting to talk about too. I don't know if
it's still the same or not, but my understanding is
that Rust is definitely one of the best languages to
write webs only with in terms of like everything kind
of matches up because it's not when you see it
as a run time in RUSS, it's like wats and
thirty two, which is kind of weird. There's also no
it's I don't know if there is a garbage collection
built in yet or not, but that was something that
(26:56):
was lacking. That's why RUSS worked out quite well too.
Speaker 2 (26:58):
It's yes, oh no, no, don't get the name des
like an extension to it as I think there's a
proper name with sort extension. But let's say there's an
extension to the web smily where you can basically enable
the feature fleg to allow garbage collection. There's a proposal
for that. It's implemented in most engines already. There's also
like a real strong development in making websmit more usable
(27:19):
in tons of different environments. So garbage collection is one
of them, Garbage collected languages and interfacing persimity is another.
Like traditionally, if you want to call a websentitly function
or interface with it somehow, websmity only understands like numbers,
like integers, floats like this sort of thing. But you,
as like an Elexi person, you think instructs your user
structure like stuff like this. It's structured data, and there's
(27:40):
this translation layer where like was mixed, like my library
tries to help you write to the websm d memory,
put your users structure whatever you have into like the
bits and bites that alec that the websent can read,
and the same way around backwards when you get the result.
But actually it would be so much nicer if websmitly
had a different mintion language like a type system. Say right,
(28:02):
they can say, hey, this is a user stug. It
has a name that I don't know, a birth date,
and what they have and suddenly websently knows the same
types that you have in neuro alexir, and they can
talk about higher level complex types and that's exactly what
that's called component model and websentitly. They just released that recently,
and I'm also trying to work this into the Lexi
implementation so that we don't have to think about bits
(28:24):
and bytes and serializing it into I don't know, Jason
Springs or whatever, but we can actually take complex types
using a type system. The component model is a type
system under thehood. Yeah, and then we can talk about
the same thing about the same complex type in websind
and alexir. I'm also quite hyped about the type system
and Alexia. I'm not sure yet how, but maybe we
can work it make it work nicely together. Let's see.
Speaker 1 (28:45):
Well I know that. So it's kind of interesting too
when they're working on this WATM stuff because I forgot
the name of the project, but there is it's been changed.
The name that's been changed a couple of times for
a lecture in it least were called Loman and then
there was another name. It's quite a few names. I
think Darktor still working on it.
Speaker 2 (29:01):
Wasn't it the way you can take alexicode and run
it as a websentity program. Right was it this?
Speaker 1 (29:06):
Yeah? In the browser, which was quite interesting because a
lot of people don't want to write JavaScript to do
a lecture. Yes, trying to.
Speaker 2 (29:11):
Finally, didn't this go down? Like now you'll know more
than I do. Wasn't this like an avendant or something?
Speaker 1 (29:18):
YESO, No, the Luna one has been touched for a while,
but I couldn't want to have a new name. I
was trying. That's what I'm actually trying to find right now.
Speaker 2 (29:24):
But you know what I can pitch there? And there
is Patrick Smith. He is he's a great person, and
he's writing orb. Orb is a way where you can
write an alexir function and that compiles to actually repressently,
and then you have your Alexi function in line in
your Alexi code base, but it's absently and orb actually
uses then wasn't max for integration tests, so you know
you're an alex heir. You compile to websently. Then in
(29:46):
his tests Patrick then uses websentitly like was max to
test the He compiled the right things. Yes, there's the circle.
I think orb is it's a good library.
Speaker 1 (29:55):
To look at. Yeah, it looks like the name of
that the thing is called Firefly now I remember now, Yes,
it's been archived as a junior this year. I get
really bummed down when I see it, kind of get
it getting abandoned like this. I understand that it definitely
takes quite a bit of effort to keep this going,
but it's it was exciting to see what's going on.
Speaker 2 (30:13):
Yeah, to my understanding, Firefly or like Luman had to
implement the whole beam basically as a as a walk
to then run it in represent V versus ORB. I
just linked it for the show. Notes if you want
to ORB is more like you take a single function
and you know, changed it into represent V bite code,
so it's not the whole beam run time. It's more
like a computation of a function. So it's this much
(30:34):
smaller problem. But that seems to work and it's much
less maintenance and you know, fast and nice and good. Yeah.
Speaker 1 (30:39):
I was just looking forward to this coming out because yeah,
I mean I make surely said to see you see
this kind of stuff work down. But yeah, it's it's tough,
but yeah, coming coming back. Okay, Now, why is the
max Like I we didn't actually get into the reason
about why you started getting working on this one because
you're not really using wires in a new day job, right.
Speaker 2 (30:55):
No. I had a used case back when I was
in the software development agency. Was a client who needed
to create an enormous PDF file. But the problem was
they want they wanted this to be created in the
backgend to send them out via email and such. But
most of the time the user clicked like the in
the HTML page like a download PDF button. So most
of the time it was like the user clicking on
the web page. Sometimes it was an email sent asynchronously,
(31:18):
and I was like, hey, man, you're generating this PDF file.
We already have all the information on the HTML page,
but we need to go back to the server, then
to this expensive database career again produce the PDF, then
send it back to the client. That that's just the
waste of resources. Let's just implement the thing in JavaScript
and you can create PDFs and jobscript right because all
the information was there. But then I was like, hey,
(31:38):
if it's JavaScript, you cannot have it in the back
and then send it out via email. So I needed
a solution that can generate my PDF in the client
in the browser and in the Alexa back end, so
there was websently represently was the modern way to approach it.
I had some time to spare to build up a
prototype like super simple prototype, just generated a PDF and
it worked, and then from there that that's five years ago.
(32:00):
Actually I think that was five years ago. And back
then I didn't think I need the gen service. I
just made it stupid simple, no korbicks, no important functions.
It was just so so simple. But then over time
it got some usage, some attention, and then people were
asking can you, you know, can I provide a function
from alex heir into webssmibly And then I was like, oh,
but then you need to send a message. Then I
had to have gen service. There was this sole itteration
(32:22):
going on. Yeah, so it all started from this one
PDF I wanted to create on the client and the
back end.
Speaker 1 (32:27):
Throwing something like that, and then you get to start
kind of working on it. But I mean, obviously you
still enjoy working on it because you start working on it, right.
Speaker 2 (32:34):
Yeah, that's true. Honestly, I was working a lot in
the early days, and now it's extended maintenance. I would say,
so I do implement features. I do experiment with it,
but I also have a family in the day job,
so it's the usual open source you know, you have
to spend your time somehow, and you know, family and
earning some money comes first. But there's so much fun
in open source work and getting down to the details
(32:55):
of I don't know, moving some bites around to make
the fit into web assembly, or thinking about asy and
grass that all these things is so stimulating and fun
that I just cannot stop. But it's not you know,
I don't get paid for it. It's not like fastest development.
And compared to how webers smily moves forward like websamily
as an ecosystem is so fast moving day, you know,
the garbage collection, the component model. So many new things
(33:17):
come up that are really good and great. And one
of the main things I do maintaining Warsen mags is
just you know, getting the new version of was was't
time in making it work and compile again, And that's
already I don't know half a day spend, and so
I mostly keep up with current developments and then if
there's time left, I do at some features centerp okay.
So that's the call I think that's you know, it's
(33:38):
a bit late for this in a podcast, but if
you are interested in this, like us is the thing
webs mb is interesting. I'm really open to external contributors
if you're missing a feature and this sounds interesting, really
happy to do. I try to do. Try to be
a nice person, try to be a good collaborator. I
don't want to be a dictator of this whole thing.
And there's already been quite a few contributors that happily
(33:59):
emerge pullquists. So you are invited to join the tun ah.
Speaker 1 (34:03):
Yeah, you're still working with I'm I forgot what his
name is, Sonny Scraggin. He's I was just looking at
the acink issue you have. He's quite a good guy
for helping people out with Rustler and stuff, so that's
probably what he was working with with you.
Speaker 2 (34:15):
Right, He's been so helpful in the past. I'm so glad.
That's also something that you know, this open source community,
it spends rust and Alex here. Yeah, I can just
ask for help. I don't know everything, like how can
I and I can just ask for help and then
people come in and actually do help. And that's I'm
really thankful and I do learn a lot from it.
Speaker 1 (34:31):
Yeah, I remember I worked with Russler for a project.
He was definitely super helpful and always willing to Yeah,
he did more than I was expecting, like if, I
was quite shocked with how much he was able to
put in. So yeah, he's and I think he's one
of the guys who was working on Rustler itself, right
at least he was at some point, that is what
I remember, or if not, he definitely was a heavy
user and promoter of it at minimum because I had
(34:53):
surely with roster, I couldn't figure out.
Speaker 2 (34:55):
I should stalk my contributors a bit more. I think,
I don't know, but I'm still thankful. I just seeing
the contributions they make on Micropositive alone and the conversations
behind the scenes a bit. It's really helpful already, and
it's also what makes the whole thing fun and sustainable.
People oftentimes talk and open source about, you know, being
burned on and stuff, but I can just be honest
and say, you know, there's a family. People understand, and
instead of complaining, they come and help out. They open
(35:18):
my product fast or even if it's an issue, but
they are like detailed. It nice and I can actually
work on it, so that's really, you know, the good
part about this community.
Speaker 1 (35:25):
I have an opinion about that one. I mean it,
of course, it's a by person thing. But my opinion
about languages like Elixir and to an extent, are Russ
some other languages that are what I would say more
niche Right, you have a different type of developer usually
working with these things, and le's of course they're forced
into it, which I don't know how many there is,
But for people who specifically want to work with this technology,
(35:48):
this language, they have a different mindset. They're there to
learn for the better, they're there for doing things for
the better. They choose this language as opposed to say,
working with something more mainstream or popular. So you're going
to get a different kind of developer who's more I'm
not sure how the heck I want to say, but
I think you're already understand what I'm saying. Could you
kind of shake in your head like yes, That's been
my opinion about these kinds of languages, is that you
get a different kind of developer rather than somebody who
(36:09):
just has to get the work done the barses, you know,
cracking the web we're going to finish quickly, and so
they just let our frustrations and yeah, so that's been
my kind of that's my thought about this kind of community.
Speaker 2 (36:20):
Yes, I think it's also a bit of an uphill battle,
like imagine trying to be hiring for an Elixir job.
Like the current market situation is a bit tough, right, Yeah,
and there's so many people who want to code an
alex heir, and you really have to step up your game.
I'll also be lucky, lucky I guess than then to job.
So as as an employer, like as a company, I
think it's a good choice to start an elexiir. Oftentimes
(36:42):
people say you can't find Elexi developers, but what really
A lot of people want to code a elex heir.
Maybe sometimes you just have to say either you pay
for the seniors or you train some middle level or
juniors to the show, and then you I think you
get dedicated and good people on average. I mean there's
always exceptions, but on average, I think you get a
good bunch of good people. No, I also think so too.
(37:03):
It's of course it's always better to have the right developer,
but I think without if they've never really worked with
it before. You need to kind of show them because
how do I say?
Speaker 1 (37:12):
Yeah, I mean there's a moment where it clicks for everybody,
like wow, actually this makes sense, Like it's so easy
to do these kinds of things. There was there's this
guy named Theo, who I guess just spoke at Elexro Comf.
I used to kind of watch this stuff. He's a
bit of a character, which good or bad, it's up
to you. But he seems like, I mean, he's somebody
who's who somehow got converted from In my opinion, from
(37:33):
my understanding of who he is, he was kind of
like a JavaScript heavy person, but maybe I'm wrong. But
then he became super crazy about Alixer. I think I'm
not sure how it happened, but I think he says
it's his new language. Like I said, he actually just
keynote spoke at Elixir comf in US, and that was
quite shocked because I never would have expected that because
usually these this guy's got a couple million people who
watch my YouTube, These kind of I mean don't really
(37:54):
have people who'd write Leckster to have a couple million
subscribers on there, right, So it's it's it's quite exciting
to see when you you know, I can say, convert
somebody you know who was doing something more mainstream, possibly
to a elixir or even to a beam language in
general too. Yeah, well that's the thing, right, And when
he talks about he's not just saying, oh this is sexy.
He was saying, no, this stuff makes sense. Look at this.
(38:14):
We have processes, we got to spend these things uff,
we can monitor them. We got messages, we got this,
we got that, we can we can send tasks to
another machine so we can scale horizontally easily. We got
all these stuff. So it's it's good to see that
other people can see it, because I think you need
to actually play with it before you actually, like you
need to drink the kool aid, before you actually start
(38:35):
to fall in love with it.
Speaker 2 (38:36):
You know.
Speaker 1 (38:36):
It's you can get some idea, but it so there's
an aha moment where you're like, oh god, this is
so easy. Like I just implemented a some code that
can like process a bunch of files asynchronously in parallel,
and it was so so simple, and the handle errors
was so dead simple, and it's just like wow, I
can't like if I did this in Python or JavaScript,
(38:56):
while it would be so slow, and it'd be one
by one and it would be this issue in that issue,
and I would be freaking out that the thing would
just crashed, rather than just saying, you know what, the
process that that's doing the processing can crash, don't care.
But at least I know that this starts and works,
and I can put it to the side and lock
the error and keep going.
Speaker 2 (39:13):
And that's not even thinking about mutability of data and stuff.
But like you have raised, Yeah, that's another one, conflicts
and stuff. Yeah, so there's lots of heavy lifting and
that's that also gives me a bit of hope, and
I'm really hopeful and cheer for the Elexi community. But
you also see on like the stake overflow service that
Alexi and Phoenix specifically is like highly liked and desired.
It's still that over on market isn't reflecting that so much?
(39:35):
Right I was, it doesn't really make sense. Can be what, Yeah,
that doesn't really make sense.
Speaker 1 (39:38):
Not actually think about it, Like I think most of
the positions I went to pretty much the tech team
have to choose to tech which in which it should be.
But how come Yeah, like you said, how come Alexi
and Phoenix are high up there, but overall it's not. Yeah,
it's not a popular language. I wouldn't call it popular
language or popular framework even you know exactly what I'm saying,
Like why why is that?
Speaker 2 (39:57):
Why?
Speaker 1 (39:57):
Or how come are people just like hating their job
or or why is it that more people are pushing
them for this in their companies?
Speaker 2 (40:06):
Maybe it's trade offs. Right If I'm new to the market,
just out of university or something, right, I it feels
like I have to choose a language for the rest
of my life. It's not like that you can learn
new languages, but imagine it's your first language. Is where
you get your experience where you have to build your
CV And do you do this with a new language
that currently doesn't have a big market or do you
do this with a no improven language where lots of
(40:27):
companies higher for and also the big companies higher for. Right,
So that's the choice for developers and same goes for companies. Right.
They do look at market sizes, like how many employees
do I get? What's the you know, that's that's looking
at numbers, that's making business decisions, and that's also trade off,
so I do get it, and then it's also like
the barrier to entry, and there I'm really thankful for
what the Use and Chris McCord do, like presenting these
(40:50):
awesome things, and that really helps to spread the news.
Also things like Lifebook. Like at my day job, I
convert many of the documents and you know often run
this strip, run this and that into Life Books and
that's so much nicer. You get documentation and running the
code at one place you can iterate over it. So
these things really make a good ecosystem that I think
it's worth buying in. But then you need to spread
(41:10):
the news. It needs to grow.
Speaker 1 (41:12):
Well. I hope that a lecture does grow. I remember
seeing some people saying that got rid of it because
you know that we didn't have any people who really
understood it. And that's the sad part is when people
wrap it out like I think Bleacher Report people may
know that I think all the electure is basically gone
at Bleacher Report, which is such a sad tale because
it was such a good success story. It's that is
(41:34):
there an.
Speaker 2 (41:35):
Outlier or the norm? Like is it a lot of
companies getting out or is it just one famous example?
Speaker 1 (41:39):
No, it's just and that's the good part is it's
not the norm in my opinion, it's because like if
you're in management and you see your silver bill go down,
you see all these benefits, why would you promote that
this goes away? Right? If you had all these issues before,
you're paying for all this hardware, all of a sudden,
your hardware builds lash to nearly nothing in comparison what
(42:02):
it was before. So'm like one hundred and fifty down
to eight or five or something like that. Servers, you know,
then then why would you dare to switch to something
else like I would be. It's one of those things
like if it's not broke, don't fix it kind of
kind of things. And that's just something much more performed.
But then again that's still a risk. It's a risk, right,
it's a risk. And usually you don't just convert to
software by like a big wish. It's a process and
(42:23):
it's maybe painful, and maybe you do some decisions that
are outside of the language. It's just like the people
doing coding decisions, and maybe it's too complex, it has
other trade offs, and then you're not happy with that,
but you blame the language and that can go either
way like four or against the X year. Yeah, so
it's never just the easy switch at least. No, it's
not a complex business. Yeah, so, I mean, I think
most of these issues are more political than they are
(42:44):
like technical. It's usually always something outside of the tech.
Very few things are tech related in my in my
opinion from what I've seen, is more so like somebody
doesn't like it, so they get out of it. I've
implemental Phoenix and stuff for other companies or even Alexus
to say, and yeah, most of the time you can
it by with other languages, but you need to start
seeing the benefits by like actually seeing errors and stuff
(43:07):
and handling things properly, and then you can start to see, okay,
this is why this is. This is good. Yeah, but
you actually had the architecture properly. Yes, that's the point, right.
And in the past I was back, you know, a
couple of years ago, I was working on a big
umbrella elixir project where like it was spread out and
it ended up, at least to me, being super complex
and complicated, and I had a hard time just getting
(43:28):
this into my head and everybody else like to who
the person who invented the system was like, yeah, it's easy,
and trying to convince me. And it wouldn't have been
easy to blame this on the language, you know, Phoenix
and having Umbrella and those interfaces between all the apps,
and that I could have blamed umbrellas or feeling so
alexia on this problem. But maybe it was the architecture, right,
So you have to see many different projects to actually
(43:49):
make a fair comparison between languages. But but coming back,
I mean, I don't even know where the heck we
can even come back to. I think we went went
through basically everything. If there's something, I mean already call
out for if anybody who was willing to help, Is
there anything that we did mess I.
Speaker 2 (44:02):
Think no, Like if you want to use warnax, let
me know. Like I'm also super interested in the stories,
like is it a success? Is that a failure?
Speaker 1 (44:08):
Is it hard?
Speaker 2 (44:09):
Let me know? That also motivates me to continue, right,
if there's some feedback, and it can be any kind
of feedback. You know, I'm a German, I'm direct. You
can just you know, tell me the things. But also
if you want to contribute it, contribute. Super happy to
have you on board. I think it's a good project
that's also more complex than your typical Alex the beginner project,
so it's not just one gencer, but it's not just
(44:30):
one Nive or something. It handles the whole story. But
still it's open source, so you can have a big
learning experience there. It's it's I think it's a good
choice for mid level project.
Speaker 1 (44:41):
Okay, great, yeah, testing if there's nothing else. It was
great there, heavy on the show. Hopefully we're heavy on
again in the future with something else going on.
Speaker 2 (44:48):
Yes, it's sure. It was really fun.