Allen_Wyma:
Hello everybody. Welcome to another episode of Elixir Mix. I'm your host, Alan Wima. Today I'm hosting by myself, but we have a very special guest. We have Baptiste Chalet. Welcome, Baptiste. How are you?
Baptiste_Chaleil:
Hello,
Allen_Wyma:
That's good.
Baptiste_Chaleil:
I'm fine.
Allen_Wyma:
You're coming in all the way from France, right? You said near Paris or in Paris? Mr.
Baptiste_Chaleil:
I'm
Allen_Wyma:
Big
Baptiste_Chaleil:
in Paris
Allen_Wyma:
Strike.
Baptiste_Chaleil:
right now
Allen_Wyma:
Oh,
Baptiste_Chaleil:
with
Allen_Wyma:
yeah.
Baptiste_Chaleil:
the big
Allen_Wyma:
How's
Baptiste_Chaleil:
strike.
Allen_Wyma:
it going over there with the strikes? I heard it's getting pretty crazy. Yeah, it's pretty crazy. And
Baptiste_Chaleil:
Yeah,
Allen_Wyma:
not
Baptiste_Chaleil:
it's
Allen_Wyma:
far
Baptiste_Chaleil:
pretty
Allen_Wyma:
from my
Baptiste_Chaleil:
crazy
Allen_Wyma:
home, actually.
Baptiste_Chaleil:
and not far
Allen_Wyma:
They should
Baptiste_Chaleil:
from my
Allen_Wyma:
pass
Baptiste_Chaleil:
home
Allen_Wyma:
soon.
Baptiste_Chaleil:
actually. They should
Allen_Wyma:
How's
Baptiste_Chaleil:
pass
Allen_Wyma:
this?
Baptiste_Chaleil:
soon.
Allen_Wyma:
I heard that. Actually, I heard from a French guy that although it seems like French people strike the most that he says that there's actually more strikes in Germany. Is that true?
Baptiste_Chaleil:
I don't know about Germany, but I think it's not true. I'm pretty sure there is
Allen_Wyma:
like
Baptiste_Chaleil:
more
Allen_Wyma:
quite
Baptiste_Chaleil:
strike
Allen_Wyma:
often.
Baptiste_Chaleil:
in France.
Allen_Wyma:
It's like
Baptiste_Chaleil:
It's like
Allen_Wyma:
a hobby,
Baptiste_Chaleil:
quite
Allen_Wyma:
right?
Baptiste_Chaleil:
often. Yeah, second
Allen_Wyma:
How come
Baptiste_Chaleil:
nature.
Allen_Wyma:
you're not out there striking?
Baptiste_Chaleil:
Oh, I mean, I'm not really concerned for that actually. I have my own business, so it's
Allen_Wyma:
It's
Baptiste_Chaleil:
not
Allen_Wyma:
more
Baptiste_Chaleil:
for
Allen_Wyma:
about
Baptiste_Chaleil:
me.
Allen_Wyma:
tension and...
Baptiste_Chaleil:
It's more about pension and people who are employee. So it's not my fight today.
Allen_Wyma:
Not your fight today. Is it going to be your fight some other day? Have you ever been out there striking before?
Baptiste_Chaleil:
It could be my fight, it depends if they want to raise the tax of the people who have business, it could be my fight.
Allen_Wyma:
Yeah, that I understand what you mean. Yeah, it seems like the government never has enough money enough things to take away from people sometimes. But I hope things get cooled down and gets all figured out. But in any case, I mean, your article is more so about staying inside and playing a nice game, right? Yeah. So
Baptiste_Chaleil:
Yes.
Allen_Wyma:
you wrote this really interesting article called about something called pro build x. Do you mind to give it a quick introduction?
Baptiste_Chaleil:
So basically, the League of Agents games have a public API. And from this API, you can get a lot of interesting stats. But you cannot use the API as is to build, let's say, a front end. You have to collect the data, put it in your own database. And then after that, you can start building some front end to display the data.
Allen_Wyma:
there is a
Baptiste_Chaleil:
There is a lot of interesting stuff you can do with this data. find the best player, find the best items.
Allen_Wyma:
Okay, that sounds pretty interesting. Yeah, I saw that you've specifically had a use case where you were trying to find other pro players is what you call it for League of Legends.
Baptiste_Chaleil:
In this case, I tried to find pro players, so I'm using another open API, which is from a company that does that for their business. They are pro-built for a business and they are nice enough to share the pro players, so we take advantage of that to use that in this tutorial.
Allen_Wyma:
Now when you say pro player, you're talking about professional player like people get paid for you're talking about people are really good in playing this game.
Baptiste_Chaleil:
Peace. It's like people who are paid for playing this game. It's like they are the open leader and the professional leader, but pro player, they play on both. Like they not only play with pro, they will play with like the public. And the data that we collect here is like when pro player play on the public leader.
Allen_Wyma:
So there's people who are actually getting paid to play League of Legends?
Baptiste_Chaleil:
Yes,
Allen_Wyma:
actually.
Baptiste_Chaleil:
they are
Allen_Wyma:
What
Baptiste_Chaleil:
pay,
Allen_Wyma:
is the play
Baptiste_Chaleil:
actually.
Allen_Wyma:
for a living?
Baptiste_Chaleil:
They pay
Allen_Wyma:
I mean, I would love
Baptiste_Chaleil:
for
Allen_Wyma:
to play
Baptiste_Chaleil:
a living.
Allen_Wyma:
games for a living, but how do you get this kind of job?
Baptiste_Chaleil:
You have to be good, you have to be young, you have to be dedicated.
Allen_Wyma:
Is that that's not you though. That's
Baptiste_Chaleil:
like
Allen_Wyma:
not you though, right?
Baptiste_Chaleil:
any pro. No, I'm not good enough. I was never good enough to be
Allen_Wyma:
And
Baptiste_Chaleil:
a
Allen_Wyma:
I
Baptiste_Chaleil:
pro.
Allen_Wyma:
guess.
Baptiste_Chaleil:
And I guess I cannot just play all the time. I get bored. I like to
Allen_Wyma:
Yeah,
Baptiste_Chaleil:
change
Allen_Wyma:
I don't know
Baptiste_Chaleil:
a
Allen_Wyma:
if
Baptiste_Chaleil:
bit
Allen_Wyma:
I can keep
Baptiste_Chaleil:
as
Allen_Wyma:
playing
Baptiste_Chaleil:
well.
Allen_Wyma:
the same game all the time. I'm just like, do you have any idea? Like, what's the how do they make? You know, what is the value that they get paid from? Is it sponsorship? Is that what it is? of shape
Baptiste_Chaleil:
Yeah, sponsorship
Allen_Wyma:
and price.
Baptiste_Chaleil:
and prize pool
Allen_Wyma:
Oh,
Baptiste_Chaleil:
for
Allen_Wyma:
yeah.
Baptiste_Chaleil:
tournament.
Allen_Wyma:
Okay. I see what you're saying. Right. You get into a tournament and at the end you have a bucket of prize money, right? Uh, yeah.
Baptiste_Chaleil:
Big price.
Allen_Wyma:
I don't know. I know that eSports is a huge thing and actually used to work at an eSport company, right?
Baptiste_Chaleil:
Yeah, I work at the eSport company, I mean, called pandascore.co, and we were doing these kind of things, actually collecting data on the real pro match of eSports and giving this data, making them available in API and instantly.
Allen_Wyma:
That's interesting. I mean, what's kind of like your history? How did you start getting into something like this?
Baptiste_Chaleil:
So I went to a school called 42, it's like a peer-to-peer programming school. And then after that, it was my first internship, so I went to work there. At this place, we have like a huge Razer application and some Node.js service. And I don't know, I like games, I played games for a very long time. So this like... the business of this company, which was really small at the time I came to work with them. We were like five. It was very like, it suited me.
Allen_Wyma:
Yeah, okay. And like, you know, why did you choose to work at this kind of place? You just because you like video games so much and just thought it could be fun to get into something like this.
Baptiste_Chaleil:
Yeah, actually, I got two choices. I wanted to work in foot tech or gaming.
Allen_Wyma:
Food
Baptiste_Chaleil:
So
Allen_Wyma:
tech.
Baptiste_Chaleil:
I choose gaming. like
Allen_Wyma:
Very, very
Baptiste_Chaleil:
about eat something
Allen_Wyma:
something
Baptiste_Chaleil:
like
Allen_Wyma:
about
Baptiste_Chaleil:
that,
Allen_Wyma:
food.
Baptiste_Chaleil:
delivery,
Allen_Wyma:
You don't like food?
Baptiste_Chaleil:
something
Allen_Wyma:
Cool.
Baptiste_Chaleil:
about food,
Allen_Wyma:
I thought French people really love
Baptiste_Chaleil:
you
Allen_Wyma:
food.
Baptiste_Chaleil:
get
Allen_Wyma:
It's
Baptiste_Chaleil:
cool.
Allen_Wyma:
what I was here. It's like I was here. I like food. Yeah, but like food
Baptiste_Chaleil:
Oh, I like
Allen_Wyma:
is like
Baptiste_Chaleil:
food.
Allen_Wyma:
a big ceremony in France or in the French culture now.
Baptiste_Chaleil:
It is, it is, but this day you can get good delivery on those kind of apps.
Allen_Wyma:
Okay, I don't know. I just thought that that sounds really interesting. It sounds more interesting to me than than games. But I mean, each one has their own challenges, right? So you think you made the right choice?
Baptiste_Chaleil:
Mm-mm. I think so, yeah. I really like this. And I like the idea that it's like something that is completely online. Like, we are not really connected to the real world. Like, it's like we stay online all the time. I like this idea that you are like completely online when you do a service. You don't have physical stuff to manage and like
Allen_Wyma:
You don't
Baptiste_Chaleil:
problem.
Allen_Wyma:
feel like you're in the matrix with all this?
Baptiste_Chaleil:
A bit, a bit, but it's nice. It's nice to be in the matrix. You're like in control.
Allen_Wyma:
You're just a you're just a battery, right? That's what everybody was is a battery. An operator. See not the battery.
Baptiste_Chaleil:
No, you're like an operator, mostly not a battery.
Allen_Wyma:
So we're in the eSports, right? So the eSports company, you guys were doing what exactly you're like trying to do similar like the rankings gathering data, this kind of stuff.
Baptiste_Chaleil:
So we do that, but also the interesting part was like, we followed a stream, a stream like a live stream of the professional games. And we transformed this live stream in like, we make the data available in like a web socket. And for that, there was a lot of data scientists working with a team of developer and like they analyze They take a frame every three seconds and they try to understand what's happening.
Allen_Wyma:
like decrypting the traffic like for like an online.
Baptiste_Chaleil:
Not really. It's more like the stream is like, when I see the stream, it's like the
Allen_Wyma:
Oh,
Baptiste_Chaleil:
video
Allen_Wyma:
yes.
Baptiste_Chaleil:
live stream.
Allen_Wyma:
They
Baptiste_Chaleil:
And like,
Allen_Wyma:
are like,
Baptiste_Chaleil:
they
Allen_Wyma:
you have like a picture.
Baptiste_Chaleil:
are like, you have like a picture of the game and you like check, read the score there, like check what happened in the game. You know, there is like a kill feed, there is like many stuff happening in the game and you will like make this data available directly for your
Allen_Wyma:
Oh,
Baptiste_Chaleil:
clients.
Allen_Wyma:
I mean, people would be paying for this. And so it's like kind of like really as soon as possible, try to get the data out to people. Yeah, so.
Baptiste_Chaleil:
Yeah, so basically this is more for betting. It went into betting and it's more like people want to know what happened right away and do some betting on that, like who gets the first
Allen_Wyma:
I
Baptiste_Chaleil:
kill
Allen_Wyma:
hope
Baptiste_Chaleil:
in
Allen_Wyma:
you
Baptiste_Chaleil:
this
Allen_Wyma:
see
Baptiste_Chaleil:
game.
Allen_Wyma:
what we do with the game.
Baptiste_Chaleil:
Obviously, who will win the game, but they want to have a lot of market for one game, like who will do the first kill, who will kill the first tower, who will do... I mean, there is many, many markets you can do for one kind of game.
Allen_Wyma:
Okay, so people would want to know as soon as possible and have an idea about Who yeah, who would be would be ahead so they can make a bet and win, right? That's interesting
Baptiste_Chaleil:
Yeah, exactly.
Allen_Wyma:
Now did you we actually sometimes surprised by the outcomes of these kinds of matches I mean if somebody looks like they're gonna be winning and all of a sudden there was a cool de Jonoc and the another guy won
Baptiste_Chaleil:
It's possible but in League of Legends there is not much like... I mean at some point if one team is really really ahead
Allen_Wyma:
not going to reverse.
Baptiste_Chaleil:
the flow
Allen_Wyma:
Oh, yeah.
Baptiste_Chaleil:
is not going
Allen_Wyma:
So
Baptiste_Chaleil:
to reverse.
Allen_Wyma:
basically, if it was, yeah, like you said, some guys so far ahead that there's no way it could be turned around, you're saying I think a lot of
Baptiste_Chaleil:
Mm-hmm.
Allen_Wyma:
games are like that. I remember my dad talking about like, obviously, I'm from us. So we more so follow the Super Bowl. And usually it goes for every Super Bowl every year. It's like it's either a very tight match, or it's a complete what we call blowout. Like you said, one guy is so far ahead that you can never catch up. It's either one or the other. It's never anything else. Yeah,
Baptiste_Chaleil:
Yeah,
Allen_Wyma:
it's
Baptiste_Chaleil:
it's
Allen_Wyma:
like
Baptiste_Chaleil:
like
Allen_Wyma:
folio.
Baptiste_Chaleil:
that. For League of Legends, it's like that. For other games that we covered at the time, like Overwatch, I'm not sure
Allen_Wyma:
Yeah,
Baptiste_Chaleil:
you
Allen_Wyma:
I love
Baptiste_Chaleil:
heard
Allen_Wyma:
it.
Baptiste_Chaleil:
about
Allen_Wyma:
It can
Baptiste_Chaleil:
this
Allen_Wyma:
be.
Baptiste_Chaleil:
one, it can be closer and the flow can reverse.
Allen_Wyma:
popping up the game. Yeah, I've heard of Overwatch, but I don't know much about it. So but this is how I say But your project, I mean, you kind of lean this, there's no, I mean, how do I say this? For this pro build, right? It's not directly related to your previous job, but it's in the same domain. No, sorry. Now I remember.
Baptiste_Chaleil:
Yeah.
Allen_Wyma:
Because I did read the article, but it's quite late for me over here. It's 1130 at night. So I'm still trying to stay awake. Sorry about that. But what I'm trying to say is like, I remember in your article, you talked about that when you worked at that esports company, you wrote something kind of similar to this pro build, but it's written in Python, right?
Baptiste_Chaleil:
Yeah, I did. Yes. And it was like working, but there was always some minor problem happening. And when I did it at the time, I feel like it was very interesting to do, because I learned about many interesting stuff while doing that, like database transaction. What else?
Allen_Wyma:
I'll bet. Mm-hmm.
Baptiste_Chaleil:
I have a full list on my article. But. And I feel like it was one of the first projects I re-wrote in Elixir, to have something very stable. And then I promised to myself that someday I will write a full tutorial about how to do this kind of stuff. And four years later, I got some time and I finally did it. And I added some extra goodies, because this day I use Live View and I feel like, oh, it's nice, we can do something like a really full app with a pipeline to collect the data, a nice frontend to display it, some real-time features, a lot of nice things that we have with Phoenix
Allen_Wyma:
But
Baptiste_Chaleil:
and
Allen_Wyma:
let's go
Baptiste_Chaleil:
Live
Allen_Wyma:
back to
Baptiste_Chaleil:
View.
Allen_Wyma:
the original one, right? I want to hear more about that one. So that was for a client. They actually wanted something, right? If I remember correctly.
Baptiste_Chaleil:
Yes, so the project that was similar, it was for professional coach. And the idea is that on League of Legends, you can ban some character when you are going to play against another pro team. And the idea is basically, okay, I will look at what the other pro players are playing on the public ladder and then... If they play a lot this character, it means they want to play it in the professional ladder, so we will ban this character.
Allen_Wyma:
You get it. Yeah, you're trying
Baptiste_Chaleil:
You
Allen_Wyma:
to
Baptiste_Chaleil:
get
Allen_Wyma:
stop
Baptiste_Chaleil:
it.
Allen_Wyma:
like an unfair advantage, right? Is that how it goes? Not really.
Baptiste_Chaleil:
Not really, but it's like... I'm not sure you could do that in other sports because pro players are not going to play in the public
Allen_Wyma:
site.
Baptiste_Chaleil:
and
Allen_Wyma:
OK.
Baptiste_Chaleil:
show their strategy, but it's like this one, because they play in public, you can scoot them, check what they are doing and try to counter them just by checking what they are doing in the public.
Allen_Wyma:
And you can learn like, you can set their strategies and what kind of moves that they're doing and their kind of style, right?
Baptiste_Chaleil:
Yeah, I mean, specifically it was about character because for League of Legends there is like a lot of character. And for each game you will pick one character and like you can ban characters, as I say in professional games, they can ban some character that they don't want to see in that game. So basically if you see like they are really, really good at this character, you should like ban it and like make them play something else that maybe they didn't train
Allen_Wyma:
if you like.
Baptiste_Chaleil:
as much as this one to give you like an edge.
Allen_Wyma:
Now when you say you ban, right, you're saying like, if you were to challenge this person, you can actually choose the rules of playing League of Legends with them when you're in some kind of tournament with them or how would this work?
Baptiste_Chaleil:
Yeah, it's not me who will choose, but we give the data to the coach of those professional teams and with the data they will check the data before their match and say, oh, okay, so on the opposite team, this girl is really good with this champion, so we should ban this champion.
Allen_Wyma:
Okay, that's... I mean, it makes sense for that team, but that seems kind of strange to do that for the team that's good at that character, because that's obviously what you want to have, right?
Baptiste_Chaleil:
It's more like, when you ban a character, you also cannot take it for yourself.
Allen_Wyma:
with a lot of
Baptiste_Chaleil:
But
Allen_Wyma:
car.
Baptiste_Chaleil:
as I said, there is a lot of characters. So maybe they don't practice this one, so they don't really care. They just want to get an edge on the other
Allen_Wyma:
Yeah,
Baptiste_Chaleil:
team.
Allen_Wyma:
it just
Baptiste_Chaleil:
It's like,
Allen_Wyma:
like.
Baptiste_Chaleil:
yeah, just like, let's get an edge by banning the best
Allen_Wyma:
Yeah,
Baptiste_Chaleil:
character
Allen_Wyma:
but this is
Baptiste_Chaleil:
of
Allen_Wyma:
public
Baptiste_Chaleil:
the other
Allen_Wyma:
data
Baptiste_Chaleil:
team.
Allen_Wyma:
for some of these matches, right? And you could just easily, easily kind of like,
Baptiste_Chaleil:
Meh.
Allen_Wyma:
you know, put some crappy character that you didn't really care that you're not really that great at and have like a secret character in your back pocket that would really good at games.
Baptiste_Chaleil:
Actually,
Allen_Wyma:
Well, that I
Baptiste_Chaleil:
they
Allen_Wyma:
mean, it
Baptiste_Chaleil:
do
Allen_Wyma:
makes
Baptiste_Chaleil:
that.
Allen_Wyma:
sense.
Baptiste_Chaleil:
Let's say they have a secret account that no one knows it's them who are playing this one and they practice a character but you don't know it's them. So of course, because this kind of like, scooching, it happened a lot at the beginning. So I guess this day, I'm not sure it's still relevant to do that. I think, yeah, it doesn't work anymore.
Allen_Wyma:
Okay, yeah, I mean, that just makes sense, right? Why would I publicly play as that person if you know you can ban it, right? But at least it banned for both sides. That's interesting. But like you said, it's not really a useful strategy anymore, right? Because you're saying people just have another account that they practice with. Yeah.
Baptiste_Chaleil:
Yeah, I think this day so many characters. I mean, it's like it's the same game, but there really is so many characters those past years. So I'm not sure it's
Allen_Wyma:
But I
Baptiste_Chaleil:
a relevant
Allen_Wyma:
mean, if there's so
Baptiste_Chaleil:
technique.
Allen_Wyma:
many characters, they have to be so many overlapping characters. So if you ban one, you still got four or five others that should be similar, no? how to say.
Baptiste_Chaleil:
That's hard to say because when they release a new character, it's always a bit overpowered. Like these people, they like to shift as well, make some character better than others for some time, and then switch, rotate the character a bit. So it changes all the time.
Allen_Wyma:
That's why
Baptiste_Chaleil:
That's
Allen_Wyma:
it's interesting.
Baptiste_Chaleil:
why it's interesting to collect the data and like... you can see for this patch which character got the best win rate and the next patch how it shifts.
Allen_Wyma:
Yeah, so then yeah, you can also, so I guess you could still use the data, like you said, another way where you can say, okay, which characters are most likely to win, and even in what kind of situations, right, with against maybe other characters.
Baptiste_Chaleil:
Mm-mm. Yeah, actually, some other websites, they do those kinds of stats, like this character has a wide percentage of chance against another character.
Allen_Wyma:
make sense. And these kind of services are they all for free? Or I mean, it must be some like, quote unquote pro or like, you know, you have to pay money to get some real stats from that, right?
Baptiste_Chaleil:
Actually, there are other websites that do a really better ProBuild as mine, which is fit in five articles. There are some really professional websites, and they give very good stats for free. And then I'm not sure about premium websites who do that. Maybe there is, but I don't know about the very premium one. I guess it's more for professionals who want something very specific.
Allen_Wyma:
So all this information is basically all out there for free. And they have something kind of similar to yours where you're just scraping data off of API's
Baptiste_Chaleil:
Yes.
Allen_Wyma:
and compiling it for people to see right? Okay,
Baptiste_Chaleil:
Yes,
Allen_Wyma:
I
Baptiste_Chaleil:
exactly.
Allen_Wyma:
see. But going back to the application that you you created, you did it in Python, right? So out of all languages, why you choose Python?
Baptiste_Chaleil:
At first, it was to be closer to the data scientist team because they were using Python for their stuff, like about image and stuff. So it was just like that. But I didn't do that much Python at the time. But yeah, it's like a lot of error, true error all the time. Then it's like, crash my application. I have to restart it. I have to fix the bug.
Allen_Wyma:
Mm.
Baptiste_Chaleil:
And at the same time, we were trying Elixir for some other parts. And I found it like, oh, it's so nice. We have Supervisor. We have like, it's like I just run my app, and then I come back like one week after that, and oh, it's still working. Like,
Allen_Wyma:
That's so nice.
Baptiste_Chaleil:
it's still up and running.
Allen_Wyma:
Now, I'm kind of
Baptiste_Chaleil:
That's
Allen_Wyma:
curious.
Baptiste_Chaleil:
so
Allen_Wyma:
We're
Baptiste_Chaleil:
nice.
Allen_Wyma:
using Flask or Django or what kind of stack we're using for Python.
Baptiste_Chaleil:
It was just like, actually, something like Flask and something like some kind of small ORM for Python, but
Allen_Wyma:
OK.
Baptiste_Chaleil:
I forgot what it was.
Allen_Wyma:
Maybe alchemy. Or alchemy.
Baptiste_Chaleil:
Maybe
Allen_Wyma:
Yeah,
Baptiste_Chaleil:
Alchemy,
Allen_Wyma:
yeah. Alchemy, maybe something like
Baptiste_Chaleil:
Ikemi,
Allen_Wyma:
that. Yeah, SQL alchemy
Baptiste_Chaleil:
maybe
Allen_Wyma:
probably.
Baptiste_Chaleil:
something like that.
Allen_Wyma:
That's one of the big orams.
Baptiste_Chaleil:
Ikemi.
Allen_Wyma:
Yeah, and then probably Alembic for doing the database migrations, I suppose.
Baptiste_Chaleil:
Yeah, that's possible. I
Allen_Wyma:
topics.
Baptiste_Chaleil:
don't remember it that much and I don't have access to the code
Allen_Wyma:
Now,
Baptiste_Chaleil:
anymore.
Allen_Wyma:
who actually brought Elixir into the company? Were you there when this first happened? When people started looking at it? Yeah, it was there.
Baptiste_Chaleil:
Yeah, it was the CTO. He was like a Ruby guy and better. He was interested about Elixir because the syntax was quite close. And the performance looked better than Ruby. And there was like Phoenix and there was a big raise up. There was everything. And actually, we use Node.js at the same time to do some real-time stuff. And we have Python, so we have a lot of different stuff, like a lot of different language. It was a bit difficult to onboard new people because there is so many different parts. And so we experiment with some Elixir project. It was the first thing was not the easiest. We did some kind of... of Docker Swarm. We tried to do some kind of Kubernetes, actually, but it was a long, long time ago. It was not there yet. And we have something that could distribute jobs on different machines, because at this time, Docker Swarm was not supporting GPU and CPU. And we have... like a lot of Python jobs, some need CPU, some need GPU. So we did some kind of like a puppeter in Elixir that we like, that we install on a lot of machine and like the node we like talk together and say, oh, okay, so we have this job, this job want to go on this GPU machine, this one want CPU and always the charge of this machine. And we did something like that in Elixir. was working okay.
Allen_Wyma:
Okay. And that's at some point.
Baptiste_Chaleil:
And at some point, then the Raze app was migrated to a Phoenix app. Like the Node.js app was also migrated to Elixir. So, like, for the developer, I mean, not the data scientist, DestainPython always, but for the developer part, it was scaling like more like Elixir. Like for... hollow project and like this it's easier for one dev to switch to another project.
Allen_Wyma:
Now, when you guys start working on Elixir, it's very different than other kinds of programming, especially Phoenix, or sorry, Python. Because Python is very traditional class object-based. You extend things. You can have something like a mix-in.
Baptiste_Chaleil:
Mm-mm.
Allen_Wyma:
You can just add additional methods, but not actually extend the class, something like that. You can do a.
Baptiste_Chaleil:
Oui, vous pouvez faire des classes ineritantes.
Allen_Wyma:
But I thought they have something similar to Ruby's mixin. But maybe I remember wrong. But any case, it's object oriented nonetheless, right? And using Elixir later,
Baptiste_Chaleil:
Mm-mm.
Allen_Wyma:
it's totally different. You don't have any objects. You just have modules and structs. Before.
Baptiste_Chaleil:
Before I do Python, I used to do Node.js. I mean, it was my main thing before, and I was already looking in functional programming in JavaScript. So when I have to move in Elixir, I was not too hard, I guess, to make the move. And I was a lot of Ruby experience as well. So I mean, combining all of that, the switch was
Allen_Wyma:
Okay,
Baptiste_Chaleil:
not too
Allen_Wyma:
so
Baptiste_Chaleil:
hard.
Allen_Wyma:
that's that's good to hear. Because what I do find is a lot of people struggle because like, they're used to calling methods on objects, and they're used to things mutating and all this kind of stuff. So they have a hard time to understand or like they'll pass something to a function and expect that that thing has been mutated. But actually they need to it's been transformed, but they never what I call catch it, they never actually like put that into a variable, they use it again later. They're still using the old one from before. I mean,
Baptiste_Chaleil:
Mmm.
Allen_Wyma:
how did your team kind of get
Baptiste_Chaleil:
Yeah.
Allen_Wyma:
up to speed with how to use Elixir? Because really it's quite different, right? Like we talked about.
Baptiste_Chaleil:
Actually, the funny thing about this company is like, for the test, technical test, we like to do something. People will come and we will talk with them and say, okay, so what you are programming in? Like, oh, you are doing Python, so you are doing Ruby. And then we will give them a technical test in a language that they don't know at all, just to see like how they adapt and just to see what happens if we like. Actually, I have to do that as well. Like, so I didn't do any Ruby when I interviewed there, and then they give me a test in Ruby. So I have to do it. So it was more about not, we were a very small team at this time. So the people that they hired didn't know Elixir after that. We just like hire people that they, they can adapt to a new language. Like, even if they were like PHP developer. JavaScript, whatever. It was more about the technical test. Oh, is it good? Oh, is the first time they do Elixir? I'm not sure. That's how we do that.
Allen_Wyma:
But when you're doing this technical test in another language, are you able to Google for things or how do you kind of solve it? Because some languages are really out there.
Baptiste_Chaleil:
This one, it was like a home test. It's like one interview at the company, and then it was the home test. And then after that, they will send the link to the repo, and we will look into the code and like, does it work? We like it or not? And then like, yeah.
Allen_Wyma:
Okay, so it's just to see if you can survive in another language that you had no previous experience, right? What is like the, what kind of tasks did I ask
Baptiste_Chaleil:
Yes,
Allen_Wyma:
you
Baptiste_Chaleil:
yes.
Allen_Wyma:
to do?
Baptiste_Chaleil:
So the test was like you have to use an API actually because it's like a company that sell an API. You have to use the API of the company and with the API you have to calculate some odds, some betting odds for one team against another team. The test was about that. I'm not sure what it is now because I quit the company for many years now but it was something like that at this time.
Allen_Wyma:
Okay, that's interesting. I'm kind of curious, like, do you have to write tests? Or what are kind of the grading criteria on that?
Baptiste_Chaleil:
First, do we hear from them again? Because some people, they come, they get the test, they never come back. So that's an important criteria, I think, the first one. And then after that, it was more about how they solve the problem. Let's say some people, it was interesting. So it's the first time they have to do something in Elixir. And some people, they will bring just plug, and try to do stuff with just plug, try to do very, very minimal. I think it was an RGS developer, so he tried just to pull the smallest amount of lib possible to make something very, very minimal. Some people, they will pull Phoenix and just do it with Phoenix. And then, I'm not sure, it was about, do we understand the code when we read it? It's not like we don't have a specific grid. and like a rate like that, it was a bit, it was startup time. And that's how we proceed at
Allen_Wyma:
OK,
Baptiste_Chaleil:
the time.
Allen_Wyma:
so it's very much kind of feeling based and just kind of looking at the style and seeing what you can see there, right? Now, have
Baptiste_Chaleil:
Yes.
Allen_Wyma:
you ever seen somebody just like completely just go in a whole different way that you're just like, OK, at least you tried. But this is just not going to work out.
Baptiste_Chaleil:
Yeah, actually, we saw some code that's quite unreadable, look un-maintainable. It was just, I'm not sure what to say, but it was quite hairy. Difficult to understand what they are doing. And naming of stuff is A, equal something, B, oh. Difficult to find
Allen_Wyma:
But
Baptiste_Chaleil:
yourself.
Allen_Wyma:
yeah, I guess a good naming
Baptiste_Chaleil:
But
Allen_Wyma:
is important.
Baptiste_Chaleil:
I guess a good
Allen_Wyma:
People
Baptiste_Chaleil:
naming
Allen_Wyma:
really do
Baptiste_Chaleil:
is important.
Allen_Wyma:
that. I've heard of this, but I've never seen it. People do names like A, B, C.
Baptiste_Chaleil:
Yeah, it happened. I have a story. Some people, they use like girl's name to do variable. Like.
Allen_Wyma:
a girl's name like Kelly or Kelly equals one.
Baptiste_Chaleil:
Yeah, Kelly equals
Allen_Wyma:
What is that?
Baptiste_Chaleil:
one. Betty
Allen_Wyma:
Okay,
Baptiste_Chaleil:
equals.
Allen_Wyma:
maybe there's something on his brain at the time or that person's brain at the time. I don't know. Maybe he's busy trying to think of a girl's name for his you know, next daughter. I don't know. It's a little bit weird. But all right. Or maybe, you know, obfuscation. I don't know.
Baptiste_Chaleil:
by
Allen_Wyma:
Well,
Baptiste_Chaleil:
girls
Allen_Wyma:
it worked
Baptiste_Chaleil:
name.
Allen_Wyma:
right, because you didn't know what's going on. So I mean, I've had situations where like, I don't know what it was, but like this Indian developer that previous company might have hired out for like, they had, I don't know, I can't remember exactly what it was. But I remember, like, there was elements in the HTML that had like the ID was called class two. And then the the the class was called like ID three or something. It was very weird. It didn't make any sense. Yeah, it was super crazy.
Baptiste_Chaleil:
Hmm,
Allen_Wyma:
Yeah, it was
Baptiste_Chaleil:
yeah, that's
Allen_Wyma:
didn't
Baptiste_Chaleil:
a
Allen_Wyma:
make
Baptiste_Chaleil:
bit
Allen_Wyma:
any
Baptiste_Chaleil:
weird.
Allen_Wyma:
sense. I was like, what, what the heck is going on? How could it be so bad? And then
Baptiste_Chaleil:
And then when he starts that, he's
Allen_Wyma:
when you start that? I just drew the
Baptiste_Chaleil:
do.id,
Allen_Wyma:
confusing.
Baptiste_Chaleil:
dot id.
Allen_Wyma:
They were like,
Baptiste_Chaleil:
It's
Allen_Wyma:
here, this guy
Baptiste_Chaleil:
confusing.
Allen_Wyma:
wrote it. They're like, here, this team in India that this website for us, can you like, I did it? And I was like, all right, let me check it out. What is that? And no, we can't do it. We can't use this at all. I just drew it away. Did it from scratch because it's This is horrible. I couldn't stand it.
Baptiste_Chaleil:
Oh yeah.
Allen_Wyma:
OK, so that's interesting, you guys' background, right? So for any kind of new language, it seems like the team generally has an easy way, or tends to be able to figure it out because of the way that you guys hire, right?
Baptiste_Chaleil:
Yeah, we didn't hire... I mean, Elixir at this time was not like... I mean, it was, what, 2017? I think in France it was quite dead at this time. I mean, there was no Elixir yet at this time. When the CTO told me about Elixir, I never heard about it. It was all about Node.js at the time. Node.js and Go was starting, I think. But yeah, I just like it.
Allen_Wyma:
What did you like about it?
Baptiste_Chaleil:
Mmm. Because I come from PHP, then Node.js, I like the... Before that, I also do a bit of Raze, and I like the conventions for Phoenix. I really like the conventions. When you start to understand the GenServer things, the Supervisor things, it's like, I don't know, it makes sense. And it's completely functional. I mean, I feel like it was easier to test than what the other project I did before. It was not too hard to do some, to write some tests for my Elixir code. What tests are like? Yeah, I guess that's all.
Allen_Wyma:
OK. I mean, to me, learning the language is not too difficult. But learning all the OTP and everything else underneath was probably a lot more complicated. It took me quite a few years to kind of wrap my head around it. And I still don't think I have my whole head around it because it's so big. And it takes, you may not know exactly which ones you want to use for which kind of occasion unless you actually had a huge experience in different types of applications. I mean, do you? I mean, that's true. Yeah. And
Baptiste_Chaleil:
Yeah,
Allen_Wyma:
not many languages
Baptiste_Chaleil:
that's
Allen_Wyma:
have
Baptiste_Chaleil:
true.
Allen_Wyma:
this supervision tree idea,
Baptiste_Chaleil:
It's a
Allen_Wyma:
right?
Baptiste_Chaleil:
big world.
Allen_Wyma:
So I mean, how? I mean, it sounds like you like the supervision tree, right?
Baptiste_Chaleil:
I mean, I like to draw some schema about how it's going to be, and if this fails, how you're going to recover from it. Which in Node.js, actually, I have no idea how I do that. If there is a crash, everything has to restart. Let's say, I remember when I used some Node daemon, it's like to... make it restart if something crashes. And in the X-Ray, it's way more organized. You can organize it way better. I really like stuff that are very going box, really well organized,
Allen_Wyma:
Yeah.
Baptiste_Chaleil:
tidy.
Allen_Wyma:
I mean, when you started, I guess another hard thing is the ideas of the processes, how that could be multi-core and everything. I mean, was that a complicated idea for you? Because Node.js, if you want to do multi-core, you just spin up multiple processes. Yeah, you have to spin like
Baptiste_Chaleil:
Yeah,
Allen_Wyma:
one.
Baptiste_Chaleil:
you have to spawn one process per core. And in Elixir, you don't really have to think about that.
Allen_Wyma:
Yeah,
Baptiste_Chaleil:
But that's
Allen_Wyma:
how did
Baptiste_Chaleil:
the
Allen_Wyma:
you
Baptiste_Chaleil:
good
Allen_Wyma:
feel
Baptiste_Chaleil:
things.
Allen_Wyma:
when you got to that part? I made you feel like, wow, this is pretty nice. And did it feel like difficult for you? Or was it hard to record?
Baptiste_Chaleil:
Then I discovered some other kind of bug because you like spawning too much tasks and then let's say you are trying to consume an API, then you will get timeout because you are spamming too much. So sometimes I feel like you have all those tasks and you can spawn a lot of tasks, but it's not necessary for this task. So you have to bring it when you need it. But that's a real option that is very easy to do in Elixir.
Allen_Wyma:
Yeah, true. How about like Gen servers? I mean, if you understand Gen servers, you can do channels in Phoenix, and you can obviously do Phoenix live view. I mean, those are a little bit weird too, right? Compared to other programming languages,
Baptiste_Chaleil:
Mmm,
Allen_Wyma:
I think.
Baptiste_Chaleil:
yeah, happy. Yeah, it takes time to know when to use that. I remember when I started, I tried to make two agent servers for nothing sometimes. It was not necessary. It's a bit hard to explain, but yeah, I don't know. This day, sometimes I will use just an agent first to do some small cache. then I will like usergen server because I want to do some extra thing. Yeah, you have like to, I don't know, for me, it come over the years and you will see, oh, this thing, I could do it differently.
Allen_Wyma:
Yeah. So you've used gen services cache. Yeah, I've used a little bit of gen services cache recently we have to because we have this external service that we have to pull data from and it takes forever to pull data. I think they have it hosted in Australia, and our servers in Chicago. So it takes forever to pull the data. Number one, number
Baptiste_Chaleil:
Yeah, that's
Allen_Wyma:
two,
Baptiste_Chaleil:
it.
Allen_Wyma:
it's an ancient service, like one of those very like old ones that has lots of data in it. We actually got in trouble with them because somehow we managed to create 1 million access tokens. When we were testing, I don't know how we even did that. It's like me and another guy. And we have like two servers like one test and one kind of semi production while we're still developing. And between four different machines we managed to create 1 million access tokens, allegedly. I don't know, I still have a hard time to believe that I don't even know how that's possible. How did you create 1 million of these things? It's Yeah, I don't know. Doesn't make sense to me. Maybe he's being dramatic.
Baptiste_Chaleil:
It could be a lot of
Allen_Wyma:
That'd
Baptiste_Chaleil:
crash
Allen_Wyma:
be a lot
Baptiste_Chaleil:
and
Allen_Wyma:
of
Baptiste_Chaleil:
recovery,
Allen_Wyma:
crashes and recoveries.
Baptiste_Chaleil:
who knows.
Allen_Wyma:
I mean, I see the logs. I don't think there's that many crashes recovery. It's like one a second maybe. That's a lot of seconds. But yeah, I mean, I guess I don't know. I guess it's a problem. He says he's very angry with us and wants to have a talk but I just didn't reply. And just fixed it. I store the token in the
Baptiste_Chaleil:
СМЕХ
Allen_Wyma:
database now so it should be less complaints. But yeah, I mean, that's another thing you got to be careful to write Elixir can be so powerful that you can literally take down other systems if you're not careful.
Baptiste_Chaleil:
Avec de grandes pouvoirs comme de grandes responsabilités.
Allen_Wyma:
Exactly. I mean, I feel like a Jedi Knight, kind of with my lightsaber. If that makes sense to you. Yes.
Baptiste_Chaleil:
Yes. Actually, in the part three of my series, I think I bring a GenServer to do a cache for the asset API of League of Legends because I didn't want to store the image myself. It's too much work and too much cost. So I make some kind of GenServer cache that I will fetch the asset at the beginning. some asset and then I will fetch some other assets when it's requested and then I will cache them in the GenServer.
Allen_Wyma:
Okay. But for the League of Legends one, what made you decide to rebuild it in Elixir?
Baptiste_Chaleil:
So you're talking about my
Allen_Wyma:
Oh,
Baptiste_Chaleil:
Python
Allen_Wyma:
like, yeah,
Baptiste_Chaleil:
versions?
Allen_Wyma:
because you said that you, I think you rebuilt it in elixir outside of the company, right?
Baptiste_Chaleil:
No, no inside of the company actually, I mean it was not an inner Python there was a front-end in OGS, but the pipeline the data collection was in Python's and yeah you know like it's a project that it's me who have to manage and like always like It was not like a daily a daily Project is like let's say one times per month. We need like to get the data from that And then, yeah, sometimes I check and say, oh, damn, my Python crashed like two days ago. And oh, I'm missing some data. It's not reliable. So I just took one day to redo it in Elixir.
Allen_Wyma:
I see. So you rebuilt it in the next year. But then for this article, though, you decided to build the same thing again, but add live view.
Baptiste_Chaleil:
It's not really the same thing. The one I built in this tutorial is way more advanced than the one I built when I was in the company. And as I said, it was a company project, so I didn't take it with me. Even if it was scrap, it didn't continue at some time. It was like a side project of the company. And in this project, I focused to do something more like what's the big website about the GoFusion data they are doing. It was... League of Legends have a developer discord, and here there is a lot of young developers that they don't know. They wonder, what can you do with those data? How can you make a website like that? So I was like, okay, maybe they can come to Elixir. Who knows? I will make them try Elixir through my tutorial, which is a good thing. You know, bring more people to Elixir.
Allen_Wyma:
people would like to.
Baptiste_Chaleil:
That people who like League of Legends... League of Legends and the actual use, like, oh, we could do that. And the good point is, like, with Elixir, you can do the data collections, the frontend, some real time within just using Phoenix. That's very nice.
Allen_Wyma:
So did your master plan actually work? Did you manage to bring people over to the Elixir side?
Baptiste_Chaleil:
I think I could get some. I got some people that said they really enjoyed the tutorial and it was their first time working with Elixir and they completed the series. So not that much. I think I only got two people contact me so then there are the people who didn't tell me if they finished. But two more people interested in Elixir, it's good.
Allen_Wyma:
Oh, yeah, that's two more than I was imagining. But yeah, that's interesting. Did you get anybody who wanted
Baptiste_Chaleil:
haha
Allen_Wyma:
to maybe extend or add more features or even request more features from your side?
Baptiste_Chaleil:
No, actually, I didn't get any. I tried to open it to that because I keep the project online. So now it's been like four months that the project is running, still collecting data, still working. I didn't do much. Just recently, I went to the project to fix some problem with one query while missing some index, so just to make it fast again. But actually, it's quite stable. That's what I wanted, it's quite stable. I don't have to do much. It's just like up and running.
Allen_Wyma:
It's a little bit boring, right? If the thing is always working now.
Baptiste_Chaleil:
Actually, the first problem I got is the database grew too big, and I had to resize it on fly, but it was very easy with fly. I think I had to type to command fly resize to 10 gigabytes and restart, and it was good. And then recently there was this query problem, but that was more like a mistake of my part, and I didn't expect to have that much data. when you start to have a database of like 1.5 gigabyte, if you have some slow query, it starts to show.
Allen_Wyma:
How did you actually manage to analyze and figure out that the database was a problem and how did you manage to figure out how to make it faster?
Baptiste_Chaleil:
So I use a PGStat, PGStatStatistic or StatisticStat, I forgot the name. So it's the extension of Postgres. So actually, I thought it was an interesting process. So I'll write an article about that. I released it this morning. So yeah, actually, I debug it while I was in Thailand one week ago. I was in a holiday and I was like, oh, why is so slow? Like, I will fix it. So I use the PGStats. Then I find, oh, why the query is taking eight seconds? That's very, very, very slow. And I use Explain, Analyze, and then I check a bit what I did, why it's so slow. Then I have to create an index on the key that I use in the order by. And then after that, I realize, oh, but I'm using some left join. It doesn't work with the key, so I have to use inner join for this case. But yeah, with PG, PG statistic, it was not too hard to find it. And just using explain, analyze and check the step that have the highest cost and then try to understand what it is like. I'm going on Stack Overflow reading a bit. Even I try to use a chat GPT to tell me, oh, what happened here? Like, how can I make it fast? But it didn't really help actually.
Allen_Wyma:
That's interesting. So the query that was going bad, that was for the first bit, you only have one page, I think, right? I think I saw on yours. Just one page. OK.
Baptiste_Chaleil:
just one page.
Allen_Wyma:
So how's the, I mean, it seems pretty quick now. I mean, is it like, is it because you added in a couple of indexes and maybe we wrote some queries. I mean, it's so much faster now. No.
Baptiste_Chaleil:
Yeah, way faster. I went like, I think it's like eight times faster or something like that. Yeah, eight times faster. And I changed, like I use Scrivener, which is like offset pagination. And then I changed for a cursor-based pagination. And then I skipped the... I have a very, very slow count. I have a very slow count in the query as well. So with the cursor, I don't need to count. It's only one query now before it was
Allen_Wyma:
and
Baptiste_Chaleil:
like
Allen_Wyma:
I have
Baptiste_Chaleil:
two.
Allen_Wyma:
love.
Baptiste_Chaleil:
And I have like 100,000 rows now in my database.
Allen_Wyma:
I see. Are you actually putting money on this now? Because you have a pretty big database.
Baptiste_Chaleil:
For now, it costs less than $5 per month on Flyer, so it's free. If you are below the $5, it's free. So not really for now. We'll see if it will get bigger and bigger. But I can always get rid of the data and reset it, and it will start to collect from the current game. It's like actual game, so it depends what I want to do next. For now, I'll just let it run. It will stay under $5 until I scale more my database.
Allen_Wyma:
OK,
Baptiste_Chaleil:
I'm not sure.
Allen_Wyma:
now for this one, this is a multi-part tutorial, right?
Baptiste_Chaleil:
Yeah, it's a five-part
Allen_Wyma:
Well,
Baptiste_Chaleil:
tutorial.
Allen_Wyma:
I got like.
Baptiste_Chaleil:
I was thinking maybe it can fit in one, but then it starts to get so long, so I split it, split it. There is one part about the architectural part, how we will do and how we will proceed. Then the part is about the pipeline, that it's about the context and what kind of query we will do. And then there is one part about... the live view and then an extra part about the real time with the PubSub, with Phoenix PubSub, like that we will send the data that just got inserted. And then a small part about how to deploy on fly.io.
Allen_Wyma:
OK. But how has been your experience on FlyIO? Because actually, we just recorded an episode, I think it was last week, and we talked about deploying on different services. And I just started on FlyIO for a client. And it was pretty straightforward the first time to get that going. But we wanted another environment. It took some time to figure it all out. And that was my one issue. Like the same project, but deployed the two different apps. took some time to figure out.
Baptiste_Chaleil:
On fly.io, actually, I just use it for the OBI. I don't have a real project on it, just this OBI project. Like in professional job, we use Google Cloud, AWS. So I'm not sure about the staging, production environment. But for OBI project, it was quite easy, just fly. prepare something and then fly deploy and just like fly set some secret and then you're good to go.
Allen_Wyma:
Yeah, that was one thing I I don't know if I like or not. But like I wanted to check the environment variables for the secrets. And you cannot really see that because I think they never can you can you
Baptiste_Chaleil:
Oh
Allen_Wyma:
do
Baptiste_Chaleil:
no, you can.
Allen_Wyma:
fly
Baptiste_Chaleil:
You
Allen_Wyma:
SSH?
Baptiste_Chaleil:
can. You do
Allen_Wyma:
Yes,
Baptiste_Chaleil:
F.L.A.Y. SSH
Allen_Wyma:
that's what I was gonna say. But you cannot
Baptiste_Chaleil:
console
Allen_Wyma:
see them from the terminal
Baptiste_Chaleil:
and then
Allen_Wyma:
you can
Baptiste_Chaleil:
M.E.N.V.
Allen_Wyma:
sorry, you're not gonna you cannot see them from like the
Baptiste_Chaleil:
No.
Allen_Wyma:
terminal command. You cannot see them on the website you have to like you said you have to SSH into that machine. and then do ENV,
Baptiste_Chaleil:
Mm-mm.
Allen_Wyma:
then you could see all of your environment variables. Yeah, that's the only way you can do it.
Baptiste_Chaleil:
But I think that's good, because when you want to do the same thing on AWS, like open SSH on a specific server, it's more complicated than on fly.io. I like to be able to access the machine easily like that. It's nice to be able to open a shell easily on that.
Allen_Wyma:
Yeah, I mean, to each their own. Sometimes I just would like to see it or see a piece of it to make sure that everything's set properly. Like, because one of the I mean, or you could say, okay, the secret. Like, like some secrets you can see, like because they're going to be configuration, and some are going to be like actual secrets that maybe you actually want to hide. That'd be kind of nice where you can say, okay, this is configuration. Like, have you ever done Kubernetes before?
Baptiste_Chaleil:
Yeah, the previous project I was working on was on Kubernetes. We have the pod, and we can log in in the pod as well to open some... Not UX, but you can open the console as well to check some stuff or do some query directly with Hector,
Allen_Wyma:
But with
Baptiste_Chaleil:
if
Allen_Wyma:
like
Baptiste_Chaleil:
you
Allen_Wyma:
with Kubernetes,
Baptiste_Chaleil:
need.
Allen_Wyma:
right, you have config maps and you have secrets. And so you can set some of the configuration using config maps, which are not encrypted. But obviously, the secrets are going to be encrypted. But even the secrets, you can always decrypt because we're just Bay 64 encoded. So it's pretty straightforward. So that's kind of nice. But yeah, and I understand like safety first, right? But sometimes I want convenience over safety.
Baptiste_Chaleil:
Actually, me, I use something called Path. It's a command line tool that you can store stuff inside. Password, but you can also store pure text. And what I like to do is actually, I will store secret for a website inside that. And then I will just put the secret inside the website. You know, it's a command line. So I have the secret locally in case, because depending on where you host, yeah, maybe you cannot get the secret back. It can be a bit annoying if you have to edit, regenerate a new token. It can be a bit annoying to do.
Allen_Wyma:
or if somebody else had to update it for you and didn't pass it back or whatever, right? I mean, there's so many different things that could happen for these kind of secret setting, especially working with other people.
Baptiste_Chaleil:
Yeah, then you have to give the secret to someone else, but yeah, then it's not secret anymore.
Allen_Wyma:
Yeah, this is another thing. There's no such thing as a secret, right? Have you ever heard the expression how to keep a secret with two people with two with three people? The expression is you can
Baptiste_Chaleil:
Mm.
Allen_Wyma:
keep a secret with two other people if the other two people are dead. Yeah,
Baptiste_Chaleil:
Merci.
Allen_Wyma:
a little bit morbid, but kind of true, right? It's hard to keep secrets. But yeah, going going back to your article. You said you want to also expand on this. I think you talked about that before the show, right? You wanted to actually expand on this article and do like another piece to it.
Baptiste_Chaleil:
Yeah, so I already published a piece to it. It's like, oh, I solved this slow query problem. So I did that last week, and I wrote about it yesterday and this morning. I published it. So basically, I created an index, and now I find the slow query and some explanation along the way. Voila. And then after that, yeah. I'm not so sure. I would like to do... If some people are interested, I would like to expand to some other features. If some people are interested, to do another page on the probuild.fly.io. We have a lot of data now, so there is a lot of query we can do. Find what's the best champion for what patch. find which professional has the best win rate. There is so much we can do now with all those data. So yeah, if there are some people interested, they can contact me to have access to this database.
Allen_Wyma:
Yeah, that's awesome. I wonder if anybody would ever contact you about this. I mean, I never play League of Legends, so it doesn't make sense for me. It's quite specific. Yeah, exactly. It's very
Baptiste_Chaleil:
It's
Allen_Wyma:
specific.
Baptiste_Chaleil:
quite specific.
Allen_Wyma:
I have to find
Baptiste_Chaleil:
I
Allen_Wyma:
the League of Legends.
Baptiste_Chaleil:
have to find a League of Legends player and an Exile developer at the same time.
Allen_Wyma:
Yeah, well, I mean, I'm sure you can find somebody I'm not too sure if this podcast will help but I hope it I hope that does. Yeah, I don't think I have any more questions about the article. It's pretty concise. You have it spread over five other five pieces at least. So it gets pretty in depth and you have code of samples and everything else. Yes. Is there something else you want
Baptiste_Chaleil:
Yes.
Allen_Wyma:
to say about the topic, or shall we transition over to PICS?
Baptiste_Chaleil:
Oh, we can
Allen_Wyma:
All
Baptiste_Chaleil:
move
Allen_Wyma:
right.
Baptiste_Chaleil:
to PIX, I think.
Allen_Wyma:
Usually we let the guests go last, so I'll give you more time. But my pick is a video game. I recently just started playing Wolfenstein the new order. So I'm a pretty big fan of FPS first person shooters. I just finished doom before the podcast 2016 doom I'm pretty happy that I finally beat that game. And then I had a big question of what do I do next. And before that I started playing around with Wolfenstein the new order. I played Wolfenstein 3d a long time ago. And I was pretty happy with it. Co elected. And I found out there's more Wolfenstein games since then because I haven't played games in a long time. And so now I'm starting to play Wolfenstein the new order. That's my pick. It's a pretty good game. Check it out if you haven't. Baptiste, how about you?
Baptiste_Chaleil:
I would like to promote my YouTube channel, which is about a game that I like, which is League of Legends, the game. And so my idea is like, I'm making automated YouTube channel and I publish video automatically. And if some people in the electric community, they are interested about it and they want some tips about how to make that, I will be happy to answer.
Allen_Wyma:
Awesome. And with that, thanks again for coming on. And hopefully, we'll have you back again on the future.