 Hvala. Počakaj počakam, da imam inženir, da sem več entusijist. Prostam v kompilari, v jazem in v kompilari, zelo v V8 v Google, in počakam v virtuale realitje na web. Tako ljudi in včakaj. Ne musim da všeč v mojem živosti. Všeč všeč jaz, kaj je tukaj počakaj, in včasem se očinno počakaja, zelo včasno je joj, ali pa, kaj je zelo včakaj, doblivajte, da sem čič dočakaj počakaj, da počakajte, in nekaj, da sem počakaj počakaj počakaj, in da sem počakaj počakaj, zelo včasno je, počakaj je všeč včasno, različaj, počakaj je všeč, ne boš v23 včakaj, In inči vzakljano spaske, tako da je doktor, počer je je zelo, da je začala. I se, da doktor, sestem idej, je vzakljano vzakljano vzakljano. Tako, da ne zelo spaske, bo, da je zelo vzakljano vzakljano vzakljano vzakljano. Na vse različno vzakljano vzakljano. In tako, da je vzakljano vzakljano, da je vzakljano vzakljano. In to je, da se model počer vzakljano, in ne zelo vzakljano. Zato je ideja, da se pridem se pridem na koncentrativne začelje. To je koncentrativne začelje v sistem, idejne in izgledne, in vse vse na koncentrativne, ki so vse začelje, in vse začelje vse začelje, in ki so vse začelje, in vse začelje, in vse začelje, in vse začelje, ki so vse začelje. Zato sem tukaj sistem, je prototip, je tukaj functionalne začelje v 3 transformacijali, where functional is like functional programming. The idea is that builds happen in a build environment, and this environment is mostly a file tree, and each build step mutates a file tree, but this sounds imperative. In a functional setup, each build step is a function that takes a file tree as input and gives a file tree as output. And this seed of mutation you should ideally generate entirely new file trees, with since you have the content addressable store, you are sharing space, so it's really very cheap and very efficient. And so a build, the whole build, is like a functional composition, but at this point, you can apply all the optimization for functional programming, like especially caching partial results, memoization in functional programming. So the idea here is that you should use Docker, but you should do this wisely. So you start from a base image, and then when you do builds, you should isolate each single build step, even small steps, like just build one single file in a separated container, which should start very fast, build the input read-only, sorry, mount the input read-only, build the output, and capture the output, and snapshot that inside the content addressable storage, so that you can really cache every computation. And at that point, what happens is that builds are insanely fast, because incremental builds, when you develop, are doable. They are something like millisecond build, literally. And deployments are also very fast, because there is no docker pool anymore. You just bind mount with fuse a separated hash from the file system, which means you can redeploy, again, probably in half a second, or something like that. Just the time to restart a process, because starting a container is like starting a process at that point. Which means that using this system as a build system, between the choice of a fast system and a correct system, you can pick both. This is mostly like Bazel, which is a build system like Google, that Google did, but with a twist that is language independent and everything runs in containers. So all the builds runs in containers, all the deployments are in containers, the environment is the same, the development environment is exactly the same as the deployment environment, because usually what you do is you deploy using a container orchestrator and docker for containers or whatever, but when you develop, every time you save a file and you want to run the system, you need to do some trick to make it fast. You cannot use the production system. I don't think anybody is actually using Kubernetes on their laptops doing a redeploy at every file save. This is not going to work in practice. You wish you could do it, because you would have the same system that you have in production, but you can't. Now with a system like this, you could, which means that everybody knows the deployment system very well because everybody uses it every day in the laptop. So these are sort of the advantages, the ideas. So if you are interested, you can, now this is just five minutes, there are a lot of engineering issues there. I have told all of them through, but I don't have time to explain them. So if you are interested, we can talk about it. There is a proof of concept on GitHub. We could hug together in the gap day or whatever. And wow, I finished it earlier than the five minutes. So now I'd like to talk about don't reinvent the infrastructure or IAM. We'll see what is it about. So if you can answer this question, but I really, sorry, I don't know what is your business? It's probably some service or maybe you do something online, e-commerce, or you produce something, or you maybe write software, but I really don't know. So, and what do you do? Again, I think you write some kind of business, which I don't know, but I'm not alone. We are building systems we don't fully understand, as been previously said by one of speaker today. So, what do you think I'm going to talk about? Infrastructure as a magic. So, why? Why I'm doing this? Right, okay. I've been working with infrastructure for some time, and I see repetitive things. So that's why I want to kind of put some information even more. So, you are expert in your business. I'm quite certain that you know how to run business, why you created this business, what is this business for, who are your customers, how to sell your products. That's good, so Chuck Norris would be happy. So, but I guess you are running business. You are probably also writing some code, you are running it, maintaining it, operating it, putting some monitor in whatever else is required, and luckily this is called DevOps. So, you can say that you've been running business and DevOps on parallel. So, you already know magic encoding because you are, or most of you are developers. So, you learn basics of git, you know your programming language of choice, you drink coffee, you get your work done, profit. So, there are some still magic in infrastructure, which is very important to understand, and even today we've heard several talks about it, and some speakers told us that DDoS is not science fiction, but it really happens, and distributed tracing is important, and overall what we've heard about architecture is real. So, when you are thinking about your infrastructure wise, you can think about it as something that, oh no, it's so special for my business, I cannot even talk to you, sorry, but I'm making such a cool product that it's really awesome, and I really need dedicated person who knows all details of all this hardcore network and things for my product to be successful. In most cases, like literally 99%, it's not the case. You will be enough with basic network resources, basic network architecture, highly availability is very well described on different whitepapers and so on. And same goes for security and access controls. Your business, most likely, is not needing anything so special or so extra advanced, which is not created or already available in the community. So, I listed two ways of getting help from the community. One is community modules, where I am kind of shameless plug, I'm maintainer, but second one is the power of using community search on GitHub. You can actually search for files by extension, and you can see how other people solve similar problems just by going to advanced search. I'm amazed by amount of people who forked common network, telephone network module, more than 150 times. It's really hard to imagine what these people were putting into it, but they were people who are thinking that they are special and they want to make something out of it. So, I encourage you to just use open source and use community solutions. And one more time, it's better to follow best practices and learn from mistakes by others. That's all, thanks. OK, so, I'm Jorge Barata, and I'm fully stuck. What is to be fully stuck in here? So, we are going to start with a web app, and in order to do so, we are going to, we need to know design patterns, MVC, what is your experience, rest, data persistence, and so we are going to, to our web app, we are going to add a database. And we are going to deploy it into a host, and we are going to put it in front of a web server. So, and we are going to start shipping, we are going to start giving updates to the web apps, so we need version control, we need to have all the tests, and we are going to automate the deployment. That starts to get a bit tricky, because we don't want downtime in our servers. We are going to start learning about processes, memory, we need to make sure that the host doesn't run out of memory, we are going to learn about demons, we are going to learn about zombies, it starts to get epic. Then we are going to need to instrumentalize, to check all this, and we are going to, to need all these tools to also debug, and today I learned something, I didn't know about this, if you want to check it's funny, funny thing to do. So, and you are going to start scaling. In order to scale, you have this monolith, you are going to put more, to move it to webhost, and you are going to move the database outside, and put everything in front of a load-down answer, and this starts to multiply, keep this in mind. And then you have a set of hosts, you start learning about VPNs, TCP, DNS, and you are going to, you need to keep in mind the security as well, you are going to do the penetration test, SQL injection, you are going to learn about ESCACID, you are going to face robots, and robots have no mercy with you, you are, they even don't respect the thrill also, as in most. Keep learning with security, face more challenges, you are going to have digital services attacks, as today we've learned you can, the web cameras can be, there's a whole set of cameras that is going to make you a digital service attack, and even worse in the future, we're going to have a full set of toasters that are going to make you a digital service attack, and then you are going to have humans, more humans working with you, you are going to cooperate with them, you need to have branches, peer reviews, and you are going to accept standards, you are going to accept standards like, what are you going to use, you have accepting standards, for example, this is not cute, there is a standard there that says that this animal is cute, it's like up with tentacles, I don't know how this is standard, I can't accept that standard, for example, for me. You are going to learn who is this squirrel, you are going to, there's people that has to search for that, because it's not obvious what is it, and then you keep scaling and you have a full fleet of machines there, and you still have the problem with your downtime, and you are going to need to start orchestrating, and you're going to start feeling the power, because you're going to have hundreds of machines under your control, but your stack keeps growing, and you are going to have a mobile app, mailing, gushing queues, you are going to add a search engine, start use machine learning, recommendation, and you are going to introduce maker services, so all the stack is going, you are going to replace the whole monolith with something like this, then you are going to, ah, and then also the front, we are full stack, so in the front end we are going to face a lot of technologies for JavaScript, a lot of CSS, even more, like all this webpack, you are going to do optimizations with minimization, compression, tree shaking, very important that tree shaking, you are going to, and you are going to feel like you are going to deploy, you have to have progressive web apps, you are going to deploy a full, remotely a full automated robot in the browser, so it's like sending, sometimes you feel with all that stack of technologies and sending a big robot to deploy itself in the browser of the client, and the important thing is here is, you have to keep learning, keep learning, get up to speed with all the technologies, and if you, I don't know if you notice it, but with all the technologies that I said here, you can try to become a Pokemon master, because there are a lot of animals here, you can do a Pokemon rap, it's, you can find the, what's that by the way, I don't know what's that, the python is a bit abstract, you need to, but there are two pythons there, PHP, POSRE, Hadoop, they are not evolution, they are independent Pokemon, this is Grant, Bower, and you also have GitLab, that is, that's not open source, but it's a monster as well, as I said before, it's, so it enters here as well, keep learning, please. All right, time is already running, so good. Yeah, I wanna give you a quick overview over GraphQL, but before we start, give me like a show of hands, who has used GraphQL, quick, quick, up, up, right, right, that's good, so you, I just don't know about it really, right, good. So, GraphQL is basically, was developed by Facebook to build better APIs, to be more flexible, be more modern, and be suitable for mobile apps and legacy clients, because they had a lot of those issues. And with GraphQL, you can have less traffic, less network requests, and just in general, have a better, well-formed API. And since probably most of you know REST, we should probably compare it to GraphQL. So, on the left-hand side, we have REST. REST has multiple routes, we have Gats and Posts and Deletes, and we use the HTTP verbs to determine what we're gonna do with them. We write our own docs, more or less, somehow, maybe sometimes generated, sometimes not. We have implicit contracts between the client and the server, so we have to agree on something, and we sideload our relations, which means we have usually more requests for relationships and better documents and stuff like that. We have fixed responses, so everything looks the same all the time, and if we don't like it, well, problem. And therefore, we need API versioning, if we have legacy clients or mobile apps that can't really be developed as fast as web apps, for instance. And we don't have types, so we have to do validation on our server, because basically we can receive all data we want. There's no validation whatsoever, usually. Whereas with GraphQL, we have just one endpoint. It's always post, and it's just that one endpoint. The docs can be generated from the schema we already have, because we have to define a schema, so we can generate the docs, and they're always up to date. We have explicit contracts, so there's no way to send wrong data, there's no way to receive wrong data, it's totally like in the contract. We can embed relations, so it's always just one request to get all the things we need. We have very flexible results, so we get all the, just the data we need and not everything from a user, for instance. And therefore we don't need versioning if we do it at the right way, because if we tell the server what we want, we can have old clients, new clients, and they can all use what they need. And since we have static typing, we have decent data that arrives on the server already, so we don't really have to validate, like at least not the types. So now you probably think like, right, nice, I guess, but how do I use this, right? So let's have a demo, shit, sorry. So this is the GraphQL and the phase, which is like free, and you can install it yourself. And it's pointing to the GitHub, GraphQL database, or API, which you can use for free as well and play around with it. So when you look at it, you probably think like, what is this? So basically on the upper right-hand corner, you have docs, and you open them, you have those generated docs that I just told you about. And there on the bottom, you see search, which is the one I exclude on the left, and the right-hand side is the response. So the search has like a first, after, stuff like that, for a pagination, and then we have a query string and a type, which are both required because it has an exclamation mark. So we know what we need to send, how it's structured, and what we get. We get a search result, item connection, you can click on the stuff and you know exactly what you're getting. So I know how to generate the query on the left-hand side by looking at the docs. And also GraphQL helps you because it's like an IDE. So if I type repo, it actually expands everything for me. So I know if it doesn't expand, I probably did it wrong. I can also be very flexible, so I cannot only tell the server what type of attributes I want or what attributes I can also tell how I want them to be named. So which is really nice for legacy science and mobile apps and the like. But what about errors, right? So errors are just a part of the response as well and it can include both GraphQL errors, like for types or server errors as well. And if you wanna change data or create data, you need to have mutations, which are also be found in the docs and there's like a bunch for GitHub like at stars and at comments and stuff like that. And if you just go through the docs again, you see how it's done. So it looks pretty much like a query but it has the mutation keyword and then you can also specify the response. So if you feel like, well, I'm in, that's nice. Please feel free to come to me after the talk and ask a few questions and thanks for listening. Hola, mi amo Hugo and that's all the Spanish I'm gonna do in this talk. So I'm gonna talk about what I call one-click setup. I'm gonna tell you what is, why or how you would do it and why I think you should do it. First of all, though, a bit about me. I'm from Sweden originally. I live in Edinburgh in Scotland and I know that's the Union Yak but the Scottish flag is not in the Mojizander just yet. I work at Skyscanner and yes, we are hiring and we're sponsoring so we're just inside the door. So let's play a game. Imagine I'm just joined your team. It's my first day, I wanna kill on your repo, I wanna commit my first code, push to production, you know, deploy it. I want you to think about the number of steps it would take me to do this and how long that would take, right? So show of hands. Who thinks I could do that in less than 15 minutes? Who thinks I could do it in less than one hour? Less than four hours? Less than one work day? Less than one week? Right, so you know how Amazon has this one-click checkout button that they invented and the whole idea is that you click it and you immediately go from looking at a product to it being shipped and on its way to your door. Your repository and your project should have the same thing. It should, for me as a new engineer, I should be able to go from having the repo clone to running it locally in a single step, ideally in like 15 minutes to an hour. Really though, it's not one-click, it's probably more like one command, like run, I don't know, start or install. So that's what we're going for here. So the question is how do we achieve this? The first step is quite simple, it's like a common one, automate. Imagine that maybe you currently have like a long checklist of stuff to do, right? Get a clone of the database, install Postgres, because you need the dynamic library, et cetera. Automate all those steps, they can all be automated, there's no point in humans doing them. The other one is using reproducible builds. So just like you have infrastructure for code for production, you should have infrastructure for code for development. So that could mean using Docker and Docker compose files to just spin up in a full environment, which is Docker compose app. It could mean using vagrant, or in the worst case, it could mean using pre-baked virtual machines you can load in and start. And also follow the path of Lisa Price. If you're in the NPM ecosystem, you can use like an NPM post installer cook to do any other setups, because if I clone a JavaScript project, I'm gonna run NPM install instinctively. And if that also does a bunch of custom work that we need to do, that's great. So, why would you do this? So the thing that Amazon discovered, which purchases and why they created a one-click button is friction-causance abandonment. In their case, it causes cart abandonment, but people will start building up a shopping cart and then never check out. And you get the same thing, right? Imagine I'm working on a different project and a different team from you, but I find something in your code base that could be better. And I say, this looks like a two, three minute fix. I wanna go help you, I wanna go set this up. But if it takes me an hour and 20 steps to set the code base up, that's friction. I'm never gonna do that. If it takes me one command and just waiting a bit, I'm more likely to do this. And this becomes more and more relevant as we scale out into microservices because you will have more projects, but also, at Skyscanner scale, we're almost 600 in years and we have hundreds of code bases. So the number of times you set up a project increases with the number of code bases and the number of people. You also fewer bugs because your environment is reproducible. It means you don't, like the works on my machine case kind of disappears and it also means like the environment from dev to dev and from dev to production is gonna be more similar, again, fewer bugs. Also you'll have happier developers cause like who likes being a machine and following a 20 step list, like step by step, that's boring and demotivating. So Tariqa, make your set up one step. Ideally, make it take less than 15 minutes of active time, meaning time where you spend actively doing something. Make it take less than one hour of work-lock time, so like just sitting waiting. And I implore you, take a project and try setting it up for yourself on a blank VM and see how many issues you hit and then go back and fix it. That's it. So, we all love stories about major ad war apps. This is one of them. About myself, I do work as an IT project manager for a huge language traveling abroad company. On the marketing area, I am responsible of making you click on those ads that you see everywhere, so we actually get more money, so I'm one of the bad guys. And when I joined the company, the idea, they brought me over for a project that was around for three years and they couldn't launch. So, this is the project itself. It's an in-house CMS for the digital advertising team. Serving landing pages to 32 countries in the local language. Two million users a month, which is not huge. They must reflect the changes immediately to the final users, any change they do. And this is one of the key parts in here. Using only two T2.medium ET2 servers. If you don't know, this is AWS, so this is servers with only four gigabytes to CPUs. Two web servers with a load balancer. And the key point is that it had to be delivered ASAP, this project. So, we went with a catch system on these two servers, on memory. The memory of the server, we just catch it over there to serve it quicker to the user, help the systems not to have a big load. Snapchat ads, launching in early May. 161 million active users a day. And there is no technical documentation on their sites. I could only find a pdf around the internet. I ask them, hey, do you have any technical documentation about your ads? They have nothing. So, first symptoms. It's a Sunday morning. I am bottle feeding my six months old baby and I receive a call from my manager that we were actually, Google was rejecting all our ads. This happens when your systems are down and I didn't get any alert about this. Was strange. So, I connect blank pages everywhere. No errors, no anything. Sick. And I couldn't access to the console. It just kept timing out. The facts that we know. I didn't get, so, one important keynote for me was the one from Aish, which speaks about having the key people on the call. He called it engineering commander, maybe. So, I asked my boss to just go away from the calls. Just like, we don't need you here. We get the developers. I only got the developers. We finally get the logs and we see all of that. All of them share the same user agent. That's strange. DDOS cannot be. Normally, it's botnet, so, different user agents. And this is the key. After about three hours, I involve another key person, another subject expert, which is one of the digital advertising managers and she tells me, I uploaded to the Snapchat ads to the platform. Only two. We have about 15,000 ads running every time. And she only uploaded to. The reality. So, we got 3.8 million visits in 12 hours. As you can imagine, the system were not ready for this. They were not real visitors. Snapchat prefetched every page, the pages that were linked for every ad display. As they have 161 million users. So, we showed the ad to 3.8. Those are active users for your server. Only 38,000 people actually engage with the ad, which is not much. Tips. Have some hierarchy system. As I said, you need to keep control of it. If you keep bringing people in, it will be a mess. Always prepare for the worst. Now, we have a CDN in place, which is the key that they told me to be delivered asap. We didn't have any external catch system. Now we have a CDN, which I'm not going to mention, but this happened. Now we have Snapchat ads running. No problem at all. Train your users. If I told the digital advertising managers that how the system works, maybe they told me before, hey, I'm gonna upload this, and train yourself on typing with one hand while you are about the feeling. Maybe you are gonna need it one day. Thank you. Hi, I'm Alex. I work at Nexmo as a JavaScript developer advocate. You may find me or saw me at the both outside this. And the reason I'm gonna talk today about t-shirts is, well, my Twitter handle says I do stuff for t-shirts. I get asked a lot, so I figured why not tell the story in front of 500 people. I also do open source. I'm involved with Mozilla. I volunteer for them, but this wasn't really the case all the time. This is a story of how I got involved in open source. It starts like seven years ago when I was fresh out of college. And I was born in Romania, even though I don't live there anymore, but I started working there. And the way that works is it's outsourcing. So I was basically rented by the hour to a different company. And then three weeks into my new job, my manager comes to me and says, dude, I have this team called Mozilla, that does open source, do you wanna join them? I was like, what do you mean open source? What's that exactly? I had no idea what volunteering was. Like it wasn't even in my vocabulary, but we managed to make a deal. I was gonna work for them for two weeks until they found someone else that replaced me. And then he was gonna transfer me to the project I really, really wanted to work on, which is something that's maybe out there in the internet now, trip it. So when I joined the team, it was right around Firefox 4, like we were releasing, launching Firefox 4 after about a year and a half of development. It was easy to get excited about the project. Like we had developer tools for the first time ever, even though it was just a console, but that was developer tools. We had all these cool features like Panorama and stuff like that. So it is really easy to get interested in the project. The problem was the team wasn't really friendly and forthcoming and all that. So I kind of felt like an outsider, because while they were testers, I was the developer in a tester team and I kind of felt like the old man out. But the project was interesting. So every morning what I did was, I was reading a blog aggregator called the Musla Planet. And one morning, this post from the Musla developer network came in and it said over the weekend they were doing a documentation sprint and at the end of it, they were giving out t-shirts. Now my problem was everybody in the team had a t-shirt except me. And this was my chance to get a t-shirt and feel like I belong, right? So I hacked up a plan. I was gonna join for like two or three hours or I was gonna basically do a little bit of documentation for them, get a t-shirt, which was also awesome because they had tester t-shirts. This was a developer t-shirt. I was gonna rule their world. I was gonna be the best of everything. And then I was gonna go out and have fun with my friends. I was like out of college, employed, had money. What do you want? I want the party. And then the weekend comes around. I joined this IRC channel. They're kind of old school and still use IRC. So I joined this IRC channel and I started basically asking people what to do. And instead of, you know, like a manager comes to you and tells you do this, do that, they're like do anything you want. There's like a list of things that's available if your thing isn't there. Do whatever you want. There was like, what do you mean? I can do what I want and still get the t-shirt. So I started hacking on examples instead of writing documentation. And then I figured out in the process, I figured out something weird. My friends called me and were like, come on, dude, let's go out. That's part of it. I was like, no, no, no, you're not getting it. I'm having fun with random people I met on the internet. So I ended up staying for like 48 hours straight, the whole, like the whole thing. And at the end of it, I realized I didn't actually stay for a t-shirt. Like six years later, I still don't have the t-shirt. Like the t-shirt got ruined in maybe a year. But I stayed around because, well, open source had all these possibilities that my job wasn't affording me. And on top of that, I kind of felt like I belonged. I found a community that accepted me for who I was and whatever I wanted to do in the limits of decency. And that was a place where I could learn with others and, well, that's how I kind of felt. I found a missing piece in my puzzle. Like, I started belonging somewhere. And that's why today, six years and a half later, I'm still going strong. I still see a bunch of people with Mozla t-shirts in the audience. I have no idea who they are, but it's just like, we feel like we do the same thing somehow. And with that, I thank you. Hi, my name's Andru Betz. I work for Farsie and I also am on the W3C's technical architecture group. I am unhealthily interested in standards and I hope to make you also unhealthily interested in standards. I got here on an Airbus A319. This is a machine that has five million components. It cost me 10 pounds. This is one of the great benefits of standardization and massive scale. Let's take a standard tour of standardization through the ages. The Romans, excellent at standardization. They love to take almost everything from swords to armor to encampments to tents, scale it up, produce it thousands of times. It was a really good way of finding a good idea and having that good idea propagate through the whole empire. Fast forward to the Middle Ages and we find Gil Kristof Lichtenberg, one of my heroes, an inventor of paper. Not in the Chinese sense, they managed to produce paper thousands of years before, but this guy came up with a four paper, which is much more important, right? Because this is the paper that we all use and it's so awesome, because he realized that you could take a piece of paper that measures one to the square root of two, cut it in half, and you got two pieces of paper, which also measure one to the square root of two, which means you can keep cutting the paper in half and get the next size down with no waste. And this system is now so amazing that it's used by literally every country in the world except America. There's also the B size and the C size. The C sizes are designed to be exactly the right size to put the corresponding A size in as an envelope. Isn't that amazing? And the B size is halfway between two corresponding A sizes. Now, move forward. Trains arrived. Trains present us with a problem, because when trains were invented, cities had different times. When it was midday in London, it would be 1150 in Bristol. And that's no good because we need timetables. We need to understand when the train is gonna arrive at its destination. So we invented time zones. And so Stanford Fleming was the chap who came up with this idea. Divide the world into 24 zones. And within each of one of those zones, the time would always be the same. And this principle basically works extremely well and we still use it today. There are only a few minor problems with this, mainly countries that don't respect standards, like China, that has one time zone when it should have four. And India that has a 30 minute offset, India, what on earth are you thinking? Electricity was also a good opportunity for us to create new avenues for standardization. When electricity was first invented, if you had electricity and you had something that worked on electricity, you couldn't take that thing to your neighbor and plug it in, because it would probably explode, because their electricity was different to your electricity. So when we finally managed to standardize this, we also standardize things like plugs and sockets. To this day, the BS1363 plug and socket system is one of the best plug and socket systems in the world, in my opinion. I agree. I agree it's a little bit big. But we did gently encourage the six other countries to adopt this system. And it's also a good example of how we can innovate on top of legacy standards. So this is a Korean guy, Min Kyu Choi, who created a flat version of the British plug. So if you have a sat accidentally on a British three pin plug, you will understand why this is a really important invention. I can't talk to a lot of nerds without mentioning HTTP and HTML. I have the pleasure of sitting in a room with this guy about once every three months and debating web standards. And when Tim invented HTTP and HTML in the late 80s, he wanted to make academic documents easier to cross-reference. But in doing so, he created something that was such a ripe hotbed of innovation that we ended up with far more creative uses for the web than he could ever possibly have imagined. And along the way, we've also created lots of other standards and hardware innovations that have come on top of the things that have come out of the web. So USB, for example, is a fantastic hardware innovation, which has taken a lot of people, a lot of very serious people, a lot of time, a lot of money to create. But it also enables you to plug all sorts of shit into your computer, like a guinea pig or a gun that will fire nerf pellets at your coworkers. Other favorite standards include RFC 5841, which encodes in motion into internet packets so that your internet traffic can get emotional about delivering your internet experience to you. And ISO 3103, which defines an internationally standard way of making tea, which is amazing. I think no matter whether you are talking about electricity, about transport, about furniture, about almost anything, every aspect of your life is improved by standardization. So I say, let's not celebrate our differences, let's celebrate all the stuff that's the same. Thank you very much. Okay, so I wanted to tell you something about getting out of your comfort zone, the smart way. The smart way is probably not a real trademark, but better safe than sorry, you know, with all the smart devices in the world. So let's start by laying some groundwork here. What actually is a comfort zone? The best way to make a lightning talk look smart is by putting a quote inside. So I put one, when in Rome, do as the Romans do. It's an accident that the previous lightning talk mentioned Romans as well. Anyway, is this quote really random, or maybe I want to tell you to go out and do opposite and do all the amazing and dangerous stuff. Yes, let's do this, let's do even more dangerous stuff. Or maybe not, because after all, it's a serious technological conference. And maybe we just chill out and take a programmer view on this topic. So I have a few questions for you. The first one, who remembers when you first started programming? Raise your hands. Okay, quite a few people here. And the next question is, how many of you were excited with all the new technologies you tried there and everything you could learn? Yeah, I just put 95% because I had to prepare it earlier. So let's go with it. Anyway, we have five more circles. We can ask some more questions, but we won't, it's just a random background I found on the internet. So moving on. We may feel like our daily job has little place for innovation because we're stuck in trying to do stable working application. There is no place for playground for creating some work in progress. But it may be possible to try new things within our job bounds. So let's take a look at some made up but entirely possible example. How about if we have some old database and we want to migrate it into our shiny, new, postgres, Ruby on Rails application. And inside there are 100,000 users with millions of images, videos, comments. I don't know if you're working for Instagram. I'm not. So that's just out of the head. Anyway, this sounds easy, right? You just grab your MySQL database, you connect it to your Ruby on Rails application, you create some simple rake task for it and just shove everything into postgres. Job done, great work. We can actually go home, but first we can start it and wait for it to finish. And actually you better do it when the weekend starts because it will take a staggering 60 hours to complete. So if nothing fails, you will have it ready by Monday. And some people will be okay with this. They will really go home and say, okay, it works, my job is done, what's the problem? And it's kind of sad because on Monday they will go back to work and they will be all depressed and say things like, why is my job so dull and repetitive? Why is nothing innovative happening? Because they missed some opportunities to improve. There are small improvements you can do. This is the thumb up is international symbol for improvement according to stock photos. So there are at least three improvements we can try to do here. The first one will be, for example, using SQL instead of active record. This way we can reduce memory footprint by over three times. And less memory footprint means faster code. If you want to work on this performance, you can try something like bulk insert and if you don't want to dive into this, you can get a ready working solution. And actually we can just skip rails entirely because it's really easy to export mySQL result into CSV file and then you can load it into Postgres and it's blazing fast. And we can do some extra calculation. If needed, we can just offset users so we don't override the existing ones. And we're still within our usual technological stack. So we just dive into the topic without stepping out of what we do in our daily job. And now instead of 60 hours, this task will complete in just eight minutes. And that's really good improvement. And we just learned something new. We just expanded our knowledge and that's what we were doing in the beginning. That's what got us into programming and that's what can keep us running and keep us moving. And afterwards, we can actually try jumping on the motorbike over the flames because it looks cool as hell. But if you want to discuss this topic or jumping on the motorbikes, you can find me on the internet, on the Slack channel, Twitter, or anywhere. Thank you. Thanks, everybody, for sticking around. I wanna quickly talk to you about scalability from cost perspective and just my background. Real quick, I'm CTO of an ad tech company called RTKIO. Previously, I ran the world's second largest consumer VPN company. And I do a lot of work, consulting work on scalability, security and scalability for content delivery networks, financial institutions and governments. So, why do I care so much about this? Well, all of you here are probably building really awesome tech and a lot of you are probably building them on the same platforms. Maybe you're using AWS, maybe you're using Azure. And that might be okay for the business that you're running. But for some of us, that may not be okay. And so, I wanna talk to you from the perspective of just thinking about when you achieve scale, can you still afford to operate the platform that you're operating today? So, when I talk about scale, this is my perspective. Some people's scale is much larger than this. Some may be smaller. But I come from an area where we serve about a billion impressions per day. In the adtech side, we've done deep packet inspection for over 100,000 simultaneous sessions at 50 gigabits of traffic sustained. So, these are costly projects. No matter how you look at it, your infrastructure costs will be high. So, touched on this quickly, but why do we really care? Because in the long term, survivability for your company, all things eventually get commoditized when it comes to technology. So, everything is kind of a race to the bottom. And so, if your offering is purely technology, you need to really understand what that means to operate at a commoditized level. What happens when your competitor is the person that's operating the infrastructure that you're built on top of. The other reason this is really important is because money is generally better invested outside of the tech realm. And I know that really doesn't sound good for us, but it really is, because if I have an extra thousand dollars I can spend in marketing, I would rather do that to grow my business than invest it in unnecessary technology investment. Now, this is just maybe my personal bias, but from what I've seen, growing your business is way, way easier when you have an extra marketing budget. So, quick real world example. In the world of adtech, you have this concept of real time bidding. These auctions are happening inside your browser, which is ridiculous, but people are bidding in real time to serve you an ad. Every time you see an ad on a website, most likely up to 10 different ad exchanges have competed for that impression and given a price. So, what does that mean for the bidder? Well, they need to be able to do this very quickly. A lot of times they'll have an auction between their backend partners before they participate in the auction in your browser. So, they need to do this fast twice, and they need to do this in a way that's very smart. So, they don't want to bid on the wrong user, because bidding on the wrong user means wasting lots of resources, participating in bids that they probably shouldn't participate in. So, let's think of this from the perspective of you're going to start an ad exchange or you want to participate in the world of online advertising. Well, if the two largest players in the market are Google and Amazon, can you really be cost competitive in the advertising world if you're building your platform on top of Google and Amazon? Maybe you can, but I would bet that you can't. So, what are some other common cost scale problems that I see when people are making architecture decisions? Really, there's a lack of continuous cost modeling throughout the entire system development cycle and we use Bandwagon Band-Aids, so we think that the latest technology in scale is going to fix our scalability problems. We haven't tested those for actual cost effectiveness. We have the provider lock-in problem, and a lot of times developers don't make great architects, so we need to make sure we're always at the table together. Some things you can do to reduce your chance of failure is just understand your traffic patterns, test everything from a cost perspective, understand your performance metrics, set them early, and identify those resource components that really consume the most dollars in your architecture. Thank you very much, and feel free to talk to me after.