Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Untitled notebook

thinking_elixir.livemd

Untitled notebook

Mix.install([
  {:bumblebee, path: "~/Projects/bumblebee"},
  {:exla, "~> 0.4"},
  {:nx, github: "elixir-nx/nx", sparse: "nx", override: true}
])

Section

Nx.default_backend(EXLA.Backend)
{:ok, whisper} = Bumblebee.load_model({:hf, "openai/whisper-small"})
{:ok, featurizer} = Bumblebee.load_featurizer({:hf, "openai/whisper-small"})
{:ok, tokenizer} = Bumblebee.load_tokenizer({:hf, "openai/whisper-small"})

serving =
  Bumblebee.Audio.speech_to_text(whisper, featurizer, tokenizer,
    max_new_tokens: 200,
    defn_options: [compiler: EXLA],
    forced_token_ids: [
      {1, Bumblebee.Tokenizer.token_to_id(tokenizer, "<|pl|>")},
      {2, Bumblebee.Tokenizer.token_to_id(tokenizer, "<|transcribe|>")},
      {3, Bumblebee.Tokenizer.token_to_id(tokenizer, "<|notimestamps|>")}
    ]
  )
path = "/home/kuku/Downloads/mech.mp3"

{info_json, 0} = System.cmd("ffprobe", ~w[-v quiet -show_format -print_format json #{path}])

format = if System.endianness() == :little, do: "f32le", else: "f32be"
chunk_length = 20
overlap = 2
{duration, _} = info_json |> Jason.decode!() |> get_in(["format", "duration"]) |> Integer.parse()
transcription =
  0..duration//chunk_length
  |> Task.async_stream(
    fn ss ->
      {data, 0} =
        System.cmd(
          "ffmpeg",
          ["-i", path] ++
            ~w[-ac 1 -ss #{ss} -t #{chunk_length} -ar #{featurizer.sampling_rate} -f #{format}] ++
            ~w[-hide_banner -loglevel quiet pipe:1]
        )

      current_chunk = Nx.from_binary(data, :f32)

      serving
      |> Nx.Serving.run(current_chunk)
      |> get_in([:results, Access.at(0), :text])
      |> IO.inspect(label: ss)
    end,
    max_concurrency: 4,
    timeout: :infinity
  )
  |> Enum.map(&amp; &amp;1)
output = [
  "Hello and welcome to the Thinking Elixir podcast where we cover the news of the community and learn from each other. My name is Mark Erickson. I'm Kate Ward and I'm David Bernhaisel. Let's jump into the news. The big news is that Phoenix 1.7.0 the final",
  "The big news is that Phoenix 1.7.0, the final was released. So you've probably already seen this because this is something that kind of blows up on social media and just on all the different sites that you might visit about the lixer and Phoenix, but we want to touch on a few different things in here. So along with the release came a blog post.",
  "This covers a lot of the different things that are in here. So there's Phoenix 1.7, the built-in tailwind CSS, the verified routes, and live-view streams. Now, streams is specifically a live-view feature, but it's still relevant to the Phoenix release because the generators were updated to use streams. The final version of Phoenix",
  "is using the latest version of LiveView and when you generate a new resource like a LiveView resource in your index pages and the modal edit forms and things like that are all reworked to use streams. That's pretty cool. I definitely recommend checking out the blog post as it covers a few things and we want to touch on a few of those here. One of the things",
  "is just restating what we've kind of been talking about before that Phoenix is backward compatible is statement that says this is a backward compatible release with a few deprecations most folks should be able to update just by changing a couple dependencies. I've seen that myself as well. Another resource you'll find in the blog post is",
  "a step by step upgrade guide. This is a gist that's created by Chris McCord. So it's a public gist and what I recommend people do is check it out. I've walked through the things and did some minor upgrades on a project I had just to test it all out. But also because it's a public gist, other people have been sharing their own upgrade tips and",
  "fixes and maybe questions that they'd had. So there's a fair bit of discussion over there too that can also be helpful resource. Yeah, I always like those just because there's always one thing or another that gets missed and there's always that discussion down below. It's like, oh, and don't forget to do this and this and oh, it helped when I did this thing first before I did that thing and that helped",
  "at least. And another thing that changed is not necessarily a hard requirement on a Lix or 1.14, but a suggestion that if you don't do it, then you're not going to get those nice compiler warnings that come with the verified routes. So definitely upgrade to a Lix or 1.14 if you're able. Previously we talked about some of the things that were in the RCs like the new core components.",
  "And in the final version, the way core components works changed in some significant ways. That was a little bit unexpected. And I think that this is just one of those signals about what happens when you jump in a bit early on something like a release candidate. So I had to go through the process of, oh, well, I'm",
  "still just very fresh on this migration to core components, it's even isn't all the way finished of doing the changes I wanted that I want to figure out what's changed from the release candidate to the final version so I can update those things too. We're going to get into some more of those changes because they're significant or getting a few more of those in a minute, but first",
  "want to talk about how you if you've already played with the RC version and you want to see what's in the final version and how that's differed. I actually was able to use David your tool, a liquor stream dot dev, the diff generator and we've got a link to that in the show notes where you can do a diff of the RC to the final one and future",
  "on RC1 and you generated a project and used that as your foundation then it's a great way to see what changed because some of those changes I was really surprised by them they're good but it's like wow I just I didn't expect those it was already so new I didn't think it would be even newer right quick shout",
  "out to a fella that helped find a bug in the generator actually as well in the Phoenix Gen off generator in the dipping tool that you're using. So if you've looked at it recently, you might want to come back and look one more time. Learned a couple small details. I won't get into it, but Phoenix will generate a project with a fuzzy lock and that didn't quite work with the way",
  "I expected it to. I want to try to get these difts anyway. So we'll have a couple of links to the difts directly so you don't have to wait on them being generated. But yeah, that was pretty nice to see the changes and how to use streams. Yeah, another one of those changes that I caught in the core components differences is there was a change to the app HTML",
  "Heaks the layout the app layout. There was a new component called a flash group that was added to core components and really that just cleaned up the markup a lot took a lot of that boilerplate stuff and wrapped it into a single function component. So there's a lot of little things like that that are just super handy to be able to see and in the diff.",
  "Yeah, I was looking at that one and I appreciated it because it's like, why do I need to know that I need to create an error and an info and then also create a your reconnecting because we lost internet and you know, just wrap it up in something and I don't know if I was to summarize what I noticed from this core components file is that that live use come a long ways like I remember",
  "when it was in its early days. And we were struggling to do some of the most basic stuff and fast forward to this release with the generators. Their style really nice. The core components the inputs have like straight forward air handling and even last release. I felt like it was hard to put like a red border around",
  "inputs when there was an error on your change set and that just comes built in now with the generators and these core components. And I just feel like we've come a long way. Is it starting to feel really nice? Speaking of coming a long way, I still think that there's a journey here to continue on, but Phoenix and forms.",
  "just a little bit of context here so like today there's there can be it's viewed as a problem I guess I haven't had an issue with it, but it can transmit a lot of data over the wire and it might still to I think I've seen some folks get into some details on that but anyway when you're creating a form with Phoenix there's you know Phoenix dot HTML dot form there's a",
  "there. And you kind of have to like use that form struct even with all those individual fields, right? And one of those fields changed the whole form is sent back over the wire. So it's a little bit inefficient there when you're dealing with constantly changing form values, right? Well, in this release, in the final release, there's another structure",
  "that is going to be interesting to see how this evolves and that's getting down to the form data, the form input itself. And so there's some new ergonomics around how to construct forms and how to get that to play well with live view and by getting it to play well, like the generator stuff, all this stuff's going to make sense to you. We just got to do some",
  "something a little bit different to take advantage of those features. So the idea now is that if one form value changes, it doesn't have to send the entire form back over the web socket wire to update the front ends now. So there's some optimizations in place now, but you know, devils in the details, I think still because",
  "at least in some of my forms if you change one field, it kind of informs some of the other fields or all of the fields it kind of just depends on what you're doing. But it's interesting. I don't know. Have you guys had a chance to look at that? What do you think? Yeah, I got tagged by that one as a little bit of a surprise. So I generated a new Phoenix 127 project in",
  "it in new live view resource so I could see what the changes were and I was looking at it and I was like I see these other functions like two form and when I'm looking at the form in the template it's not passing it a change set. I always see it pass a change set and now it's not. It's passing it a form. One of the sections of the block",
  "about this new release is talking about some of the things that you mentioned there David, which is like that new form field data structure. So that means in our live you we have to convert the change set, there's helper functions to do this, but convert the change set into a form and then those form data structures are what we're actually using in the",
  "actual at Markup. That comes back to what's been a discussion for some time about how the Phoenix team wants to do improvements to forms. And now it's kind of like separating the tight linkage that there was. There's a total bond of change set to the HTML form. And now it feels like that's really loosening up. Like there might be other ways to do things.",
  "now. So that's a bigger change, which I thought was really interesting. And I'm still trying to wrap my head around that one. I wonder if this is breaking it up the API bit to give room for managing state full forms. Because you know, it's still kind of considered stateless, I think. Anyway, I think that there's going to be some good improvement.",
  "movements even beyond this with forms. So yeah, I'm excited. Well, okay, we've been covering like what things have changed so far, but with every big release like this, now that it's one seven final, you kind of wonder what's coming next, what's going to be 1.8? What's next for live view and all that kind of stuff? Like how can I get better than streaming?",
  "So the only folks that can really answer that I think, you know, our core team Phoenix folks and one of those happens to be Chris McCourt. And so there's a nice blog post out there. We'll have a link to it. It goes into it a bit. Here's a quote, though, with streaming collections as the default, we can move towards more advanced out of the box features for our live, crud generator.",
  "in Phoenix, Jen Live. For example, we plan to introduce synced UIs out of the box for resources. And the generated Phoenix form features will continue to evolve with the addition of the new two form interface. And quote, I think that's what a little bit of what I was just talking about. So there's room there to grow for state full kinds of forms.",
  "Yeah, and I just thought of that whole idea of synced UIs out of the box. Yeah, what does that mean? What I understand the synced UIs to be is when you start looking at the models where you might have a form edit that comes up in a modal and you're doing your edit and then what it does is it's sending a message using OTP message passing.",
  "to the live you parent and saying, Hey, this has updated this resource has updated and then it inserts that into the stream in the live view. Okay. I think that might be some of that, but then I also do wonder if maybe it's a little bit more pub subby kind of stuff too. Like now that we have this message passing thing",
  "and we know about updates happening, we can put it in a Pub sub. So if you have Pub sub set up, then maybe those updates can propagate. I'm not sure exactly where this is going, but what's interesting is just the idea that there's a lot more room where this can go. Cool. Well, if you're interested in learning more about streams, which is one of the new features we were just",
  "talking about Chris McCord wrote a blog post introducing this feature where he explains how it works and kind of shows some code examples. That blog post is going to give you a good example from like a new app, but if you have a current app that's using like temporary signs and a pen and pre-pented all that jazz, herm on for let's go actually created a short video screen cast about this. So we'll have a",
  "link to his screencast. That's probably going to be relevant for a lot of folks. So yeah, go check out her Montvelescos video there. So I saw blog posts come through by Bromverberg that I thought was worth bringing up. He talks about how we should not trust our clients even in live view. He suggests even if you hide a button saying if this person doesn't have a permission, don't show this",
  "button, that's not enough because he gives code examples of how you could even just write into the console a web socket message to still push down to the server and issue a delete. And so it's not enough. You need to also inside of your handle events, check for permissions and just remember it's a good reminder of this blog post.",
  "to just not trust your clients, even live you can be susceptible. And by clients, I mean, your web browser, not your customers. Trust your stinking users. Yeah. But it was kind of amazing. I'll a little bit of an eye opener, just how easy it's literally one letter, right? Just just",
  "analyze the traffic that's going through the website. It just changed a couple of like change the ID and you just deleted someone else's post. Yeah, that's as much as it takes. It's readable. You know, like this isn't like obvious skated like white hat kind of hacker stuff or black hat kind of hacker stuff. This is like it's very obvious. It would",
  "take much. So yeah, good reminder. Thanks, Ken. And next up, Phoenix Storybook 0.5.0 was released. So Christian Blavier explained that it's based on the latest Phoenix and live view and brings some new features. Just want to highlight a couple of them. A new kind of stories or examples, a new endpoint for writing visual regression tests.",
  "So that's the latest in great stuff. But we've got a link to the full Change Log in the show notes. So you can check that out. Another change that was worth mentioning is that the project was renamed. It was previously PHX_live_storybook and was changed to Phoenix_storybook.",
  "matters because it's referenced in the projects that are using it. So that's a little breaking code change, but not a hard one to fix. It looks really good. By the way, like Phoenix storebook, like just using it, it looks fantastic. So I'm excited. All right. Next up, a looks or an action. You may have heard of that book. If you're at all in the Elixir space, you've probably heard of Elixir",
  "So there is a first edition, there is a second edition now. And now there is a third edition that's coming available in Manning's Early Access Program.",
  "Currently there is a 45% off coupon shared via a tweet of theirs and you've only got a couple of days to snag it it expires on March 9th 45% off is kind of a big chunk there. So if you're at all thinking that you're going to get this book you should get it and get it 45% off. We've included this coupon code in",
  "the show notes for those that are listening and need to copy and paste that code. It's ML York 3. Another quick live unative progress update. Ryan Carter Ella shared that they are on the home stretch as of this recording. They've passed the 80% mark, but he's careful to set some expectations saying that what they're doing now is to support",
  "Swift, UI views, and next they'll be working on some Swift UI modifiers and animations, but overall, awesome progress. I'm excited to see what they come up with. Indeed, yes. And that's all for the news. A mixer and Phoenix are incredible. They make it possible to quickly build highly resilient and reliable.",
  "viable systems capable of operating at incredible scale. Fly.io is a great place to host the Lixer apps. You can deploy your app to multiple regions around the world with a private network linking them all together, so your app can cluster and globally do some incredible Phoenix magic. Give your users a more responsive UI while writing less code",
  "and moving the app closer to your users without needing an ops team. Check out fly.io for your next elixir app. Today we're being joined by our special guest Andrea Leopardy. Andrea, welcome to the show. Hey, thank you so much. I'm happy to be here. Alright, well I'm glad you could join us because we've been talking about you on the news for some time.",
  "And some of the proto hackers challenges the network challenges that you were doing with a mixer, which is really cool. Then you're also you've done some improvement to the debug the IEX tool and what that lets us do is like a quality of life improvement. I want to learn more about that, how that works, how you can actually pull something like that off. But also you're a core team member on a mixer.",
  "And I'd love to get some insight as to what you've been doing with the licks or your story and journey there. But before we get into all that, I'd love to just hear a little bit more about you. Like where do you live and what kind of work are you doing? Yeah, absolutely. So I'm Andrea and I live in Sanctuary, Italy, which is where I was born as well. It's about an hour east of Rome. And I currently, I'm",
  "I'm Lloyd and I'm working full time on the book that I'm going to write for Prak Prague, which is network programming in Erlang and Elixir. So I'm taking a sabbatical between jobs to focus 100% on that. Yeah, I've been in the court team for about seven years now. I've been doing Elixir for close to 10 now and I've done a lot of public speaking.",
  "and training and I've done a lot of back end systems in general and architecture and all sorts of stuff computers. So I remember one time in the past you mentioned that you were working at Apple on doing some live-you stuff and I was just like, \"Whoa, there's live-you stuff like because Apple is generally very tight",
  "I was working in this part of Apple called environmental supply chain innovation. I started organization within Apple and I was in a small software team working on internal tools.",
  "I was just putting that way, I think that's the better say just that. But we were using a mixer. They were not really advertising a mixer there, but it's public information. And we were using a mixer for building that sort of stuff. So yeah, there is some mixer in Apple in the.",
  "that you are a core team member at like seven or eight years. And I'm just curious about what a core team member does. Like, are you doing PR reviews? Are you doing mailing list discussions? Like, because I know the mailing list people make proposals for language changes and there's all that kind of stuff. It's just a lot of, there's a lot of administrative work, too, that has to be done. So what kind of stuff",
  "is that you've been doing. I would say that initially it was a lot more actual work on a mixer code on the mixer code base itself, but with time a mixer has become a lot more mature I think so right now the work that we actually do on the code base is a lot less right like we do a",
  "a lot less stuff and the community is so big that everybody wants to join in. We're generally happy to have contributions from other people that are not in the court team. A lot of what I do is definitely like I would say 95% in a look for itself. 95% is administrative work. I do a lot of",
  "We try, I mean, we try to do a lot of PR reviews and issue, try adding and community work as much as possible. So, you know, being on the mailing list, being on a mixer forum when we can, I generally consider also like speaking of conferences or being on a podcast. So, I always say that's like part of being in the in the court team and kind of like,",
  "participating in the community as much as possible. As for me, like the cork team is pretty small and I think everybody has slightly different roles. So if you take Eric for example, he's that's a lot of work in hacks, right? Which is not proper. It looks or core, but like it's still a core part of the elixir ecosystem, right? So I still like, you know, see that as also like part of",
  "is being a member of the Luxor team and my area, I guess, is that I do a lot of, I co-maintain or co-maintain a lot of libraries. You have Redics, you have the Bunch of Broadway stuff, you have a bunch of nimble, underscore stuff and you have stream data, you know, there's a bunch of stuff that I help",
  "maintain and I think that's definitely where most of my programming time goes right like fixing issues and mean to and like in a Cassandra driver like this is just a lot of stuff that like it doesn't require a lot of work like each thing there doesn't require a lot of work but they pile up right so like you're not gonna like look at the protocol for",
  "like, you know, every positive for like two months and in two months, like a few things come up and so like you just do cycles over in Oregon and you generally pretty busy with just doing that, you know. That would be a challenge just to be jumping around between code bases that you don't spend a lot of time in just because kind of having to redive in and say, oh, yeah, how does this all work? How does this all structured?",
  "It is terrible. I can say that that's why I try to keep the cycles very long. So if you open the niche in one of my repositories unless it's a trivial issue or it's for a positive that I've been working on recently, I'll just be terrible and ignored for a very long time. I'm actually going to say, okay, now I'd like this month, I'm going to focus on",
  "the Cassandra driver and so like then I actually have to like you know reload everything in my hand and like then I'm able to actually like fix a bunch of issues maybe you know and then close a bunch of issues and like it really be ours and everything yeah it's hard to like have all this stuff in your hand so I mean I can't do it for sure that makes sense just kind of batching up a lot of wait wait for things to pile up",
  "up until there's a large enough chunk of work that makes sense to do it. >> Exactly. >> Until you're sufficiently stressed out enough to just start doing stuff. >> Yeah, yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >> Yeah. >>#",
  "debug DBG, little feature to print out Boolean expression results. So one of the things I just wanted to understand is, why did you choose to do this? Because this sounds like something that was probably not someone saying, oh, this is really important. This needs to be done. Where did this come from? Is this your own idea? No, it was just that",
  "essentially coming and saying this is really important we absolutely have to I was just one doing it but it was just as I did and it came from him like you know trying to debug some big Boolean expression it was working on it was like oh it would be really nice if we had you know Boolean expressions broken down",
  "in different sub-licks expressions in the BG and I was like, \"I can do that.\" I'm just the arm. I'm just the ham he's the hand for this. If someone were to try this, what kind of a statement would this help you debug or to",
  "to get inside into. So I went into doing this more hopeful than this turned out to actually make me feel because I wanted to like, you know, it would be nice. Like you have a complex bull and expression with like, you know, five or six sub expressions and for example, since all of this stuff is like short circuiting like for example, you don't",
  "know like what is the thing that was truthy and they got you like for example you're doing like a sequence of yours and you have one thing that's like truthy and you don't know which one it is right? It could be like a number it could be a string and you don't know where it comes from so like breaking it down into parts that's where it would help you right? But it turns out that that's not easy to do at all because of a few things",
  "things one of them is that elixir operators are over rideable so we don't really like when you see piped pipe like you don't really know that that's an ore like it's incurred and it is you know but you can not import that and define your own and then like your you're just like lost right so what we ended up having to do is actually only the only certainty we have is that there's",
  "operators are left associative or right associative, I would never know I would have to read it. But there are so many one direction. So we can, for example, say, okay, the left evaluates today is, but then the whole ride evaluates to these, right? Like we can't really go deeper. We can't do like a lot of smart stuff because of the, you know, the fact that these are overrideable.",
  "So I ended up being a very, very minor quality of life improvement. I think the cool thing with the BG is that there are so many of these that are waiting to happen. I think that they will pile up over the years. Now I can print fancy pipes. I have a bunch of pipes. It can print them in a fancy way with the value for each pipe.",
  "for each expression in the pipe and those are really cool. In the future I hope that you will just keep getting better at different use cases. We'll come out for sure. For those folks that have overwritten the double pipe or expression aren't they already looking for pain and generally massacists?",
  "Why do we have to give them tools? They're obviously building their own. That's a fair point. No, this is a good point where you want to try to get 80 to 80 to 80. You know, like, cover 80% of the people with 20% of the effort and like leave the 20% of the",
  "like you know something like that but no no these folks are the one percent and even less than that I think yeah like a 20's like yeah there's a little numbers are skewed there in this case but yeah but like yeah it was not trivial because like for example another example I can give is that you can't bring the left and right",
  "side of an ore because maybe the right side shouldn't be evaluated if the left is true. For example, you can have something, something pipe pipe, raise something, right? If this is Neil, raise something and then you can't just print all the left, the left returns Neil, the right raise exception, like you can't do that. You have to also be",
  "you know, or it could be like a destructive operation or something. So yeah, it's a minor quality of life improvement and this point of thing, but still well, DBG has been a huge quality of life improvement in general and this Boolean expression evaluator bit was also really cool because it kind of brings it up to the level of like debugging I can do for pattern matching on just functions.",
  "The elixir maybe early to already kind of prints out like the cases that it tried and what the value was didn't match. So this is kind of the same kind of thing just for Boolean expressions, which is great. So I loved it. And it's fantastic in my opinion that like the thing that you mentioned with the dysfunction close errors that it's transparent",
  "like you don't have to actually do anything like it which has updated dbj and you you pass the same expression you pass in before and I'll just bring it with like more information about it that's what I think will be the coolest thing about the bitches that we can keep piling up this like all you have you know you want to you the bj map and maybe we I don't know order the keys to show them",
  "more at and all like we tell you how much space at terms that you debug takes or how much like how long it takes to evaluate whatever we have a lot of things you can improve for free without people actually having to go and change anything just to call the bg and we can bring more information because it's expected to be at the bug feature so it's expected to not be",
  "and productions aware, kind of like allowed to do crazy stuff in there. I would love to jump into this next section where we talk about all the work you did on the network programming, which leads into the book that you're also talking about. First, just want to make people aware, I got a link to it in the show notes. There's a playlist of all the videos that you created as part of this protohackers challenge",
  "So there are nine videos where it covers eight days where day zero is like setting up and making sure you're all ready to go for the different challenges. If someone has not followed any of this and they're not really sure what this is, can you just give a like a high level introduction to what is the protohackers challenges? Where does this come from? Yeah absolutely. So I can I can tell you a little bit of",
  "back story because I think that helps you piece things together. And so I was doing advent of code. Like I think most people at this point are familiar with advent of code. If you're not, it's like a little website that every December, it posts from December, it first to December 25, it posts like a challenge that they have puzzles to solve every day. And you have like,",
  "gives your name but you have to pay the output and it starts and everything. It's a bunch of challenges and I was doing that in Rust to get better at Rust because just to learn this year. When I finished this I was like I can do like advent of code to type puzzles which are very specific kind of puzzles in Rust.",
  "now, but I still don't know how to do anything practical, like for the real world. So I tweeted, like, what do people do? What's the next thing that I can do with Rust to learn a little bit better? And why one of my arazzo, which is a former coworker of mine actually sent me this link to Protohockers and Protohockers is essentially",
  "advent of code for network challenges so for for network stuff so it's a website where you go and they have like a bunch of different challenges and they provide you with like you provide them with an IP and a port where you're hosting this solution to the challenge and then they they wrote like this person wrote a like you know",
  "a little program that goes and checks your solution by actually hitting that IP and port and doing all sorts of checks to see if you got the solution right. So it's more complex and advent of code generally or at least the setup is more complex. It requires you to deploy something. There's like, you know, protocols involved and stuff like that. But it was",
  "super super fun and I started doing it in Rust and then you know it was fun to learn but I realized like that made me appreciate so much how nice it is to do this sort of stuff in the mixer and are laying it on the beam because it's kind of built for that right like all the message passing kind of maps like one to one with all this like you know our synchronous network",
  "So it's really like a fantastic feat. And I kind of like my the gears in my head started like you know turning more and more and I was like, I mean, no, there are no resources on these and I've never done like a YouTube video in my life, you know, like I don't know how it's a new",
  "for me so I was like maybe I should keep this a try and so I did this an experiment. This is an experiment where I like just did this on as a video series instead of like writing a series of blogbusters which I've done a bunch of times or like you know whatever that I've eventually like kind of like snowballed into the book because it was like actually you know yeah this videos are cool",
  "and they're fun, but I think there is actually a space for a proper resource on network programming on the beam, because there's a lot of documentation for sure, but there's not a lot of I think of package-dice resources where you can learn to patterns as well, not just the libraries and the functions and the things that you have to use, but actually",
  "learn the designs, the sign patterns and the best practices and stuff like that. I'm glad that you did a video. You'll have to tell us if that was really difficult because that was your first YouTube video series and that's whole different realm of style and communication and all that. But also the content itself, it's hard to update.",
  "Not like I go back to my blog posts and update on my don't but it's easier to do that than re-record the whole video. I'm happy that you're also going to be doing a book of written content. I feel like that's going to be a little bit easier to search for and recommend to folks. It has the potential to be more evergreen than a YouTube video.",
  "The networking stuff in Elixir is based you know most most of that I'm a presuming is actually just exposing early and stuff that stuff has been around for decades So it's not like that's gonna change that much You mentioned this idea that Elixir and the beam are really good fit for it and when I saw that you were doing these protohacker challenge",
  "I was like, yeah, that's why Erlang was created was to be like in a network router and routing this type of network traffic. It was purpose built for that. Can you can you share any like insider or perspective on that? Yeah, I mean, like you can tell let's all like I was like I came to look to a to a to a lecture",
  "and the beam, like decades after that was being worked on and our language was born and all of that. But you can tell, the beam is so, it's such a good feat. You can tell that they were thinking about this stuff and they designed the beam itself. That's what I was trying to say.",
  "like the all the paymenting processes and messages between process and linking and all this sort of relationship and isolation between process all this stuff just maps one to one with how you usually want for example a server like a TCP server imagine you're like to look like you want the connections of the",
  "isolated. The fact that you have a garbage collection per connection, that's just amazing. The list of stuff and the binary handling that they were working on different protocols, but the Internet is made of protocols.",
  "be in to actually work with any kind of binary protocols, right? I'll give you just it's a very good fit. And the last thing is they are synchronous aspect to all these stuff is amazing. Like when you present a big up-crossed, you kind of have to unless you want to deal with actual with threads and doing a lot of lower level closer to the operating system.",
  "level stuff yourself, then you have to pick up something like Tokyo and I don't know, let's pronounce it. But like the Singerness library for Rast, right? You know, the fact that you have to reach for a library makes you like I understand why they data it makes perfect sense for Rast because you want to keep a small core that's like, you know, this and that, but it makes your",
  "appreciate the fact that in airline and luxury, this is just the lowest possible level of design for the language. It's baked into just the guts of the beam, right? It's not even something that's like, you know, it's not OPP, where the entire service and stuff, it's like a middle layer. It's not the lowest, the message passing and the links and the monitors and",
  "The processes, those are the guts of the beam, right? Like it's just the lowest level features. So I think it's just like a fantastic feat. And after all, I mean, Erlang is as you said, Erlang has been used for decades and how to build stuff on networks. And the new age of the beam, when Elixir came out and Phoenix started to gain traction, it's just another",
  "network stuff at the end of the day, right? Like it's just Phoenix is pretty high up in the abstraction ladder there. So you don't really see like the the bites going in and out, but that's just what's happening at the end of the, you know, like so things are really great. Feed. I think another side benefit of the video was I think it's interesting and fun to see how other people",
  "work. So you have Andrea here, a court contributor for seven years. How does he work? How does he code in a mixer? He's been doing it a lot longer than me. It was interesting to see, you know, the way you approach things and how you work in a mixer. That is like 95% why I try I decided to try this thing because I",
  "Now I've been I've been a software developer for like enough years to to consider myself like sort of senior at this point, you know, and so and I but I still have so much to learn you know and like for me having like being able to see someone like you know 10 years senior like more senior than me would be like a fantastic thing right? So I",
  "figured like maybe people that are starting out like would be interested to see how I work instead you know and the it definitely like it's a very very like good boost to your embo sir syndrome because I'm like you know people are gonna know that I just like I you know make up stuff all the time I don't know what I'm doing you know but you know I just had",
  "I think it's great about that. It's like a former mentorship, right? They're being mentored. It's almost like a paraprogramming. It's like, hey, I'm just kind of, this is what I'm thinking about. This is how I'm going to go about it. It's humanizing from the beginner mindset. I don't have to get to that point where I know everything, right? I have all the answers. It's like, I'm still figuring it out.",
  "the people who are senior and working on the language, they're still just figuring things out as they go. And I think that is encouraging actually for people to be able to see. There's a word for this imposter syndrome stuff, by the way, it's called the Dunning Kruger effect. The short version is that those that are experts in their field perceive",
  "themselves to be less of an expert. It also works on the other side of the spectrum, which is folks that are just complete beginners have more perceived confidence in their ability. It's usually swung that way. Like, yeah, you get folks that just have no idea what they're talking about, but they just give off this air of confidence.",
  "But on the other side, which obviously where you are, because you're a core member team, you're doing things with Rustity, you've got your hands in a lot of other areas. Got your obviously a subject matter expert, your perceived ability is a little bit lower. Sounds like it's the thing what it really is. So that's good news though. So coming",
  "back to the book, I was curious if you could tell how the video series played into the being a book, like where it which came first and the Praigprog reached out to you or did you say, \"Hey, I'm having a lot of fun with this and I'm not, you reached out to them, like where did that come from?\" The latter, so I reached out to the Praigprog and the book came from the",
  "the video series actually because so when I started recording the video series I realized I have so much to say about this stuff you know because I'm not like I'm not a network experts to be clear like far from it so I actually and I had to buy my like university textbook like computer networking and now in order to write my book about computer",
  "I don't know a lot of stuff, but I've done enough at this point with especially revolving around TCP mostly doing that based drivers and doing server and stuff like that. I've done enough to especially appreciate the OP and the beam and early long and looks rather than the network parts.",
  "have more to offer. It's not like all the networking layers, but it's just about how do I architect good perform and reliable applications. That recoupleation is in a dictionary. What are the patterns and what are the stuff? When I was doing the videos, I realized, you know, I have so much to say, but I don't think this is the format to say all of that. This is a format to",
  "like, you know, solve these challenges and they're like, it works well for that. I'm a book learner. So like for me, I would want to there to be a book about this stuff. You know, I like learning books, like, you know, that translates. And I figure that there's no resources, almost no resource. If you write network programming, I think I try to write network programming in a mixer.",
  "on Google and like the second result was a blog post of mine about doing some like you know like writing a connection like a discipline connection with with Chen state and or something like that and like it's like it's very far from like you know it's not a good reason it's like a tiny little window in the days is not like a good like",
  "who completely researched, you know, so I figured that was like my market research essentially and I was like, okay, there's definitely space for this if nothing, you know, and learning somewhere along as some, for example, has some, there's a chapter about UDP and the TCP, but it's not, it's like it's not a book about networking, right? So I think there's a lot of opportunity to write",
  "a resource in this space and considering I'll go to a fit or a long-an-lixer R in this space I think it's just like a good resource to have so that's where the book came from it's gonna be really hard to do but I want to try to bring people that are not in the elixer and our long communities into those communities to do",
  "network stuff, right? Because like, oh, now we're bringing people in from from the web. The absolutely for embedded devices, we're bringing people in now for machines learning, we're bringing people in and you know, like, I think that like we can definitely bring people in for for networking and stuff because like it works so well, you know, like it's just like such a good feat. I think so. I think there's a lot of opportunity",
  "you mentioned Google ability, the search engine optimization of these kinds of resources, right? You are looking for your own, you know, your own help in your own blog post showed up with that's reasonable. That's what a lot of folks are going to be doing. And books are going to be good things, right? Good resources, but they are by nature offline kind of resources unless there's an online",
  "course, you know, that kind of like pairs with that. I don't know if you're planning to do that, but you know, HEC stocks has typically a good resource for finding those kinds of that kind of help on things that are going on, but I don't know. I still think that there is a something there that's lacking for our community for a lecture in our links community.",
  "like, hex dox is really good, really, really, really, really good. There's no question to that. But, you know, searching for that kind of stuff, finding those kinds of like laid out guides, the module documentation, I think, is like top class kind of stuff in our community, but those guides, they have to be intentional about that, right? Phoenix is intentional about that.",
  "So they got a lot of guides that are written there. A lot of good like module documentation can include like short little guides and stuff like that. But one area that I'm focused on is on ECTO and it sounds like you're focused on, you know, network programming for for a licks or stuff like there's all these domains that just need a lot more content around it. I'm really excited that you're getting into it and going to start building out",
  "of that content because I think that's a key to the community growth. If they can find the answer, they're much more likely to stick with that group. If they can't find the answer, well, they're going to consider other communities, other languages, other ecosystems to go figure out how to get their idea done. One of the things I see that comes up a lot in the E-lixer",
  "community is that question of what's the looks are good for? You know, like what is it best at? You know, people come in and they're new to the community. There's kind of early stage exploring is this something I've been want to spend time in? And what I think is funny is, you know, obviously there's Phoenix, which is web, which is a lot of it, but then there's",
  "nerves like you mentioned and I really I love the idea of being able to say are you talking about building anything that's networked you know because you have clustering but then you have the network protocol you know support so powerfully built in there and then a book there would be awesome to have to say yeah if you're building anything networked which is a lot",
  "lot of things. I hate to see people exclude a mixer as a good fit for their problem because maybe they're only seeing it as Phoenix and I'm not trying to build a web server. I'm not trying to build a web application. It's graded a lot of stuff and I'm really glad to see that you're spending some time trying to make it more approachable just to people",
  "in the networking space. So speaking of writing some more content and more guides, I saw a recent tweet of yours talking about the fly-io distributed systems challenges. Tell me a little bit more about this. What's going on there? Okay, yes. I read a tweet that came out that they published this",
  "sort of the same concept, you know, where you have challenges like you have in an advent of code or like you have in protohoccus and they're doing that for distributed systems. So distributed system problems. So like, that explains and you know, like different like cluster nodes and stuff like that. And I think that would be fun to solve in a little",
  "I thought like I just kind of like tested the water to say if people would be interested and I think for these sort of challenges for example reading blog posts is not as fun as like watching someone you know walk you through the through this illusion because I don't want to be you know I try to write a blog post when I want folks to really be like be able to",
  "understand something maybe more complex at the wrong pace. You want to give them a resource they can read and read and they're for example, you know, like give cold snippets that they can copy and paste and stuff like that. And instead for this kind of stuff, I think, from the protocol, how you're experiencing the list, it seems like people enjoy the video format. So I just tested the water.",
  "And I think it would be fun. I also have that sort of attitude where I'm very arrogant about what I can do. Like I have an idea of taking this but like a better way to just like, you know, you say in public, you're going to do it and now you have to do it. You have to learn enough to do it, I guess. So like, yeah, I have this is",
  "It's like, it's a good thing sometimes. It's a bad thing. Other times. But this hopefully, it's going to be good. So I'm going to, yeah, it seems like people were pretty interested. So I'm excited to actually, yeah, I think I think I will do this. I have some stuff to wrap up. So it's I have no idea about the timeline. And I mean, as you imagine, like, you know, recording,",
  "is a whole different beast. It takes so long and you have to make your background pretty all the prep work ahead of time. Oh my god, I'd like to make it to the background pretty and you have to start to care about the microphone I'm using. And you can see if you watch the ProDoggers videos that I did, you can see me progressing in",
  "every video I figure something out like in the first feed is like a terrible webcam bet audio you know like me just like in the dark room you know and like with that with a small fun size and the next video is the same but the spawn size is bigger and on the next video is the same but I turn the light on my face or something you know and like you can see me figuring things out and getting better",
  "and so it takes a lot of time so I don't know what I will do this but it seems like another thing that we can showcase I mean no-lixer I don't know if alexer is good at distributors systems I guess like many languages are but it's distributed system by definition they have to be an electric so yeah I was curious how",
  "how you might wrap this into some of your book work as well. You know, I figured this could be a chapter. I don't maybe or maybe not, maybe it's not so involved with the actual data that comes over the wire. This is more about architecture. I presume I presume as well. I don't actually know. So I'm gonna like, I'm not gonna say anything to not to like, yeah.",
  "I don't know, but I presume I would be more about, you know, how to deal with the data structures involved, for example, in dealing with net-resplates and stuff like that. And like, you know, I like things leaders in groups of clusters, like that sort of stuff, you know, more distributive assistance, but they are network and I think, you know, steel, it's a",
  "pretty like fun thing to solve I think. What I think is interesting is we talk about how a licks are an earlying are able to do distributed computing right and like that is supposedly one of the things that you can do which is true like clustering and everything is built in but I'm not aware of any kind of tools that make it easy to",
  "simulate, reliably simulate, oh, I want to do a net split. And how do I handle those problems? And all that the tooling to simulate low latency or high latency or dropped packets, like 30% of my packets start dropping, you know, just like a suite of something that makes it so it's easier to",
  "build and test those things in a reliable way. And I think that maybe part of what comes out of this part of the challenges. Is that fair? I mean, yeah, I agree. Like this is my, this is definitely like a thing that I will always struggle with, which is that when you come in networking in general, I'm not even sure it's about distributed systems, but it's about networking.",
  "working in general, it's really hard to simulate the network because like we write these programs that operate on the network, like you that write for example, you write a database driver, right? And what do you do? You like your right or right is client. And you spin up right is locally to test it, right? And locally, just like not ever like a dropped bucket, not",
  "every time I'm out like it's just everything goes well and it's fast as hell, you know, like you just don't have any issues. And then you deploy this and you know that'll be somewhere else and like you have all sorts of issues, you know, like you start to you have providers that decided like, you know, if your connections stay out from where then a minute, then, you know, that's enough and they shut it down. So you're like,",
  "like you have containers, like shutting down connections, or you have packets that are dropped, or you have timeouts and you have all sorts of stuff and that's really hard to, it's hard to simulate and so, it locally, right? It's hard to simulate that for testing purposes and because it's hard to simulate, people don't do it and by people I mean also mean the past, for example, like,",
  "you just like it's much easier to not do it and you know to like write code without but that's what it's easier to do you know you just write the code correctly and but obviously I mean that's that's impossible you just like you need to test it so like you kind of like you go at it was like I'm just gonna write the correct code but like of course you're not gonna write the correct code you know so like it's",
  "I'm interesting that there is so little support for that stuff. Yes, I agree. There is a little like you can do a lot for like this connection, especially like you can manually go and close sockets and that's pretty easy to do as it turns out you have to do it. I mean, I'm going to talk about that in the book hopefully, so we're going to say like testing patterns for next stuff. But for example,",
  "Simulating high latency. You're like on reliable networks. That's really really hard to do because it's like there's a element of randomness into 8 right like closing a socket is just a k-lice socket is open or it's close to but like dropping 25% of the pockets is like it's goes into probability territory so it's like harder to see",
  "late, but it happens in the real world. And so it's like sworth testing out. And just one example I can give, I'm talking a lot, but one example I can give was Pearl Hockers where there was a couple of challenges with using UDP instead of DCP, right? And for listeners that might not know, like DCP, it's a is a portable where the protocol itself deals with",
  "you can get ordering and dropped pockets. So when you send the packet, then you know it's going to come at the other end, right? Unless the connection drops. So there the packets are going to come and they're going to come in order. Right? And you'd be saying nothing like that in your UDP, you have no guarantees. So you send the packet, you have no idea if it's going to come. If it's going to come in order, if it's going to be duplicated, you have no ideas, right?",
  "And I was working on the solution to this problem locally and locally everything worked perfectly. And then I deployed it and I actually had problems with proto hackers testing my solution, you know, where I hosted my solution because I don't know, like proto hackers hosted somewhere in Europe and my solution was of was it somewhere else in Europe and like maybe enough black as we're being dropped that this was actually",
  "the harsers was considering my solution not valid and even prohaggers had to like bake into their tester programs and stuff to say like all you know bunch of stuff can be dropped with you to be and all that so like that actually happens in in the real world that's just to say that like this is a real thing where like not being able to test these properties makes it really hard to write",
  "Good network software, you know, so I'm sort of prices as just as much as you but I like my brain gears are turning so I like I have some ideas maybe we can actually try to improve the situation. I have a similar story, but not so low level, but that yeah, you you connect to a web socket you're expecting to get messages pushed over",
  "over the wire and then at some point you just stop receiving messages but you don't get any errors. So like the connection is open but you're just not getting any messages. I had to write a deadman switch is what I call the switch to like just check like have I gotten anything in the past like five minutes or something and if not reconnect and that",
  "gets the messages flowing again. I don't know the issue there, but yeah, you wouldn't expect that in production. And I don't even know how you would test that either end to end, at least. So I can test the dead man switch. I can test that. You know, logically, I'm doing things with the messages, but getting that tested all together was, I don't know.",
  "But it sounds like the book is going to be an interesting project. Do you have any idea is this like a year-long kind of thing or just for the networking one that you're working on? Is this your first book? No. It's not my first book, so I wrote an I-Colwrote and other book, a testing elixir with a friend of mine that I free my ties.",
  "The experience that the book gave me is that we sent the proposal to Prarkprog and we were like, \"I can't, this is going to take six months.\" In six months going to be on the shelves. You know, and it took six months plus three years. So it didn't go as planned at all. This time I'm running the book alone.",
  "I don't know if that's going to take me actually longer or more time or less time, I have no idea. I'm very resistant to committing to saying anything about dates because I'm bad apparently very bad at leaving the time.",
  "I would be surprised if it's less than a year until it's out. There's also like a lot, I mean, to be fair, there's a lot of processing that goes into writing a book that is not just writing the content, because the content then it's be reviewed by multiple layers of people. You have the technical reviewers, you have the public",
  "tech review, you have the actually the proper writing editor that looks at the book and then you have the whole thing. We like obviously where they have to actually get the publishing going, you know, and all of that, and you know, that drawing the call, there's a lot that goes into writing the book, so it's not all in my hands.",
  "And it's just stuff like thanks like a bunch of time, you know, and I would be surprised if it's less than a year. But I think a year is probably like a good, like, it's my, it's my hope, you know, like to get the content written in, I don't know, a few months and then get the book out in about a year, maybe that would be, I would be happy with that. I know",
  "other stuff that you're going to be doing coming up soon. Where can people find you and what are you doing coming up? Sure. So I usually announce all my stuff on Twitter at my my user name, which is what you hide, which I'm sure is going to be in the link in the the show descriptions. Generally, try to announce everything there. I'm also on",
  "I'm master with the same username. They can find me there as well. And I try to announce everything there as well. Coming up, so I'm doing a keynote Saturday in Mexico City with Francesco from Erlang Solutions. So we're going to do a keynote there. So if you're going to be at Could be a Mexico, I'm going to see you there.",
  "that I am doing a training about concurrent data processing in a mixer at a mixer comp in Lisbon in April. So I'm super super excited about that and I realized all the after doing sub-in the training and getting everything approved and getting that on the conference website that this is exactly the name of the",
  "concur in data processing in alexer from prox prox which I own and I was like that sounds like a great title for a training without the thing in that that's also the title title for the book I found after that that's the title for the book as well so yeah I'm sorry for that but that's gonna be an exciting training I'ma we're gonna do like just a chance stage and flow",
  "and Broadway and all done with live books. This is going to be very interactive training so if you're going to be in a least one that would be cool to do. Nothing else planned. Writing the book is just like, yeah, I've been buried by the time it took me to write the last one. So now I'm just like, head down, writing the book. And you'd mentioned that you were on a",
  "sabbatical and in between jobs are you looking for a job opportunity right now should someone reach out to you as we say in this industry I'm on the job market but yeah I've been doing a bunch of interviews in the meantime yeah so I'm gonna I'm gonna have to find a job at some point yes look that's for sure so yeah I found if you want to reach out that would be happy",
  "to. Awesome, and we'll have links to where people can get in touch with you in the show notes. Well, Andre, thank you for joining us. I really appreciate talking with you. It was shocked that we hadn't had you on earlier. It's just an oversight somehow, but it was glad to be able to talk with you about your contributions to the lecture community, which have been long.",
  "and meaningful as a core contributor as a presenter, as a trainer, as an author. So I really appreciate all the work that you do. Thank you so much. I'm very, very happy that I was able to join. Thank you for having me. Well, that's all the time we have for today. Thank you for listening. We hope you'll join us next time on Thinking The Lixer.",
  "(Bell)"
]