 Gwelwch! Wyddech chi'n gyd yn ddiw i ddim yn wahanol. Mae'r gwahodd Beth Groeks, ac rydyn ni'n gweithio LBM yn ymddangos cyngro. Rydyn ni'n ddweud o gael cyffredinol ar y cwmwylo cymdeithasol o'r cyfrifiad o'r cyfrifiad? A cyfrifiad o'r cyfrifiad o'r cyfrifiad? Felly mae'r cyfrifiad wedi'i cyfrifiad o'r cyfrifiad o'r cyfrifiad o'r cyfrifiad. ceisio hefyd yn ffau y Cwlau Saeroth yn y Gŵr Gŵr Nw. Mae'r gweithio hwn yn yr olywgen Cymru i Gŵr Swerthfyniau Gŵr Nomwr. Maen nhw'n mynd i gael ei gael yr olywgen Gŵr Nw sy'n gweithio'r gweithio'r team. Roeddwn ni'n neud yn gweithio, ond gweithio Cwil Nw. Ynancydd ar y Cwil Nw yn 2009. fel y 10 ysgriffinn o'ch cyflawn oed. Mae wedi'n mynd i cherddau'r cadw iCH y pwyllt ganhefyd. through what's new in the latest version of Node, and all of the activity that's currently going on in the project. So, if we go back to where it all started, Node.js was first created by Rian Darwin 2009. And he actually recorded a video titled, The History of Node.js, where he mentions, he feels Node.js primarily stems from trying to solve the upload progress problem. So, back in 2009 he was looking for a good way you could work out how much of a file had been uploaded to a server. And at the time the kind of techniques people were using were iframes or sending small Ajax requests to the server and saying how much is a file been uploaded and the server coming back and stating how much it had been uploaded. But that was quite costly in terms of how many requests you having to send just for a loading bar. There was another technique called long polling, and the long polling technique works by when a request is sent, the server won't actually respond until something significant had changed, send a case of a file upload, you'd send a request and the server wouldn't come back unless the file had actually changed in size on the server. And he actually started to think, hey, I should build a web server or a framework that is optimised for this kind of long polling technique where the server doesn't always have to respond immediately. And he actually originally tried to solve the problem in Ruby, so he tried to create a project and optimised the long polling technique in Ruby, but he was actually held back in terms of speed when using Ruby. He then tried with C, so he wrote a project implementation in C, but he couldn't actually gain much traction around C implementation because it wasn't cool, it wasn't new and people just weren't that interested in it. And eventually he realised JavaScript was the way to go because web developers were already using JavaScript and the kind of techniques and what Node.js was going to be created for a line perfectly. With the current web developers who are using JavaScript. And by about March 2009 he'd named his project Node. And he actually introduced it to the world at JSConfU in Berlin and the thesis of his talk was that IO needed to be done differently. So Ryan introduced it in brief as server-side JavaScript, built on Google's V8 engine, invented non-blocking IO, using a common JS module system, and back then it was just 8,000 lines of C or C++, 2,000 lines of JavaScript and there were just 14 contributors. And this was one of the first little snippets he used to introduce people to the non-blocking nature of Node.js, so I'm sure it's very similar to what it is to me, how I first learnt how Node worked. 2009 NPM was also created as a package manager for Node.js and the reason, the motivation for the project was for JavaScript developers to easily be able to share package and modules of code. And unsurprisingly around the same time we saw the birth of Express and Socket.io, so these are two very popular frameworks that go as far back as 2010. And Express, the web framework I'm sure you've heard of it, was actually originally inspired by Ruby's Sinatra framework and it still gets in excess of 10 million downloads a week, so it's still very popular. And Socket.io used the building real-time web apps. Six months later we're already seeing clouds and cloud providers like Heroku coming out saying hey, you can deploy Node.js in our cloud and this is all while Node was still at version 0.1. And also 2011 we started to see large companies coming out saying hey, we're using Node.js and these are the benefits we're finding from using it. So LinkedIn in particular, they published a blog saying hey, we converted our existing Ruby web app to Node and it's much faster, it's cost us a fraction of the resources and the development time is much faster. So we're still only at 0.63, we've got large companies using Node in production, we've got cloud services. 0.63, the interesting thing about this release is the first one that bundled NPM. And 2012 we saw Happy, so Happy was actually created as a server framework by Walmart. And the motivation to create this project was to build a framework that could help them deal with their scaling requirements around Black Friday sales. So it actually built a framework bespoke to tackle that problem. We saw more frameworks, there's a bit of theme here, so we saw Kraken where they actually extended Express with some enterprise level features. Koa was actually made by the original author of Express but with the name of being a bit more modular and expressive. And also we started seeing a lot of references to mean stack applications in 2013, so grouping MongoDB, Express, Angular and Node together as a set of technologies. In 2014 I'm sure many of you remember or are aware the project was forked as IOJS. There are many reasons for this, but the two main ones I think were there was a desire for faster moving and more frequent releases. So at the time the releases weren't progressing particularly quickly and also a desire for more open governance. So people wanted the project to be governed by an open body. And in 2015 that's when the Node Foundation was established. So the Node Foundation was to be that neutral and open body to govern Node.js. And lots of large enterprises came together to establish this. And by Q1 of that year they set a reconciliation proposal so that the IO and Node.js projects could merge back together underneath the Node.js Foundation. And that was done by Q2 of 2015. And that's actually when Node 4 was released. And this was the first fully converged IOJS and Node.js release. So the reason it went straight from 0 to 4 is because IO had versions 1, 2 and 3. So when it all merged back together it merged back as Node 4. And it was also the first release that was to follow an LTS policy. And that meant that Node 4 would be supported for up to 30 months. And we still follow that same LTS policy today. So Node.js follows semantic versioning. We have two major releases per year. And the even numbered releases graduate to LTS status where they're supported for up to 30 months. This LTS policy was vital for large enterprises to start to adopt Node. Because a lot of them still have long update schedules or things like that. So giving them time to migrate between release lines without having to deal with breaking changes is fundamental to them adopting it. 2015 the foundation was still growing. We saw Yahoo! Rising Start Apogee joining. We also had the first Node.js interactive. So that was in Portland, Oregon. There was about 700 people there. And hot topics at time were internet of things and debugging Node in production. In 2016 Express joined the Node.js foundation as an incubator project. So the Node foundation had a program called the incubator program where popular projects or frameworks can be brought in under it and receive assistance or governance mentorship. The reason Express was brought in is because it's so popular and critical to the ecosystem. As mentioned, it's still getting in excess of 10 million downloads a week. And because it's so critical for a large portion of Node users, it was important to bring it in under open governance. And 2016 we also saw Node 6 be released. This came with Fast and Modulated. New Buffer API. So this was to try and tackle some of the pitfalls we were seeing with the original Buffer API. Math random improves security and a lot more ES6 features. 2016 you might remember the Left Pad incident. This was one of the highlights of the year. Left Pad was heavily depended on module in the ecosystem. You probably weren't requiring it directly but it could be pulled in at some point up. And it was unpublished by the author from NPM. And this caused many people's NPM installs whether that's when they're running them to deploy their production applications to fail with like 404 not found because it had been unpublished. NPM quickly restored the package. But the surprising thing at the time is it was just 11 lines of JavaScript that padded a string that caused all these problems. And I think this was really when the issues around dependency management and usage in Node.js really started to be highlighted. And surprisingly Yon was released that same year. So Yon was a collaboration between Facebook, Exponent, Google and Tildi. And it was trying to tackle some of the problems they were seeing with dependency management, particularly around security consistency and performance. In 2017 NAPI was created. And this is for those who are writing exist native modules which are CC++ that talk to the VA or underlying VM. And what NAPI allow is like an interface layer between. And this means that every time VA changes you don't need to edit your native module. And in most cases you won't need to recompile if you build against this NAPI kind of abstraction layer. And the work on this actually came about from Chakrakor, which was Microsoft's VM engine and a way to have a layer that's neutral to which underlying VM you're using. So whether it's VA or Chakrakor. And in 2017 Node.js was released and this came with Async Hooks API. So if you haven't used that, it's kind of let you track the asynchronous work that's going on in your application. It's the first LTS release with Async Await and Flagged. NAPI was included in that release. You to promise pie so allowing you to call back APIs into promises and what working group URL piles it. And as a kind of public service announcement, Node.js goes end of life less than three weeks today. After which time there will be no security fixes or updates. This is actually four months earlier than it should have been according to the LTS schedule. And the reason it's slightly shorter is because the version of OpenSSL 1.0.2 actually goes end of life in December. So we had to bring Node to end of life for that. 2017, so this is a slide from JS Interactive keynote in 2017. So it's really showcasing the mass adoption of Node.js. So almost 9 million Node instances, 1,500 contributors and that's up from just 14 in 2009. And I think it's 3 million or 3 billion package downloads a week from NPM. In 2018 Node.10 was released. So NAPI was declared Stableness release. We had stable HTTP too. An experimental FS promises API. So this is so you can use all the like read file operations via promises instead. And we got an update to V8 which included async generators. Node.10 will still be supported up until April 2021. So you've still got some time if you're on that release. And up to this year, very early on in the year, there was an intent to merge the JS foundations and the Node.js foundation. And the reasoning behind this was that they could streamline the operational parts of running foundations or the overhead of managing this foundation body. And also we could work together on complementary goals. So by around Q1, Q2 we were merged back together. And at the moment we've got around 30 active projects underneath the foundation, includes things like Node.RED, Node.NVM, et cetera. And 26 member companies. So these are companies that sponsor the OpenJS foundation. So also in the year we hit a million NPM packages. So as you can see, it followed the like exponential growth we'd expected. That's actually more than double the next highest dependency registry, which is made in central. And in April of this year, Node.12 was released. It entered LTS in October, so you're good to use in production. And if you are looking to upgrade, aim for Node.12 because that will buy you the most time in terms of support lifetime. And goes end of live April 2022. And to look at a few of the features in Node.12. So Node.12 came with faster await, faster JSON parts. And that's all by V8 upgrade to V877. So V8 are always working on how they can improve speed and efficiency. And as we pick up their updates, we get to leverage those performance benefits in Node. It also came with async stack traces. And if you haven't seen these, I'll give a quick walkthrough. So imagine you have a async function foo that awaits another async function bar that just throws a new error. In Node.11 and under, you would just see hay bar function throws an error at line nine. And then you'd see all these internal processes on the stack trace. But in Node.12, what you will now see is it will async foo. So it actually tells you where that function was called from. This helps you track where things actually went wrong and helps you read what sometimes is a mess of hopping around which function calls which. Another feature that I particularly like that came via the V8 upgrade was the promise.all settled. So the difference between promise.all and promise.all settled is that when you have an array of promises that you pass to promise.all, the second one fails, it will short-circuit and won't run any of the rest or complete any of the rest. Promise.all settled will wait until every promise completes ignoring whether they reject or pass. So if you have some work that needs to be done, regardless of whether it passes or fails, that's a use case for promise.all settled. We also got an update to ES6 module support. This is currently experimental in Node.12, so you have to pass the experimental modules flag to the Node process to use it. And this includes things such as import-export statements supported in JavaScript files. You should check out the blog by the Node Foundation. It covers the modules working groups plan for how they're going to implement ESM in Node. I believe there is hope that it will be unflagged at some point in the lifetime of 12, but it's still in debate at the moment. Another feature in Node.12 was the diagnostic reports. This is also experimental behind the flag and experimental report. And if any of you have worked with Java before, this kind of provides you a thing a bit like a Java core file. So when there's a crash or an error, it will produce you a report that will provide you information to help you diagnose things like crashes, slow performance, memory leaks, CPU usage, et cetera. And it was actually an external module before it was brought into Node.core. And the PR to merge it into Node.core had almost 1,000 comments, so I think it's one of the most commented on PRs. The reason it was brought in from an external module into Node.core is to support adoption. Because you kind of have to have these reports generated when you're at crashes because there's no use to restart your process and install it and then hope that the same behaviour is seen again. So if it's there by default, people can actually more easily use it. There is a talk today at 2.20 going into the when to use these diagnostic reports by Garrish, who actually created PR to merge it. Some of the other features in Node.12. So the default HTTP parser was swapped to our other HTTP. And this was due to maintenance concerns around the original HTTP parser. We also got an upgrade to NPM, and it will continue to get upgrades, TLS support. So the default max protocol is now TLS 1.3, and WorkerFreds are now stable. I think there's a talk today about WorkerFreds, but they're now stable to use. You can use them in production and you can use them in LTS. Also in October 2019, Node.13 was released. So this release will be never promoted to LTS, and the purpose of odd-numbered release lines is for you to really try out new features, play around with what's new, and also test out whether you've got any breakages between versions. So if you've got some code running with Node.12, see if it still runs with Node.13. If it already breaks then it's something to look at in advance of you needing to upgrade. Now it's actually just 43 breaking or sent for major changes in Node.13, which is actually the lowest of any major release we've had. And to look at some of the key features, the main one I think to call out is Node.13 builds with full ICU by default. ICU stands for International Components for Unicode, and it's used to provide internationalisation in Node. And this means out-of-box hundreds of locales are supported. There was a trade-off between binary size, so binary size between Node.12 and 13 will increase, but this means that we've got so many locales supported out-of-box. We decided that it was worth the increase. And as an example, before if you tried to call out the current month, it would have just printed the English string. Whereas in Node.13+, it would actually print out the correct string for the locality you're specifying. Other new features include unflagged updated ECMAS module support. So this is the same support that might be unflagged in Node.12. And also very recently we got in the initial experimental WASI support, so the WebAssembly system interface. And also V8 got updated to V8.79. And if we look at 2019 in numbers, we've actually reached 2,620 contributors. We've got 108 active collaborators. Collaborators are people who are nominated for their either continuous or significant contributions to the Node.js project. That's not specifically code contributions, that could be help with docs, or it could be help with maintaining our build servers, etc. And it's the collaborators that review all the PRs, merge all the PRs, start the CI runs for every single pull request. We've also had 3,600-odd pull requests this year, 1,650 issues, and that's just on Node.js node. So not in the other repos that Node.js has like Node.js help. And we've had over 50 releases. Keeping up with all of this activity is a huge task. A lot of it's done by the collaborators. But we also have several working groups. Working groups are kind of task forces for particular areas of the project, and they have responsibilities over that area of the project. So the various ones, we have streams, look after our streams, implementations, build. So build, look after all of our machines, diagnostics, internationalisation, Docker. So the Docker working group maintains all of our images up on Docker Hub. The add-on API is all the work around providing that native module abstraction layer. Benchmarking, release, so building all the releases, and determining and auditing which features should go into which releases. And also the security working group. So keeping track of all the vulnerabilities and making the call of when we need to cut security releases. And I'd like to do a very special shout-out to the Node.js build working group. They're really not visible in the project, but without them, we wouldn't be able to build releases. We wouldn't be able to land PRs. You wouldn't be able to download Node. They maintain the server where you pick up your Node downloads from. And I quite like this picture. It's actually a bunch of pies we have running in one of our collaborators rods basement in Australia. And this runs all of our CI testing on ARM. So it's quite nice. And yeah, the Node.js build working group, they maintain our Jenkins CI server. They maintain our build server. And the kind of work they're doing day-to-day is making updates to our answerable playbooks to install which dependencies we need on which machines. We've got over 200 machines for them to maintain. 50 OS slash arch combinations across build and test. So yeah, they're definitely kind of understanding here is it a project. And if anyone has any interest in maintaining machines or answerable playbooks, come chat to me and I'll get you involved because they're definitely down to just a few people maintaining all of this for us. Most of them are volunteering their time to do this. We also have a bunch of donors who've donated all of our infrastructure. So I thought I'd just say a big thank you to them because without them we wouldn't have the machines to run all of our CI, et cetera, Ron. And if you want to get involved, you should check out node2do.org. So what Node2do does, it guides you through how you can build Node from source and then make your first contribution to Node. And the way it does it, it will point you to our code coverage tool where you can identify a line of code which isn't covered. And when it will try and help you write a test to cover that line of code. So at the same time as you're getting your first contribution into Node, we're also improving our code coverage, which is great for everyone. It's actually run by Richard Trott who will be around the conference. But if you're also interested in getting involved with any other parts of the project, come chat to me or anyone else at the IBM booth because we're all contributors and we can find an area of the project that might be interesting for you. And yeah, and if you were to ask what's next in Node, the things that happen in Node are the things that people put the effort into work on. So it's really, if you see a pull request open saying, hey, I'm playing around with this, and you think that feature sounds good. The more people that get behind that PR and start commenting and start showing an interest, the more likely it is for that support to actually go through. The kind of areas at the moment that we're looking at is quick support. So I think there's a talk at the conference on quick and HTTP free. And we also have some strategic initiatives around workers, worker threads and also updating all of our Python support to use Python free because we're not quite there yet and we're running out of time. Yeah, if you're interested, there's also a community corner at the conference. I've not found it yet myself where we'll be having open office hours where each of the working groups will kind of be there for an hour or few to ask any questions, be that about releases or streams or anything in particular. And I hope that was good. But thanks for listening to my talk. Bye.