Hey guys, this is my review for Color Out Of Space. This is a film based on the HP Lovecraft short story, stars Nicholas Cage, his wacky little family, the doc and a meteorite, and some really trippy stuff, bro. This film isn't as weird as I expected it to be, but it's just as entertaining weird as I was hoping it would be. The film follows Nicholas Cage and his kind of oddball family. They're living on this sort of farm property. It's like in the boonies. It's about like 20 kilometers away or something from the closest town. They're all kind of mismanaged. The mom is a stock options person who is trying to deal with the terrible cell service. The dad is trying to make a living on the property without packas. He also was trying to cook, but he can't. There's the son who's, honestly he's the only regular person in this entire movie, I would say. Aside from maybe the little kid.  And then there's the daughter who is technically, I would say, the main character of this film and she's irritating. She's really irritating. The film starts off with a bang with a rock falling out of the sky. I will give credit where credit is due. The visuals of this movie, man, are pretty fricking good. They are trippy. Not from an hallucinogenic sort of way. I mean, just very visually appealing. The color in this film is something to behold. It's this kind of strange neon purple, pink sort of atmosphere, but it grows into other colors. And the title is very literal. It is sucking the color of everything around it and expanding it. It's blooming it. It's kind of like the whole morphing with the DNA of the land and the atmosphere, the color and the people. Kind of like what happened in Annihilation. That's happening in this film, but it's a bit more B horror movie sort of related, which is funny because it's not even that much of a B horror film except in certain instances.  Or in Nicholas Cage's case, he's just kind of going with emotions as he usually does. And the family starts to be terrorized by the events that are happening because of this meteorite. Shit is just getting way weird. All the while there's this geologist kind of guy who's checking out the water and he says shit's bad and he's pretty much the only regular person in here. And he's got to watch all this crazy stuff happening. Oh yeah, Tommy Chong's in the shack on their property too and he's just there. It kind of felt like that's how they pitched it to him. He's like, yeah, you'll be on set. Kind of. Sometimes you'll be there. Sometimes you won't need to be. What do I need to do? I don't know, just be you. Be high. That's essentially Chong's performance. And while the film doesn't have as much direction as you would kind of hope and you can kind of predict what's going to happen within the first about 10-15 minutes of the rock landing, there isn't so much development with these characters, just more so development, I guess you would say, as they devolve into madness. The aesthetics of the film are pleasing to the eyes every single time, whether it's the unbelievable amount of atmost that's used to kind of help contrast with the colors. The literal color, both physically done by set deck as well as visual effects. There's a lot of great cinematic shots in this film, both from kind of a peculiar, bizarro ideal to some pretty scary shots. There's two parts in the film in particular, mainly in the middle of the film that something happens to the mom and the youngest son. And from that point on, the movie just grips you and it, oh, it's weird. I know I've already said a few things about him, but you just got to kind of give it to Cage for just going off the rails, kind of making it feel like he did a little bit before certain takes. There's a part where he's in the car and he just starts swearing a mile a minute and just smashing the hood and the ceiling and whatnot. And there's a scene earlier where he's in an interview and he's, he sounds like a complete drunk heck and it's so funny. He's definitely the part that kind of keeps pulling you back into this, this is really weird, Cage was really weird. Oh, Cage, that's essentially the movie. It's a bizarre movie. For those of you who really like B horror movies, especially if you like B horror gore or prosthetic effects, you'll definitely get your, you'll definitely get your plenty full later on in the film. But again, going back to the characters, you don't care for any of them. You're watching the film to see what happens around them rather than what happens to them. For instance, what happens with the oldest son, his storyline just stops. It just stops at the dumbest point.  But otherwise, the film is enjoyable. It's very visually appealing. It has some pretty gnarly horror effects and it has some pretty cool visual sort of mind bending effects in the film. While it's definitely not a good film for its story, for how the film was put together aesthetically, I'll definitely give it props for that. So in the end, I'm going to give color out of space a four out of seven. Yeah, it's weird, but it's kind of good weird. That's what I could say about that. Anyways, guys, I hope you enjoyed this review. If you did, leave a like and if you're interested in more subscribe. Otherwise, see you guys next time. See any and all updates about the upcoming undergrads movie. Be sure to check out and like the bring back undergrads Facebook page. And with any luck, we'll see you guys soon.


So I don't fully know why, but I always film my videos with a white backdrop, which is the opposite wall in the studio. When I have this whole artsy-fartsy background that I've never utilized me. We're back with another unboxing. This particular box is full of things that I don't actually usually buy, and I don't usually promote or collect or I'm involved with in any way. This was from a lady who lives in Canada, so, you know, when those opportunities strike, I usually count because I like dealing in Canadian funds. Can I like purchase things from Canada because they come in two days? What is it? What could it possibly be? I mean, the title of the video essentially gives things away. This is a very difficult package to get through, taking away so much energy. Oh my gosh. Oh, I love it. It's got glitter on its tail. So cool. So so cool. So this is the Kroy Unicorn that Ryra released. So she has an additional unicorn horn and she has lots of glitter and sparkles in her mane. And so I am not a fantasy collector. I have yet to have a single fantasy model in my collection, let alone a unicorn. So this is definitely the first one. Kroy is one of my favorite Ryra molds ever in existence. I just love her. So I have a pretty good conga and this was one of the ones that I don't have. And I have spent time looking at her. I missed her on the Boxing Day sale. I've almost bought one a couple times. It's really cool looking and it's glittery and it's fun and I need, I need more fun. I just need to be able to buy stuff because like it's fun to me. And if anyone has seen the set in real life, she does in fact come with a child. The child is super ugly. I don't know what Ryra was thinking. Yikes! I want to name this horse Frog. It looks like a frog. I don't know. Ryra has this tendency of like releasing models for like nostalgia's sake and they're just not nice molds. This is one of them. It's just not a nice mold. And so it's the mom and baby set up and it's cute, right? But this mold just has no appeal to it. It's just lumpy and bumpy and I'm not sure how I feel. So my plan actually with this guy is I'm thinking I want to customize it into a donkey. It kind of has the proportions of a donkey already and would take just like full hair, body hair texturing and some long ears and a new muzzle and new eyes and I think he'd be really cute. So I think that's going to be my intention with him because he would have been so nice if they had just done it on like the new pony full would have been super cute. Normally that would be like a moment of tears and crying. So here's another unicorn. This is the Andalusian mare unicorn and she's kind of like a coppery bronze color and she's actually quite nice. She's not bad for what she is.  They've done a good job of her eyes making them nice. And I think this was like a collector's club special if my mom was taken. So she was like exclusive. The whole thing about this though is this horse was sold to me as a body so I paid 25 bucks for her. I'm sure that lady paid way more than that. She said she had a foie. I don't see the foie. But the main concern that we have here is that the horn is broken and glued back on several times. So we're just going to rip that right off, call it a day. So she is my second one that I have in the studio. I really like re-sculpting this mold. This was the mold I made into ghosts. I have plans of actually making my own horse out of one of these and I always have plans for this mold. I like it a lot. It has a lot of goodies. Eberol. You can't go wrong with an Eberol. This has been really fun. This is like firsts for me that I love this unicorn. I am really obsessed. I really like her. She's really pretty. So this has been DJB. Thank you so much for watching and happy fantasy collecting. The body shelf though. I wasn't allowed to buy more bodies until I customized one. That was the promise I made to myself. What could we attach this horn to? That's the real question. I should attach it to my Namae Pamo horse. Should I scrap Namae Pamo and make him into a unicorn? This is happening now. He's so spicy with his little horn. The world of the unicorn. Hello unicorn. How are you? Okay, that's enough. I'm so sorry. Okay, bye.


In this study, researchers compared two anesthetic methods, spinal anesthesia, SA, and monitored anesthesia care, MAC, for oocyte retrieval in in vitro fertilization, IVF. They found that both methods had similar success rates, but the SA method took less time than the MAC method. This article was authored by Hyun Joo Heo, Yee Yeol Kim, Ji Ha Lee, and others.


Oh boy. I'm gonna be in the doghouse. All right. Let's roll. Probably see you somewhere in Let's call it Iowa. We'll see you at Iowa. Oh, everybody We made it to Chicago crazy 15-hour car ride with the kiddos We crushed it we crushed it drove through the night and I actually feel pretty good right now and yes We're at sea level in humidity. I can't remember the last time I ran a sea level so I'm gonna go out get my run in and But I am watching the channel right now on a big screen and as a YouTube creator It's really beneficial to see the footage see what it looks like on a bigger TV And this is not the question of the day But if you watch the channel regularly on a TV, just let me know down in the comments because it's it's the future Frankly, right? It's just that's the the trend line of viewership on YouTube continues to go In the direction of big television screen, so it's good to see it back there working And yes the vlog published as we were driving this morning, okay I brought some shoes with me on the trip and we're here for a wedding by the way Which is tomorrow actually today when you're watching this and before I came out The hoka Rincon's had have 49 miles on them, so I missed it by one mile back in Denver So we're gonna take the Rincon's out for my full review Can't wait to tell you my thoughts on these guys But first I want to show you the shoes that I packed and I don't know how many I'll actually be able to be able to run in But alright, let's let's here we go. Well This is a little strange not being in the studio here in the hotel in Chicago and on that note I think Chicago is in a little bit of a heat wave right now I did zero filming on the run today. I frankly wasn't sure if I was gonna make it back alive I was dripping with sweat so bad And I had to run at one o'clock in the afternoon because the rest of the day is packed with family activities So anyway, it was insane So I didn't get any more b-roll shots of the Rincon for the full review Just want to let you know that it was insane But I will say this much because it was so hot and I was sweating so much The shoe did really well in hot temperatures as far as Keeping my feet fairly cool because of the breathability But I'm just gonna you know, I'm not afraid to go into detail here It also allowed I think it felt like it allowed the sweat of my feet to get out of the shoe I know that's a little more too much detail, but it so as far as a hot Daily training summer shoe the Rincon might work for you and I'll begin by saying the Rincon And yes, it is pronounced Rincon. I was corrected after the first impression. It's not Rincon. It's Rincon It's a road shoe from hoca Neutral and I'm gonna put it in the plush category for that midsole cushion not Moderate I believe hoca on their website has it in the moderate category This is pretty plush and we're gonna dive into the stack height right now 32 millimeter in the heel 27 in the forefoot 27 that's pretty high for a Road training shoe. Well, we'll get to that in a minute. Is it a row? Is it a training shoe or is it a racing shoe? And yes, I'll just say now keyword Versatility because I want to talk here in a minute about how I plan to use the Rincon moving forward But that creates a five millimeter drop from heel to toe that 32 and 27 Which is pretty much spot-on for where I like to be Maybe a little low, but who it that midsole is feeling really really nice But before we get to the midsole, let's talk about the weight of the Rincon. This is exciting everybody 7.7 ounces or 218 grams That's impressive and that's men size 9 and then on the screen right now That is my sizing in the weight. So we're looking at a really Lightweight training shoe from hoca. That's just impressive. Now. How do they pull that off? I think it is it's it's a combination of a couple things, but mostly it's this Single-layer mesh that again is very breathable very lightweight Nimble or I should say malleable is very malleable almost too much If you like a little more of a lockdown feel through the toe box and the midfoot You might want to double-check before buying this shoe because it is incredibly malleable, but I don't feel I didn't feel like my foot was slipping around too much because the upper is so lightweight and yes malleable just moving my fingers over it right now like there's nothing to it But it did anyway I wasn't swimming off the shoe or sliding off of the shoe and for that midsole on the hoca Rincon You're looking at a full compression EVA midsole with that met, you know what hoca is known for that meta rocker technology Basically, it's how they blow the foam into the shape that it is and if you want to visualize that think of a rocking chair out on Your front porch and how the rocker goes heel-to-toe Healed well it really goes heel-to-toe toe-to-heel, but think of that motion of heel-toe heel-toe And it's an early-stage meta rocker and the hoca is basically claiming that that allows you for better Acceleration and I'm not gonna argue against that. I would say I could accelerate real nice Off whether it's off the line or simply picking up the pace in the middle of the run So it was feeling pretty fast and we'll talk more about that in a minute But so far in this midsole. It's comfortable. It's cushioned and I'm not no it does not have pop Okay, pop is different, but it it it feels fast because it's lightweight and again I think that meta rocker feel if you can get your gate cycle and foot strike into the rhythm of that It felt nice it felt even today even though I didn't film today It fell in fact today I dropped down to about 6 30s for a couple miles and at 6 30 pace I was just cruising just good now. I'm at sea level so it felt real nice But that is the midsole on the hoca rink on so hoca is known for a very wide Platform or landing area. You can see it there, right? It's very wide I would say kind of the opposite of Nike and especially through the midfoot Nike is pretty narrow at least on the outsole Footprint and this this outsole is very very wide to allow for I guess they would probably claim a more stable ride And I'm not gonna argue against that and then they're placing this rubber in high impact area So this yellow on the bottom here and in the heel as well But I'm getting reports from folks out there like you who are saying that you not even at a hundred miles The outsole on their hoca rink cons is breaking down and I'm at 55 miles and I could not agree more I'm seeing abrasion. I'm seeing wear and tear. Nothing is like ripping off, but Well, no, that's not ripping off yet But I am seeing all only at 55 miles some pretty Significance breakdown on that outsole so I'll come back to that in a minute But just something to be aware of Yeah, yeah, but feels good I mean it feels nice on the ride as far as stability goes through that outsole for the fit I went true to size as far as the length from heel to toe were good there But I did post a photo on my Facebook page and of my foot inside the ring con and somebody noticed I didn't even notice but somebody noticed my pinky toe kind of poking out the side of the ring con Just a teeny tiny bit and I didn't feel I don't feel it on the runs But through this uh through the the forefoot through the toe box My pinky toe is sticking out just a little bit so something to be aware of if you have a really wide Uh a wide toe box or wide toes I keep that in mind through this upper it might be a little too narrow for you and for comfort with the hoca ring con Really comfortable comfortable upper comfortable midsole. We've already talked about that. However Major issue here hoca. Come on now. Give us a little more insole action.  Just add a quarter ounce of weight to your running shoes and give us a little more love and attention With this insole. So what I have done is gone out and purchased this Spenco cushion it's just this green cushion you can pick up at most running shoe shops And you just lay it underneath The uh the insole and slide it in just to give the shoe a little more cushion So that has helped a lot, but I'm just like hoca. What are you doing here? Give us a little more here with this so as far as comfort inside the cavity of the shoe It's struggling just a little bit because of this insole and for my positive and drawback or negative the positive Versatility and yes versatility is going to be the key word because I think you could go long run You could go tempo run you could go easy day run This shoe appears to be very very versatile I would feel very comfortable going on a long run going it's not it's not a threshold Okay, not it's a little too soft through the midsole for a threshold run, which is faster than a tempo run Uh, but for tempo easy, you know, and then if you just want to bop along This could do the trick for you and then the drawback has to be the durability Of the outsole and honestly probably even the upper I've had issues in the past with hoca with their uppers breaking down, especially through the toe box, but Okay, a little tip of the day for buying running shoes if you um If the shoe is is really lightweight, especially daily trainers It probably means you're going to be sacrificing a little bit of the durability Of the shoe because the materials are lighter, which oftentimes means they're going to break down a little quicker So keep that in mind and for that price 115 dollars. That's amazing. That's perfect I'd pay I'd go up to 125 on the ring con, but 115 I think is spot on I think it's a great value at that price and I'm going to go 7.75 for the score almost an eight I almost went eight, but I'm going to go which is a good score for me 7.75 out of 10 for the hoca ring con and the question of the day What has been your most versatile running shoe that you've ever owned? Can you think back? Maybe it was in the last 12 months. Maybe it was 10 years ago. I have a couple in mind. Actually, I'll just toss it out there I think the well Yeah, I think the beacon was is pretty versatile I tended to use it more for an easy day shoe But I know some folks that used it for long runs and even even racing marathons in the new balance beacon So anyway, what is what has been your most versatile running shoe of your life? I know that's a big open-ended question, but that'd be awesome if you could hit it up down below Thank you for being here in the makeshift studio here in chicago And we're off to dinner. Hopefully soon because i'm starving after that 15 mile or 15 hour drive And the run out in the crazy heat and humidity, but it is fun to be at sea level I must say and uh, I just love you guys like this the show. Yeah, I wish oh man, ah I'm just tired I just tired and I just wish I wish I could hang out with all the chicago runners is what i'm trying to say But this trip is really quick. I'm heading back to denver sunday night And so I got to focus on the fam and but I'll be back to chicago. Anyway, that's what I'm trying to say All right, you all are the best. See beauty work hard


The Nigerian Institution of Surveys Lagos State branch says it will continue to showcase its expertise to unlock the potential of the Lagos State blue economy through surveying innovations. It's chairman, Cola de Casim, stated dates at the institution's 38th annual general meeting and investor chart of the 15th chairman with the swearing-in themed, unlocking the potential of the Lagos State blue economy through surveying innovations. Casim also said the institution will help the Lagos State government boost tourism and enhance water transportation through a branch of surveying which deals with hydrography among other benefits to unlock the potential of the state's blue economy. The Lagos State water bodies, rivers, creeks and with these products governments can now decide all these places are navigable and it's a lot cheaper than building road rail infrastructure. The Lagos Lagos. Surveys have carried out numerous hydrographic work on that and then we know the areas that are deep, the areas that are shallow and the areas that need dredging. So these are things we can do for governments and we can even do more. Also a surveyor, Patricia Okerguley, said the theme of the program was aimed at educating Nigerians that surveyors have the human resources and their expertise to harness and unlock the potential to grow the economy of Lagos State for the benefits of all. Guest speaker at the event, Bankoli Falai, who commented the Lagos State government for its efforts at creating a co-Atlantic among others called on it to create a framework to regulate fishing, get involved in the activity and continue to boost tourism in order to generate more funds from blue economy. There is this misconception that we are land surveyors. We surveyors, we are surveyors without an adjective. Just as you have estate surveyors, building surveyors, but we are just surveyors because we don't only survey land. So this topic is educating the whole populace that we don't only survey land, we think going to the sea to survey the sea. Let's harness those opportunities hidden in the water. As we all know, blue economy has to do with how we can leverage the resources of the ocean to better man life to grow sustainably and responsibly to grow our economy. And surveying is very fundamental because we need data. Whatever you want to do around the blue economy, you need data. So surveying forms like underpins how the data are derived. Hydrography, we talk about all forms of survey using LiDAR, using remote sensing data analysis. Without data, it will be difficult to form the blue economy. You know the way the ocean is. We cannot really say landmarks in the ocean. You need position. You need to know where you are. You need to understand the behaviors of the ocean, whether there's going to be a squall. All those facts are data that the surveyors are responsible for. Will you get notified about fresh news updates?


Hello, I'm Godfrey from the Framework Core Team. Welcome to the second half of the keynote where I walk you through everything that happened this year and how it might affect you as an Ember developer. I'd like to begin with announcing some personnel changes to the core team. This is not the whole core team, by the way. Many years ago we used to be able to fit everyone on one slide, but we're way past that point now. You can find a full list of Ember core team members on the website, but for now this is what changed this year. I second Jared joined the learning team and Scott joined the Ember data team. Kniepolo as well as Matthew from the framework core team joined the steering committee and Meanwhile, Melanie is alumnizing from the learning team and steering committee to focus her duties on the framework team. Likewise, Tom is now a steering committee alumni, but is staying on the framework core team and Jen alumnates from the framework team to focus on the learning team responsibilities. Finally, Kratty and Alex from the CLI team as well as Shiva Kuma from the learning team have alumnus as well. On behalf of the community and the entire core team I would like to extend a warm welcome to all the new team members and a big thank you to the new to well a big thank you to the alumni for the continued contributions over the years. Okay, so this is all for the core team changes and We have a lot of ground to cover today, so I'm just gonna jump right in and talk about the changes in the framework Now as always a lot of the Work went into behind the scenes things like maintaining the framework and this year is no exception These bug fixes and small improvements don't usually got talked about as much as the big features But they are no less important in maintaining a healthy framework and a productive workflow for us developers So I would like to take a few moments to talk about some of them briefly The first the first set of changes are post release improvements to octane With the wide release of octane and more dosages in the wild there were some occasional bug reports for the new auto tracking system, especially in edge cases involving other legacy features and these in a amount of work went into debugging and fixing these issues and Putting in place a better infrastructure so we can provide More helpful information when errors do occur Also as of the current beta all built-in components like linked to an input have been completely rewritten using the new octane paradigms internally We also made a lot of improvements to the linter to the template linter in particular There's now a new to-do system that makes it easier to adopt new lint rules and migrate your code base gradually A lot of the new lint rules also have auto fixers that could apply suggestions automatically Outside the framework itself We also made a lot of quality of life improvements to the tools and workflows you use on a day-to-day basis Notably we integrated prettier into the default stack so we can stop worrying about formatting your code and Focus more on writing it and avoiding the subsequent bike shed with your team during code review There are also some improvements to accessibility this year the default blueprint now include the ember page title add-on which encourages you to provide meaningful and descriptive title for your pages and There's also a link flag to the ember new command which explicitly sets the human language for your apps content These changes together will help provide a better experience to users of screen readers and other assistive assistive technologies Finally we also made some internal changes to ember source package in the past when you install the ember source package from npm What you get is essentially a pre-built file that you can run directly in the browser as a script tag all the way down to 11 With this change the ember source package is now just lose ES modules without Being transpiled first for a particular browser and your app is responsible for building it according to your own browser target That you have configured There are a number of advantages to this For one thing even though the ember 3.x series officially supports down to i11 most of you probably don't care for it So by deferring the building of ember source to your apps own build pipeline You can skip transpiling those features like native classes if your browser targets otherwise support them natively This can result in some wins and bite size and even some performance improvements in some cases Another benefit is that we are now able to compile your templates differently depending on whether you're building for development or production This allows us to leave a lot more debug information in your template without worrying about inflating your final bundle size in production So all of these are just a few examples of what we worked on behind the scenes this year And I would like to thank everyone who were involved in making these awesome improvements to the framework Okay, so as much as it was a year for improvements. It was also a year of cleaning things up Here are some of the deprecations we landed into their framework this year And hopefully you won't actually run into that many of them in practice because a lot of them are Targeting very old legacy features that are rarely used these days Nevertheless, I won't go into too much details about them and you can read about the deprecations on the deprecation guide However, I would like to point out two things real quick number one We have deprecated the pre-octane configurations also known as the classic edition This means that after 4.0 all ember apps Using 4.0 and BELF will automatically be octane apps and the difference doesn't matter anymore and second the latest the the last batch of deprecations targeting 4.0 have landed into 3.27 which is currently in beta if everything goes according to plan then next release after that would be free 28 and that release will have no more additional deprecations for 4.0 and Six weeks after the release of free 28. We will release version 4.0 dropping support for IE 11 and among other things And You'll soon hear about more of the 4.0 plans on ember blog soon, but that's the gist of it Okay, so that's all for improvements and deprecations up next I would like to highlight three major areas that we worked on over the last year But before that let's go back to this slide from Embercon 2019 Here Tom was describing how when individual features are developed and released incrementally Things might actually start to feel incoherent for a while Over time the more of the as more of the companion features were are released and As the documentation tooling and ecosystem start to catch up Then things will start to really come together The idea of an addition is to get to declare that we have reached those peak moments of stability and big picture coherence and That the features are ready for community-wide adoption Now with Octane release last year. We are starting to work towards the next edition called Polaris And so naturally we find ourselves iterating toward that pit of incoherence again, which is Again perfectly normal As I walk through these new features just keep in mind that Just keep that in mind. It's not that the features themselves are particularly buggy But you might find that for example the guides and the ember inspector are lagging behind and covering these features And it might be a little bit hard to get answers on this court just because of how new these features are So with that in mind if you and your team are not prepared to be an early adopter That's totally okay. Just treat this part as a sneak peek in the future and when we're ready to wrap up the next edition I'm sure you'll hear about it from us again But on the other hand if you're eager to help shape the future of ember this is your time to shine as The features are still being designed and experimented on your early feedback are going to be really important in terms of influencing the direction that we are headed and If you're looking for opportunities to contribute, then there are no shortages of things of things that you can help with right now So with that out of the way, let's get to these highlights. It shouldn't be a Surprise, but the first thing on my lease the first thing on my list is embroider By now you've probably heard about it many times, but in case you skip the first part of the keynote Here is a quick summary Now historically the ember build pipeline looks something like this We take your app plus the add-ons you use plus ember itself Run it through your disc custom black box and end result is something that you can run in browser Basically a script tag that you can drop in Because the build pipeline in the middle is completely custom and because the apps and Your app and the add-ons you use can customize this build line This build pipeline in numerous ways over time ember apps became quite a couple to this particular build pipeline And it's almost impossible to swap it out with something else In the meantime the wider ecosystem have converged on some de facto standards around how Morton Javascript codes should be structured and published and A lot of Morton tools have been written That play nicely with each other as long as these ecosystem conventions are followed Now we could duplicate these efforts and Reimplement these tools and features inside our own build pot pipeline But a lot of these problems are pretty low-level and not particularly specific to ember apps And we would honestly much rather focus our energy on some somewhere else That's like more core to a mission as a framework This is where in broader comes into play it isn't really a single tool or as an end-to-end Replacement for our build pipeline, but rather it started as a holistic We think on how we can reorient ourselves into aligning better with the wider Javascript ecosystem Conventions so that we can let these existing tools do most of the heavy lifting for us And we can benefit from these shared efforts for free With that in mind and broader is a bridge that tries to take the collection of things that make up an ember app But instead of building it directly for the browser It just transformed them into the de facto standard that is understood by most of the morning tools and from there you can send up From there you can use any off-the-shelf tools such as webpack to finish the job Now in this example, I've shown using webpack to build for the browser Which is going to be the default when embroider is enabled for? For new ember apps however and broader itself is not dependent or coupled to webpack per se its job is just to build things into the standard format and in fact in the future as Browser start to implement native support for these standards like native support for loading ES modules You might not even need that final step and you might be able to just take that Standard output and run it in the browser directly without further processing On the other hand you are not limited to building for the browser either because the output of ember because the output of embroider is The de facto standard JavaScript code you can also take that and feed it into other tools that understand those conventions Such as a dependency analyzer or maybe a documentation generator As long as they follow the same ecosystem wide non ember specific conventions, it will work Now if you want to read more about how it actually works beyond this very high level of review I recommend checking out the read me on the embroider repository on github and Finally, I would like to give you a rough sense of where we are at With this initiative over the past year We have merged the RFC that underpins the whole project called the add-on v2 format We have also tested embroider compatibility layer against the number of open source and closed source ember apps And along the way we fix many issues that popped up in many popular community add-ons Starting in ember ceo i3 27 which again currently in beta There will be a command line flag for generating a new apps using the embroider blueprint at this point We are also nearly ready to release 1.0 of the ember of the embroider page itself If it all goes well, we might be able to make embroider the default for new apps starting as soon as ember ceo 328 which would be the release after this one Therefore if you're an add-on author, this would be a really good time to add embroider to your CI config and make sure And on can actually build On it without issues You can find instructions linked from the read me that I mentioned before and if you're eager to test building your app With embroider you can also find instructions in the read me as well at this stage The top priority is Compatibility and a seamless transition. So we're likely going to stick with the more conservative more compatible configurations however, as more of the add-on ecosystem have adjusted to comply with the stricter settings on embroider you will start to see more and more benefits and better results from optimizations such as tree shaking which remove the unused part of the dependencies from your final bundle So in summary, I think we're pretty much ready for prime time And it's a long time coming and I'm really excited about the future the future and locks for us Okay, that's all for embroider and up next on my list. I have a feature called name blocks for this Let let us look in examples in arrow Let's see your task with implementing this fancy drop-down component at work It's pretty similar to your standard HTML select element except it support richer HTML for the Options like you can have images and and stuff inside the drop-down menu So after staring at it for a while, this is what you came up with So let's walk through this together First you have a button on top that toggles opening and closing drop-down menu and then That's the markup for the drop-down menu itself The component takes an add items argument and there's a each loop to go through every item in the array It then renders each of them inside the drop-down menu and so that's how you get the results on the right This is all great the component works, but there's one problem Currently this drop-down component hardcodes the markup for the menu items Which means that it will only work for this exact Scenario like these exact objects and you cannot reuse this in another place where you want the menu items It looks slightly different. Perhaps you want the image on the right. Perhaps you want no images at all It will be great if this drop-down component does not have any opinion on that and Would be able to just render the items however you want at at that particular location Fortunately, you know exactly what to do here Now after this refactor the component now takes a block the block is called once in each iteration of the loop and The item in question is yielded to the component Uder to the block via Like be a block param Instead of hard coding how the item should be displayed inside a component the markup now lives on the caller side and inside the block now the component doesn't care what the items are anymore and You are free to display them however you want all it does is takes cares of the basic functionality of a drop-down menu and Deferred rest to the caller to customize using a block. This is pretty awesome So just when you are ready to celebrate and take an early lunch a challenger has appeared turns out it was your p.m It turned out that he spotted a problem Sometimes the list of items could be empty in which case he wanted you to render nice message with an explanation Instead of just rendering an empty drop-down seems pretty reasonable and in and of itself It's not that hard to implement in fact You can probably just implement it right away. You just need to add an else block to the each loop, right? That's pretty straightforward Now the problem is though this basically wrote back to work You did earlier to make the component reusable You see the component once again is hard-coded to this exact scenario Thanks to the markup in that else block if it were just a simple message Perhaps you can get away with taking it as an argument But since this requires some non-trivial HTML that doesn't really work. Oh, well, maybe you have a better idea after lunch Just be just when you're ready to take your lunch your p.m Pink you again and turns out he just had a meeting with another p.m And he showed off your work on the drop-down the other p.m Loved it and in fact, they loved it so much that they wanted to use the space above your drop-down to show an ad That's unfortunate, but oh well eat first think later lunch time So yeah You took your lunch break and you had a generous portion of mashed potatoes if that doesn't solve your problem Then probably nothing will Okay, back from lunch get stash start over just before the food coma kicked in you remember hearing about name blocks at the Ember conf keynote and The presenter told a story that was oddly similar to your situation right now. So you decide to check that out After looking at the documentation realized name blocks is the perfect solution to your problem It's like they were made for this exact purpose This is what you came up with Let's break it down first you define a name block for the ad called and call it the banner block and On the caller side you can pass the name block with the colon banner syntax It looks like a regulation element except it starts with a colon That's how you know it's a name block Inside the drop-down component you can use to this name block using the same yield syntax from earlier But with the additional to argument set to banner, which is the name of the block Down below you have the item block which is exactly the same content as before Just like before the block is still being called once per item and has access to the item in question as a block Param which is provided by the component by passing it to a yield keyword Finally you have a third block for the empty state so the component doesn't have to hard-code anything there as well Just like that you have learned to use the name blocks feature and in summary It's just like normal blocks you can yield and take block rams as with normal blocks and the only difference is that they can now there can be multiple blocks and Each identified with a unique name. So when yielding you would also have to specify the name of the block that you're yielding to If you're already used to how blocks work in Ember hopefully this would feel pretty Straightforward and feels like a natural extension to that paradigm Now that we're covered the basic use cases for the feature. Let me walk you through a cheat sheet for the feature First of all this feature is only available for anger bracket implications There is currently no name block syntax for curly invocations So if you want to use name blocks you have to use anger bracket Invocation for now at least Next while you can pass multiple blocks in the same Invocation as we saw in the early example each of them must have a unique name So you cannot pass the same block multiple times Also name blocks can only appear immediately inside an angle bracket component Invocation, so you cannot have a name block just chilling out at the top level And on the other hand if you're going to pass name blocks, you cannot also have other content inside the invocation tag Likewise because you can only have name blocks immediately inside a component tag you cannot pass name blocks conditionally however, you can make the content inside of name blocks conditional as shown on the left here on The flip side inside a component you can detect whether a particular block is passed to you using the has block keyword This allows you to make a name block optional for your consumers and provide some useful default content if the block is not passed We already saw this story earlier But just as a regular block your component can yield as many or as little block programs to a name block as you would like On the passing side you can name them whatever you want And they'll become local variables that are accessible within and only within the block Not that you should ever write the thing on the right But the anonymous block syntax that you're used to is actually a shorthand for the default name block So again, there's generally no reason to do it that way But knowing this might be useful in some tricky interrupt and backwards compatibility situation that you might run into Likewise the two blocks that you can pass with curly invocations is actually Correspond to the default and the else name blocks This might come into handy when there is a component that takes an else block But you otherwise want to use the angle bracket notation to invoke it so this allows you to do just that and Along the same lines on the yielding side the default use syntax is the same as explicitly yielding to the default block Again, there's no good reason to write it out like that But knowing this might help you design a backwards compatible component that can be used with or without the name blocks feature so that's all I have for the name blocks feature and We have already used started using this in a few places in our app at work And I would certainly have designed some of our components differently if this feature were available earlier Even though the feature is pretty simple to use it unlocks some pretty powerful patterns for components And I can't wait to see what the compete the add-on community comes up with Okay, so moving on the third and final feature. I want to highlight doesn't really have a name So let's just call it template value semantics for now It is definitely a more advanced set of features. So please bear with me So here I have a hypothetical form component library and a form implemented using that library on the screen The form component takes a block and use block param, which we named f Inside the block you have access to the form controls provided by the component using the f block param You can invoke them like f dot input f dot tax area tax area and so on You have probably seen something like this in an add-on before but maybe not everyone knows exactly how that is Implemented under hood. So let's take a look at that Now if you open up the source code of this components template, it will probably look something like this the block param it yielded is actually a hash and each item in the hash corresponds to One of the form controls that you have access to inside a form component It uses the component helper which allows you to refer to and look up a component in your app or your add-on by name In this case, it's the actual definition of the f dot tax area component We saw earlier actually lived in a file called my my form slash tax area In addition to letting you refer to a component by name the component helper also Serve a second purpose which is to allow you to pre configure the component by Pre-applying some arguments in this case. We specified an argument called form and assigned the value to you this That means whenever someone invokes the f dot tax area component It will automatically pass this extra argument to the component as if the caller had Specified it in the invocation tag even though they didn't This pattern that we're seeing here is called contextual components where you can use the component Keyword to gather a bunch of your components Pre-configure them and yield them up to the caller Usually these components you're yielding aren't meant to be used standalone and they only really make sense in a specific context In this case the form controls are only meant to be used inside the context of a form Component and that's why the pattern is called contextual components And by the way, even though the pattern is usually done by grouping all the related contextual components into a hash There's nothing intrinsically special or requires the hash keyword You could have done the same thing by yielding the contextual components as positional block params And as you can see this still works Without the hash keyword. However by yielding the component one by one The caller would have to remember to find all the block params in that exact order that you yielded them That's why usually it's better to yield a single object that has everything in their keyed by their appropriate names Still the hash keyword here is not special or Required you could have made a pojo in JavaScript and yielded that out instead and it would work all the same Okay, so since we just talked about name blocks You might notice that there are some superficial similarities between name blocks and contextual components in fact because we didn't have name blocks in the past until very recently at least Some of the roles that would have otherwise been more naturally filled by name blocks were sometimes historically implemented using Contextual components because we don't have anything else However now that we have both they actually serve pretty different purposes, and it's not like one is replacing the other On the one hand when using a name block design the component author has total control You can decide exactly when to call which of the blocks and you can call block Zero times 20 times completely up to you You can choose to pass additional data to the block in a form of block params And on the other hand when using a contextual component pattern You are giving the control to the caller of the component instead You can yield as many contextual components as you like, but there's no guarantee that the caller will call them at all or in any particular order so and also instead Instead of you passing data to a caller The caller will be passing data to your components instead by passing arguments In other words the component the difference is I called you versus you call me and In the drop-down example There can only be one banner for instance and it has to appear exactly at the top of the drop-down menu So it wouldn't really make sense for that to be a contextual components because otherwise you can Call it in any place and caught many times that wouldn't make any sense On the other hand in the form example You want the consumer to be able to design a form by mixing and matching your form controls arbitrarily in any Order or combination so the contextual component approach makes total sense there Okay, so even though it's pretty advanced Contextual components are actually a pretty old feature of ember dating back to ember 2.3 So why are we talking about this right now? Well until now you can only have contextual components But as of free 27 which again is currently in beta you can also have Contextual helpers and modifiers thanks to the new modifier and helper keywords This work exactly the same way as the component keyword by taking the name of the modifier or the helper as a string and Returning a value representing that modifier or helper As with components the most common thing you want to do of it is probably to yield them out in a contextual fashion But because it's just a regular value you can actually do whatever you want with that You can for example pass it to another Component as an argument if the component accepts a helper or modifier for one of its arguments and Just like the component keyword you can use the modifier and the helper keyword to Pre-configure things by pre applying certain arguments to them These arguments will then be baked into the value returned by the keyword so that when someone tries to invoke it later The modifier or the helper will automatically receive those extra arguments as if the caller had provided them Again, this works exactly the same way as the component keyword On the other hand, this is what it will look like to invoke one of these values Very similar to the example before This feature opens up the possibility for a completely new category of component composition patterns for example in the hypothetical form library, we can yield an Autoresize modifier that you can attach to any of the text input and have them automatically grow and shrink as the user types in them It can also yield a collection of helpers for declaring validation rules right inside the form template instead of having to do it in JavaScript and Yeah, contextual components are probably one of the most powerful template features in ember and when it became available it opened the floodgate of a lot of interesting component designs and I'm hoping that this will be the same and again. I'm really looking forward to seeing how you put this feature to use Okay, so that's pretty exciting, but that's not it in addition to the keywords to create a value referencing a component and modifier or helper we also Overhauled the rendering engine to accept them as values in a lot more places than it used to for example Here we imported a component a modifier and a helper from an add-on and we assigned them as class fields This allow us to access these imported values from within the template and if we try to invoke them This didn't use to work, but now it does everything just works as you would expect again all you did was importing a component or a helper or a modifier and If you have access to them in the template somehow then you can invoke them all the same as You can see in this case. You don't even need the Component keyword anymore or the helper keyword or a modifier keyword Of course, you can still choose to use those keywords to attach additional arguments to your imported values If that's what you want to do This works exactly as you would expect as well That opens up some pretty interesting possibilities for example You can define a helper function in the module scope of a component JavaScript file Attached to a class field and that allows you to create a truly private one-off helper Specific to this component without having to registering it and leaking it into the global namespace You can even dynamically create one-off modifiers that capture tracked instance it inside a getter and As always the getter will be automatically rerun and therefore returning a new modifier Replacing the old one whenever any of the tracks they changes These patterns are pretty powerful And I think they will open up a lot more use cases that are previously either very cumbersome or even impossible I know I've said this a bunch already, but I'm really looking forward to seeing what the next generation of ember add-ons will look like Before we close off on this topic. There's an elephant in the room that I need to address Going back to this example that we saw earlier It's pretty cool that you can do this I guess but having to import the values in your JavaScript and then make a class and then assign them to Fields just so you can have access to them inside a template that feels like a lot of boilerplate Especially when you otherwise wouldn't have needed a JavaScript class and like if you would have been able to get away with a template only component this seems like a Lot of work wouldn't it be great if you can just import those values and use them in the template directly Well good news Template imports allow you to do just that and it's exactly the depth the direction that we're iterating towards this example isn't work yet and This is probably not going to be the exact syntax that you would type in its final form anyway But it's a good enough stand-in to show the direction that we're headed towards The idea is that you would have to Import everything that you use in the template just like you would in JavaScript Instead of having everything magically become available in the global scope Well, this adds a little bit of a boilerplate. It makes it a lot easier And a lot clearer Where your components, water fires and helpers actually coming from not only will that help humans navigate? And unfamiliar ember code base. It will also make it easier for VS code and other ideas to provide Tools like autocomplete jump to definition that kind of stuff plus it will also help help embroider to see What you're actually using and not using in your app so we can remove any unneeded code from your final bundle in the tree shaking step The design for template import syntax haven't been finalized yet. So that's why the feature have not been implemented yet However, we're doing things a little bit differently this time instead of waiting to finalize the user level syntax We designed and implemented the underlying low-level primitive that is needed to provide the functionality That primitive have already landed in recent versions of ember. So thanks to that We are currently able to experiment with different syntax ideas in an add-on called ember template imports If your app is running on ember 325 or above You can install the add-on today and start getting a feel of what the future would look like or feel like One of the current design exploration is to see if we can find a good syntax for embedding the template into your JavaScript files directly And the template would have access to any Values that are available in the outer JavaScript scope This would make it much easier to do the one one off private helpers kind of thing that I showed earlier, but There are still a lot of open questions to answer. Would this be ergonomic? Is this going to feel awkward is it possible to get good syntax highlighting and edit the support and What should the file extension be for this kind of hybrid files? These questions would have been quite difficult to answer without being able to experiment with the feature hands-on and Thankfully the experimental add-on allows us to do just that As I said in the beginning we are approaching the pit of incoherence a lot of things are stone flux But that also means that right now you have a lot of influence on how these things shapes up in next edition So if you want to hear more about template imports There was a bonus contact on that topic yesterday, which should be available on YouTube soon follow Ember counter accounts or you'll miss it Okay, so that was it for the highlights and before we wrap up here are some of the new Primitives that we have landed in the past year Because these are primitives you're not expected to have to know about them and it's unlikely that you will Use them in your app directly. So I'm not gonna go through them However, if you're an add-on author or an experimenter These are the of C's to read for instance RC number for 96 Strict mode templates is the underlying primitive that was used by the template imports Experimental add-on that I showed earlier So with that said we also made some process changes this year Let's see RC 617 for instance revamped RC process itself with the goals of making the process more agile 649 aims to make the deprecation roll process more gradual and incremental 685 defined the browser support policy for Ember 4.0 onwards notably dropping at 11 The polyfills and the code mods are also now more of an official part of our process We have centralized github orgs for each and we strive to provide them like for any new features and deprecations have we released whenever possible The accessibility track team also graduated into the accessibility working group, which is a more like and they have a more permanent mandate You can thank them for spearheading the accessibility efforts such as the page title and length like Dimension in the beginning and they have more work in flight. So stay tuned for that Meanwhile, we have also formed a typescript strike team to shepherd the effort of official typescript support Right now you can already use typescript with Ember and it works pretty great. We use it at work. It's perfect It's great to community that are really good job supporting that effort, but by Making this more official. We hope to provide a more seamless and more stable experience for all the typescript users that Along the same lines that you would come to expect with the Ember project Finally with things like template imports on the horizon We would need to ramp up our tooling effort and to that end There's a new deaf Ember tooling channel on this court If you're excited about template imports for instance and want to help build a polished developer experience That would be a great place to start Finally that brings us to to my last point from testing out and broader From testing out and broader trying out Polaris features and providing early feedback for Off these helping build the tooling support for template imports to following by reports and answering questions on this court I hope I have inspired you to find some avenue to get involved in the community and Hopefully we'll be able to meet in person again soon enough, but until then enjoy your virtual Ember content experience and see you on this court Thank you


Let me give you a little introduction about Alex. So I wanted to have, when I started IOHK, a testing framework for cryptocurrency development. So what does that mean? It means that I have a modular, concise library that people could use to build their own cryptocurrencies or model networks or test a new consensus algorithm. So I did what all people do in the cryptocurrency space. I started with Bitcoin Talk, and I float around and look at all the threads. And I found this one really interesting project called ScoreX. And the selling point was that it was written in Scala, and it was a fully functional cryptocurrency. It was only about 4,000 lines of code. Now, for comparison, Bitcoin has about 100,000 lines of code. And I said, well, that's really interesting. So I read the code. I looked at it, and I said, that's really smart. But what got me really excited about ScoreX is that there was another repo unrelated to it where Alex had written a cockproof for the FLPN possibility theorem. Now, I don't know about you guys, but not many people do that as like a hobby on their spare time. It wasn't for a graduate project or anything, it was just something he did. So I said, OK, he's really smart. He's really special. So we called him up, and we've been working with Alex and his team ever since. And he's going to show off some cool things about ScoreX, which is another open-source project. All right, Alex. One-one. OK. Hi, everyone.  And my talk is about ScoreX, the modular blockchain framework engine. And I'm Alexander Chippornoi. I am working on very interesting things in IHK research now. Previously, I used to be an NXT co-developer and also participated in some projects around Bitcoin. And let's start to talk about ScoreX, and the first part is what is ScoreX in general. So let's start with use case. My idea is it's easier to understand why do you need for a tool when you have use case in mind. And ScoreX is essentially a tool, as I've seen it. So consider you have some paper written, or maybe some paper read, and you want to go from paper to code. Well, for example, you want to implement new concerns protocol, like new proof of work protocol, or proof of stake, or whatever. And you want to see it in action after maybe some very simple simulation. So you want to plug it into some system, and to run a test bet on, say, tens or hundreds of machines, and to get metrics, and to see how's it working in a real life like environment. Well, another idea you can going to be implemented is, say, another transaction language. So you want to have the existing proof of stake protocol, say, bitcoins, and then you want to change on the transactional part of blockchain system. Okay, so for me, there was a practical need. And so I started ScoreX with some use case in mind, actually. The use case was to see some proof of stake protocols in action to get some metrics of existing proof of stake protocols, namely NXT and a few others. Another thing I used to be, well, there were two guys of us made permacoin implementation, the first one open sourced permacoin implementation, probably. And so, well, there was a need to have permacoin consensus protocol implemented, and then to plug it into some system, and to see how things are working in a real life like environment. So what's the problem? Well, now we have use case, consider it, and what's the problem with an implementation? So the problem is, if you are going to play around Bitcoin reference implementation, so that's more than 80K lines of C++ code only, and probably more than 200,000 lines of code at all in different languages, so that they have Python, testing scripts, and C++ core, maybe somewhat else. In the same way, EthereumJ is more than 55K lines of Java code. I think Go implementation probably is about the same order of complexity. NXT is more than 40K lines of Java code, and there is another very big problem. So actually, if you are going to look to a code base of working cryptocurrency, so it's usually very messy, because code base is also inherited many active acts from, well, actual cryptocurrency history. The simplest case when developers have a choice to whether make a hard fork or to have a more messy code because of handling each case, so they are always choosing the latter. And so with time, the code is going to be more and more messy, because developers cannot deny working system, they cannot deny production life, cryptocurrencies. So summarizing the problem that is hard to locate, hard to swap functionalities to deserve ones, and so it is hard to make experiments, it is hard to make prototypes, it is pretty hard in practice to go to fast prototyping. And so here scorex is coming, in general, the idea is to find fast way to inject desirable functionality. And that implicitly at least means the design is going to be modular. So you are going only to a part, only to a model you want to change or you want to replace. We also have already a family of frameworks. So the first one externalized framework is script, which contains scala implementations of some cryptography primitives, well, wrappers for some well-known primitives implemented by other guys. I'll give some details later. And also we have some testnet application running at the moment. There are just few nodes in the network and you can join and you can see some things in action. Also everything is open sourced immediately. There is no any bit of code in some closet repository.  So everything is open. And also it has creative command zero license. So public domain license means you can do whatever you want with code base. There is no any restriction that that's the public domain. And it's maintained by IHK research. Well, it would be not fair to not to mention competitors. So I started in late 2014 and that was initially a weekend project. So I haven't thought it would become something bigger that time. And now I believe I was first with such an idea. Maybe. I hope so. And now there are some competitors. So the most interesting one is Intel's Sotus Lake. It's in GitHub. Also and the Intel corporation is describing it in the same way. So they are saying exactly the Intel Sotus Lake is a highly modular platform for building, deploying and running distributed ledgers. So the same idea. And a few more words about Intel's product before going into score details. So they have a modular design to basic kinds of models or consensus. They use term transaction family. There are some models implemented. Probably the most interesting one is proof of elapsed time. That's about leader election using trusted function to be run in trusted execution environment. Namely a cheap going with Intel SGX technology. They also have some S smart place implemented. And the language is Python. The license is Apache. Okay. So let's go back to score X and let me give some details on the score X. So the implementation language is Scala. Scala is functional language with strict static typing. And the Scala is targeted GVM platform, Java virtual machine. That means you can play with score X possibly with any GVM language. So Java, Closure, Scala, Kotlin, Groovy, Jython, which is Python for GVM. Or JRuby, which is Ruby for GVM. Or Fraggy, which is Haskell for GVM or whatever. And the development philosophy is around two points. So the first is to find a balance. So if we are going to implement some flexible design, well, it could be hard to understand if you are going to enter into it. On the other hand, simple code could be not flexible at all. So we need to find a balance and that's hard work. And we are doing everything possible to have somewhat good balance, to find proper notion of it. And another point is to give developer, which is going to implement prototype fast to give a maximum for free. And that's also a hard job. And let's take a look to design in general and let's think on how much it could be given out for free. So score X is about compact core, which is some functions you probably need in any blockchain system and also it is about some interfaces needed to be implemented. And core is intended to be always for free. Consensus model, it's doing exactly the job as you can imagine. So that's about to find a proper order of state updates of blocks. And you have to implement it if you're going to play with it or you can take ready if you're going to implement with other part of design. In the same way, transactional model is about transactional language and about notion of minimal state you need to hold in order to validate transactions. And in the same way, if you're going to play with it, you have to implement some interfaces or you can take ready if you are not going to play with it. So network protocols, P2P layer, that's partly for free, some basic things are for free, but you're also probably willing to extend network protocols and network layer is pluggable, so you just need to plug your own protocols in addition to these ones. The same for API. And having those parts implemented, you need to define application. Applications is just a wiring code for different models and application is really lean. I'll show you the example of complete application further. And well, wallets can fix there. Could be for free, but you can enhance them. Partly for free, let's assume that. So a model is part of an application which writes and reads certain parts of logs and also it's implemented some interface or some functions. We are going to take a closer look and before that, let me say about code quality. So we have as compact code as possible. Also hard task actually. And we are also having already pretty good test coverage, like 80% in combination with strict typing. That's pretty good. And we are also using continuous integration in order to avoid degradation to be apparent in repositories. So let's get started. We have some documentation. It's in the wiki of the repository in the GitHub. In order to install it on your machine, you need to have Java 8 SDK and for Scala, Scala build tool, SBT is recommended option. And we are going to implement on blockchain system. So here is the first example of dependencies we are going to input. So basics, scorex basics is about the core and scorex consensus is about two proof-of-stake consensus protocols to be set. So you need to set one of them in config, just one line of config. And scorex transaction is simplest transactions language. That's as simple as to transfer tokens from one public key to another. No inputs, no outputs. The simplest option. And in the same way, if you are going to use, for example, PIRMACO implementation instead of proof-of-stake, so you are changing the second line, so you are just importing another model. Then we are defining applications, so just some general settings and we are defining models. Simply. Then we are going to construct API. API is to be constructed from pieces in order to get UI for free. It will be shown later. That's it. And then we are also adding some network protocols. So here we are adding just protocol for exchanging unconfined transactions. You need to know transactional format. So it's not for free, so you need to implement that and just include it. And it will be wired automatically to other protocols. And that's all, yeah, that's the application. We can run and we are going to launch it. So we are just creating an instance and we are calling run method and now we have working full node. And we can communicate with full node already running with UI. Just go to browser and call port in settings settings. Default is 9085. And this UI is to be generated automatically. So you just need to wire paths in code and then you are getting this for free. So you can get new methods easily without thinking about design or whatever. In the same way you can add your settings here, default settings. So yeah, P2P port is 9084 and RPC port for UI is 9085. And in the same way we have implemented our testnet application called Lagonaki. It has permaco and implementation as consensus protocol and simplest transaction model. So exactly the tokens transfer from one public key to another. And you can launch it without installing anything but Docker. So just run Docker image. The image is on Docker Hub. You can run Debian package. You can install Debian package. Or you can go to run Lagonaki from sources by visiting another repository. And one enthusiast even has implemented block explorer for Lagonaki. So it's available at craptorivolution.me and that was made by enthusiast. So don't ask me about domain name. I don't have an idea. And here we see blocks, unconfined transaction pool and some general information. So yeah, and if you are going to run your own private network, so you have to set your own seats in config. So if you're going to change consensus protocol even, so just set it in Lagonaki.conf, just change the last line. So write instead of PIRMA, NXT or Quora. So there are three possible options. Okay, that's it. I'm not going to provide more details in order to be understandable in order to have compact presentation. And what's next? So current version is 127. We are going to another major release, 130. And that would be about flexible state model support. So now it's somewhat hard-coded to account-based. So we are going to implement very flexible solution to support both Bitcoin-like, so input outputs and Ethereum and NXT-like, so account-based models. Also, we are going to implement flexible signing schemes. For now, EDDSA 25519 is hard-coded in some places. And with 130 version to be implemented, we will implement another testnet called Tiergakia. We will have a new proof-of-work protocol, name it, roll chain, paper to be prepared around to be published. It will be Bitcoin-like transaction models, multiple inputs, multiple outputs, but more simplified language. So exactly about what was called generalized Schnur-proofs by Jan Kaminis yesterday. Well, and we also will have implemented improved difficulty adjustment and some more features interesting to play with, and white paper is to be published in coming weeks, I hope. And now about script. So script at the moment is implementation of encoding functions and also scalar wrappers for Java implementations of some hash functions including modern ones like Blake 2 or K-Chuck. And also it is about scalar wrapper 425519 signature scheme implementation from whisper system, which is being used in signal messenger on millions of Android devices around the globe. So we are not going to implement primitives by on. That's better to have. That's going to use well-known implementations. And we are going to add support for authenticated data structures. So local trees are already implemented, and now we are working on authenticated skip lists, and it will be in next major release. And it will be possible to change with just one line of code from in-memory persistence to disk persistence, and it will be well about efficient implementation also. So if you need for some persistent authenticated data structure on memory and efficient, so you can take a look to an upcoming release of script. And we are also willing to coordinate with enthusiasts around the globe, so let's have fun together. So we are willing to see contributions in the first place. If you are in code, you can write comments and send pull requests with just comments. If they are reasonable, they will be included. Then you can go to implement some to-dos. We have some of them in code. Just search for to-dos string. They are easy, so it's better to start with them. We also would be happy to see documentation in form of blog posts, articles, pages to be read, and send us. And bugs, always please report bugs found, and we would be happy to see bugs found. We will fix them as soon as possible. And you can also participate in bug fixing. That would be awesome. And if you want to implement somewhat more global, so you can, for example, use BitcoinJ classes in order to implement Bitcoin UDEX model and the Bitcoin scripts as Corex model. So wrapping BitcoinJ functionalities in some way. In the same way, it would be good to see Ethereum virtual machine implementation. Again, Ethereum J classes could be reused, I guess. And please reach us. So we have mail list, and we are reachable. We are GitHub, and you can write directly to us. So better write to me in the first place. I'm Corex director. You can write my email in our team directory. So that's basically all, dear audience. And I would be happy to hear your questions, feedback, proposals, and whatever you would like to say to me. Yeah, Thomas. Yeah, it's available. Oh, for testing, we are not using big files. And here is the problem, you know, when you are having a file like stated in paper, like 200 terabytes, you also need to build a miracle tree on top of that. And that's about a huge consumption of resources. So on paper, that looks promising, but if you are going to use really huge datasets, so we need also to handle many issues in terms of storage and computation. So for now, we are having a very compact dataset just in order to check something. Oh, sure, sure, sure. And by the way, we have no any responsibility for the code. So, yeah, don't use it in order to launch cryptocurrency or use it, but we have no any responsibility. And that's stated in the CC0 license. Yeah, that's not intended to launch production systems at all at the moment. Just proof of concepts, right? Yeah, Jan? So that sounds like something that really useful for universities to teach people about the protocols, right? Yeah, I hope so. Do we have any partnerships with universities yet with storage or work? So yeah, anyone is interested? You have one, right? Sorry? So if universities are interested in using storage... Well, we have some talks on that. So maybe wish you all about that as well, right? So maybe wish you all about that as well. Oh, yeah, yeah, yeah. And I would be happy, in fact, to help the academic community because, you know, I'm reading papers for breakfast and I'm thinking how to have the most flexible design possible to have every paper implementable on top of Scorax, actually. Well, sometimes that's not possible but in most cases I guess that's possible with minimal changes and maybe with no changes in the core at all. So that's all. All right, guys. Thank you so much for the breakout session. A couple more words about Scorax. We're accepting pull requests. It's an open-source framework. Anybody can use it. Anybody can contribute to it. We'll be hiring more developers over the summer to work on it full-time. We're also looking for interns and other people who may be interested on particular things. If you are an academic researcher, if you have an idea and you'd like to create a module or perhaps use this in your research, feel free. The license lets you do it. No charge, no royalties, no nothing. All I ask is you let us know so we actually can put you on the project page and get people interested in your particular project. The other thing is that we've tried to keep the code as concise as possible. Alex, how many lines of code are you up to for Scorax? You still here, Alex? Alex, run away. Oh, there he is. How many lines of code are we up to in the repo total? For Scorax. How many lines of code are we up to? So core now is about 3,700. It goes down. So it goes down. So initially that was monolithic system of 4,000 bytes of code and now core is more compact, but some more modules to implement it around that. Yeah, so Bitcoin has about 100,000 and so now we're down to four and one of the reasons why we wanted to keep it so concise is we thought if you were a professor and you wanted to teach a class, wink, wink, about cryptocurrencies, this would be a wonderful framework for you to use with your students because it's easy for them to actually go through the whole thing in a week or two weeks trying to understand the spaghetti code of ball that is of code that is Bitcoin core. All right, if there are no more questions, comments, concerns, issues yelling at us, thank you all for coming so much and it's been IOHK's absolute pleasure to be here and to present and also to sponsor this conference. We really love the opportunity and we're going to love to come back if we can. Thank you. Thank you.