 Hello, I'm going to talk about MetaScript, which is a language that compiles to JavaScript that I implemented. And so five minutes, one programming language, this will be a bumpy ride. Quickly about myself, I'm an enthusiast software engineer, passionate about languages, I work in Git compilers, in the V8 team in Google and Git compilers in general for a lot of time. And so why a new programming language? What's the problem with JavaScript? Well, there are many problems, we know. And there are already many languages that address them, but issue one focuses on a few selected issues. And this was the problem for me. I wanted to tackle more of them. So JavaScript is a weaker language. We know conversion rules can kick in with obvious results and forgetting a verbal declaration can be a real problem and it doesn't really have block scoping until it has six. And it has a verbose syntax which can be a problem for somebody. And MetaScript 6 is this, let's say, coffee script style. Declarations have block scoping, but the style is like that. Then MetaScript is a functional style, so there are no statements, only expressions. And even loops are defined by recursive expressions which are translating into plain loops. So there are parallel assignments and this means, in general, less temporary variables. Everything composes nicely. And it can also optionally use closed script to read only data structures with the Mori library. It has macros to the data. It works essentially natively. And then there's the issue of a type system. I'll just say quickly, this is still a work in progress, but I'm doing a type system which will be most compatible with the TypeScript one. So if those that like these things, it will be there. And then there is the thing that is most important for me is metaprogramming. Closed script and list dialects in general have this, but list dialects can be really uncomfortable to many people. Those parenthesis can hamper people. But Lisp style macros are incredible powerful and they're really underrated. And MetaScript fixes this with a uniform ASD even if it has support for in-fix syntax. And it also has hygienic macros. So essentially it's like a Lisp with a Ruby-like syntax, sort of. And it is a good JavaScript citizen in the sense that it's designed for zero runtime overhead. It can translate to plain JavaScript. And each core concept translates just one to one. And the consuming existing modules in Node with require or with everything is just a one-liner. It's normal. And even producing modules is just the usual thing. And it has full source map support. So it's just a good JavaScript citizen. Now a taste of the language very quickly. These are just simple expressions. So you see it's readable. You can use the dot operator. You can call things. You can pass arguments. And the usual expressions in in-fix mode just work. So you can just write expressions and evaluate them and do what you would expect. And there are no statements. So you can just write expressions and get their value and go on. And when you have a sequence of things to do, this do, then you take the last value and it just works. And loops are also expressions. This is the classical example of a factorial, which looks like a recursive function, but is translated into a loop. And then here we have macro-scene action. So this is a recording of live coding with our editor, with our environment. You can look at objects. So this is a simple object with a couple of metals. It's a vector. And so there's the modules, which is the length, and you can evaluate it. And there's the scale, which changes, obviously, X and Y. You can invoke it and then you can reevaluate it, and you see that it works. But now what if we wanted to have an at operator like Ruby or CoffeeScript? Then I write it and it doesn't work, of course, because it's not there. But then what I can do is write a very simple macro that instructs the compiler how to do that and then it works. And now I'm going to show how you can simplify. So what if I don't want to write function arguments and just have placeholders with the order? I can just do it and it is a very simple expression. And then why using indentation? This is very small. I want to use a single line with parenthesis. Then I can do it. So the language interprets either indentation or blocks with parenthesis, and it just works. And even with these changes, just going live, I can another macro for exp. So I can define another operator and I can replace math.pow with this operator, and it still works. So now I can reevaluate and evaluate the values, evaluate the modulus, evaluate the scale, and so call the scale. And it's going on. This is what we use every day at work, essentially. So these were simple macros. But five minutes gone. But more useful ones would be other operators, as matter of fact. My mic on, thank you. Excellent. Mathias Burs. Hey, I'm Mathias. I'm a JavaScript hacker from Copenhagen. I do a lot of node stuff. Recently, I've been playing around with BitTorrent, because that's awesome, especially in Node. And I'm going to talk a little bit about a module I did called TorrentStream. It's on GitHub. What TorrentStream basically does is it allows you to take a torrent and use it from Node in real time as a Node stream, so you can kind of like have a torrent that consists of 10 gigabyte of data and use it in one second and just stream the pattern. So I'm going to try to demo this today. And I want to say, please don't try to run this demo, because we'll probably kill the network. So I cheated a little bit and pre-loaded some of the data. So this is just an example of how it works. You're basically just called TorrentStream with a magnet link. And when the swarm is ready, when it has the actual torrent, I'll just print out the files in the torrent. So that's cool. So this is Star Trek fan fiction. It has two files, a text file and an AB file. So what if we tried to stream the text file to standard out? That would be super cool. So we just do this by calling a re-stream on the file. And even though we haven't downloaded anything, it will just start streaming out to the standard out. So that should be pretty cool if it works. So let's try it out. So I'm just going to run this program. Yay. So what actually happened here is that TorrentStream connected to the swarm of peers. There's a lot of peers all around the world and started pumping out the data as it received it. Like it hadn't really downloaded anything. So this is kind of cool for text. But Torrent has a lot of different stuff. And if you remembered, the torrent also had an AB file. So I was thinking, it would be pretty cool if you could take that AB file and kind of stream it into VLC in real time. Because then we could kind of watch videos in real time. And as more and more people watch the video, the swarm would be stronger. So we would kind of not have lag. That's pretty cool. So I made this program called PeerFlix that kind of does this using TorrentStream. So I have that written here. So you basically just call PeerFlix with the magnet link and a dash dash VLC. And it will start fetch the data. So it opened up on my desktop here. So I just need to move it. So this is the actual video streaming in real time. And the video has 12 seconds of black in the beginning. So that's pretty cool. So what's really cool about this is that since it streams, it kind of also supports skipping, because just reading somewhere else in the file so I can kind of skip here. And it will just rebalance the swarm and fetch what I need. So I thought it was pretty cool. And then this kind of works really well for video stuff. But what about things that are not video? So I did this really fun project last week where I just took this technique and kind of merged it together with Fuse. Fuse is like a real time user space file system. And I made something I call TorrentMount, which basically just allows you to take a magnet link and mount it as a drive on your disk in real time. So here I have the file we just saw. I can go in and I can see the files mounted on my disk, even though they're not there. This could be like 20 gigs. Awesome, nice work. Big round of applause for Eduardo. So my name is Eduardo. I'm a Node.js developer from the Dominican Republic. And I'm going to talk about Mongo.js, which is a project to use Mongo from Node. So if you have used Mongo, probably you have used this tool, which is like a shell in which you can do really cool stuff. Like if you have a collection, you can just do something like this and find, for example. And you can just find all the countries. And you can also do a lot of other cool stuff, like you can skip because it returns a cursor, so you can actually start from the fourth country and you can limit the amount of results you get like this. So this is a very nice API, and it's a JavaScript API. But in Node, what we have is a driver, which is a much lower level thing. But luckily, there's a project to actually get this API in Node with callbacks, and it's called Mongo.js. So I'm going to show you a little bit of it. So I'm going to show you how to build a really simple Express API using Mongo.js. So essentially, this is just an Express API backbone. So here, I require Mongo.js. It's a Node module. And the next thing I do is I connect to a database like this using Atlas. This is a connection string, and this is all the collections I have in an array. So let's do an endpoint. This is just an Express endpoint, so we do apget. And in here, we do db.country.find, just as in the console. And we get a callback, which gets us an error and the results here. So we just pass that. And let's test to see if it works. It's just for Node.index.js. Yeah, so if we go to the browser, which I have in my screen. So I'm going to just put it here. If we go to the browser, we can actually do 3,500. And we get OK, true. And if we go to the countries, we actually get all the countries, and that's pretty cool. But normally, if we build an API, we actually want to pages. So we don't want to get all the countries at once. So we can actually do this like this. We just use page size and skip, and we just use the same functions I show you in the shell. So let's try to run this one. And this is the 4. And if we go to countries, here we actually get only 10 results. And we can actually page this. So we can do page equals 4. And we actually get the next page. And so there's a lot of stuff we can do. We can, using just the Mongo shell API, we can insert stuff. Like here with a post, you can insert stuff. And you can use object IDs, which you also use in the console. So there's essentially a lot of stuff you can do using this very simple API, which doesn't require schemas, doesn't require anything. Just using the same API I use in the shell, you can use it in Node just using callbacks. And also, a really cool thing is that the cursors, when you do fines, are streams. So you can actually use it for building stuff that works with stream. So you have a very huge collection. You can actually pipe it through other streams, and like JSON stringify, and that kind of thing. So yeah, that's all for me. Thank you. Hola, tutom. My name is Pablo, and my presentation is not so technical. But I think it's also really important, because it talks about decision. And we are engineers, and our main job is to take the right decisions. So this is a crazy name, minimally software engineers, but it's 10 guidelines to take better decisions as an engineer. And the first one is 5-4 Pareto. This is a rule, which is the Pareto rule. And it says that 20% of our efforts are going to give us the 80% of the results. So one of the things we have to focus on finding, or 20%, this 20% that is going to create great impact. One example of that was this morning, Reginald was talking about closures, and he was talking about good magic and bad magic. The good magic is what this 20% would be. And the closure is such a simple change of syntax that give us amazing results. The second guideline would be prioritized. People ask me, wow, minimalist is about not doing things. Who is going to hire you as an engineer if you don't do things? So no, no, no. Minimalism is about doing things that matter first. If we had all the resources that we wanted, we could do everything. But we know it's not true. So it's focusing on the most important things first. Perfect is the enemy of the good. This is an amazing quote. We got crazy with our projects, and we tried to make them perfect before we released them. Just if you have the opportunity to talk today, just do it, even if your work is not completely perfect. And Adios Money, a great JavaScript developer, has a quote that I love. And is do it first, then do it better, then do it right. So that's super important. Also, in your day by day, you're going to see that iteration is your friend. And having unit tests helps you iterate better. And also, you see that in nature. If you think about nature, any given enough complex system has it both, from something more primitive. That's evolution, something that has a lot of flaws. It's iterating and becoming better. Another powerful guideline is kill the baby. This is from one of my friends. Designers have projects that are, they don't last as much as we engineers. We normally have two months project, three months project, even a year project. So they have probably one week project, two weeks project. So they know it's better. If you're working on a project and you see it's not going anywhere, even if you love your code, we all love well writing code. All the code is here, not forever. So kill the baby before it goes to all. AdValue, OK? So AdValue is more career-wise. So my recommendation or what I see that works is every time you go to a new company or even to a new team, just try to not try to be yourself. Try to be what the team needs. That's seeking for adding value to that team. So for example, for me here, I was the boring Pablo in Barcelona when I was working here. Now that I work in New York, I'm the funny Pablo, because I'm from Barcelona. So people expect you to be more funny. So that's true. The best people I know, they have reinvented themselves so many times. So I think that's the key for fitting on a team, adding value. This is also career-wise, basic first. I think, well, we are here to learn a lot. And engineering is one of our tasks. Inheritance task is keep learning all the time. So my recommendation on here is learn something that is going to last. Because if you learn the new API of the new NBC framework, probably in two years it's going to be obsolete, go with the basic first, right? Good TDD, good the same patterns. So learn things that last. And think different, right? No, that's it. Sorry, if you want to know more, there is this minipeso.org with the rest of it. Thank you. We're there. OK, round of applause for Pao. Thank you. OK, hi, everybody. My name is Pao. I'm from Barcelona. And I'm going to show you something that's really stupid, but I like a lot, which are GIFs and JavaScript. OK, so first of all, here we have a page. I'm going to allow the video conference to the video camera. OK, so you can see my face. OK, and we will stream that. So there's a URL here. I will open Firefox. And now, if this works, I hope it works. OK, you can see here, Firefox. You're receiving the video camera input. OK, but what is awesome is that this is a GIF. So we are streaming GIFs. So it's not WebRTC, it's not Blackmagic. You know, it's just a normal GIF. So if you can see here, it's just a GIF. OK, cool. Woo! OK, so what can I do with this? So I can download it. So I can have the whole video conference. I can have it on my laptop as a huge GIF. I can also imagine the Twitter allowed avatars with URLs instead of uploading one. I could have a real-time avatar so everybody could see myself on real-time. So that's the whole point. We have now WebSockets. We have Node.js that has streams. We have APIs that allow us to take things from the camera, put it on a canvas, put it in to Node.js, streaming through WebSockets to multiple clients. And all I do is GIFs. So GIFs are awesome. Thank you. Francesco is talking about Open Web Apps and Firefox RS. Round of applause for Francesco. Yeah, how are you? I think I'm the last one. I am. Hope you had fun till now, so far. I'm Francesco Jovino. And this is my Twitter and all the stuff. I live in Rome, Italy. I'm here for this conference. And like one year ago, I started attending conferences across Europe. I couldn't stop. This is why I'm here. And I love playing football table. It's called a footballing here, I think. And if someone has shared the same passion, please let me know, because I'm looking for people to play with. I'm going to tell you about the MDN App Center, the project that I'm contributing to. I would like to share some of my work on the platform and some cool demos that I wrote for MDN. I'm focusing on device APIs. So I'm focusing on the touch, which is location, context, other stuff that allows you to access the sensors and services of the phone or the device in which the application is running. Starting with geolocation, this is a demo I wrote. You can switch among OpenStreetMap, Google Maps, or Android Map, get the current position, pass some parameters, and perform searches. The code is on GitHub. And this is the article that I wrote about it. And I spoke at some meetups in Rome in Italy about the work I'm doing. And I get a lot of feedback, and that has been helpful for my work for MDN. On the top of this context web app, I developed an application for Firefox OS, get access to the address book of the phone, and place, this is my face, for example, in a room, and place all the contacts of your address book on the map. Again, the code is on GitHub, and there's an article that explains step by step how I did. What about motion? I developed a very simple game compared to the one you said before. It's not good looking, but it works quite well. And the good thing here, that you can control the ball with device orientation API. And you can jump the obstacles. It's something funny. Just moving your device like that doesn't work quite well, but it's good for documentation. You want to try the ink, I will share the slide, so I think it's complicated to write it now. Again, and the article. This is cool. Access the ambient light from a sensor of your device. I developed a Christmas theme demo that changed the color of the sky depending on the luminosity of the room in which you're staying. And I put this Christmas tree in a tablet, I mean in a e-book application for Christmas tales, for example. And when you turn off the light, the light of the Christmas tree turns on and starts knowing. And it's quite interesting, not useless, but it's interesting. For documentation. Again, oh my god, thanks. Thank you, Francesca.