WEBVTT

00:00:00.001 --> 00:00:08.740
Talk Python To Me, episode number one, with guest Nicola Ioroshi, recorded Tuesday, March 31st, 2015.

00:00:08.740 --> 00:00:37.820
Hello and welcome to Talk Python To Me, a weekly podcast on Python,

00:00:37.820 --> 00:00:41.400
the language, the libraries, the ecosystem, and the personalities.

00:00:41.400 --> 00:00:45.300
This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy.

00:00:45.300 --> 00:00:49.900
Keep up with the show and listen to past episodes at talkpythontome.com.

00:00:49.900 --> 00:00:53.820
This episode, we'll be talking to Nicola Ioroshi about EVE.

00:00:53.820 --> 00:00:58.380
Before we get to the interview with Nicola, a quick announcement.

00:00:58.380 --> 00:01:03.900
Since recording this episode, Nicola and I teamed up to create a dedicated course about EVE.

00:01:03.900 --> 00:01:11.800
This demo-driven journey is just the course you need to effortlessly build RESTful services based on Flask and MongoDB.

00:01:11.800 --> 00:01:15.400
We dive deep into every aspect of the EVE REST framework.

00:01:15.400 --> 00:01:19.860
After a quick introduction to MongoDB and Flask, we'll dig into EVE,

00:01:19.860 --> 00:01:23.720
build our schemas and endpoints, and start serving HTTP clients right away.

00:01:23.720 --> 00:01:25.020
And that's just the beginning.

00:01:25.520 --> 00:01:29.960
And who better to learn EVE from than Nicola, the creator and maintainer himself.

00:01:29.960 --> 00:01:35.840
To learn more and get started, just visit talkpython.fm/EVE or click the link in the show notes.

00:01:36.640 --> 00:01:37.860
Let me introduce Nicola.

00:01:37.860 --> 00:01:43.220
Nicola is a passionate Python and C# open source hacker based in Ravina, Italy.

00:01:43.220 --> 00:01:52.440
Back in 1991, he co-founded CIR2000, a small company focusing on delivering accounting software solutions for the small businesses.

00:01:52.440 --> 00:01:59.720
He's the creator and maintainer of a few open source projects, including EVE and a conference speaker who happens to be on sabbatical.

00:01:59.920 --> 00:02:08.320
When he's not hacking on code or spending time with his three kids, he's usually busy running, swimming, hiking, or reading a good old paper book.

00:02:08.320 --> 00:02:09.880
Nicola, welcome to the show.

00:02:09.880 --> 00:02:10.900
Hi, Michael.

00:02:10.900 --> 00:02:12.200
Thank you for having me.

00:02:12.200 --> 00:02:13.340
Yeah, it's really great.

00:02:13.340 --> 00:02:15.420
Thanks for helping me kick off this podcast.

00:02:15.420 --> 00:02:20.700
So you and I have known each other for a few years, and it's really nice to get a chance to speak with you again.

00:02:20.700 --> 00:02:26.080
I think it's been about a year since we last met on an aircraft carrier in New York City, right?

00:02:26.080 --> 00:02:27.580
Right, that's true.

00:02:27.580 --> 00:02:29.300
Yeah, that was a lot of fun.

00:02:29.300 --> 00:02:31.620
Yeah, indeed.

00:02:31.620 --> 00:02:34.060
Yeah, so let's sort of start at the beginning.

00:02:34.060 --> 00:02:37.380
You, like myself, do Python and C#.

00:02:37.380 --> 00:02:38.700
So how did you get into Python?

00:02:38.700 --> 00:02:44.520
Yes, as you say, I've actually always been a C# guy, mostly.

00:02:44.520 --> 00:02:56.060
Our flagship product is a Windows desktop application, so you usually deploy it on your user client server setup and stuff like that.

00:02:56.340 --> 00:03:02.960
And as long as we were working in that context, we never really felt the need to look anywhere else.

00:03:02.960 --> 00:03:09.040
C# in general was, and the Microsoft stack in general, was just doing fine for us.

00:03:09.540 --> 00:03:19.200
Then, like anyone else, a few years ago, we started looking at moving to the web and mobile and stuff like that.

00:03:20.000 --> 00:03:29.140
And I believe that's when I thought it was the perfect time, the perfect opportunity to move out of my, let's say, comfort zone.

00:03:29.280 --> 00:03:36.980
My view back then, the micro stack was still a good bet for all things related to the web.

00:03:36.980 --> 00:03:41.360
But there was so much else out there, you know?

00:03:41.360 --> 00:03:48.280
So I started looking at the JavaScript first and then Python and other languages.

00:03:48.280 --> 00:03:55.480
And there were so many options, I mean, and I really wanted to...

00:03:55.480 --> 00:03:58.960
Maybe I was also a little bored about what I was doing by then.

00:03:58.960 --> 00:04:04.120
So that was a perfect opportunity for me to start doing something else and looking around.

00:04:04.120 --> 00:04:09.960
And Python came...

00:04:09.960 --> 00:04:13.300
I don't really remember how...

00:04:13.300 --> 00:04:20.180
Maybe I was just reading some tutorial online and I was immediately hooked by the language itself and the community

00:04:20.180 --> 00:04:23.220
and the open source machine in general.

00:04:23.220 --> 00:04:29.260
It was allowing me for incredible performance boost, for example.

00:04:29.260 --> 00:04:34.660
I remember one of the first times I was playing around with Flask

00:04:34.660 --> 00:04:39.160
and something just did not work as I expected.

00:04:39.160 --> 00:04:41.260
And I was stuck there.

00:04:41.260 --> 00:04:43.020
I couldn't make any progress.

00:04:43.020 --> 00:04:47.840
Now, I don't really remember what it was really,

00:04:47.980 --> 00:04:51.280
but something very stupid, most likely, you know?

00:04:51.280 --> 00:04:53.840
That's how it is when you're learning, right?

00:04:53.840 --> 00:04:56.200
Yeah, I was just learning a new language.

00:04:56.200 --> 00:04:59.180
So it was truly had to be something very stupid.

00:04:59.180 --> 00:05:06.680
And I had this moment when I realized that I could just go a stepfather and look at the source code.

00:05:06.680 --> 00:05:11.460
That, you know, from someone coming from the .network and the closer source in general,

00:05:11.460 --> 00:05:13.760
that's not a given.

00:05:14.000 --> 00:05:19.800
I mean, it was really awesome to be able to go on the website, on the tab,

00:05:19.800 --> 00:05:22.220
and check out on the source code for Flask

00:05:22.220 --> 00:05:27.520
and understand what actually was doing behind the scenes.

00:05:27.520 --> 00:05:33.080
And that's when really open source and the general Python and open source in general,

00:05:33.080 --> 00:05:38.080
really, I saw what the potential was about it.

00:05:38.880 --> 00:05:46.280
But then we were, in our world, we were, I would say, behind an arrow of car time,

00:05:46.280 --> 00:05:47.220
something like that.

00:05:47.220 --> 00:05:51.440
Developer tools, for example, they had to buy licenses for them.

00:05:51.440 --> 00:05:54.940
And most of the time, even if you bought a license,

00:05:54.940 --> 00:05:58.180
you still did not get any access to the source code.

00:05:58.180 --> 00:06:02.400
And so it was really an epiphany for me.

00:06:03.180 --> 00:06:04.800
Yeah, it's fantastic.

00:06:04.800 --> 00:06:05.640
Yeah.

00:06:05.640 --> 00:06:06.740
Yeah.

00:06:06.740 --> 00:06:08.480
That's really awesome.

00:06:08.480 --> 00:06:16.080
Yeah, I think a lot of developers spend their time in worlds where much of what you do is a black box

00:06:16.080 --> 00:06:17.440
and you just can't know.

00:06:17.440 --> 00:06:23.520
And I think, you know, in the Python world, we're kind of spoiled in that you can just keep looking farther down inside,

00:06:23.520 --> 00:06:24.780
you know, and that's really great.

00:06:25.040 --> 00:06:29.580
So you got into Python and it sounded like you were getting started in Flask.

00:06:29.580 --> 00:06:33.180
And then I guess EVE is kind of a natural extension.

00:06:33.180 --> 00:06:35.000
What is EVE, actually?

00:06:35.000 --> 00:06:40.840
So EVE is an open source Python REST API framework designed for human beings,

00:06:40.840 --> 00:06:45.220
which means that it is supposed to be easy to use and powerful.

00:06:45.600 --> 00:06:56.520
And its goal is to allow any developer to effectively build and deploy highly customizable and fully featured web services.

00:06:56.520 --> 00:06:58.720
Or at least that's the idea.

00:06:58.720 --> 00:07:06.100
It is powered by Flask and it offers support for MongoDB out of the box.

00:07:06.680 --> 00:07:12.560
And there's also a SQL Archemy extension provided by the community.

00:07:12.560 --> 00:07:19.100
So you can use EVE both with MongoDB and Postgres or MySQL or whatever.

00:07:19.100 --> 00:07:21.120
So, yeah, that's fantastic.

00:07:21.120 --> 00:07:22.460
So I kind of looked at it.

00:07:22.460 --> 00:07:24.820
I don't know all that much about EVE.

00:07:24.820 --> 00:07:26.940
I've just played with it a little.

00:07:26.940 --> 00:07:28.700
I saw some tutorials and checked them out.

00:07:28.700 --> 00:07:30.640
And it looks really interesting.

00:07:30.640 --> 00:07:33.980
I also picked up that it was inspired by the requests package.

00:07:33.980 --> 00:07:34.760
So that's cool.

00:07:34.980 --> 00:07:38.960
Basically, the way it works, let me try to paraphrase how your library works,

00:07:38.960 --> 00:07:41.920
is I have some sort of data source.

00:07:41.920 --> 00:07:46.400
And it's by default MongoDB, which is an awesome data source, by the way.

00:07:46.400 --> 00:07:49.920
Or also SQLAlchemy, so against a lot of the relational databases.

00:07:49.920 --> 00:07:54.080
And I can easily put like a RESTful API over my data.

00:07:54.080 --> 00:07:54.900
Is that how it works?

00:07:54.900 --> 00:07:55.800
Yeah, exactly.

00:07:55.800 --> 00:07:57.420
That's the idea, basically.

00:07:57.420 --> 00:08:03.360
You have your data source somewhere and you bind it to EVE, to any instance.

00:08:03.780 --> 00:08:14.620
You configure it by just setting up a configuration file where you basically give your API topology,

00:08:14.620 --> 00:08:24.560
your endpoints, how they work, to which collection on MongoDB or table on SQL each endpoint maps to.

00:08:25.100 --> 00:08:27.080
And then you are good to go.

00:08:27.080 --> 00:08:32.080
The idea, basically, is that you have a lot of features out of the box.

00:08:32.080 --> 00:08:35.920
So you don't have to code much in order to get started with your API.

00:08:35.920 --> 00:08:42.580
And then you can, of course, go in and add the callback functions, for example.

00:08:42.740 --> 00:08:51.840
So when some RESTful API gets in, you can add your own code that makes whatever you need to do.

00:08:51.840 --> 00:09:01.500
But the basic idea is that if you just need a front-end API for your data, you just have very little to do.

00:09:01.500 --> 00:09:07.500
I mean, you just have to set up the configuration file and you are good to go in a few minutes.

00:09:08.440 --> 00:09:10.360
But, yeah, it looks super easy to get started.

00:09:10.360 --> 00:09:10.920
It looks great.

00:09:10.920 --> 00:09:14.120
And I think it's inspired by requests in that sense as well.

00:09:14.120 --> 00:09:21.240
So are people using more sort of JavaScript front-ends and using that to get to their data?

00:09:21.240 --> 00:09:24.440
Or are they using this for more, like, back-end services, right?

00:09:24.440 --> 00:09:27.220
So do you know, like, what the main consumption model is?

00:09:27.220 --> 00:09:34.640
Yeah, well, it is being used for all kinds of use cases, actually.

00:09:34.640 --> 00:09:41.800
We have a lot of websites consuming EVE instances, but we also have a lot of mobile clients, for example.

00:09:41.800 --> 00:09:50.940
I, myself, am using EVE from iOS and Android applications, for example, which are being coded in C-sharp, actually.

00:09:51.220 --> 00:09:57.440
We are using SAMRIN framework for writing our own mobile applications.

00:09:57.440 --> 00:10:00.180
So you have all kinds of use cases, really.

00:10:00.180 --> 00:10:04.180
And also, of course, desktop application.

00:10:04.180 --> 00:10:14.700
And all kinds of languages are consuming the EVE instance, since you are just dealing with, you know, JSON, basically,

00:10:14.860 --> 00:10:18.340
which goes back and forth between the client and the server.

00:10:18.340 --> 00:10:21.960
So you can deploy it whenever you want, actually.

00:10:21.960 --> 00:10:23.380
Yeah, that's fantastic.

00:10:23.380 --> 00:10:26.740
So you said MongoDB is the default back-end.

00:10:26.740 --> 00:10:28.440
Why did you choose Mongo?

00:10:28.440 --> 00:10:34.780
Well, MongoDB has a few interesting features for me.

00:10:35.040 --> 00:10:43.180
The first is that in the REST world, you basically are sending JSON back and forth between clients and servers.

00:10:43.180 --> 00:10:53.260
And MongoDB also stores JSON, or actually B-zone, which is a variation of JSON, but basically it's the same stuff.

00:10:53.260 --> 00:10:59.760
And then you have Python dictionaries, which are the perfect match for JSON as well.

00:10:59.880 --> 00:11:09.980
So when I was researching for building my own API, it came kind of, you know, the natural choice.

00:11:09.980 --> 00:11:19.280
I don't have to serialize and deserialize objects back and forth between the client and the REST server and the database.

00:11:19.920 --> 00:11:29.960
So everything is smooth and easy and there isn't a lot of code in the middle doing conversions and serialization and stuff like that.

00:11:29.960 --> 00:11:34.000
You don't have anything like that when you're working with MongoDB.

00:11:34.000 --> 00:11:38.040
And also REST APIs are stateless by default.

00:11:39.220 --> 00:11:47.240
So you don't usually have to, you know, you're usually sending small data packets for each request.

00:11:47.240 --> 00:12:02.060
And that's something that makes MongoDB lack of transactions really a non-issue because you are already dealing with the concept of being stateless between your request and the client.

00:12:02.060 --> 00:12:11.660
And in some way it has to deal with the fact that a single request can go wrong or can go fine.

00:12:11.660 --> 00:12:23.800
And so what always is a concept for people going to use MongoDB is not really an issue in this particular use case.

00:12:23.800 --> 00:12:34.360
It's an interesting point that, you know, MongoDB has all of these really positive features, scalability, simplicity, lightweight, all these things.

00:12:34.360 --> 00:12:39.820
But one of its sometimes criticisms is its lack of cross-document transactions.

00:12:39.820 --> 00:12:43.320
But if you're doing REST over HTTP, that's a stateless protocol anyway.

00:12:43.320 --> 00:12:46.780
So you're kind of, it's like you said, a non-issue.

00:12:46.780 --> 00:12:47.580
That's really interesting.

00:12:47.900 --> 00:12:48.860
Yeah, yeah.

00:12:48.860 --> 00:12:59.360
And then there is MongoDB being schemeless, which is really nice for me because when you are building a prototype in your API,

00:12:59.360 --> 00:13:10.440
you are going to change your schema or if in API terms, your endpoint configuration, your payload, quite a lot you are adding fields.

00:13:10.440 --> 00:13:18.140
And between API versions, you are going to add new fields, remove old fields, stuff like that.

00:13:18.140 --> 00:13:21.180
You are doing that constantly, at least at the beginning.

00:13:21.180 --> 00:13:35.280
And here MongoDB is very nice to use because it allows you to change your schema on the fly without having to update the database.

00:13:35.600 --> 00:13:38.700
And so without any impact on performance as well.

00:13:38.700 --> 00:13:49.880
So it kind of made sense for what we were doing by then, working with MongoDB on the back end and Python on the server side.

00:13:49.880 --> 00:13:59.080
And yeah, that's what a lot of people agree with, I believe, because it has been adopted by a lot of people.

00:13:59.360 --> 00:14:10.440
And also, as I was saying earlier, there is a SQL extension, actually, which connects EVE to SQL ArchMere.

00:14:10.440 --> 00:14:16.320
And so you can, in fact, use your standard SQL database with EVE as well.

00:14:16.320 --> 00:14:18.460
Right, yeah, that's really interesting.

00:14:18.460 --> 00:14:20.500
You just have to do a little bit more work.

00:14:21.360 --> 00:14:27.940
So, you know, when you built the framework, who was the intended user that you were thinking of?

00:14:27.940 --> 00:14:29.880
Like, what's the most common use case?

00:14:29.880 --> 00:14:42.360
Well, I would say that the unexpected user can benefit a great deal from EVE because, and I think about EVE is that you can,

00:14:42.700 --> 00:14:50.180
you basically get a lot of design choices and implementation already done for you.

00:14:50.180 --> 00:15:00.220
So you can quickly prototype an API if you need to put your mobile or front-end developers at work.

00:15:00.220 --> 00:15:06.660
You can probably give them an API, a functioning API in a few minutes or maybe in a few hours.

00:15:06.660 --> 00:15:09.960
And that's surely very interesting for a lot of people.

00:15:09.960 --> 00:15:19.340
I'm having, I see there are PHP guys, for example, that are learning Python because they want to use EVE, which is kind of a surprise to me.

00:15:19.340 --> 00:15:20.340
That's pretty amazing.

00:15:20.340 --> 00:15:28.280
So you must be kind of proud that, you know, you're bringing people into the Python world literally so that, you know, because they want to use EVE.

00:15:28.280 --> 00:15:30.680
Yeah, yeah, that's awesome.

00:15:30.680 --> 00:15:36.620
When I get emails from people who are learning Python because they want to use EVE, that's totally awesome.

00:15:36.620 --> 00:15:42.800
It means that, you know, kind of makes, tells you that your goal has been achieved somehow.

00:15:42.800 --> 00:15:48.860
And then you're also bringing new people to the Python world, which is also awesome.

00:15:48.860 --> 00:15:50.880
So I'm really glad for it.

00:15:51.240 --> 00:15:54.420
Being based on Flask itself.

00:15:54.420 --> 00:16:05.280
In fact, we also have a lot of experience with Python guys working with EVE and building extensions because, you know, EVE is just a Flask subclass.

00:16:05.280 --> 00:16:09.340
And so whatever works with Flask, you can use with EVE.

00:16:09.980 --> 00:16:17.940
And so you can also get access to the Flask documentation and whatever works there also with EVE as well.

00:16:17.940 --> 00:16:24.100
So you can go on Stack Overflow or browse the Flask documentation, which is also excellent.

00:16:24.460 --> 00:16:31.460
And you can move in the layers, between the layers, you know, EVE at the top and Flask is right behind EVE.

00:16:31.460 --> 00:16:34.940
And then eventually MongoDB or your SQL database.

00:16:35.340 --> 00:16:47.580
And so while it is very easy to start with, probably if you are already using Flask, you can enjoy EVE so much more because you can do whatever you want with it.

00:16:47.580 --> 00:16:56.280
You can, for example, you can build a Flask extension and use it with EVE, which is in fact what most people are doing.

00:16:56.280 --> 00:17:02.960
We have a few community extensions, which are basically Flask extensions themselves.

00:17:03.680 --> 00:17:10.200
So it is good for the beginner, but it is also good for the experienced developer, I believe.

00:17:10.200 --> 00:17:11.440
Yeah, that's really cool.

00:17:11.440 --> 00:17:14.980
So all the great stuff that's out there for Flask, you can just use it.

00:17:14.980 --> 00:17:25.180
And maybe even if you already have a Flask website for HTML, you know, for like browsers to consume, you could add services to it pretty easily by adding EVE into your web app, yeah?

00:17:25.180 --> 00:17:27.340
Exactly, exactly.

00:17:27.340 --> 00:17:29.080
That's exactly what people are doing.

00:17:29.240 --> 00:17:45.520
And for example, there is a guy who wrote a EVE docs extension, which basically what he's doing is building the API documentation and serving them as a static HTML pages.

00:17:45.760 --> 00:17:55.040
And what it does is reading the API configuration files and building a browsable documentation for the user.

00:17:55.040 --> 00:18:10.900
So if you go to the, I don't know, example.com slash docs, you get the API documentation for free because it's being done as a Flask extension by this EVE docs extension.

00:18:10.900 --> 00:18:17.100
So you can mix and match HTML pages with REST APIs.

00:18:17.100 --> 00:18:18.380
That's cool.

00:18:18.380 --> 00:18:27.800
So what this guy's project does is basically it's like a self-documenting API or self-documentation for the API just depending on how you configure EVE, yeah?

00:18:27.800 --> 00:18:28.940
Yeah, yeah, yeah.

00:18:29.040 --> 00:18:32.980
I get a lot of questions about this actually even on Stack Overflow.

00:18:32.980 --> 00:18:39.460
So how can I serve static pages along with my API endpoints?

00:18:39.460 --> 00:18:41.700
And that's actually very easy to do.

00:18:41.700 --> 00:18:48.380
You just have to add a route to Flask as you would do with the Plex itself.

00:18:48.380 --> 00:18:50.340
So it's very, very easy to pull off.

00:18:51.080 --> 00:18:51.500
Very nice.

00:18:51.500 --> 00:18:54.900
So it sounds like, you know, this is a very popular project.

00:18:54.900 --> 00:19:03.360
And I looked on GitHub and it's got, you know, like 2,000 stars and 300 or so forks.

00:19:03.360 --> 00:19:05.100
That's a lot of people contributing.

00:19:05.100 --> 00:19:07.480
And this is not your full-time job, right?

00:19:07.480 --> 00:19:08.780
This is like a second project.

00:19:08.780 --> 00:19:17.860
So how much work is it and challenges it to balance making your awesome open source project successful and actually keeping the day job running?

00:19:18.480 --> 00:19:26.340
Yes, it's actually becoming quite a challenge because, you know, EVE is becoming a huge work.

00:19:26.340 --> 00:19:35.360
There are a lot of use cases and people want to do like all kinds of stuff with EVE, which is super cool.

00:19:35.360 --> 00:19:36.900
The community is awesome.

00:19:36.900 --> 00:19:41.500
We have about 70 contributors to the project at this moment in time.

00:19:41.500 --> 00:19:45.540
And they contributed with a lot of very cool features.

00:19:46.300 --> 00:19:49.660
On the other hand, you end up doing a lot of work for free.

00:19:49.660 --> 00:20:01.820
You know, it's kind of, I mean, for what we need EVE for, we'd be happy with what EVE was maybe one year ago.

00:20:01.820 --> 00:20:07.700
And now all the additions to the project are basically coming from the community.

00:20:07.700 --> 00:20:16.080
And they are either or adding new features themselves or asking for new features.

00:20:16.080 --> 00:20:25.560
And when something new and interesting is proposed, I usually end up coding it for the community and for myself, of course, as well.

00:20:25.560 --> 00:20:27.860
But that takes a lot of time.

00:20:28.000 --> 00:20:39.560
So, yeah, it's kind of a challenge because you have to balance your work life with your family and hobbies and open source activity.

00:20:40.220 --> 00:20:47.840
It's not that easy, but you also get a lot of, you know, gratification for doing this.

00:20:47.840 --> 00:20:58.460
I get emails from all around the world from people using EVE in so many strange, odd and amazing use cases.

00:20:58.520 --> 00:21:04.960
And so, yeah, it's hard to do, to pull it up, but it is also very well worth it for me.

00:21:04.960 --> 00:21:07.160
Yeah, I'm sure it's very rewarding.

00:21:07.160 --> 00:21:07.860
That's great.

00:21:07.860 --> 00:21:12.900
Are there other contributors to it, people who actually are putting a lot of effort into it?

00:21:13.640 --> 00:21:17.220
Are you looking for new contributors or what's the status there?

00:21:17.220 --> 00:21:22.360
Yes, we have, as I was saying, we have about 70 contributors of these.

00:21:22.360 --> 00:21:31.800
Maybe 10 of them are very active and have been contributing to the project quite a lot lately.

00:21:31.800 --> 00:21:36.540
Some are very skilled with both Flask and EVE itself.

00:21:36.540 --> 00:21:40.800
So, I still have to do a lot of work or most of the work.

00:21:40.800 --> 00:21:51.400
But, yes, I would really appreciate if more people would join the community and help with, even with simple things like, you know, updating the documentation, fixes titles.

00:21:51.400 --> 00:21:54.700
As you can say, I'm not an English speaker.

00:21:54.700 --> 00:22:04.380
So, it is very easy to find incorrect mistakes in the documentation, for example, or in DocStrengths, in the source code, stuff like that.

00:22:04.960 --> 00:22:08.840
But, also, we have people who are adding amazing features.

00:22:08.840 --> 00:22:15.260
Like, we had, I think, in 0.5, we had versioning feature added to EVE.

00:22:15.260 --> 00:22:23.740
So, you can store multiple versions of your documents and your API.

00:22:23.740 --> 00:22:29.160
And then, you can get back the version that you need with simple request.

00:22:29.160 --> 00:22:36.580
And that's a very cool feature, which was entirely contributed by the community from one guy, actually.

00:22:36.580 --> 00:22:39.220
And that's very cool.

00:22:39.220 --> 00:22:43.400
And so, we had a lot of other additions like that from the community.

00:22:44.460 --> 00:22:46.660
And so, yes, there is a lot of room for improvement.

00:22:46.660 --> 00:22:53.440
And I really would love to see more people jump in and help us with going further.

00:22:53.440 --> 00:22:54.900
That's great.

00:22:54.900 --> 00:22:55.160
Yeah.

00:22:55.260 --> 00:23:05.780
I think people have a hard time realizing how much work it is to actually get something like EVE out the door and ready for the community.

00:23:05.780 --> 00:23:11.520
I mean, there's obviously the writing of the application or the library and then maybe a sample.

00:23:11.780 --> 00:23:20.400
But there's the GitHub repository, the website, the documentation, all the little stuff, the little polish that you have to put on there.

00:23:20.400 --> 00:23:28.400
It seems like, you know, when you feel like you're done, you're halfway there and you still have a ton of little things that are somewhat uninteresting but have to be there, like documentation.

00:23:28.400 --> 00:23:29.320
Yeah.

00:23:29.320 --> 00:23:30.720
Absolutely.

00:23:30.720 --> 00:23:38.700
How's the experience being both a C# and Python and JavaScript developer?

00:23:38.700 --> 00:23:43.300
How do you see the world being this polygot, living in this polygot programming world?

00:23:43.300 --> 00:23:50.960
It's been a wild ride, actually, because, you know, the languages are so different in so many ways.

00:23:50.960 --> 00:23:56.300
Python is a dynamic language, whereas C# is a strongly tighter language.

00:23:56.300 --> 00:24:04.620
And now I'm playing with Go and Netsharp on approaches to solving the same problem, basically.

00:24:05.140 --> 00:24:17.340
And that's really interesting for me because you don't always have one tool, one language, which is perfect for all kind of problems.

00:24:17.340 --> 00:24:23.600
So it's great to actually be able to pick the right tool for the right job.

00:24:24.340 --> 00:24:28.880
And basically what I have now is Python on the web side of things.

00:24:28.880 --> 00:24:38.780
So my servers and websites are Python, while all my mobile applications and desktop applications are C#, for example.

00:24:39.580 --> 00:24:46.900
And I mean, it helps a lot because you get a very different skill set.

00:24:46.900 --> 00:24:52.480
And you can just you often find the same problem.

00:24:52.480 --> 00:24:54.280
You can solve it.

00:24:54.280 --> 00:25:01.620
The different languages actually have been solving it in a different manner, in different with different methods.

00:25:01.620 --> 00:25:02.120
Sorry.

00:25:02.120 --> 00:25:04.560
And that's really awesome.

00:25:04.560 --> 00:25:10.880
It helps you understand and experiment with different things.

00:25:10.880 --> 00:25:20.840
Even if you I go back to C#, I often find that I'm using techniques, which I learned while I was studying Python, for example.

00:25:20.840 --> 00:25:23.300
And the contrary is also true.

00:25:23.300 --> 00:25:36.120
For example, when I was looking at classes in Python, it was very easy to pick them up because, of course, I've been coding classes in C# for like, I don't know, 15, 20 years.

00:25:36.120 --> 00:25:39.000
And so it was very, very easy.

00:25:39.000 --> 00:25:43.080
And this is a very trivial example, but you get what I mean.

00:25:43.840 --> 00:25:44.680
Yeah, absolutely.

00:25:44.680 --> 00:25:47.000
And I, you know, I've lived that life as well.

00:25:47.000 --> 00:25:54.220
I think one interesting aspect that's different is the languages are actually not super different, right?

00:25:54.220 --> 00:25:57.920
Python is obviously dynamic and C# is static.

00:25:57.920 --> 00:26:01.160
But in a lot of ways, like you said, with the classes and so on, they're similar.

00:26:01.160 --> 00:26:08.860
Where they start to get different is around the tooling and around the packages and the frameworks that you can use.

00:26:08.860 --> 00:26:09.500
Yeah.

00:26:09.500 --> 00:26:10.000
Yeah.

00:26:10.000 --> 00:26:13.400
What tools do you use for working with Python?

00:26:13.580 --> 00:26:16.400
Do you have like an editor that you're fond of or anything like that?

00:26:16.400 --> 00:26:17.320
Yes.

00:26:17.320 --> 00:26:20.220
Oh, that's a good question, actually.

00:26:20.220 --> 00:26:23.620
You know, I'm using Veeam for coding in Python.

00:26:23.620 --> 00:26:28.520
And that's also something I never used until as long as I was working with C#.

00:26:28.520 --> 00:26:35.780
So back in, I think, maybe 2010 or something like that, I started working with Python.

00:26:35.780 --> 00:26:38.000
And I also picked Veeam.

00:26:38.000 --> 00:26:40.980
And I was a Visual Studio guy.

00:26:41.480 --> 00:26:45.060
And I've been a Visual Studio guy for a lot of time.

00:26:45.060 --> 00:26:51.860
And so coming to Python, it also meant learning a lot of new tools.

00:26:51.860 --> 00:26:56.300
I started using Veeam for a lot of new tools.

00:26:56.300 --> 00:27:04.460
And I started using Veeam for installing packages and learning how Python packaging works, which is totally different from C#.

00:27:04.460 --> 00:27:10.340
That's another very interesting aspect of using different languages.

00:27:10.340 --> 00:27:16.500
And now what you have is that C# and .NET are, you know, in this new Microsoft era.

00:27:16.500 --> 00:27:23.200
We are getting to the point where even Microsoft is learning from the open source experience.

00:27:23.200 --> 00:27:34.020
And so we have, for me, it is really exciting looking at how Microsoft is approaching and evolving these last maybe couple of years.

00:27:35.180 --> 00:27:39.620
Releasing .NET framework as open source, for example, is totally awesome.

00:27:39.620 --> 00:27:42.560
And going cross-platform as well.

00:27:42.560 --> 00:27:48.140
And this is all stuff that I've been seeing working on Python.

00:27:48.140 --> 00:27:58.140
And I was always wondering, "Ah, I really would love to see this kind of approach in Microsoft Word and Windows and C#."

00:27:58.140 --> 00:28:02.640
And now it's happening and it's really exciting.

00:28:02.640 --> 00:28:09.520
And it also means that Microsoft is learning from, you know, let's call them mistakes maybe.

00:28:09.520 --> 00:28:12.660
And, yeah, it's really cool.

00:28:12.660 --> 00:28:20.740
And I'm super excited because I see the open source potential coming to the C# world.

00:28:20.740 --> 00:28:33.920
On the other hand, I must say that the open source community in C# and in the .NET framework in general is still very, very, very in these early stages, so to speak.

00:28:33.920 --> 00:28:42.600
So when I release an open source tool in C#, I get a fraction of the attention that the same tool will get in Python, for example.

00:28:42.600 --> 00:28:45.800
So there is still a lot of room for improvement.

00:28:45.800 --> 00:28:48.300
Yeah, I totally agree.

00:28:48.300 --> 00:28:56.980
It's definitely a good sign that some of these closed source companies, especially Microsoft, since they're so widely used, is moving.

00:28:56.980 --> 00:28:59.820
I think they're learning a lot from open source and from Python.

00:28:59.820 --> 00:29:08.820
So it sounds like there's a lot of interesting pieces that you're bringing into EVE, like Cerebus and Flask Sentinel and things like that.

00:29:08.820 --> 00:29:13.320
Those are separate projects, separate packages that you're just using in EVE, right?

00:29:13.320 --> 00:29:15.860
Yeah, I'm using a lot of packages.

00:29:15.860 --> 00:29:20.540
I am also using Redis, for example, for some features.

00:29:20.540 --> 00:29:29.380
We have a rate limiting, which is a feature which is being bundled within EVE and it uses Redis, actually.

00:29:29.380 --> 00:29:36.540
By the way, Redis is also by an Italian developer, so Dr. Sanfilippo, which is a friend of mine.

00:29:36.540 --> 00:29:43.220
And yes, I'm using Cerebus, which is another open source release of mine.

00:29:43.220 --> 00:29:46.220
It's used for data validation, basically.

00:29:46.220 --> 00:29:58.220
And Cerebus, actually, it is being used even outside of EVE from forum by a lot of people, since it allows, basically, to do validation for Python data.

00:29:58.220 --> 00:30:02.900
So we use it within EVE for data validation.

00:30:02.900 --> 00:30:11.580
So that's really interesting.

00:30:11.580 --> 00:30:12.580
So that's really interesting.

00:30:12.580 --> 00:30:20.260
I haven't used Cerebus, but basically what you can do is you can say what required fields and what required shape a Python dictionary should have.

00:30:20.260 --> 00:30:23.260
And then you can say, validate this particular dictionary.

00:30:23.260 --> 00:30:25.940
What kind of stuff can you validate there?

00:30:25.940 --> 00:30:31.940
Yes, you can basically say, hey, this is, you know, the name field is a string.

00:30:31.940 --> 00:30:42.940
It must be, must have a maximum length of 10 and, or you can, you must use this regular expression to validate it.

00:30:42.940 --> 00:30:45.940
And this is, there are a lot of options.

00:30:45.940 --> 00:30:50.780
Actually, you can say that a field must be unique or stuff like that.

00:30:50.780 --> 00:30:53.060
And this is true for,

00:30:53.060 --> 00:30:57.180
the EVE by load, of course, but also for any Python dictionary.

00:30:57.180 --> 00:30:59.380
So people are using it everywhere.

00:30:59.380 --> 00:31:01.340
And this is very nice.

00:31:01.340 --> 00:31:09.500
And another tool that I ended up building for EVE, but it is also being used outside of EVE, is events,

00:31:09.500 --> 00:31:18.740
which is basically a package which allows you to bind the callback functions to any kind of event.

00:31:18.740 --> 00:31:22.940
And so when EVE receives an incoming request,

00:31:22.940 --> 00:31:31.260
you can have a number of callback functions, which are being called by EVE.

00:31:31.260 --> 00:31:46.260
And so you can do your own stuff with this payload, which is coming in and change it or store it elsewhere, or call another API and validate it against it, stuff like that.

00:31:46.260 --> 00:31:57.580
And this is all powered by events, which is another package that you can use for your own tools for building your own tools.

00:31:57.580 --> 00:31:58.580
So that's fantastic.

00:31:58.580 --> 00:31:58.580
That sounds great.

00:31:58.580 --> 00:32:03.700
So another one that I saw in there was Flask Sentinel.

00:32:03.700 --> 00:32:04.700
What is that?

00:32:04.700 --> 00:32:13.020
Flask Sentinel is basically an implementation of OAuth for Flask.

00:32:13.020 --> 00:32:19.020
In particular, it is addressing the token authentication scheme.

00:32:19.020 --> 00:32:32.340
So you can, of course, you can use it without EVE as well, or you can use it with EVE to have OAuth 2 on your API.

00:32:32.340 --> 00:32:38.660
So yes, you can basically look it up on GitHub.

00:32:38.660 --> 00:32:41.660
It is being used for a lot of things.

00:32:41.660 --> 00:32:42.660
That's cool.

00:32:42.660 --> 00:32:49.660
So if I want to have like Twitter authentication or Google or Facebook or something like that, is that kind of what you're thinking?

00:32:49.660 --> 00:32:50.660
Almost.

00:32:50.660 --> 00:32:58.980
I mean, right now it only addresses token authentication, basic token authentication.

00:32:58.980 --> 00:33:02.540
So it's not really suited for that use case.

00:33:02.540 --> 00:33:16.980
It is not yet a full OAuth 2 authentication scheme, but it is the best use case, I think, is when you use it for your own mobile application

00:33:16.980 --> 00:33:32.420
application and you want your user to be authenticated with your REST API framework and you give him a token and then your mobile application uses this token instead of using the username and password and sending them over the wire, of course.

00:33:32.420 --> 00:33:40.700
And so, yes, it's, you know, kind of just one of the many users of OAuth 2.

00:33:40.700 --> 00:33:42.100
Sorry about that.

00:33:42.100 --> 00:33:47.780
OAuth 2 for me is very easy, very difficult to pronounce that word.

00:33:47.780 --> 00:33:49.780
And, yeah.

00:33:49.780 --> 00:33:52.100
Okay, that's great.

00:33:52.100 --> 00:33:53.860
Yeah, so I can see how you use that.

00:33:53.860 --> 00:33:54.660
That's very interesting.

00:33:54.660 --> 00:33:58.340
Now, I noticed you're also working on a project called Eve.net.

00:33:58.340 --> 00:34:01.860
Is that like a .NET spinoff of this whole idea?

00:34:01.860 --> 00:34:07.700
It's basically a REST client for .NET.

00:34:07.700 --> 00:34:21.380
So, what you use it for is, for example, if you are writing a mobile application for iOS or Android and want to connect to an Eve instance, you can use Eve.net.

00:34:21.380 --> 00:34:35.060
It deals with, since it knows very well how Eve performs, you can send, for example, a class or an object instance to Eve and it deals with serializing the object and sending it to Eve.

00:34:35.060 --> 00:34:38.740
And it handles the responses.

00:34:38.740 --> 00:34:50.740
And, for example, if you want to modify an object, the user just says to Eve.net, "Hey, store this update up to the server."

00:34:50.740 --> 00:35:00.420
And the client connects to Eve, sends the update and if something goes wrong, it reports back to the client.

00:35:00.420 --> 00:35:08.420
And since it knows very well how Eve performs, it can, you know, it hides a lot of the implementation behind the scenes.

00:35:08.420 --> 00:35:18.100
So, you don't have to worry about E tags and conflicts and errors, validation and stuff like that.

00:35:18.100 --> 00:35:26.100
And this is interesting because it is exactly the Polyglot approach, which we were speaking about earlier, a little bit earlier.

00:35:26.100 --> 00:35:32.900
So, you have C# and C# client working with a Python server.

00:35:32.900 --> 00:35:35.780
And so, it's kind of, you know, kind of fun.

00:35:35.780 --> 00:35:41.380
Yeah, because you know both sides of that story, you can make it really easy for the C# guys.

00:35:41.380 --> 00:35:47.780
I wonder if there's other languages out there like Swift or Java or something that might also benefit from that.

00:35:47.780 --> 00:35:48.900
Yes, yes.

00:35:48.900 --> 00:35:49.700
You can use it.

00:35:49.700 --> 00:35:51.540
You can use it everywhere you use .NET.

00:35:51.540 --> 00:35:52.820
So, it's very nice.

00:35:52.820 --> 00:36:04.100
And actually, one of my, one of the things that I'm doing with the .NET framework, at least here in Italy, is encourage people to go out on the reconfort zone.

00:36:04.100 --> 00:36:10.420
For example, installing Eve instead of, I don't know, embassy framework or stuff like that on the server side.

00:36:10.420 --> 00:36:14.100
And because they also get the advantages of Eve.

00:36:14.100 --> 00:36:27.380
Eve is totally language agnostic.

00:36:27.380 --> 00:36:33.220
So, you can use it with whatever language you want.

00:36:33.220 --> 00:36:34.580
Yeah, that's beautiful.

00:36:34.580 --> 00:36:36.900
It uses the universal language of JSON.

00:36:36.900 --> 00:36:37.300
Excellent.

00:36:37.300 --> 00:36:38.260
So...

00:36:38.260 --> 00:36:39.380
Right.

00:36:39.380 --> 00:36:39.940
Yeah.

00:36:39.940 --> 00:36:46.660
So, are there any notable uses or really popular deployments of Eve that you could talk about?

00:36:46.660 --> 00:36:49.300
Yeah.

00:36:49.300 --> 00:36:56.100
There is, there are two or three which I think can be interesting for your audience.

00:36:56.100 --> 00:37:10.180
For example, we have Dailymotion, which is, I don't know if you know about it, but they are, I believe, the second streaming website in the world right below, right after YouTube.

00:37:10.180 --> 00:37:15.540
It's a French company, which is streaming live content on the web.

00:37:16.340 --> 00:37:20.340
And they're using Eve for some of their projects.

00:37:20.340 --> 00:37:24.340
Actually, they are also contributing to it itself.

00:37:24.340 --> 00:37:30.740
So, they are one of the main contributors to the project itself, which is totally cool for me.

00:37:30.740 --> 00:37:36.180
And then there is a RedTartle, which is a company.

00:37:36.180 --> 00:37:41.140
They are the guys behind the SQL extension, for example, speaking of the community.

00:37:41.140 --> 00:37:47.140
As you can see, we have people who are using the tool itself and then contributing with new features.

00:37:47.140 --> 00:37:57.700
And this is one special case because RedTartle basically took the SQL extension, which was already being developed by other guys.

00:37:58.820 --> 00:38:12.020
And, you know, kind of completed it and they are now 100%, I believe, I suspect, I think as well, they are 100% feature complete.

00:38:12.020 --> 00:38:15.300
And so, yeah, RedTartle.

00:38:15.300 --> 00:38:23.540
And then we have these very famous space agency, but I didn't get any feedback from them.

00:38:23.540 --> 00:38:26.260
I wanted to mention them, but I'm not sure I can.

00:38:26.260 --> 00:38:39.620
Let's just say that it is a very famous space company led by a very, very well-known entrepreneur who also works on a car industry and stuff like that.

00:38:39.620 --> 00:38:41.060
That's really fantastic.

00:38:41.060 --> 00:38:43.880
So, Eve might be going to space and back.

00:38:43.880 --> 00:38:44.720
That is really cool.

00:38:44.720 --> 00:38:47.140
Yeah, that's my dream, actually.

00:38:47.140 --> 00:38:48.240
It would be totally cool.

00:38:48.240 --> 00:38:50.900
I think they are still experimenting with it.

00:38:50.900 --> 00:38:54.040
They are contributors as well.

00:38:54.040 --> 00:39:00.200
One of their engineers is the guy who worked on a version in Feetor, for example.

00:39:00.200 --> 00:39:03.560
Yeah, they are using it internally.

00:39:03.560 --> 00:39:07.160
I'm not sure if they are using it to send stuff in the space.

00:39:07.160 --> 00:39:10.180
I'm not sure I want them to use it for sending stuff in the space.

00:39:10.180 --> 00:39:12.240
It's a whole other level of responsibility.

00:39:12.240 --> 00:39:13.380
Yes, it is.

00:39:13.380 --> 00:39:14.060
Yes, it is.

00:39:15.680 --> 00:39:19.960
But, yeah, it is being used by all kinds of people.

00:39:19.960 --> 00:39:24.580
And that's what I find really interesting for me.

00:39:24.580 --> 00:39:25.900
It's really exciting.

00:39:25.900 --> 00:39:36.940
So many people with so many different use cases who rely on your tool is, you know, so, I don't know, totally awesome.

00:39:38.280 --> 00:39:39.740
Yeah, that's really great.

00:39:39.740 --> 00:39:41.100
I'm sure it's super rewarding.

00:39:41.100 --> 00:39:45.280
And, you know, thanks from everybody in the community for putting that together.

00:39:45.280 --> 00:39:45.840
That's cool.

00:39:45.840 --> 00:39:49.420
So, I think that's probably a good place to wrap up the show.

00:39:49.420 --> 00:39:57.460
So, is there anything you want to mention or give a shout out to, you know, give a little promotion to before we call it a day?

00:39:58.140 --> 00:39:58.920
Not really.

00:39:58.920 --> 00:39:58.920
Not really.

00:39:58.920 --> 00:40:04.220
What I really would like to see is people join the community.

00:40:04.220 --> 00:40:07.580
And, as I said already, try the tool.

00:40:07.580 --> 00:40:20.780
And if they have, you know, questions or contributions to add, be very happy to learn about them and see more people adopt the tool.

00:40:20.780 --> 00:40:29.440
And the other, the satellite tool like Flash Sentinel or Cerberus and, you know, just keep sending feedback.

00:40:29.440 --> 00:40:34.280
And so, we can keep growing with the tool and the community itself.

00:40:34.280 --> 00:40:36.160
Yeah, that's really great.

00:40:36.160 --> 00:40:40.740
Okay, so, you can find Eve on the web at python-eve.org.

00:40:40.740 --> 00:40:42.800
Nicola, thank you so much for your time.

00:40:42.800 --> 00:40:44.320
It's been a really interesting conversation.

00:40:44.320 --> 00:40:45.480
Thank you.

00:40:45.480 --> 00:40:46.300
It's been great.

00:40:46.300 --> 00:40:47.860
And thank you for inviting me.

00:40:47.860 --> 00:40:48.800
It's been awesome.

00:40:48.800 --> 00:40:49.940
You're welcome.

00:40:49.940 --> 00:40:53.720
Hopefully, we get to catch up on an aircraft carrier in New York City sometime soon.

00:40:53.720 --> 00:40:54.060
Okay.

00:40:54.060 --> 00:40:56.960
Talk to you soon.

00:40:56.960 --> 00:40:58.180
Looking forward to that.

00:40:58.180 --> 00:40:58.620
Indeed.

00:40:58.620 --> 00:40:59.020
Okay.

00:40:59.020 --> 00:40:59.540
See you later.

00:40:59.540 --> 00:40:59.920
Thank you.

00:40:59.920 --> 00:41:00.260
Bye.

00:41:19.100 --> 00:41:22.100
Developers, developers, developers, developers.

