 Good morning everyone. I am Leandro and I'll be talking about EZY and Elevate today. Just a minute. There you go. EZY and Elevate are based on the EFL, or Enlightenment Information Libraries. I'm not sure if you're familiar with the Enlightenment project but it was, it used to be a very, very common when a manager, 12 years ago, went through a very large he-write and one of the byproducts of these he-writes was these set of libraries. They do lots of things, this doesn't work, but lots of things including Canvas library called EVOS, Edge, which is a layout library of E-Core. We have the main loop and the utilities, ANA, which is our data structure libraries, and other libraries as well. So we have lots of libraries that are quite difficult to use because it's very large amount of libraries, but they offer a lot of things. But they are quite daunting for people that never worked with these before because they do some things quite differently from the norm. So, yeah, I have to say here. So, okay, so EZY. EZY came to help diminish that letter soup and make things easier. So, for instance, have your application on a stack diagram. See, there is how things fit together. So have your application, have elementary, which is our widget set. Have Edge, which is our layout library. Emotion, which is a media playback library. EIO, which offers a synchronous IO. Edibus, which is a debus interface. E-Core, Ambrio, which is a programming language used together with Edge. Have EAT, which is data serialization and de-serialization library. Have EAT, which is Canvas. Of course, have IANA, which is data structure library. As you can see, these are a lot of libraries. You have actually more of these. I simplified a diagram. So for a new developer, this is quite difficult to work with. So we decided to create something that would make this stack smaller. And easier to use. Because these libraries are actually separate libraries. And they have to expose some internal state and things like that. Because we need to talk with each other. This isn't much of the case these days. Because they share the same deal system. But APIs remain because, well, you don't want to break APIs. So we wanted to create something different. So we created for easy way, which is a framework that sits on top of elementary. And abstracts the whole stack. So your application will look like this. It will look like this, which is a lot easier to grasp. Another thing that's very important is C is a very nice language. I like C. It's actually one of my favorite languages. But it's not very expressive. Especially if you're trying to work with some applications that depends on parsing a lot of data or things like that. And so I chose JavaScript. We were using V8, which offers a very good performance. And it's very easy to work with at a C++ level. So now you have a stack that's like this. It's a pretty small stack. Of course, blocks are expense or other things. But the application developer doesn't need to see everything else. So how does it work? It basically divides the application into two things. So the data and the behavior. In other words, have a modeling controller. Of course, it looks like MVC. And the view is implemented by easy way. So you don't have to implement most of the boring details of the view things. So we did that because we believe less is more. So although it's less flexible, you do have less product to solve. You have less code to type, less bugs to hunt. And being less... We all know that flexibility is a two- wedged sword. So although you can do whatever you want, if you're very flexible, you end up with that letter soup that actually makes... You take too much time to learn how to use our tools. So we've observed some patterns that we've seen in mobile applications. So we've made the framework work well with these patterns. So we did that by writing boring code. So we don't have to do that. There was just a little, of course, but there was no simple bullet. But most of the boring code, we wrote it for you. So again, you have less code, you have less bugs, and you have more time for serious business like browsing Reddit or something. And speaking of Reddit, let's write a client for it right now. So here's a plan. Here's the mock-up of an interface. It's pretty simple. Here on top, you have a bar of the refresh button and then a list of whatever items there are in this Lesher's Lesh Funny subreddit. Whenever you click on an item, you just download and show you whatever item it is. It's a pretty simple application, just show screens versus mobile, but you have network access, you have a web browser, you have lots of things going on here. So, okay, how do you start? I'd start with the model. So, for instance, Reddit offers a JSON file. For those who don't know, JSON is JavaScript-a-bit-check-notation. It's a way to serialize data in less-brain-dead way than XML. So you fiddle with it, find it as a structure, and then write the model. The model is this thing here. So, you have the init function. It's pretty much like Python's init method. It's basically a class initialization method. So I create an items list and then call the refresh method. The refresh method is basically just called to Ajax.get. It's a model we wrote that works with IHB requests, and there's a lot of things, including caching and throttling and a bunch of other things. And what this calls actually doing is requesting that document we saw earlier on the common line. And whenever that happens, when a response is received, we just call this callback here and parse the JSON and notify the controllers. That's pretty much about it. And now, of course, we have two functions that return the size of the amount of items we have and return the index item in our model. And that's it for the model. It's very simple, very small. So, another controller. As you saw earlier, it's a list. So we derive from list controller. We use that model we wrote five minutes ago. And write item and index function. These access the model, obtains the item and return as an object. That says, okay, the text for this item is the title for that item, the index item in model. This title thing came from JSON. It was imported by the JSON module. So whenever you select an item, this thing is called, it's like item and index. What we basically do is we obtain the item itself. And then we push on top of the screen in our web browser with the items URL. Of course, you'd have a refresh button. You just say that in navigation bar I have a refresh button on the right. And whenever you click that item, we just refresh the model. And that's it for the controller. Now I'll just write 200 pages of XML because everybody loves XML. Just kidding. So basically, your application is like this. It will import a list of libraries. The things we wrote five minutes ago, then you just start the application. So it should just work. So you don't need to call now. Please wait because there's more. If you remember this, this is not a whole picture. Easy way is to use JavaScript and we need a way to talk with the Enlightenment for National Libraries. So we have Elevate, which you'll get if you call in the next 15 minutes. So Elevate fits here on top of V8 and below EasyY. So it bridges EFL and V8. There's a play of vagos, right? But instead of using diplos, it's a lot easier to use. For instance, here's an example. Let's create a Hello World screen window. So basically, we load the elementary library again in some region library. We realize a window object. The elementary library, we made it in a way that's always declarative. So objects are not created on the screen as you realize them. So we declare all the parameters, the title, width, height, and things like that. And of course, the elements themselves. So for some half background, just a background element. In this case, a red background. And a label with a text pants on. So you have also EIO, which offers synchronous I.O. It's not everything's there. Right now, we only support file listing. So it looks like this. So basically, it lists files, beginning with files in our home directory. And for each batch of files, we use batches because this way, you can filter things in another thread in every, I don't know, I don't know, half a second or so, you send a batch of files for you to work with. So this callback is called whenever a batch is ready. Then it can send a set of parameters. So it can say if there's a cursive or in mount time, you have the weight between batches and the filters, which run on a loop or as a thread, so your application will not hang. It has Iqorecon as well. Iqorecon offers HTTP connections and a bunch of other things. The Ajax module that we have used is limited wrap around it. It offers basically get-imposed HTTP methods, and that's it. I have Dbuzz as well. The API is pretty much like Python Dbuzz. It's basically the same API, which is actually a very simple API to use. Also, some Node.js modules are compatible as well. So JavaScript modules are 100% compatible, and native modules are a mix of bag because Semedane relies on different main loop implementations and such. Sometimes it can make it incompatible. Sometimes it can't. Not without lots of work, but it is somewhat compatible with native modules. So if you haven't already, EZY and Elevate are in our prototype sub-vizion server. You can check it out. Well, that's all. I actually wanted to give a demo, but for some reason I couldn't get it running on this new machine here. I didn't have time to do that. So things are not working properly, so it's not demo-ready. Anyone have any questions or anything? Microphones. What is the immediate idea of the footprint, the memory footprint of the whole stack because it seems like although this is a nice little wrapper, you're still a hole. Well, he asked about a memory footprint. I have no idea how much he uses. EFL itself is quite light. We've used it in memory cramped devices with very, very low alarm socks with 128 megabytes of RAM, and it worked perfectly. But I've never actually checked the amount of memory that the wrapper uses, but I don't believe that would be really much. Any other questions? There's more of that. I work on an embedded device that's currently running in GTK Plus on top of X for our app. Just for the sake of discussion, we wanted to be able to run some small app with easy UI. What components need to be installed on the device in order to use this? Okay, well, you basically need the EFL. Basically, you need Canvas, you need the E-core. I mean, the whole stack. You can, of course, if you don't need certain features like you don't need a playback, for instance, you don't need to install that thing. And you can install a V8, and then the easy way itself is just it's a more JavaScript file. So, yeah, that's pretty much it. It's not much things. It can run on top of X11. It will support various front-ends, so it can use DirectFB, you can run X, or, well, even Windows works. Oh, PS3, I don't know. Yeah, it's pretty portable. So, any questions? No? Okay. So, if you have any more questions, I'll be around, or you can just send them an e-mail. Thank you very much.