Learning about Owl with Artur Plysyuk - EMx 213
Artur Plysyuk is a Software Engineer at proSapient. He joins the show alongside Allen to talk about, "Owl: A toolkit for writing command-line user interfaces". He begins by introducing "Owl" and what motivated him to write the library.
Show Notes
Artur Plysyuk is a Software Engineer at proSapient. He joins the show alongside Allen to talk about, "Owl: A toolkit for writing command-line user interfaces". He begins by introducing "Owl" and what motivated him to write the library.
Sponsors
Links
- Owl - A toolkit for writing command-line user interfaces - Libraries - Elixir Programming Language Forum
- GitHub: fuelen/owl
Socials
Picks
- Adi - The Forgotten City on Steam
- Allen - Aliens: Fireteam Elite on Steam
- Artur - elixir-ecto/ecto
Transcript
Allen_Wyma:
Hello, welcome to the episode of Elixir Mix. I'm your host, Alan Weimah, for again this week while Sasha is out. And of course, finally, we have Adi back. Adi Aingar, how come back, Adi?
Adi_Iyengar:
Hey everyone.
Allen_Wyma:
And we have a, of course, every week we have a special guest. I don't know what, we were so lucky I guess. So we have another special guest, Arthur Pesouc, right?
Artur_Plysyuk:
Hello, hello.
Allen_Wyma:
He is the creator of OWL, which is a library for working with the terminal using Elixir, right?
Artur_Plysyuk:
Yes, it is a toolkit for writing a command line user interfaces in Elixir. It's if we are short.
Allen_Wyma:
Now where did you get the idea to work on something like this?
Artur_Plysyuk:
I think there were two major tasks I tried to solve, which motivated me to write the library. And at the company I worked for, we decided to move from Heroku to Kubernetes and all that kitchen. And that was a couple of years ago. at that time. And the major ones were dumping database from test server to local hosts, restoring dump to local Postgres, copying database between servers, and other DB related routine tasks. And obviously I wanted to write a couple of scripts which do the job. And it would be great if these scripts provide some level of interactivity. I don't have to write dynamic parts manually. And I'm not good at bar scripting. Well, I am able to do something, but every time when I need an if else clause, I go to Google to ask how to write it. So I picked a lecture for this task because, well, the obvious reason is knows Elixir, so if fixes are needed they can help me with it. And actually Elixir is not famous for its terminal UI applications, but it doesn't mean that we can't and shouldn't use it for this purpose. Essentially it is just printing text to the terminal, isn't it? the first attempt of gliding together output from Qubes, CTL, Boundary, Volt and all other tools we had. I had a lot of calls to system CMD, system shell functions and obviously I wanted to debug all the invocations. So I wrote wrappers around these functions and this was the beginning of I even found a bug in Elixir and it was something in system shell functions which didn't work well with $sign. But it is fixed, everything is ok now. et cetera. And actually drawing text in framebox sounds simple, but the complexity arises when you want to colorize text inside the framebox. And you have to handle the frames. And usually, if you don't have proper tools, you end up with a concatenation of text from IO-unc-module and stuff like that. So I started playing with the recursive data structure, which is similar to IO data, but it additionally accepts a struct, which allows to tag data with the uncscape sequences. And as I said, it is a recursive data type, so it is possible to have many nested tags, in HTML.
Allen_Wyma:
So this, I'm just trying to understand like how and when would I would use something like this? I mean, you're just building like a tool that you kind of turn up and you just interact with it like in a terminal base or I'm just trying to understand exactly when I would want to reach for something like owl, right?
Artur_Plysyuk:
Okay, the first implementation of this kind of script for DevOps was as a file with the first line mix install JSON and everything else was just in one file. And I usually script was converted to the proper application and I even use the library. I don't remember the name correctly but probably it is brewed to have a binary or something like that and I can use it like this.
Allen_Wyma:
Yeah, Adi, I mean, you said you've written a lot of stuff using the terminal and elixir, right? So what exactly would you use in a practical case?
Adi_Iyengar:
Yeah, I mean, so I like to be in command line as much as I can be. So like I have my time tracker application as the command line. I have the dev environment setup application that's written command. It's actually also public. It's called Adify. It sets up your environment with Elixir or Lang. you know, dependencies install Postgres, Doc or everything, right? So stuff like that. I mean, why use a different library? Like it's just pretty general purpose, right? Like exactly what Ars said, if you already know, like say you're familiar with it, it's good enough for command line. Yes, there aren't many tools. Yeah, for stuff like that, I'll be super useful. Like, I mean, a lot of these libraries that are installing sometimes take a while to install. use a better experience, better messages, to list things properly in a table format, color coding, all that is very important. If the more complicated command line application gets, the more is the need for this kind of a library. So if I would have existed, I would have definitely used it. I kind of added some of these functionality myself. Nothing was like dynamic. In that I know someone I forget I think black code is his GitHub handle he wrote like an elixir spinners CLI spinners repo I think if I remember incorrectly that's he had a few examples that took some from from those but Yeah, other than that I could not find anything Available for me to write these command line projects, maybe top 20 projects in my bucket list to write like a CLI framework. I kind of want to write an MVC framework really and just use the MVC like architecture, like dispatching architecture where the view and view would be terminal essentially. But I think definitely OWL is like a more simpler, pragmatic way of approaching that kind of a problem.
Allen_Wyma:
Yeah, I see. So so you actually have a mixed test that will actually install dependencies for you.
Adi_Iyengar:
Yeah.
Allen_Wyma:
But usually using Docker, right? So this is for like a when you have like a EC two or something or when would you want to use something like that?
Adi_Iyengar:
I mean, dev environment setup. So like, I mean, yeah, you use Docker, but not made able to just use Docker for development, even with the lixer, you know? Like, I mean, you know, certain, you know, if you use like certain command line tools that are not TCP based, right? So you use like image magic, right? It's hard to dockerize that. You can do it. It's just hard to do it. Stuff like that is what you can use That's the first thing I do when I set up my new computer. And I do that very often because I like to try Linux distros quite often. So I like to set up my dev environment at least 15, 10, 15 times a year, maybe. So I use that script quite often. And I know my friends, some of my friends use it too. So it definitely works for Macs and Linux.
Allen_Wyma:
So how do you actually kick that off then? You're saying you just run a straight mix task to
Adi_Iyengar:
No,
Allen_Wyma:
run this?
Adi_Iyengar:
no, there's an installer script. It's a bash script which installs the correct elixir version for you and then kicks off the mixed task with correct environment variables that the task needs.
Allen_Wyma:
I see. Interesting. Yeah, I never thought about that because usually people just bash that or use pop it or something like that for setting up dev environments.
Adi_Iyengar:
Yeah, I just didn't want to, I didn't feel like learning something. There's something I wrote in 2016. So I didn't feel like learning something new. I was a junior engineer and I was like, well, I want a way to programmatically set up a computer. So it ended up working pretty, pretty well. But yeah, I would love to kind of also like dig a little deeper into some of the, you know, functionality of OWL, like how you implement it. tools that you use. Like you said you wrote wrappers around some of the command, system commands, right? Would love to learn a bit more about that, Archer.
Artur_Plysyuk:
Yes, actually, our system CMD is just a wrapper around the standard system CMD function. And what it does is simply logs the comment in the logger, and you can simply copy and paste it in your terminal to debug. function. They are actually pretty similar. And the one thing that it does additionally is when you lock something it tries to find URLs and mask the password. just to be sure that nothing is leaked when you work with the database as it was in my case. And what was the second question?
Adi_Iyengar:
Yeah, I think that was super helpful too, but I guess my question I'm looking at your code and It's I guess more around the whole light the life's Lifescreen aspect of it
Artur_Plysyuk:
Ah,
Adi_Iyengar:
right
Artur_Plysyuk:
yes.
Adi_Iyengar:
where you implemented an owl walking and more dynamic terminal stuff Like that you use like a wrapper on endcurses like how did you go about implementing that? And I see that you use a gen server as well. So very curious about the architecture
Artur_Plysyuk:
Okay, so I have started playing with the progress bar a couple of years ago. I think it is a typical use case for many applications to write a script to see the database with some fake data. And in such cases I prefer correctness to performance, so I do this using context functions and it is not a quick And I started writing ProgressBar because there is quite popular ProgressBar library which is named ProgressBar, you can easily find it in Google. And but it is very limited, like of course you can customize how ProgressBar looks and Bar library prints a single progress bar and for the seeding of database I need multiple progress bars. So I decided to write my own version and what it does it just moves cursor a couple of lines up and renders a couple of strings with the new progress bar. And that very limited because I had to turn off logging and any other output to the terminal. And I even posted the implementation to issues to the Progress Bar Library in GitHub so other people can use it. It doesn't fit to the architecture of Progress Bar Library. module and that's it. And according actually to readme of the progress bar library, you just invoke render function and you are done. And the progress bar is rendered, but the problem here is that it renders bar right when you call the render function. And it means that operations and they are all very quick, I mean they are quicker than writing to STD out, then progress bar becomes a bottleneck. And on top of that, if you go from 0 to 1 on this large amount of operations, it is still 0% and there is no point to render anything to STD out. And of course, I tried to fix this in my implementation. And it sounds strange, but it sounds strange that we discuss progress bars here in 2023, but it is what it is. And when I tried to organize this in a library in Aul, I started experimenting with the live screen implementation. came to this abstraction that it is a gen server which has a virtual device and it partially implements the Erlang IO protocol. So it means that it could be used in a bunch of functions from IO module inspect and stuff like that. And the practical example is when you try to debug SITs or any other scripts which have dynamic blocks and the first thing you would try is to log something or put something using IO inspect and do this because writing of dynamic blocks and just static text should be synchronized. And it is what all live screen does. That's...
Adi_Iyengar:
That's awesome. That totally answers my question. That's awesome. Yeah,
Artur_Plysyuk:
Let's go.
Adi_Iyengar:
I'm trying to follow while you're explaining. I'm trying to follow through the code as well. Nice. And I also just symboled up on the IO aspect as well. And so you can take user input as well. Like yes, no, whatever confirmation. That's awesome. Yeah, this is great. So what, besides the whole Kubernetes thing what other projects have you used out for?
Artur_Plysyuk:
So actually it is for seeding data for Kubernetes and I think nothing else. I think there were some minor scripts but nothing special.
Adi_Iyengar:
You could build a text based RPG game with that too.
Artur_Plysyuk:
Well, if you figure out how to handle input, then
Adi_Iyengar:
Yeah. Well,
Artur_Plysyuk:
it would be possible.
Adi_Iyengar:
I mean, it could just be options-based, right? Like, you do support that.
Artur_Plysyuk:
What exactly?
Adi_Iyengar:
So I see that the IO thing, you do support gets, right? So...
Artur_Plysyuk:
No, no, this thing is not possible. And that's why I said that it partially implements the Erlang IOProtocol because
Adi_Iyengar:
Gotcha!
Artur_Plysyuk:
it
Adi_Iyengar:
Okay.
Artur_Plysyuk:
is not easier to, it is not easy in Elixir to get HR as your type.
Adi_Iyengar:
Right.
Artur_Plysyuk:
It is possible using DTUSL thing, it is going to be replaced in the newest version of OTP. And actually it is not a good thing to rely on undocumented things.
Adi_Iyengar:
Right, right. Got it.
Allen_Wyma:
why not support the IOP protocol because I believe that's done for so many things where like files and obviously for the for the terminal things like that.
Artur_Plysyuk:
Yeah, so I tried to support it and what is supported now is to print data to this live screen device, but it is not possible to get the data from it because the only way to get as I know, kind of a global function and if you write your own script, let's say it has some DSL and you click arrows up and down, then you will see the history of Elixir functions. It is quite limited, but for the simplest cases it's enough. I wish we had control over typing, but it is not what now possible. Maybe in future versions of OTP,
Adi_Iyengar:
Yeah.
Artur_Plysyuk:
things will be changed, I hope so.
Allen_Wyma:
I'm still trying to wrap it in my head if I'd ever want to use something like this. It's just totally new to me. I'm so used to everything being homebrewed or dockered. Install and Alexa is pretty straightforward. Same with like Sean Postgres, you just do brew install for most things, but we use all Macs over here, so that's why it's easier. And I know they have a similar kind of fast script for homebrew too.
Adi_Iyengar:
Yeah, I mean, it's if you're building something, right? So, I mean, one of the things that worked that I did when I was a community was a command line script that we would use to list, you know, because, you know, it was hard for us to track a device on AWS. So basically like a mapping to a community device to an ARM mapping in AWS, right? To like debug and stuff like that for developers. developer tools is how you need to look at it. So say you use Git to track time, which I do. You're a weirdo. You want to wrap around Git log, which is cleaner, more even-based, confirmation-based, whatever, right? More, that's, that OWL is a great use case for that. Because you can be like, okay, let me wrap my Git commands and create a command line interface for that based on whatever you type, right? Based on what you want. Like you want a table representation of your last few git comets that have certain flags in it. I don't know, I'm just making things up right now, but I think it's for the subset of engineers who use command line a lot, like probably like me. We see like a lot of utility in this, but if you are not big on command line, if you don't use terminal for like everything, terminal too, right? So if you're like that, this is very useful. But if you're not, I think I can see how it's hard to wrap your head around.
Allen_Wyma:
Yeah, I mean, I guess I can kind of see people using this to kind of script out their stuff. And I guess you could do several things at the same time, as long as it's your computer lets you do, like say, multi install or whatever, with all different processes. That'd be kind of cool.
Adi_Iyengar:
could be tricky with dependencies, but yeah. Oh, you're right.
Allen_Wyma:
now. We keep talking about Docker. I'm just still thinking about that. The recent news with Docker. Have you seen that?
Adi_Iyengar:
I have not,
Artur_Plysyuk:
Yep.
Adi_Iyengar:
enlighten
Allen_Wyma:
Oh,
Adi_Iyengar:
me.
Allen_Wyma:
really? It's a big drama. I followed Jose. Basically, Docker is getting rid of all free projects on Docker Hub, something like that.
Adi_Iyengar:
Oh man, I mean
Allen_Wyma:
Or
Adi_Iyengar:
that
Allen_Wyma:
they're,
Adi_Iyengar:
was about
Allen_Wyma:
or
Adi_Iyengar:
to happen.
Allen_Wyma:
yeah. Yeah, sadly. And, uh, I seems like a lot of the stuff for a lecture is being moved away. So I don't know if we're even going to be using Docker anymore. Maybe somebody will say, okay, let's switch over to Padman or something else. I don't know what else there is.
Adi_Iyengar:
It may be hard to replace the... can use something else as a container like the image registry container registry but
Allen_Wyma:
Yeah.
Adi_Iyengar:
it'd be hard to replace like oh that'd be huge
Allen_Wyma:
Not really, I mean, from my understanding, like a doc is just built on some fundamentals within
Adi_Iyengar:
Containers.
Allen_Wyma:
Linux,
Adi_Iyengar:
Right.
Allen_Wyma:
right? Yeah, that's what I understand. Maybe I'm wrong, but
Adi_Iyengar:
I think
Allen_Wyma:
yeah,
Adi_Iyengar:
that's correct.
Allen_Wyma:
so.
Adi_Iyengar:
I mean, I don't know. That's a whole different conversation. But
Allen_Wyma:
Exactly.
Adi_Iyengar:
yeah, I just see it. A lot of things rely not just on containers, but Docker. Yes, Kubernetes is now more agnostic. But
Allen_Wyma:
Yeah.
Adi_Iyengar:
like, hero-cool containers, for example. You can't just deploy a non-docker container to hero-cool. Fly I.O. Like, I mean, all these things rely on Docker, not just containers.
Allen_Wyma:
Heroku uses build packs, but has that just built upon Docker
Adi_Iyengar:
The container
Allen_Wyma:
or what?
Adi_Iyengar:
built pack is the user's Docker. You can't
Allen_Wyma:
Yeah.
Adi_Iyengar:
deploy a non-docker container.
Allen_Wyma:
Okay.
Adi_Iyengar:
That's a different conversation, sorry Arthur.
Allen_Wyma:
conversation. Yeah, but he talked about Docker today came up in my mind.
Adi_Iyengar:
You can see how if we talk about command line, the only command line Alan uses Docker.
Allen_Wyma:
Yeah, that's all. That's all I use. Docker run bash. Who am I? That's all I do.
Artur_Plysyuk:
Actually, the output from Docker Compose app is one of the things
Allen_Wyma:
Yeah.
Artur_Plysyuk:
that inspired me to have these dynamic blocks in live-screen. Like,
Allen_Wyma:
You see,
Artur_Plysyuk:
when you start this and they...
Allen_Wyma:
I had, this was exactly what I was thinking. That's why I brought up Docker. It was a segue, okay? Exactly. It was a segue. Go on with Docker Compose.
Adi_Iyengar:
Okay, yeah, as Arthur is talking, I would love to learn more about that too. And right after that, let's go around and talk about, maybe mention your favorite command line tools. I'm also curious about that. But Arthur, continue about the Docker Compose app.
Artur_Plysyuk:
But actually nothing here to continue because I was just inspired by the output. Like when you start Docker compose up, you see that there are a couple of things which are changing at that time. Postgres and a couple of other comments. And when even you click Control C and your applications shut down, it is not just everything disappears and that's it. All these blocks dynamically refresh and you see a timer and other output. It is not something that must have, and nice features.
Adi_Iyengar:
Yeah, I think it didn't used to be that good, but I can't remember exactly when Docker composed started becoming more dynamic and more easy to follow. I think I want to say 2018, 2019 is when this started making it good, but I remember it was not very useful earlier. But yeah, it's so smooth right now. Like it's also, by the way, it's not as smooth on Linux if you run those on Linux. You don't get a lot of dynamic, you know, progress bars and stuff compared to Mac I had been using a Linux for last year and I just moved to Mac because my company forces everyone to use Mac. But yeah, I was like, oh wow, Docker Composers is like, you know, kind of cool on a Mac than on Linux. It could also be the terminal that I was using, but I think I'm using the same terminal in board. So I don't know. Yeah, one of my favorite command line tools is totally useless. It's, I don't know if you guys know what it's called, SL. Cause you know, sometimes they type LS. A lot of times you mistake and type SL, but someone made an app called SL. You don't cook, Alan doesn't, okay. But Alan isn't like most people. So you type SL and someone made an app, but if you type SL, you see like a train, like that just like just runs through your terminal your time for like 10 seconds or something. Other was pretty cool.
Artur_Plysyuk:
small hint you could use LL. Just
Adi_Iyengar:
Right, right, right.
Artur_Plysyuk:
the same.
Adi_Iyengar:
Isn't that like a Zish only short cut or is that in bash as well?
Artur_Plysyuk:
I have no idea. I use ZSH and it is here.
Adi_Iyengar:
Thanks.
Allen_Wyma:
install on this SL. See
Adi_Iyengar:
MBC 뉴스 김성현입니다.
Allen_Wyma:
what heck you're talking about. Oh, that is really annoying. Why so for that reason?
Adi_Iyengar:
Well, because people mistype Lists with SL quite often, when people are listing their files on command line, Lists is just too late. People mess it up with SL.
Allen_Wyma:
Thank you.
Adi_Iyengar:
I used to do it a lot more. So yeah.
Allen_Wyma:
I've honestly never done that. I think maybe like once out of my life.
Adi_Iyengar:
Well now that you've installed that you would know.
Allen_Wyma:
Yeah, I'll know more often, I guess. Yeah, but I'm guessing you could probably build that in Elixir now. That's what it seems like. The animation coming across.
Adi_Iyengar:
Yeah, I think it looks like you can use owl to build it now, right,
Allen_Wyma:
Thanks, sir.
Adi_Iyengar:
Arthur? Yeah, because he built the walking owl, so you can build this.
Artur_Plysyuk:
You mean just to have any alias to alias comment
Allen_Wyma:
No.
Artur_Plysyuk:
and that's it?
Adi_Iyengar:
I didn't see the moving train
Allen_Wyma:
Yeah.
Adi_Iyengar:
in the terminal, but yes. Alan, is there a way you can share a screen and show it to
Allen_Wyma:
I
Adi_Iyengar:
Arthur?
Allen_Wyma:
was trying to get that going if you can distract him while I pulled this up. Oh, there it is.
Adi_Iyengar:
I'm gonna distract him.
Allen_Wyma:
Yeah, here we go. So is it it's SL right? So you just type
Adi_Iyengar:
Mm-hmm.
Allen_Wyma:
SL, you can see this right? Arthur, and then you'll see the train coming
Artur_Plysyuk:
Yes, yes.
Allen_Wyma:
from right to left.
Artur_Plysyuk:
Oh yes, yes. It is
Adi_Iyengar:
You
Artur_Plysyuk:
possible...
Adi_Iyengar:
can build the season owl. Yep.
Artur_Plysyuk:
Yes, it is a kind of spinner. It is possible to do this right now.
Allen_Wyma:
13 seconds.
Adi_Iyengar:
Are you gonna do that for us, Doctor?
Allen_Wyma:
train.
Artur_Plysyuk:
I can if you send me frames.
Adi_Iyengar:
Ha ha ha
Allen_Wyma:
You can already do the hour, right? That's good enough. Make the hour last for 13 seconds.
Adi_Iyengar:
Yeah, good call. Good call.
Allen_Wyma:
Why? Although this is a really good question. Is there something related to something in your life or the owl?
Artur_Plysyuk:
Nope, I just hate aliases and I like short names. That's it.
Allen_Wyma:
Okay.
Artur_Plysyuk:
And that was the first name that came into my mind.
Allen_Wyma:
interesting. What was in your mind before that? I'm just curious how you get the owl.
Artur_Plysyuk:
I have no idea, that was two years ago.
Allen_Wyma:
Ha ha.
Adi_Iyengar:
I would have expected a Harry Potter answer. Like they have owl exams, ordinary wizarding level exams. I was expecting a deep, whatever, some story. But I'm so glad that you just picked a name. Because I do that very often. You don't need a story to name your library. Just name it. A small name, simple. That's good enough.
Allen_Wyma:
I mean, so like how far along is, is how is our actually basically feature complete and just ready to go? You're just kind of parking it for now, or do you have a timeline of features that you want to start to bring? Is our complete or do you still want to add more to it?
Artur_Plysyuk:
I think it is more like complete. I would like to expand it if there is a need. Like it is possible to add different graphs and stuff like that, but I didn't need it and there were no requests for this. So for the major use cases, I think it is done.
Allen_Wyma:
Nothing is ever done, no?
Artur_Plysyuk:
Well, Joseph said that a lecture is done, isn't it? Or
Allen_Wyma:
It's a
Artur_Plysyuk:
it
Allen_Wyma:
good
Artur_Plysyuk:
was
Allen_Wyma:
point.
Artur_Plysyuk:
about an actor. I don't remember
Allen_Wyma:
Yeah, he did
Artur_Plysyuk:
exactly,
Allen_Wyma:
say Alexa
Artur_Plysyuk:
but...
Allen_Wyma:
is basically done, I think, right?
Adi_Iyengar:
Yep, he said that.
Allen_Wyma:
Many years ago, but we still keep adding more to it, so. I don't know, not that I've mentioned it. Why is Elixir done, but then we're adding more methods, more things, I mean, I guess we're adding more libraries. We're still adding more methods to
Artur_Plysyuk:
I
Allen_Wyma:
Core.
Artur_Plysyuk:
think he was talking about ECTO. There was a topic on ECTO forums with an announcement that ECTO is done. And there are no planning, no planned breaking changes. And that's it. So the core is ready. And it is already the third version of ECTO. have stable design.
Adi_Iyengar:
Hmm. I think they also might mean by done, not any more major versions would be released. Maybe that's what they might mean, but they might not mean smaller stuff. But I mean, ECTO, I guess, is pretty... I can see ECTO being actually done, done.
Allen_Wyma:
Yeah, I just found the announcement from 2018. This is interesting. I didn't even know about this one. I said, basically, it's the final version of 3.0. It's out. And Ecto2 provide a stable API. This means no more new features, although it continued providing bug fixes and updates for everyone running Ecto production, BresciaShirt, Ecto2 to be well maintained. It's interesting. I wonder if this is something to do with, like, I remember when Ecto2 was out, there was a lot of database adapters, right? came out and 3 has obviously been out since 2018, there's quite a few database adapters that have become incompatible because they just haven't updated them. So I wonder if maybe some of these kind of abandoned database adapters
Adi_Iyengar:
Hmm.
Allen_Wyma:
could be something, because it does take quite a bit of effort I think to upgrade from 2 to 3 if I remember correctly. Just thinking out loud, right? I don't have a real reason, but just came to my mind.
Adi_Iyengar:
I don't remember the adapters being that different.
Allen_Wyma:
Well, I mean, if you look up, there was some MongoDB ones, because I was looking at using, I had to use MongoDB for something. And I think at the time I was looking around and there was like two or three different MongoDB adapters, and I think only two of them were not supported in three.
Adi_Iyengar:
Yeah, I think the implementation might not have been right when they built an adapter. But I built an adapter for like CSVs. It wasn't that hard to move that to 3.0.
Allen_Wyma:
Yeah, again, I was just thinking out loud because I just remember many years ago because I also did other database integrations like with MS SQL and some other stuff. And I just remember
Adi_Iyengar:
Hmm.
Allen_Wyma:
it like took some time.
Adi_Iyengar:
Yeah, I think it could have some code that might be not yet. Again, they might have done it in a way that made it harder to move, but yeah, can't talk much about that.
Allen_Wyma:
Sorry for the
Adi_Iyengar:
Yeah,
Allen_Wyma:
side question. Go ahead.
Adi_Iyengar:
also adapter that isn't really like a, I mean, there's a type spec, there's a behavior for that, but I think a lot of it's very open. types in the behavior. So I can see that also being like, you know, more implementation heavy. So depends on what you're doing with each adapter.
Allen_Wyma:
Maybe maybe we need we need an adapter for Ecto
Adi_Iyengar:
Where will you store the data though? How will you get the data back from Al?
Allen_Wyma:
obviously right to the terminal, but get back that's remember it doesn't support kit yet. So
Adi_Iyengar:
right. Oh you mean user input. Interesting got it nice.
Allen_Wyma:
Oh, there we go. Oh, yeah, you could use it for the logger, right? Or something. Anyways.
Adi_Iyengar:
Yeah.
Artur_Plysyuk:
Well, you could use a file, like open a text editor and type a CSV file and listen to it on the
Adi_Iyengar:
That's
Artur_Plysyuk:
editor
Adi_Iyengar:
the adapter
Artur_Plysyuk:
side.
Adi_Iyengar:
I wrote. CSVs. It's easy, right? It's like simple. You don't need a database for everything. You just literally store some data in CSVs. So, yeah, I'm surprised that people, there aren't that many use cases for that. but you can build with owl to report on each file, right? Display each CSE file as a table, color-coder table.
Artur_Plysyuk:
Yes, if that's possible.
Adi_Iyengar:
Yeah, I think now we're going off on a tangent. It's tangent.
Allen_Wyma:
Yeah, definitely. So, um, yeah, I mean, I, I start to kind of understand a little bit more about why I want to use this, like, I'm thinking, you know, there is quite a few people that say, Oh yeah, you should use, I know, I'm the kind of person that says like, although you know, this one language, you know very well that you should use it for everything. I know there's quite a few people who say, Oh yeah, you should learn JavaScript because you use it front and back and you can use it wherever, right? Same with Python, etc. For me, I'm more like, Yeah, it needs to be, you know, the right language, right situation, and etc, right? So just when I have to write something with a term, I never think about using Elixir, but I should just give it a go and see how it goes, you know? I mean, what's the harm, right? At least I know if it's right for me or not.
Artur_Plysyuk:
Let me say that if you have some application, I mean a business application that has a lot of lines and you need a simple progress bar, you already in a lecture codebase you have to deal with it, I mean, it will function to create a user project and stuff like that, whatever is in your domain. So
Allen_Wyma:
Mm-hmm.
Artur_Plysyuk:
it's kind of a requirement to use Elixir for such scripts.
Allen_Wyma:
I see. Okay. Yeah, I don't have any more questions about about our but it's definitely pretty interesting. I mean, Adi, what do you think?
Adi_Iyengar:
Yeah, I think I think I'm all set to it just reminded me of one last thing we could use it for an elixir would be like a process monitor that is not like a You know the Erlang process monitor opens up in a non-terminal based interface, right? But you can do the info and A terminal but it's hard to display that in a digestible way, right? I can be used to do that
Artur_Plysyuk:
Yep, I think that's possible and relatively easy to do.
Adi_Iyengar:
So maybe Alan will do it for us.
Allen_Wyma:
Yeah, maybe. Gotta get the SL going again. Perfect. I'm going to have to show that to more people. I just wonder like, you know, why I got to check this thing. I got to look into this program. What is the whole point of this thing? Just for that one reason that people type the money type LS and they end up typing SL. That's why he made this thing.
Adi_Iyengar:
I think that's the point, yep.
Allen_Wyma:
Okay, I'm going to the homepage for what the heck is going on with this thing. Curious. Oh yeah. That's exactly what it is. Oh, it stands for steam locomotive. Ah, now I understand why it's a train. I had no idea why it would be a train. Okay, cool. Yeah, again, I'm not, I think, how do you have any questions? Cause you're the expert in this domain.
Adi_Iyengar:
Not an expert and no more questions.
Allen_Wyma:
Cool, if nothing else, then Arthur, I also give you a chance. Is there anything that you want people to know about our before we move on to pics?
Artur_Plysyuk:
I'm not sure, I think we covered a lot of things and I just used it, that's it.
Allen_Wyma:
Okay, sounds good. And with that, let's go on to pics, right? So, um, Adi, I think you should go first, right? I think the host usually goes last.
Adi_Iyengar:
Yeah, sure. So I guess I have a couple picks, or three picks today. I tried this like, it's funny, I grew up in India but never really liked Indian coffee. Then, you know, last few weeks and it's been really good. So I'll share a link to that coffee, it's really good. It's a little extra strong, but you know, people who like caffeine, they'll enjoy that. So that's one. Another game that I've been playing last couple of weeks, I don't have, I haven't had much time, but the little that I've played, it's called the forgotten city, I think. three developers. So I started playing the game, and within 15 minutes, my mind was blown. I'll just give a spoiler. It's just an incentive so you guys can try it. The game's got a time loop in it, and you basically retain memory in each loop. And you have to create a paradox to finish the game. It's very interesting and I really was pleasantly surprised. I would highly encourage anyone to try it. I think it's available for like, I think five bucks or something on the PS store at least. So it should be not that expensive either. And the last one, still looking for a founding engineer for one of the startups that I'm advising. It's completely Elixir based application, 100% code coverage all this that I already mentioned last week. So if any of the listeners looking for a job and they are interested in the founding engineer like position for a startup, reach out to me.
Allen_Wyma:
Okay, cool. Arter, what do you have? Anything for us?
Artur_Plysyuk:
I think I have a library, probably you have heard about
Allen_Wyma:
Is it
Artur_Plysyuk:
it.
Allen_Wyma:
out? No,
Artur_Plysyuk:
It
Allen_Wyma:
OK.
Artur_Plysyuk:
is another library which is related to terminal. It is about logging active queries in a more readable format. The name of the library is activeDevlogger. parameters of the query to the query so you can easily copy it and paste it in your favorite IDE.
Allen_Wyma:
The guy who wrote this library looks very familiar.
Artur_Plysyuk:
Yes.
Allen_Wyma:
This guy?
Artur_Plysyuk:
think you know.
Allen_Wyma:
I think it's you. This looks pretty cool actually. Let me just, I think I want to see if I can make the picture bigger. I don't know. Yes. Uh, yeah, I actually, I think I needed something like this. I kind of wrote my own using, um, Ecto and tell us telemetry. I think. Right. You, you, you log out the query, right? Just understand what's gone wrong. So that's pretty cool.
Artur_Plysyuk:
that's exactly what it does.
Allen_Wyma:
Yeah.
Artur_Plysyuk:
It listens to telemetry events and logs the queries.
Allen_Wyma:
I like the colors so this one must use all underneath no
Artur_Plysyuk:
No, it's a...
Adi_Iyengar:
I
Artur_Plysyuk:
it's
Adi_Iyengar:
like it.
Artur_Plysyuk:
without... without... all.
Allen_Wyma:
Actually, I like this one because you actually like put like usually had those dollar signs everywhere and you have to kind of try to figure out what's what, but this one actually in lines everything. That's really cool. I like that part.
Adi_Iyengar:
It's almost as if it's written by someone as an expert in command line.
Allen_Wyma:
Yeah, definitely. Anything else? Or that it's okay if that's it. I just want to make sure I don't cut you off too soon.
Artur_Plysyuk:
I think that's it.
Allen_Wyma:
Cool. Uh, for me, yeah, I'm playing a new game this week. Finally had a moment to switch to a new one. I'm playing alien fires, fires, fire team elite. Have you ever played that one? Uh, that's, that's a lot of fun. So basically you're, uh, the Marines, you know, from aliens and you go to some place. Actually, I don't even know the story, but basically I just keep killing aliens. And that's, that's fun for me. It's kind of like division. If you ever played or heard of division from Tom Clancy, similar, like third You get to choose your weapons, you level them up, you can add attachments, like change out the barrel, change out the magazine and and it's pretty cool. Like if you enjoy killing stuff and a third person view, I think it's definitely a fun thing. Yeah, check it out. And I think Steam's having a sale soon, actually in a few hours from our recording time. So I'm waiting for that. You might as well just pick it up if it fits out on sale when you guys hear this episode. I think it's a pretty decent game. Otherwise, yeah, that's it from me. Yeah, and with that, I think great to have you on Arter. It's good to hear about this library and now I will have to play around with it. Thanks for giving me homework. No problem.
Adi_Iyengar:
Oh, sorry. I just remembered
Allen_Wyma:
Great.
Adi_Iyengar:
another pick off mine
Allen_Wyma:
Thank
Adi_Iyengar:
because
Allen_Wyma:
you for coming
Adi_Iyengar:
I haven't
Allen_Wyma:
on.
Adi_Iyengar:
joined in a bit. It's all it's really two owls, but not the owl that Arthur wrote the Harry Potter game Hogwarts Legacy. Anyone who is a gaming enthusiast and a Harry Potter fan, give it a try. Probably the game of the year up till now. It's really good. Just my last pick. I think we lost, Alan. Is he stuck for you two, Arthur?
Artur_Plysyuk:
Yes, I
Adi_Iyengar:
OK.
Artur_Plysyuk:
thought that it is me, but not me.
Adi_Iyengar:
I thought such a first I can and I thought Alan just so happy about the game, but no, he is actually stuck. What sucks is that he he's the only one who can stop the recording. I think he'll join back and stop the recording.
Artur_Plysyuk:
Will the final recording be edited somehow?
Adi_Iyengar:
Oh yeah, they'll be, we have an editor, they'll
Allen_Wyma:
Weird.
Adi_Iyengar:
edit all these.
Learning about Owl with Artur Plysyuk - EMx 213
0:00
Playback Speed: