Gleam is a functional programming language that compiles to both JavaScript and Erlang/BEAM, serving as a bridge between front-end and backend developer communities. The language emphasizes simplicity, pattern matching over traditional if-statements, and the 'use' keyword for callback-style APIs. Gleam's dual-target architecture enables interoperability between web applications and Erlang-based systems, with the Lustre framework providing server and client-side rendering capabilities. This design philosophy prioritizes correctness and developer experience, making it accessible for developers transitioning from JavaScript or Erlang backgrounds.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Becoming eve-rich with Gleam (w/ Guillaume Heu)
Added:Last February was the first Gleam gathering which was actually really just such a cool opportunity and to I had the chance to present so what we're going to be talking about the main topic for today the my arbitrage tool thing but what was really striking to me was this was also my first conference not just presenting but just in general and I was really really arricken that I came back home and I was so excited about building in general I was like oh I could do this I was thinking maybe I want to get involved in building a YAML parser or something like that. Thank god someone else did it because turns out that that's actually a lot more difficult than I thought. I did contribute though at least some of the typed decoding part but that was really cool and one of the things that I thought was okay I have spent a lot of time because gleam is peculiar in the sense that it's it because it compiles both to JavaScript and uh and to Erlang you have two kinds of people who converge towards gleam you have the usually the web and front-end developers coming from the javascript side and you have a lot of backend developers coming from the beam side and so when I got into gleam I was thinking about the beam. I was thinking of scaling and all that. Turns out I ended up doing mostly just SPA, mostly just web using Gluster.
And I thought, okay, I want to do more beam stuff, specifically beam. And I want to learn the beam. Okay, what's specific about the beam? Obviously, it's the whole supervisor thingamajig.
And I thought okay how do I understand processes and links and supervisors and whatever gen servers are etc. And I thought okay let's build a web app because that's what I know how to do.
Let's build a web app to that represents that shows a tree an application tree right like a process tree or process forest of a beam node. And I figured yeah if I do that just presenting that tree I will understand I will have to learn okay this is these are processes this is how the links work applications and supervisors and everything learning by building something is really what's really cool is it takes you on all sorts of unexpected tangents such as yeah it turns out laying out like doing graph layouts is really hard. So my name is Guiam and I've been doing computer science for technically for about 15 years but professionally more like 10ish.
I have been around the block in terms of what I work on. I have a degree that specializes more in Java development but I've done a little bit of cotlin. I've done a lot of networking and system like a devops sisops and in the past I would say three to four years I wanted to come back to development. So I started with Go and I like Go. I think it's it's fine. A little bit verbose with error handling, but at least it doesn't have exceptions. So that's a plus for me. And then I just following some YouTubers, people started talking about Gleam. That was before version 10 came out. And I thought, okay, that looks interesting.
Looked into it. That's how I discovered the beam actually. And I thought, wow, the beam is awesome. I want to write on the beam. So the choice came down between Gleam and Elixir. I started looking at the elixir docs. I saw exceptions. I was done. It was Gleam. So that's how I started writing Gleam. And Gleam was my first functional programming language. And that made it I remember feeling like I was learning to code from zero. It's strange because looking back today, I feel like Gleam does not at all get in the way of me coding. In fact, that's the best praise I can give it is it's so pleasant because if I have an idea and I can put it into code very quickly. It doesn't feel like the there I don't feel like there are many gotchas or no, you need to do it this way. It's no Gleam.
There is one clear way of doing things and usually it's it doesn't take too long to get there as long as you have the correct mental model. So yeah, it's been very the reason I write Gleam is because I love the language. I think it's very pleasant. I've been writing Gleam for maybe two to three years something. Oh yeah, two to three years.
Yeah, I started a little before 1.0 came out and yeah, participated in the Gleam Gathering that was last February 2026 and that was an amazing conference actually that was also the first Glean gathering that was a big moment for the entire community. I think we were unironically like about 67 people but it was like a at a co-working space and the vibe was really very welcoming very open because I could compare that to so that was my very first conference just ever and then I went to code beam light in Stockholm so a few months ago and the com like I could compare the two it's a code beam was a lot more corporate and serious than people with like a few more people with suits and older also a lot of Erlang developers but Gle Gathering was just so many young people and most of the people who came did didn't even necessarily write Gleam but just wanted to write Gleam but didn't have the opportunity because it's not really well adopted yet. A lot of developers just can't afford to take on a side project on their weekends just to write Gleam.
So, one of the things that I want to do is to reach out to businesses whose developers are interested in using Gleam and try to explain maybe to to decision makers there. Okay, here is where Gleam kind of would make sense for you. Here's where it shines and try to define how it would fit like what would be a good project to do something in Gleam. So, laying out the landscape for people who don't follow Gleam and don't know what it's about. And so if you want to be a top 1% Gleam developer, just write Gleam. You're already there. And I was really fortunate to be selected to present one of my small projects.
Looking back, it's baffling that I was selected when because when I went there, I talked to some of the people who were this close to submitting their talk but decided not to. And I thought, man, if if you had presented this, there's no way I would be talking. There's no way my project is ever picked over yours. So I felt very lucky honestly. And so the project I presented was the this Eve online arbitrage tool which Eve Online what the hell arbitrage what is that?
What does that mean? Sounds French. And it turns out I thought people might be maybe a bit disappointed by the talk because it's it there isn't that much.
If you already write Gleam and you're familiar with it, there isn't that much substance. And then most of the talk was about Eve Online and about order-based market dynamics, which why is that interesting? But turns out people had had a lot of fun with it and I got lucky enough that I got to talk about that again.
>> So that's what we're going to be looking at today, right?
>> In the context of Eve Online, I Eve Online is so weird because it's so interesting. So, it's been a it's an MMO that's been around for over 20 years.
Came out in 2003, which that alone is telling that it really offers something unique. And it's very different from it's a sandbox MMO. So, that means the point is to let the users make of the univer like make the universe theirs.
And to do that, Eve has very strong order-based market dynamics. So order-based means it's if you've ever traded stocks or crypto, you can place orders. So buy orders or sell orders for a certain commodity. And that's what that's how Eve the EVE market functions.
There's actually thousands of marketplaces because there is one market per station, multiple stations per system, and thousands of systems. So in in theory, there are like thousands of technically isolated markets trading the same commodities. And if if you already know what arbitrage is, you know, that's that's prime ground for for making money here. Now, for more details on how all of this works exactly, my you can check out my talk on the my the gleam gathering.
Obviously, I go into more details. I have slides and everything, but basically the whole idea of arbitrage is just you buy low in one station, fly over to another station, and sell high there. You see the same mechanism in crypto. You buy a crypto low in one on one decentralized exchange and you would be selling it for a profit for a margin at a different one. The thing is there were tools that already existed to do this to do arbitrage in Eve. I felt like they were a little lackluster and that's how I decided that I wanted to build my own. So I built a first version in Go that worked in the terminal. It was fine but a little bit impractical and I wanted something graphical where I could save my settings and everything and that's how I decided that I wanted to have a web app for it. There's a few things. So I'll be honest I watched the beginning of your talk and then once I was back from the supermarket I got distracted and did other things. But one thing I' I find interesting is I suppose if you do that in crypto you you just do it right? So you buy the thing, you sell it somewhere else, right? It's really quick. Whereas here >> you you have the whole cargo thing, right?
So have real things that you're transporting and so on. So is there some kind of element of because you're saying other people are also doing this and so on. So is there some element that you can get unlucky that oh okay this is perfect and then you arrive just I don't know 2 minutes after somebody else has sold all that stuff.
So those are super interesting considerations when doing arbitrage in general, not just for EV online in crypto. Yeah, you're right. The friction is extremely low. It's a matter of milliseconds. That actually makes it really hard to get into crypto arbitrage. Another reason is because there you're trading real money.
Obviously, there's going to be high competition. But in crypto, yeah, it's milliseconds. So the edge you would get on your competition would be do you have special access with some of the major cryp like blockchain providers in the space. Basically it's all about backroom deals. It's can you get the quickest access and that's how you can make sure that your competition can never get in Eve for the route that I highlight in the talk. So that's the route between the two biggest trade hubs. It's depending on what you're flying. It's about 40 minutes to an hour flight time.
Can be several hours if you're flying like a big freighter. And yeah, absolutely. By the time you buy something, by the time you get to your destination, the buy order that you are targeting might be gone. And in fact, so in Eve Online, one of the cool things is that scams are a thing and it's intended. You're supposed to be able to get scammed in the game. So there are multiple ways to scam people in Eve. One of the ways that I've been thinking of scamming people is by making arbitrage more accessible and more automated. I can basically force people to buy junk that I'm selling because I'm like baiting them with a re high like a reprofitable buy order which the moment I see that they buy my stuff I remove the buy order. I haven't done that yet but it's a funny prospect. Maybe maybe don't reveal it all here. Otherwise, >> I don't know if it's if anything if you're smart enough to watch this and then decide, oh, that looks like a scam and I'm not buying it. I more power to you. I'm impressed. Even knowing that this is a possibility, thinking that someone is actively doing that.
>> And then the other thing is you just said, okay, you use the API. I'm not familiar with that many games that have an API. Is that did that come with that right from the start or is that something that developed? Okay.
>> So, yeah, I believe that Eve Online had an API pretty much from the start. I may be wrong about that, but if it wasn't on release, it was very shortly after. The ESI was is a has been a core part of the game for a very long time. And there are other games that include an API. If anything, I know League of Legends does and a lot I think probably a lot mostly it's about statistics, so win rates and things like that. you can browse a user's user's public profile, things of that nature. But in I don't think there are many games that have a as extensive of an API as Eve Online. And that is by design. They want players to develop their own tools around the game. Again, that's that's in the whole spirit of making it a sandbox, right? You make it your own. It's a it's an a simulation of the real world almost >> with less regulations. Yeah. So you can get scammed. [laughter] Yeah, real world. How much is covered by the API? Do you have to fly and do all this by hand or this is also could be automated?
>> So, I haven't looked into whether or not you can place orders via the API. I don't think you can. No, I'm pretty sure you can't.
>> Okay.
>> And that is because there are players who do station trading. So, it's basic basically means they just buy and sell in one station. They never venture out into space. This is insanely boring.
It's spreadsheet gameplay. And if these players could place orders automatically, they would not even need to log into the game.
I think that by design, the devs don't allow that. If you're not going to fly into space, at the very least, we want you to log in.
>> I wanted to actually ask the same question as Jay just asked. So, that gives me opportunity to ask another one.
Now, are you already really rich in the game then because of your tools?
>> So, it's funny because Eve definitely has a class system in terms of wealth.
If you have for instance people who are like just resource gatherers, so that would be like miners mostly. The mining in Eve is very it's very safe in a sense, but it's also really low return. you're going to take a lot of time to get through the ranks to increase your wealth to be able to purchase your next ship. Like for instance, if it takes you let's say 10 days to to get your return on investment on a new ship while the next tier of ship is going to be more like a 100 days and then the next year before that would be an order of magnitude more. So generally miners are at the bottom of of wealth and I would say that with with arbitrage I've definitely I think I managed to make a billion ISK in a day one time. Yeah, a billion ISK in a day which is there is a funny there is a one of the major content creators for Eve Online.
His name is Loru in in my friends group.
We know him as the billionaire guy because he has this funny quote where he's dead where he says I this is how I made a billion ISK in a month. Billion with a B. And it's funny because a billion ISK isn't even that crazy of an amount but it seems really big to a new player who might only see a few millions at a time. But yeah, I would say definitely being like doing arbitrage is far more profitable than mining, which is what I did before. And as for other activities, I think the most profitable you can get is station trading. You actually, this is the crazy part is the the whole activity where you don't even go in space is probably the most profitable one, which is really sad and boring, but that's how if you want money and it's just like the real world. If you want easy money, be an accountant.
It's boring as all [ __ ] but like it makes a lot of money because no one wants to be an accountant.
>> Okay. So what do you have for us? I haven't even seen any gleam code. So >> maybe more about Eve. Maybe you want to talk about some biggest problems, biggest challenges with optimal trading, right? You mentioned one thing that you have to fly and take into the considerations that you might take all this time buying and flying and then it's all sold. And also you have different you mentioned in the talk, but we can also go into you might want to buy just a little with a fast ship and you might also want to buy a lot with a big ship. There's so many variables, so many things. What was the most interesting, most challenging, the most exciting for you to solve or the most that you didn't expect? You just you solved it and oh wow, that's such a big such a big variable. Maybe something there and then maybe we can switch to Gleam and other stuff.
>> I guess I can demo the tool real quick.
This is the tool. The idea is let's say you select your starting and destination stations. So for instance, let's say I want to go from Amar to Jeta. Yeah. But in the console, you can see that it's grabbing all of the pages for buy and sell orders and then you can select them. You need to create a ship and the ship will be stored in your browser browser storage. Let's say you have two cargo holds >> ships that I would already have in the game and I would just tell tell the tool. Okay, >> so the idea is so this is how much money you're willing to invest your collateral. Accounting level is like an in-game skill that allows you to hit lower tax rates. So here this is the lowest you can that you can get. And the ship is yeah a ship that you have in your in your hanger. In theory you could log in with Eve SSO. So you could log in with your EVE account and it would auto it could automatically fetch all of your ships from the hanger in the starting station that you're targeting and automatically display those. Thing is that would require a backend and I don't want to I don't want the responsibility of making sure that the back end keeps stays up.
>> It's more a matter of Yeah, exactly. I don't want to worry about the uptime.
This tool is fully is only on the client which is also a little bit scary if people use it a lot. But there is no there's no caching and that it makes a lot of requests to the to the API.
And so let's see. But yeah, we can make 4 million here. And what's pretty interesting is that just by using this tool and like looking at the expected return, I can usually tell if someone else is doing arbitrage or not because there is not like the total volume like trading volume that you can make with this method is not super high. So the moment someone else does it, you can notice which is also I'm shooting myself in the foot publishing this tool because now I'm like creating my own competition.
>> So it's just one not necessarily one server but like one kind of logical server, right? Anybody who plays Eve, these planets are going to be the same, right?
>> This is what's really cool about Eve is there are no different servers or instances or things like that. It's everything is I believe it is technically sharted per system. So for instance if you have a lot of people in the same system it it will enter what they call time dilation which sadly has nothing to do with relativity but the idea is just yeah the when the server starts lagging we're just going to slow down the tech rate of the game. I like this. Right. We can use that at the jo now. It's not slow. It's just the time dilation feature. Right.
>> And actually there's been some really cool news very recently. It's actually Haley who showed me that. Haley Thompson about let's see it's the carbon engine.
Yes. So the [snorts] carbon engine which is uh the game engine for Eve Online was open sourced like last week. It became open source. And that's so interesting.
So I haven't I've looked at it. It has six repos or something just for the core game engine and then there's plenty more. I have no idea what I'm looking at honestly, but it's really cool. And I think what's really unique about Eve is specifically this the fact that it has a single instance. So you can use this game engine if you want a game that's going to scale massively. You you don't have to build your own system. You can just reuse this. It's so cool.
And I'm sure there might be applications for like non-gaming applications as well.
>> Is that fun?
>> What's that written? And >> yeah, >> so I think there's some C++, there's some Python in there, >> all the good stuff.
>> Yeah.
>> Okay.
>> Yeah. Again, you'd have to really look at it. I think they plan to follow those footsteps where they want to make it so that you can create plugins for it, which that would be incredible.
Honestly, it would make it way more accessible.
>> That's But it's just the engine, right?
It's not the whole game.
>> Yes, exactly. So, you don't get any of the >> Right. You don't get any of the assets.
>> Okay.
>> But the engine itself is open source. I think it's under MIT. So, the whole point is you can't make money is the point. non-commercial >> chosen a different ship or added another one.
>> Okay, sure. Yeah, we can test that.
>> Does does that affect it like Yeah. So, I guess what Jay was saying, right? If you have a really fast one then >> but basically so the route I'm talking about so between Amar and Gab what I'm showing here between these two trade hubs it's technically a 46 jump quote unquote safeish trip but you can make it way shorter if you take a shortcut that is very dangerous and full of pirates.
It's like the there is a singular jump in the shorter route in the shortcut. A singular jump where the police will not come help you if you're attacked and this is a breeding ground for pirates precisely because it's the shortest route between the two biggest trade hubs. So plenty of ships full of cargo are trying to fly through. It's called Amazon and the biggest pirate alliance in there is called Amazon Prime of course.
>> Okay.
>> Yeah. Go ahead.
>> It's really out there. I don't think it makes any sense. I haven't really thought it through. But so are the pirates also players? Regular players.
>> Yes. Yes.
>> So could they somehow also hit these APIs and see when they somehow get slow, [laughter] >> assume that somebody would go somewhere or some kind of weird side channel thing.
>> There are already ways in the game to see if someone's about to fly through.
Usually these pirates just basically they have scouts scattered across different trade routes. people who will just see ships coming in and out and scan them to scanning cargo, right?
Knowing, hey, what are you transporting?
Are you worth killing? Because basically for pirates, this is what's super interesting for pirates in what's called highex. So they that's the space where the space police will come help you.
It's basically just it's a matter of return on investment for the pirates. So the police they have a delayed response and the delay depends on the security level of the system. So a higher security level the police will come sooner which mean if you're a pirate a higher security level means you need more ships to take down a target. So your investment as the pirates is higher and the lower security level means you can kill someone for cheaper. You're still going to lose your ships eventually, but it's going to be cheaper. And the even on the safe trade route, there is a 0.5 security system.
So the security system is between zero and then it goes into the negatives, but that's a different question. Go. It's essentially between 0.1 and 1.0.
And anything between 05 and 1, the police will come help you. Anything below 0.5, there is no police. And at 0.5 is is really tricky because the police will come but they will take a really they take a really long time and it those become really dangerous systems because it becomes worth killing you even if you don't have that much cargo and it's a matter also of how tanky your ship is. So your the pirates they not only need to scan your cargo they also need to scan your ship to see what modules you have put to see how tanky you might be and how many ships they would and then there are things they can't see which is your skills and they can't see that and that can influence how tanky you are as well. how many hit points do you have? And this whole there are tools, there are online tools that allow you to compute basically for a given set of skills and a given fitting a given like a set of modules for your ship. It will tell you the maximum value of cargo until pirates hit return on investment by killing you.
So it can compute what's the safe amount of cargo that you can transport. But then you can go way above. What? What?
How do the pirates know how much cargo you have?
>> By scanning. They scan you.
>> Oh, they can scan and play. Okay.
>> But you can scan a a target. You can scan a player without having the police come after you. Though it does put a weird status on you, but the police won't come to kill you if you scan someone.
>> Is the police also regular players?
>> When I talk about the space police, I'm talking about Concord, which is NP.
There are NPC factions. There are NPC pirates and also NPC empires. Concord is a even like a sort of a third-party police thing which they operate everywhere in in Empire space in high-C.
So that's 0.5 to 1.0 zero security space and yeah they will come and kill aggressors >> but then you have to pay even at accounting level five right you have to pay 3.375% tax who gets that >> oh so the tax is to ensure that the game has a money sync because you can generate wealth in the game by mining generally because again almost everything in the game is created by a player. So all the industry, all of the s like creating ships and everything, all that is created by players. The market sort of self-regulates based on supply and demand. The only very like the only thing the game really gives you are those like fundamental resources like gas, ores, things like that. There needs to be a sink somewhere.
>> But is that also something that creates money then? fundamentally what's creating the money killing pirates essentially you can kill pirates you will get a bounty that's just inflation it just creates money as well >> okay nice yeah it's pretty realistic right the taxes of money sync it like it's just like Germany >> the developers of Eve Online they have economists on staff because that like that part there was a time for a couple of months where the tax rate so the base tax rate is 7.5% currently There was a short period of time where I think the tax rate was like 4%. And that doubled my margins for arbitrage. It was incredible because I'm making like I'm making all of my money on very thin margins. So the tax like the taxes represent easily like 50 like maybe 30% or 50% of it.
It's eats about 30 to 50% of my margins.
So reducing the tax rate by half was enormous for me but sadly they weren't happy with it. I think I have one more about Eve, but like we could obviously continue forever, but maybe that's at least this is one where it gets very interesting I find is that you said, "Okay, it's all if you do it with crypto, it's real money." But isn't there some way to convert this into real money, right? I know there's these people, [laughter] at least there was a talk, some people in China that level up your World of Warcraft character, right?
And then you pay them money for it.
Couldn't somebody pay you to do some arbitrage with you have the tool right they could just do it themselves but is there some way of converting this or is it just not the right crowd right there people playing with APIs and stuff so that is called RMT real money trading and generally it's against the terms of service you can purchase and there's one asset that's called Plex allows you to do a bunch of things such as extending your your subscription And you can either buy that for real money or for in-game money. So what that means is you can spend real money, acquire some Plex and then sell that Plex on the market for in-game money. So you can spell your spend your real money for in-game money. In theory, the opposite is against terms of service.
You can't sell Plex or ISK, which is the in-game currency. You can't share like exchange this for real money. But at the same time, if I come to see you and you give me€ 10 euros and you want a billion ISK, like I can What's CCP gonna do?
>> Yeah, I see. And in the end, it's also maybe it's also a thing where you want to just state that once and ideally not make it get too crazy, but then you've covered your ass and it's good enough.
There was a huge controversy several years ago, many years ago, because that was at a time where gambling with in-game currency, gambling with ISK, was permitted. And that makes sense because a lot of players, they had so much ISK, they didn't really know what to do with it. So, they were like, "Ah, screw it."
And it also makes sense. This in-game currency is perfect for gambling because you you can have fun and have the thrill and then if you lose it all, it's just pixels. It's not. You're still attached to winning because Eve is still a big commitment of your time, but you're not going to be destitute. And so, it was a big deal at a time. So much so that the casinos were like the richest factions in the game by a long shot. And it was not even close. And there were suspicions of casinos doing real money trading because to be fair, if you're sitting on thousands of realworld dollars worth of in-game currency, it's very tempting to just sell it for money.
So speaking of Gleam, you mentioned the Gleam and Go and some gotchas and things like this and I would think that starting with Gleam is quite similar starting with Go, but you mentioned that you had some it was not frictionless to start with Gleam. But do you think if you haven't go haven't had Go experience, I would start with Gleam right away. Do you think it would be an easy experience? But what do you think about starting with Gleam as a first language or starting with Gleam in general? Oh, as a very first language with no prior experience in programming in general.
>> Yeah, >> I don't I'm not sure. I really can't tell. I don't think I'm the right person to to answer this because I think historically >> what problems you had like when you were coming from Go for example. I >> I wouldn't say I've come from Go. I would say I've tried a bunch of languages prior to that, but I've done I had done a lot of work with Java, a little bit of C, but and also a little bit of Go. Yes. So, but the difficulties were just getting used to functional paradigms.
>> I see.
>> For instance, you can't just select the fifth item of a list. It's these kinds of things where it's like I need to think differently. It's not so much that there is a single feature that's difficult to grasp. It's just I need to shift my mental model and that that took a while.
>> So you can't do that in glean. You can't say give me the fifth.
>> There was there was in a very old version of the standard library. There was a list.
Function which allowed you to do that.
It's since been deprecated and removed because if you're using it, you're doing something wrong. So you can one way of doing it is just you could do an index fold.
So you could do an index fold and then the moment you hit the correct index you just that becomes your accumulator and then you return that. So you could do it still but again if you're doing this then lists are not the correct structure. You can use a dictionary instead or whatever.
>> Yeah that's funny. I never thought of that cuz like in Huskell and everywhere else you do have it. It's not widely used. I don't know if I ever used it, but it's just funny to know. Hey, if you don't have it and if you come in from and you're like, how do I do it and the language doesn't allow you?
>> Yeah, it's probably very funny experience.
>> How is the performance of of doing this in let's say high school? Is it like very fast or does it need to iterate through the whole list? How does it work?
>> So like you you usually don't use it because it's unsafe and >> otherwise it's linear, right?
>> Yes, exact. Okay, that's what I wanted.
>> But in pure script, we have stuff backed up by arrays and then in that case it's a const, right?
>> Yeah. Yeah, there you usually you you have lists as well, but I for some reason I always use arrays and it's also because on JavaScript arrays are super fast, super optimized.
>> What's really interesting about about Gleam is the way it's developed. So you can probably you can ask ask Lou P pill about this. He's the creator of the language and he would his thinking is the language should only allow you to do a certain thing one way and if something is not performant not a good idea in general the language should not allow you to do it. So list point list was that it's can we do it yes but it's a bad idea so we don't want to make it easier for you to do something stupid.
There is also gleam in the context of decoding Java JSON sorry JSON gleam types into gleam typed objects. So you can decode JSON into Gleam object and the way the decoding works like I have the I have an article about how what was it decode is it decode from I can't remember there is a function there was a function in the standard library which existed for the sake of convenience and was removed and at the time I was upset because I was using it but I dug into it and I and I started understanding okay the reason it was removed is because if you're using it, you don't really know the shape of the structure you've bu you're building. You're the compiler will try to build something but you're not explicitly declaring what you're building and so you don't actually know what you're dealing with.
>> I think I see what you mean. I think we have some crazy JSONs in our Scola repository for this reason. you have a service, you have a client in the server in Scala and you use it, you don't know what the JSON is and then at some point you're like, "Okay, I'm going to use this JSON somewhere else." And you look at it and it's such it's a ball of mess and you're like, "Oh, I see. Should have looked at it before."
>> You can still automate a lot of the JSON decoding. There is a code action. So you can basically you can select a uh a glean type and with a code code action automatically create an in uh an encoder and a JSON decoder for it. So super practical. You still need to but there are still a couple of things where you're going to need to fill out some some details like it's not going to do 100% of the work.
You still have to fill in some blanks.
But the so this code action is basically as close as it gets in terms of automating this whole process. But at the very least there's still an explicit declaration of what the structure should be >> being a catch-all function that's just going to try to do whatever.
>> Are you doing that maybe when you talk with the API?
>> Yeah.
>> So here's for instance some of the decoders and encoders for so this is let's see for a list of buy orders. So basically I have this order type. So in order to need to purchase we know we need to build basically trades. So that means purchasing at one given price and selling at one given price. So we need to fetch all of the buy orders from the destination and all of the sell orders from the source. So we need to fetch those from the API. I believe that this exact structure is like I made I built this type specifically so that it could immediately be ingested from the EV API with a simple automatic the automatic decoder I talked about. So basically it's just there's a single variant with all of these sub fields and that's it. So there's two things. So this is the decoder where I don't know if you're familiar with the use keyword in Gleam.
>> I'm not familiar with anything in Gleam.
So I don't know the use key.
>> So the use keyword is probably one of the coolest features of Gleam. Basically it avoids having nested functions.
So the whole idea is get it.
>> So decode field is the last argument is supposed to be a callback function with a single argument called duration. So instead of writing decode field and then opening up brackets for a callback function and then another decode field another set of brackets etc nesting it you can just if you use the use keyword it's going to know okay the it's going to expect that the last the last argument of the function you put on the right side of the arrow. it expects it to be a callback function and on the left side of the arrow it expects as many like variables as there are arguments in that function. So essentially everything in here is like inside the callback.
>> So this reminds me a bit of something async await in JavaScript. Yes, I love that I don't have to deal with it. But >> you get rid of the call back, right? But it's a specific call back which is called then I think right chain stuff with then >> and then they made this await thing. So I was wondering if maybe there's something maybe to make but maybe it's all I was thinking if it was like asynchronous computations or something like that but then that's probably also callbacks, right? So you can probably use there as well, right? Yeah, it's it's essential. When I say callback, I really just mean if I I'm going to yeah, use the GitHub editor. Let's see. There we go. So, instead of writing let's say instead of writing use duration here, I could instead do here would be a function that takes in duration and then I open the bracket and then everything all of this is in the bracket.
>> Okay, so it's like a convention thing, right? So as soon as you have something that takes in the function as a last argument, you can then >> Yes, exactly.
>> Okay.
>> And so that allow that avoids like the deeply nested stuff and it's super practical, super handy.
>> So the automatic like the code action that generates these these decoders takes full advantage of use. It's use is one of the nicest features in Gleam and probably one of the more difficult ones to get into. I think especially if you're already used to having a lot of these callback functions. In my case, that was never the case. So, it was actually fairly easy for me to Oh, okay.
If the last one is supposed to be a function, yeah, but yeah, if you're already like used to doing like a lot of this nesting, maybe this might seem both really cool and maybe difficult to get used to if you've never used it.
There are some really cool visuals of like how to convert from a classic callback to a use. There are some cool visuals, especially I think Isaac Harris Halt. He's like the bigger YouTuber in the game space. He has a cool visualization and a very interesting video about the use keyword specifically. And so you make one of those like some decoders you need to be explicit but then if you have list of those then you can derive it or automatically make it you you balance between making stuff parsing by hand and not by hand.
>> So basically the this is this expects a single this is how a single order would be decoded. So it's expecting a duration field, a issued field, a location ID field, etc. And then in practice, I'm expecting the API to return a JSON list, a JSON array, sorry. And so this is why this is the actual like these are the actual decoders I'm using. It's basically the previous one that you saw, the big one that's automatically generated wrapped inside a decode list.
So it's expecting it to be a list of these decoders, a list of these items.
>> Is the I'm seeing a lot of these arrows on line 55 and 58. Yeah. Is that the same thing that you can pass an argument?
>> It's another one of these nice features basically. So this is the pipe and the idea is anything before the pipe is passed as the first argument of the function after the pipe.
>> Ah it's the first in this case.
>> So use you move the last argument to the front kind of and the pipe you use the like what you're giving it you're moving to the first argument. And it's super nice again just to chain these and th this you will the pipe operator you will see like all the time in every Glen code base again it's just avoiding like this deeply nested like function calls. Yeah, this is very interesting because it has this kind of seal like syntax, but I can see how this at least I think I know some of this stuff from things like Haskell, but it's more approachable, right?
>> Yes.
>> Close to what you might be used to. And you even have the option, right? So you could write, you don't have to use this pipe, right? You can stick stuff in there >> and then at some point you're going to give in because you're going to see that it would be so much nicer, right? It's just okay. Yeah.
>> Did you see the line 50 53 mark the that they don't have the if else?
>> So again, I'm not familiar enough with functional languages to know if not having an if statement is normal or if that's just a green thing. I actually don't know.
I think it's just a glimpse thing, but it's still I think it's common to do it.
I do it quite often. Not always. I don't know. These days people don't review code, but I used to do it before and people sometimes would complain, sometimes not. But sometimes it's very nice. You just say this, do this when this and this is this. But also a lot of people try to avoid true and false to begin with as well. Just like trying to in so you don't make those mistakes of using true or false by accident. So you say the order is sell or buy. So you create those things. First thing you have to deal with it and I think it's very convenient >> in general. So this is one of the fun things of writing gleam with I tried vibe coding like completely vibe coding a pretty significant project in gleam and for some reason the claude absolutely loved using booleans when it's a really it's not a really bad idea it's just completely unnecessary like mostly unnecessary in gleam. very rare that you actually specifically need booleans. Very often you can I think one of the best things about Gleam is like the very strong type system and the fact that like you don't have an if you don't [snorts] have access to if but you do have very strong pattern matching which is just a more different way of doing if statements anyways. It's like a more generic version way of doing if statements. I think that was also the thinking when developing the language of what it should be like. I think the whole idea was okay we already have this very powerful pattern matching that is essentially I believe inherited from Erling and if statements are basically the same thing like there's we don't need it and yeah again like most of the time when you do if statements like you're creating it does mean it does make it a little bit weird at times like for instance if you have like for instance list dot is empty to check if a list is empty let's say you have a a list All right. So, so you declare your list and you want to check if it's empty. You can call list is empty.
You can do that. And then it's going to be either true or false.
And that works. But you can also do just case my list and take advantage of the pattern matching to say if the list is empty then you do something and in any other case you do something else. So those these two case statements are the same. This is the is empty function.
It's literally it's it checks if the list is equal to an empty list and it returns the boolean. doesn't it's [snorts] I think I could probably make the case make a PR to deprecate and remove this function because realistically is it really needed?
I think it's a really great idea to force people to do the pattern matching on the booleans because that just shows how shitty they are and then you can argue really easily, right? That just define something that actually means something, right? So whatever what was yours? Non something it reads much nicer and also you avoid stuff is not empty, right? Like when it's like all these double negations, right? How do you have stuff like >> we just looked at is empty and there was some equals empty list thing.
>> Can you just equals anything in the language?
>> They have anything that has this that is of the same type.
>> But anything then it will if I have a list of functions or something can I still do this?
>> Let's say I have a list.
Let's declare a couple of functions.
Let's say this one returns a boolean.
And then this one also returns a boolean. And let's say one last one that returns an integer returns let's say 10. So I can create a list. I can do funk one and funk two.
This works. And then my list is this is the type. It's a list of functions that take no argument and return a boolean.
But then if I do funk three, now it's screaming because it's not the same type. It's expecting something that returns a boolean, but it's returning an integer. And for funk four, it's also going to scream because it expects no arguments and funk 4 takes an integer.
But otherwise, it totally works.
>> So curious, can you run stuff here as well? Because if you define funk 2 to return true and then you equals them, is it going to say they're the same or not?
>> Yeah. So, let's say, can I do funk one equals Oh, yeah. It would be funk one equals funk 2.
Okay. You want me to run it? I don't think I can run this right now cuz I have I have it in the pot. Okay, hold on. Let me give me a minute. I'll set something up to run this or actually we can use the playground because yes since glean compiles both to JavaScript and to Erlang it's pretty trivial having it running run in a playground. So let's see. So basically the idea is that it compiles to both the internal representation in both cases is very different.
>> Yeah.
>> Let's say you have a front end like you have a full stack project with the front end in JavaScript back end in Erlang.
you're using technically two separate targets and they don't interoperate directly. What you can still do is have a third shared project. So you'd be using a monorrepo structure and have a third shared project with the declar where you declare everything that's shared between the two projects and then each project would compile that into its own version. So the Erlang project would compile the shared the shared dependency to Erlang and the JavaScript one would compile it to JavaScript and the thing is you can write the decoders and encoders and they will compile you can write it once and compile it to both Erlang and JavaScript. So you'd have a type that is declared the same way in both targets and then is encoded the same like to the same thing in both targets decoded into the same object in both targets. So the decoding the encoding and decoding is how you ensure interoperability.
>> That makes sense.
>> Does it not echo? I'm okay. Let me remove the these warnings.
There we go. Okay. Yeah, it's false.
It's false. Okay.
>> Yeah. Good question. If this returns true, does it >> Oh, yeah. That was the thing.
>> Yeah. Let's see. No, it's still false.
>> Okay. So, I guess it compares the memory address or something.
>> So, this is more of a debug. There is.
So because the because Glee is has a very strong static type system, you can't just do you can only print a string. So I can't print R for instance because R is a boolean. But what I can do so I can do in fact I don't even need to do this. I can just do this and then pipe into let's see [snorts] I think it's so I need to import Is there no two string? I guess not. So, okay. I'm going to do some gleam black magic.
Oh, okay.
I can just do Yeah, I guess I can just do this and then true. [laughter] I'm just reinventing the two-string function. And then pipe that into print.
Do you have to always write these prefix things like IO? Is there a way to get print ln without having to type IO dot or is that >> Yes, you can. You can import like the function itself by doing this. There we go. Now I can remove IO >> though I believe in the there is a page on the Gleam website about like best practices. I believe this is not best practices. You're not really supposed to do that but for the sake of convenience occasionally it's in the language for a reason. So, >> so there's two ways of doing it.
>> Got to say, Louie, the language is inconsistent.
[laughter] >> There are two ways of doing it. We can stop. We can try to do a bit of more. We can do two things. If you want talk a bit about the luster framework or luster framework, I don't know how to pronounce it.
>> It's luster. Yes, luster.
>> I think it'd be cool to look at luster.
Yeah, because so languages, all languages need their killer app. For Ruby, it's Rails. For Python, it's Python. But for Gleam, I really think Luster offers something that just doesn't really exist. The best way I can sell it is that Luster is a weird mix of it's like the best of both worlds of Phoenix live view and if Elm like it would be kind of like that too. It's actually inspired by Elm. So Elm is for those who don't know Elm is a much more as a niche like front-end programming language that I barely know anything about. I know it exists. I've been to Elm Camp. The Elm people are lovely. And in fact, Luster was inspired by the Elm the Elm architecture.
>> And the Phoenix [clears throat] thing I know, but Phoenix is an elixir framework.
>> So the reason Luster is super interesting is because it really fully leverages Gleam's double target. So you can both do server rendering and render on the client as well. In fact, you can do like static single page applications in luster and that's like kind of the easier way of doing this.
>> Can I do live view as well like sending updates to multiple things?
>> Nice.
>> I don't have a working example like a project that takes advantage of that yet. But basically the way Luster would do server rendering it would do it through what it calls server components.
So the idea is you develop your app.
Okay, there's a lot to talk about. It uses the Elm architecture which means it has it has a model view update and what that means is so for instance my model here. So this is a different this is not the Eve online arbitrage tool. This is the This is my resume, but I'm I've built it in Lester as well. And you can see like this is my model for my resume, for instance. Like here are all the variables I could have in my app. Now, for my resume, it's not necessarily the best actual use case because the resume could just be a completely static page. It doesn't actually need a model or anything like that. But anyways, this is like basically everything that can change in your application. And what's cool is because this is gleam you can the here in my model I have one variant of the model but I can very have very well have two pages that have two different models or two tabs let's say in my web app. So I would have two variants of the model and so this basically the model holds everything that can like all the data all of the live data that your application needs. Then you have the so this is just a function that creates the initial model to make it a little easier for me and then that model is first fed into the where is it? There we go into the update function. the update function. The point is it takes in your model and based on a message. So it takes the previous model it takes a message which is essentially something happened and we want the model to be updated. So the message type I can show you here. There is only one message for my resume app which is that the user changes the language for from English to French for instance. So the message would be user changed message and then to which language it was changed. The update function receives that message and so I do a case on the message.
What's the message I just received and in my case there's only a single one. I extract the new language and then I update the model to include this new language.
But yeah, I include the new language in the model. Once that's done, >> so curious about this hashtag is does that mean effect or what is the hashtag?
>> So this is because this is a topple.
>> Oh, okay.
>> And in fact, fun fact, but the pupils are strongly typed as well. So if the like you see the return type for the update function is always going to be a pupil that contains the model and something that's a side effect. So a side effect would be anything that for instance any asynchronous operation I calls IO stuff like that anything that shouldn't that should be done in the background and would otherwise be blocking the like the view function.
>> You also said you just have the one message if you had another one would it still compile or would it complain here?
>> Let's see it. So let's say a user uh is stupid. Let's see.
>> It already complain.
>> Yes, it's all the LSP is already complaining.
>> Okay.
>> And then I can fix add missing patterns.
Boom.
>> Mhm.
>> And now >> I like that you don't have any commas or semicolons or anything in between the variant like on the right between messages. You just >> So for the cases, yeah, it's based on indentation is based on new lines. In other cases, it's going to be separation with commas as well. It's like a mix of both.
But generally, and the formatter, there we go. The formatter is actually very strict. This is why this pupil looks this way is because the formatter wants it to look this way. If I change it and I say, "No, I want it to look like that." And I save. Nope. The formatter disagrees. Same thing for comments for instance. Yeah, exactly. It moves my comment back.
So that's personally I think it's a little bit too opinion opinionated. the formatter. It's good. It's just a little too opinion opinionated. But at the same time, it adds the advantage of you know, you always know how to read a gleam codebase. You're it's you're used to it already. Whe it's not a matter of whether or not you like it. It's just you're going to be used to it.
>> It looks much better than what the Golen thing produces. I think which I looked at this and they were all so proud of it and they were like, "Oh, this is just one way already off the screen, right?" But uh I think that's a good thing and it's probably more annoying because you don't work in any kind of team on Gleam stuff, right? I think that's what that's solving, right? Is that somebody says, "Oh, but I like that one better." Right?
If one of the challenges for Gleam is that it there Gleam has no corporate backing and no corporate there are corporations that are sponsoring Gleam but there it's not managed or maintained by any any corpor uh corporate actor which means adoption adoption is really hard and it makes sense to focus your attention on making sure the language is easy to adopt for large code bases. one of the one of I think one of the pivotal PRs that is still pending currently and I think deserve way more attention because it's only going to move forward if people start saying that they're interested in this. There is a PR I think for Elixir. Is it Elixir itself or is it Mix? I'm not sure. basically to add Gleam support in Mix, meaning Mix can just take a Gleam project and include it into an an existing Elixir project. I'm not an Elixir dev. I just know that this PR would be super helpful to elixir devs who want to start experimenting with Gleam. And sadly, at the moment, it's in limbo.
>> And mix is a build tool for Elixir.
>> Yes, that's right.
>> I have a project in Elixir that I was just exploring the language recently and I tried to add some Gleam integration.
It's crazy. I think >> yeah, makes sense.
>> Again, I think this PR would be absolutely huge. So, if you're an Elixir developer, you would like to write some Gleam, go find that PR, go complain about it.
>> So, you want it merged.
>> Can we quickly look at the view?
>> Yes, exactly. So, so the model is the state of your app. Update is the app receives messages and the model gets updated. And the view is a static presentation of the model. It all it takes it's a pure function that only takes the model and returns here what's called an element in luster which is it's just it's just HTML and >> it has native Tailwind integration.
>> Oh, so first of all yes it does have Tailwind integration and including Tailwind 4. So that's how I use it. But the bigger thing I wanted to show there is a literal converter where if I have I need to write HTML that's going to be embarrassing. So it's literally you just give it plain HTML and it's going to write the luster code that you can just paste into your view function.
>> Server side sends updates to the front end. Do you know if it's sending patches like divs or it sends the whole HTML all the time when your view changes when your model >> send it sends patches? I believe I'm I'm like 95% confident it's patches. This is super interesting because so I believe so I think is how you pronounce her name.
She's I think the second major contributor to Luster. So this everything I've shown in luster here this project is just it's an spa when it comes to server side rendering the way you do it essentially is this whole application here. So here the way I have it work in this project is I say create the app and then start the app. Mhm. [clears throat] >> What I can do instead is I can create a component. Basically, with one line of code, this entire app I can just make into a component and that component can actually be a server component. So, going from an SPA to something that's fully server rendered is trivial. It's literally two lines of code. Then I need to write the server for it, which that's boilerplate but less trivial. But the luster side of things is really easy.
When it comes to how the update works though, Rebecca has a talk at the glean gathering that was just super interesting going in the very technical details of how to optimize the update function. But when it comes to yeah, how the how it would be server rendered, I believe yes, it's in patches. I don't think it it wouldn't be reasonable to send a whole DOM every time.
And I think in terms of performance generally, so back six months ago, I think the performance was on par with React. I think today it's better than React. Probably depends on your benchmarks and technically that's a first party assessment. It's not my words, it's Haley's. But I think we luster definitely has come a long way both and both luster itself has made a lot of progress as well as the just the javascript compiler the cling javascript compiler has become a lot more optim optimized as well.
So I I don't know if you want to go into this but one thing I'm always wondering is that so this uses Erlang right and I know Erlang or beam right and that is from like the application used to be some telecommunication stuff right like all these actors with little stuff in there I could never come up with a good use case for building my stuff but it looks like just a web page is already a good use case how does that do you have any idea how that maps to like how that's being leveraged for this kind of stuff?
>> Basically what I have here is a project that's using the JavaScript target. So in this project specifically in the web pages there is no ELG there is no actors nothing. But if I want to switch to server rendering, first of all, converting this to a server component would be trivial, then what I need is a an Erlang server or a Gleam web server for the Erlang target. The most used the most common one is the mist which and then you have wisp which is based on mist and is more powerful and that one I believe handles its own actors.
It has its own supervision tree and handles its actors it its own actors.
There are two relevant gleam packages for like specifically for Erlang for OTP stuff. The first one is gleamotp and this one revolves around actors specifically but actors like the way actors work in gleam is interesting my understanding is gleam mostly relies on just the low-level primitives of earl so processes and then builds its own model of what an actor should be for instance here we're creating an actor so actor new I believe this is just an initialization parameter. Then we have a callback function for handling messages and then we start the actor. The other one would be the gleamlang package which actually deals with the lower level primitives of of Erlang. So you have atoms you have yeah process is a big one obviously. So this is how you deal with the low-level primitive for uh for Erlang. I believe there is also a one for JavaScript actually. Yeah, there is a gleam JavaScript package as well. And it has the arrays, it has the promises, symbols. I'm not sure what that is. See, I'm not a JavaScript dev, thankfully.
And you might ask, okay, what's going to happen if I try to use these libraries, these packages? So, so for instance, the JavaScript one on the Erlang target, what would happen? It simply wouldn't compile. The compiler would say, "Nope, not the correct target. It's not going to work." So, you can't you cannot mix.
Oh, man. You can make it you can design a function to only work on a single on a specific target, but but not directly.
Make a function that calls Erling code and then don't create a fallback for JavaScript, then it wouldn't be able to compile to JavaScript. for instance, >> how would you I don't know if you ever do that, but if you want to use maybe some fancy JavaScript library, >> yes, >> like or whatever.
>> I do use LK. [laughter] >> So, how do you write that? Is that the point where you write some gleam and then you expect something on the other side to be there or how does it know whether it's going to work or not? Uh so this is a different project. Yeah, there we go.
This is a different project. This is a YAML parser that I did not write. And what you do when so when you want to use FFI, so that would be using either JavaScript code or Erlang code in your Glink project, you use these what's called externals. Yeah. You so you declare an external, you tell it for what target this is. So this for the Erling external the second thing is the name of the module of the Erling module you're targeting I think which yeah and then the name of the function for JavaScript this is the name of the file you're targeting and this is the name of the function >> so there's only there's only JavaScript right more back >> end these are the two official officially supported targets there are community targets there is one for ny for instance politics. I believe there have been attempts as well at a so native target or C target sometimes. I think a native target for Gleam would complete the holy trinity of having front end, back end, and native. That would be incredible. Not anytime soon.
Don't hold your breath.
>> It's the thing I'm just worried about is that you have you're the author of this function. So, if I wanted to use this in my new fancy C back end, I have to get your approval, right? I have to make a PR to your so I would have to go in and then add all my external annotations in that code in order to be able to use it from my other back end.
So let's say a C target is added to clean and we want to make sure taffy would work with it. Then yes, for all of these externals, we would have to either manually write. So this is essentially just the prototype of the function and we assume that it's going to be handled by the external.
>> We can also create like manually write the fallback.
>> Oh, that's so you can have a native or not native but clean. Okay, >> this is for instance, let's say that we have the Erlang external but no external for the JavaScript. Then this is the fallback function for JavaScript.
>> Okay. Yeah, that's cool.
>> And so for instance, this is how I used Elk. So again for this project I'm doing where now I'm rewriting I'm writing a whole Sugyama thing. But I wanted to at first I had it rendered on the client not because I wanted to but out of convenience because I wanted to leverage Elk and so my front-end project had an FFI to Elk which I I pulled EC through Elk through npm and then I told I created an FFI that pointed specifically to to Elk and that worked.
>> Yeah, makes sense.
>> And this is also how you would do FFI in Erlang. So for instance, if there was an earling module for graph layouts, this is what I would use also and it would be server rendered.
>> I think we covered quite a lot and I think we can wrap it up. What do you think? I guess to wrap it up, what I would say is really gleam is so interesting because if you're a back-end developer, especially a functional programmer, and you look at you can come to Gleam through the beam and then start getting into front like front-end development, which at least that's that's the path I took. I hate JavaScript. I I love that I don't have to write it. And being able to write web to make websites for me was a big deal.
finally being able to share some of my projects to publish them online and and then from the other side I've heard from some front-end developers who discovered Gleam and really fell in love with Luster and as a side effect started being more if you want to start doing full stack projects you have to start learning a little bit about the beam even if it's not too much and then that's how you start dipping your toes.
So, it's really a very interesting bridge between two two communities that don't necessarily communicate that much and I think it's so cool that Gleam can show up at both a JavaScript conference and at an Erling conference.
>> Gleam has marketing and really nice >> logos. It has possibly nicer syntax, right? I think it feels to me very much reminds me of Elm back in the day that it's very friendly, right? I think it shares a lot of the same core principles with Elm and even Luster is inspired by Elm like explicitly.
>> Yeah, I personally think also React is just a thing in the end, right? Like it's to me also I still haven't seen any more reasonable or maintainable way of writing web apps than to just have these trees of components that you compose because otherwise just easy >> that components. So, I've mentioned server components in Luster. Regular components are al also a thing. It's just right now since it's still [clears throat] >> relatively new. There isn't that big of a catalog, but it's definitely a thing.
And I think there's also a pretty significant project that's in the works by Haley that's going to leverage that, but you'll have to ask her.
>> Cool. Cool. Thank you. That was really fun.
>> Thank you for for the offer. I love talking about this stuff. So, >> let's get more people into clean.
[snorts] >> Yes. Propaganda shout.
Related Videos

TOP 15 Data compression Interview Questions and Answers 2019 Part-2 | Data compression | Wisdom jobs
wisdomjobs
281 views•2019-06-28

CTS 158: 802.11w Management Frame Protection
ClearToSend
4K views•2019-02-04

NDSS 2019 Send Hardest Problems My Way: Probabilistic Path Prioritization for Hybrid Fuzzing
NDSSSymposium
496 views•2019-04-02

How realistic is Cities: Skylines?
CityBeautiful
159K views•2019-02-14

GUIs & TUIs: Choosing a User Interface for Your Python Project | Real Python Podcast
realpython
2K views•2025-04-04

The OSI Model - Explained by Example
hnasr
225K views•2019-05-12

Cloud Computing - Introduction
elithecomputerguy
98K views•2019-10-07

From Traveler's Dilemma to Dynamic Routing | Demystifying Networking
IITBombayJuly
5K views•2019-08-04
Trending

WOW! Judge TURNS THE TABLES on Trump in His OWN $10B LAWSUIT!!!
MeidasTouch
197K views•2026-07-23

Playstation NO DISC/NO BUY Fight Is Over...
DavidJaffeGames
4K views•2026-07-23

Steam and Xbox Just Dropped The Hammer On PlayStation
OhNoItsAlexx
9K views•2026-07-23

Americans Confused in Australia for 17 Minutes Straight
IWrocker
17K views•2026-07-23