There's Tomas. Hey Tomas good to see you. Yeah, good to see you too. So webforms migrating To that network. That's exciting Yeah, everybody who has a webforms app is going to want to do this. Yeah, so you've got a really good topic here. Oh Thank you. So greetings everyone. I'm greeting you from Prague Czech Republic. My name is Thomas Herzeg I'm Microsoft MVP and CEO of Fraganti and I will show you one of the possible migration paths for ASP.net webforms application And how to get it to dotnet core First I would have to say that it's not a magic wizard or any other tool that you would magically run and it would Spit out working Application in dotnet core. Yeah from the from the webforms one it to will require some significant amount of work But it should be much easier than to rewrite the entire application from scratch That's why I have to without rewriting everything in the title. You will have to rewrite something but Hopefully we won't do a full rewrite Okay, so Every version of dotnet core has been filling some gaps of what was what was what was possible in a Dotnet framework and what's now possible in dotnet core and with dotnet core 3.0 we can do desktop applications in WinForms and WPF and we can also use entity framework 6 Which is also very popular and very widely used But there are some gaps that will probably never be filled For example ASP.net webforms, which won't be ported to dotnet core in the future, so You can you have basically two options you can keep running on dotnet framework, which is here, which will Be supported forever set Scott Hunter said forever but of course If you want to take advantage of some new things in dotnet core and there is plenty of Improvements for example the new project system the new get handling. It's much better in dotnet core projects than in old dotnet framework ones or some runtime improvements performance then dotnet core may have a lot of benefits for you and Maybe you will want to get away from webforms with the Small effort, so just replace webforms with something else to be able to run in dotnet core I have seen a lot of webforms applications that are more than 10 years old actually Some of them were started when dotnet framework 1.0 was here So it's almost 20 years old and one of the common Anti-patterns that can be found in a lot of webforms apps is the mixing of the business logic with the UI Manipulation, so we have a button underscore click method in your code behind and you are communicating with the database and also manipulating the UI which makes difficult to Replace the UI framework with some other technology, but still with a small bit of refactoring it can be possible and A lot of these applications. They are not perfect, but they are there and a lot of companies rely on them They are still used. They still need to be maintained. They still need some bug fixes and adding new features As the world evolves So it's not very easy to just throw them away and start building them from scratch And I have also done a consulting and help to other companies which were using webforms and I have found that a lot of teams Didn't had the new modern web skills because they are still working with quite old Technologies and they didn't have time to learn JavaScript and not only the language Which is quite a little which is easy to learn But all the ecosystem around JavaScript webpack and PM and all those tools there it and if you Look what do you need to know if you want to develop in the react or in Angular? It's quite a huge amount of knowledge that you need to adopt before you can effectively work in these technologies So there is the fundamental question if you want to rewrite the application from scratch Or if you want to try to modernize it and it's not only a technical decision It's also a business decision because there may be might be some constraints about budgets. I have often saw that Rewriting means that you need a second team that will be doing the new application Why while the current team is working on the old one? So it may not be viable to double the capacity of the project and keep it for Few years until the entire application is rewritten. So the modernization can be away It can take a few weeks. It can take a few months, but One of the advantages is that typically this modernization can be done by the team that already exists and knows all The business logic and knows the problem domain. So What would be the goals for the modernization? I think that the it's pretty obvious since Many things in dotnet core are same as the in the dotnet framework You can use entity framework 6 for example with the net core 3.0 So the only remaining piece in many web forms applications will be just the web forms and the system dot web So basically we need to replace everything which depends on system web with some other UI technology or library framework It can be anything there are plenty of choices But of course we would like to keep as most of the business logic as is because if you start refactoring and redoing also the business logic, then you are Revwriting almost everything. So if it's possible to keep most of the business logic as is it would be great and also what we are looking for is an incremental way of modernization because You need to still take care of the old application. You need to fix bugs and deploy it to production so we are looking for a method that can be done simultaneously with the Current development works on the project and after we replace web forms with something else There should be nothing that would prevent us from just going to dotnet core because most of the libraries We will be using will probably be Supported also on dotnet core. Thanks to dotnet standard So which UI framework? It's a difficult choice because there is plenty of really good and viable options If you are familiar with JavaScript and things around it, you may use Angular You may use react if you are adventurous enough to try a new technology. You can use blazer But all these technologies means that you will need your business logic Exposed to the client because the code is actually running on the client side So you here I have to take your business logic and build a rest API or some other kind of API in front of it and it may not be as easy As it seems because in many cases it won't be one-to-one The rest API may look a little bit differently than the current business logic because it's not a problem if the code behind Does 20 queries to the SQL database? But it can be a problem if the client side application would shoe 20 HTTP requests, which could be sequential because there would be some performance issues So you will need to redesign the rest API to better fit the user interface Because there will be a lot of round trips for every rest API call. So One of the options that can be used is a framework, which is called dotvvm and it's open source It's the name suggests it's using model view view model approach and it's a proud member of dotnet foundation it's developed on github and One of the advantages of this framework is that you don't need to expose your business logic as a rest API Because the view models are C sharp classes, which are running on the server and you see the database from the server So you can just use entity framework to get your data and you don't need to build rest API endpoints and making sure everything is running So this will help you to keep most of the business logic unchanged So it can mean less effort for the modernization and dotvm supports both dotnet framework and dotnet core So you can install it in existing web forms application and start migrating page after another page and after you are finished you can just switch to dotnet core because dotvvm is supported on both platforms and as a web forms developers you will be it will be very easy for you to learn dotvvm because it's it's it was founded more than five years ago and it was Inspired by web forms and it successfully got rid of all the hated things on web forms like the view state or unpredictable HTML that was rendered so dotvvm had solved these issues using knockout.js and other JavaScript libraries But most of the things can be done without the knowledge of JavaScript If you know JavaScript it will help you But if you don't know it you can just use HTML and C-Sharp and you will be able to work with dotvvm so the plan for the modernization will be Quite simple, but it can take a few weeks or months on a real-world existing project But first you need to install dotvvm NuGet packages in the project There are two of them and then until you get rid of all the web forms Pages you can just take some ASPx page rewrite it in in dotvvm syntax for the views it's similar It's but it's not the same and most importantly you will need to refactor the code behind files into view models It's also C-Sharp class. So Basically, you can just copy paste some code and change it So you won't manipulate the text boxes and other controls in the user interface But you will use data binding instead of that As a side effect you will get a view models which are testable So it can improve also the testability of your application And if your business logic is Mixed with the UI manipulation code This is also an opportunity to separate those things So you will end with a proper business layer as it should be done And after you get rid of web forms you can just change your CS approach to run on dotnet core If you want to see the differences between dotvvm and web forms syntax There is a page dotvvm.com web forms. I have it Here and there are the differences There is a code sample in web forms and code sample in dotvvm So as you can see we don't have the form element around the entire page in dotvvm We don't have run at server. You don't need To specify IDs on the controls. We don't have view state instead We have view models and so on and so on. So this is the cheat sheet Where you will see the differences, but the fundamental concepts are pretty similar as you will see later in the demo So enough talking. Let's get to some code. So I have a Simple web forms application. I have it already Running so it's basically Starter template for web forms. There are two pages the about and the home page and on the home page I have a list of a grid view with customers and I'm using entity framework 6 which is connected to my local SQL database. I can do sorting But as you can see it makes because it's web forms. It makes a full post back So I have to scroll all the time But I have also a paging. So it's web forms and There is the model folder, which I won't touch during the migration It's very simple, but let's assume that this is my business layer. So I'm not touching this I don't want to do anything in this. I just want to change the presentation Framework for something else. So here is the master page And I have two pages. One of them have grid view. The about page is very simple. Just few lines of text I have already done the first step I have installed two NuGet packages in the project. The first is .vvm.o-win and o-win is Just a pipeline which can be run on top of classic ASP.net And I also have Microsoft o-win host system web Which is important because it makes the side-by-side run of the o-win pipeline In which .vvm can run and the classic pipeline of the ASP.net web forms And it will basically put the o-win pipeline in front of the web forms So when the server gets the HTTP request, it will go first to the o-win pipeline And if .vvm can handle it, it will do all the things and if not, it will fall back to the original ASP.net pipeline so web forms can take care of the requests So I can just look at my routing code For example, I have the about page which is on the URL slash about and When .vvm will handle this request, it won't never get to the web forms So I can just create the about page in .vvm and keep this page running in web forms And it will still work and if the application would use authentication The Microsoft o-win host system web will make sure that the same user identity will be shared between the o-win Pipeline and the web forms pipeline So no matter if you will do the authentication from the o-win part or from the web forms part You will have basically the single sign on both technologies will see the same user the same roles and everything So the integration is done quite easily and the rest of the NuGet packages There are just the dependencies of one of those packages. I have installed I also have entity framework here and there are some default packages like jQuery .vm doesn't need it, but it was in the project template So some of the packages also come from the project template. Okay So I have also created the startup class for o-win Yeah, because o-win needs a one class which will be executed at the startup of the application and I'm configuring .vvm So I'm saying register .vvm middleware in the o-win pipeline and I'm pointing it to .vvm startup Which is a file that contains all the configuration of .vvm the routes user controls resources and other other stuff and Basically, that's it. Now I can create two folders. The first one is called views Oh, sorry, I have it already in the file system, but it's not included in project So I will have to just include it Okay, there I'm did it's correct and it's just a convention You can have .vm pages everywhere, but I'm just following this convention and the first thing We will need to do is to create a master page and I want my users Don't recognize that the the site is running on two different technologies So I need to make the master page looking exactly the same So I will use the same structure and I will use the same CSS. So let's do it I will add new item and If you install .vvm for visual studio, it's the extension that can be downloaded for free for from .vvm.com You will get item templates for .vvm pages. So I can create a master page I'm calling it site and It can create a view model for me automatically. So I have This page which is in .vvm syntax and this view model which is right now It's just a C sharp class nothing special. So I can create the same master page So let's copy everything from the webforms one except of this first directive So let's copy everything and let's paste it here and As I said, there are a few changes in the syntax. So we don't have the run at server So I can replace it for just empty string. Let's go. I don't need the form in my page because .vvm uses Ajax for all the communication with the server So nothing really special here and the extension also tells me that ASP content placeholder is not available in .vvm But the concept of master pages is same as in webforms So I just change the prefix to dot and we have the .vvm master page ready to go There is so one interesting thing that we have also support single page apps So if I use SP a content placeholder Instead of content placeholder, I would have single page app. You can try this Also, there is one important thing in webforms I have used this expression to just print out the title of the page in dot vvm I have to persist my state in the view model So I can I can put the title property in the vmodel and just create a data binding which would Which would reference this property from the vmodel. I can just have it created and If I press F12 Okay Here it is. I can change it to string and because in webforms, I often struggled with that I Forgot to set the title because when you create webforms page, this title is empty So all my pages didn't have title and in dot vvm you can make this class abstract because it's master page view model and this will basically require all the Specific pages which are using the master page. They will have to provide the title. So I have compile time check of Whether the title is present in the page or not So I'm binding to a view model property Okay, and at the bottom there was I'm printing the datetime now year and There is actually no reason to have this in the view model So I will use a different kind of binding which is called resource and Basically, this will just evaluate the C sharp expression placed here and just print it out in the output So now I have the master page for dot vvm and it will use the same styles So it will look exactly the same as in webforms. Now, let's create a normal page and I will be migrating the about page first So this is it. Let's create a view model automatically and also let's use the master page So I will just select the master page from the list and now I have my about view model and Because it's the abstract class. It requires me to provide the title. So about and If I look in the webforms page, I can just copy paste this into my dot vvm page And also I have to change the data binding Okay, so here we go and the last thing is I need to register the route for my dot vvm page So in the dot vvm startup, I say config route table add Name of the route is about The route URL will be about so it has to be the same as in webforms and the path is views slash about dot html and That's it if you after you migrate this project to dotnet core if you plan to Run it on linux, which is possible Make sure that the casing in this path is Exactly the same as in the file names because the paths in the file system on linux are case sensitive Yeah, so and also it's safer to use forward slashes both of them will work on windows But on linux, it's better to use this one. Okay, so let's let's run it I hope that I haven't forgot anything but right now We should have the same looking application The first the default page it's is still in webforms because we haven't registered route for that in dot vvm So this is still webforms as you can see it's doing full postbacks I have to scroll down after every action But if I click about it takes a little bit longer because the first request to dot vvm needs to make sure everything is started but if you look now the refresh it's Very fast and if you look here, there is no view state I'm now running this page in dot vvm, but the rest of the application which is still in webforms It works exactly the same. So this is the way how you can migrate one page after another And after you get rid of all webform stuff, you will be able to go to dotnet core Let's advance in time for a little bit I have also rewrited the default page. So I have it Completed here. So let's look how I worked with the grid view in webforms very quickly So I have I have been using the model binding So in my code behind there is function called my grid get data and I have specified some columns and Sort expressions and things like that Here I was just creating a new data context for Entity framework and in this my grid get data I need to specify all these parameters to make sure that sorting and paging will run and Webforms will find those parameters and fill the correct Values in them. So I'm just counting the total number of customers and then I'm just returning customers I have sorting and paging right here. And of course you should dispose your DB context Because we want to do the good things Okay, so this is very easy And if you look how the grid view looks in dot VVM, you will see that we have a similar control So it's dot grid view. We have a data source Which is pointing to a customer's collection in my view model I will show it in a minute and there are specification of the columns and also it's very similar We also have the template column so we can put anything in in the in the table And also we have a data pager control which is bound to the same collection and it will just render the pagination and in the view model it's Quite nice because I can use dependency injection so in the constructor of the view model you can request any services you will need and I have a property called customers in my view model and It's of type grid view data set. It could be just a list But a list is just a plain collection without sorting and paging grid view data set is a class which ships with dot VVM and It's basically a list of customers with some metadata for paging and sorting So I have the page size you can set also the page index And this is where the current page index is persisted in the view model and the sort expression So it means which column I am using for sorting and if you want to load data in the grid view data set And if you have I queryable, it's very simple because you can just say customers load from for a load from queryable And it will handle the sorting and paging automatically So we don't need to use order by and skip and take just pass I queryable and you are done If you are not using entity framework, you can work with the data set manually So you can just say items equals and put there a collection of the rows for the current page And you can look at the sorting options to sort expression or to paging options to know What's your page index? So if you are using plain SQL, you can you can just fill the collection in the grid view data set automatically manually using the C sharp code and these controls can work with the data set So if you change something in the pager, it will just set the new page index and it will indicate the refresh is required So when dot VVM will call the prerender function, it will load the new data for the page So that's it. This is my default page and when I when I run it You will see that it looks the same, but it's now in dot VVM So I have successfully get rid of all webforms stuff in my application and The first request takes a long time because entity framework six is Initializing and also the SP net pipeline. It's still there. It's not used anymore, but it's still there and Now I the paging looks a little bit differently because the controls are not exactly the same but they're very similar, but it should work and all the requests are done by edgex So when I am changing the sort order, I don't need to scroll to the top of the page If you look in the page source, there is no view state We just have the view model which is serialized and sent together with the page So that's it. Now. I have all parts of my application in dot VVM So there are no SPX pages. The only relict is this global ASIX where I'm just configuring the entity framework So I will need to move this elsewhere, but all other things There is nothing that would depend on system web. So you can just unload the project and basically Remove almost everything which is in the CS approach. Yeah, so it's as you can see it's very long But I have already done it. So as you can see now, you can just add netcore app 3.0 and I'm now using dot VVM dot ASP netcore So I have to change the NuGet package from dot VVM.OIN to dot VVM ASP netcore And I am using 2.4 which already supports dot netcore 3.0 If you will use the 2.3 you will have to be on dot netcore 2.2 But the 2.4 supports dot netcore 3.0. So that's it And I'm still using entity framework 6.3 which is also supported on dot netcore 3.0 And the views and view models are exactly the same. I have not touched anything here I haven't also touched anything in my business layer or Something like business layer because it's very trivial and the only change is in the startup file Where I have moved the line from the global ASAX I also need to configure the DB provider factory because it was done in web config In the previous project, but now on dot netcore we don't have web config and I'm just registering dot VVM In and the startup class and here in the configuring pipeline I'm just adding the dot VVM middleware and that's it. So Basically, I have replaced only the pages with pages done in another technology It's conceptually similar to web forms So it will be very easy to adopt and learn dot VVM for every web forms developer Because most of the controls are very similar or and they are even using the same names of the properties and You can do this migration over a few months and you can deploy the application at any time because These technologies can coexist together in one application So I have the last slide here just a link to our github repository we will be very glad for any feedback and If you go to dot VVM dot com slash modernize there are more information and the link to github repository with the project I have been just showing Make sure you will see all those branches because in every branch there is each step of the migration So the first branch is just plain web forms application. This is how it looks after you install dot VVM This is when the migration is in process. So some pages are migrated some are not This is how it looks like when the migration is complete and this is just a switch to the dotnet core So make sure you will visit all the branches to see all the steps in this process And of course we will be happy for any feedback and if you have any questions I would be happy to help you and wish you pleasant migration experience All right, Tomas. Thank you so much You know what it is it's a nice ramp It's a nice bridge for those web forms developers to get to dotnet core and still have a Application that looks very similar to where they started Yeah, we have been using this for a couple of our customers Mostly the banks and other institutions. So we have ported applications with hundreds of web forms pages and It wasn't easy still you had to rewrite a lot of things and the refactor the code behinds into view models but it was also an opportunity to make the application much more maintainable because The view models are testable so you can write integration tests for them And also you can do a smaller factoring of the of the business logic But still there's so much of it that you don't want to refactor or redo it From scratch. So it was a great method and it proved. Well if with some of our customers Well, thank you Tomas. It's been great having you here as part of dotnet conf and we'll see you next time. All right Thank you very much. See you. All right. Bye You


Hey everybody, welcome back to the channel. Today I'm going to be doing a quick comparison of i3 and DWM. Now, really, these two window managers have very little in common other than they're both tiling window managers. Outside of that, they're both coded differently. They're both built differently. They're both, you know, compiled differently. They're both, you know, have different features out of the box and they both tiled differently.  Some of them are, you know, more awesome than others. And you've probably seen a DWM rice here or there, or you've watched a video of somebody using DWM or using i3 and you're like, that's really cool. I want to try them, but I don't know which one to choose. And that's what I thought I'd talk about today. So we're going to start with i3. Now this is i3. This is not what i3 looks like out of the box.  That's all you'll get. As long as you've installed all the dependencies, it's possible that if you haven't installed all the dependencies, you won't even get a bar. But let's just say you've obviously installed it correctly. And you have a black screen and a bar. This is something that you could do fairly easily. This is poly bar. This is just a wallpaper set with nitrogen. It's very easy. Now, my configuration is quite different than what you'd see out of the box. Out of the box, you're going to see a configuration file that's probably about 200 to 250 lines long. If you've started with a i3 that comes from Oracle Linux, you'll probably see when it's about 1000 lines long because it has tons and tons of stuff in there. Mine is 100 lines long. And really, I could get rid of this last line and go back to 97 98 lines long. I don't really need that syntax highlighting because it doesn't actually work. But mine is different because it has hardly any of the key bindings located inside it. It's all my key bindings are in a program called sxhkd. And that's unusual for i3 sxhkd actually is a thing that you use with BSPWM, not i3. But this is just the way I've set it up. But for i3 itself, you'll have a configuration file that's like said around 250 lines long. And it will have you'll probably start off something like set mod for as the mod key. And it may have a few, a few lines of code that will define where your monitors are and where the workspaces are supposed to go. The default one probably doesn't have that but it will list the amount of workspaces you'll have you probably start off with 10. I have 19 because I need as many as possible. And then I'll have a few modes and stuff. So modes are something that I'll talk about here in a few minutes. Now, the first thing you need to know about i3 is that it's a manual Tyler. And basically what that means is that you get to decide when and obviously you get to decide when but you get to decide where the next window pops up when it's spawned. So by default, this is how windows are spawned. They'll just keep going to infinity and beyond in that direction until you've changed it. So we just quit those because that's way too many terminals and you know whatever. But let's say I wanted to spawn a window somewhere else. So in this case, I want to spawn it below this active window on the right hand side. I can press a key binding and press enter. And we'll get a window in a different position. And I can go back to a different key binding in this case control H. And I get to decide where that next window is spawned. This is called a manual Tyler. And it's one of the key differences between i3 and DWM. And DWM as I'll show you in a few minutes, you'll see that DWM chooses where the next window is spawned all the time. Now DWM has different layouts and stuff. So you can kind of choose where stuff is spawned. But it's always a set tree. Whereas with a manual Tyler like i3, you're always in control of where your windows spawn. And it's always controlled with a key binding. So we'll just close that out. The last thing I really want to talk about is the way that it's configured. So if we just look at this configuration file, you'll see that this is not a known programming language. This is just usually what we consider this is a user safe syntax. Basically, what that means is that it's written in such a way that it's user friendly. So it works. I mean, you can read this and pretty much know what it's doing. So it's set right here is setting a variable first monitor and it's setting it as display port one so that it and set second monitor and the HDMI one. So then this calls the variables that it just set. So it's very in some ways it's bash like but it's not it's even more friendly than bash because it's just workspace one output first monitor. It's literally user friendly. So when we look at the DWM one later, you'll notice a lot of differences because DWM is coded in C. And the configuration file is done in C, whereas i3 is written in whatever it's written in, I don't know. And it's probably Python. I mean, everything's written in Python, right? But it doesn't really matter. The configuration file is not written in the same language that it's coded it that i3 is coded as so that's a one of another key difference. Now, I wanted to take a moment before I leave i3 and talk about modes, because modes is something that DWM does not have. And it's actually I'm pretty sure modes is basically unique to i3. I don't can't think of another at least popular window manager that also has modes. I'm trying to think of one I don't think that there is one but I could be wrong if if you know one you can leave it in the comments below. But basically what modes are is it adds an extra layer to your key binding system to control certain actions of the window manager. So it's kind of like if you're in emacs, or if you're in Q tile, you could set a key cord. So you could do like control V. And then you could do another key binding after that in order to prompt an action. One of the modes I have on my system. And actually, I think it's the only mode that I have on this system active is the the restart mode. So if I hit mod X, I get this little thing up here that allows me to lock, log out, suspend or hibernate or reboot or set down my system. In stock i3, there are several others. So you could do mod R in stock i3. And that would enter resize mode and that would allow you to resize your windows. Now, because I don't actually care for the mode system all that much, I've just set up a key binding that allows me to change the the size of the windows like that instead of having to enter a mode. But modes, you can pretty much create a mode for anything if you want. And like I said, they're kind of like key cords that allow you to take one key binding and then map other key bindings inside that mode to certain tasks. So you could have a key binding like SuperD is usually or SuperD is usually something like D menu. In my case, Rofi. And, and that's a normal mode. If you entered a mode, you could also have SuperD bound to something different like, I don't know, changing the window size or whatever it doesn't matter. Because you're in that mode, the key binding work is different than what it would be in normal mode. Alright, so that is i3 just really quick. Let's go ahead and move on to DWM. Okay, so this is DWM. Now, this is not what DWM looks like out of the box by default, you'll probably get, you know, a series of numbers one through nine here, and you'll get you know, a blue bar here, when you have a window, when you have a window open, I have green, and you probably won't have anything up here other than the version number of DWM. So let's go ahead and start with what's different with DWM compared to i3. Now, as we talked about, i3 is a manual Tyler and basically, like I said, that means you get to choose which and where your windows show up with DWM. That's different because you'll always have windows appearing like this. Now, DWM does have other layouts, but they're always in a tree mode. So in this particular configuration, you have a main window, and you have several child windows. Okay, and this is called the master stack layout. And I could change this to a monocle out and basically, a monocle out is where all the windows are layered on top of each other and you navigate through them using your super key and your BEM keys. Another one is a floating layout. This comes with DWM by default. And that allows you to go through and have a window that's floating. And then I can just change back to a different, you know, layout with a key binding. Now I have several other layouts installed on my system. So I can go through and go to use a this is the Fibonacci layout. Basically, that just means all the windows are going to keep getting smaller and smaller and smaller and like a rotating spiral. I have this layout here, which is basically monocle out, but it has the main window over here, which is just a single window. And then all the other windows are over here and you navigate through them with the BEM keys. And then I have another one here. This is this one, and then this one, and this one, and this one, and this one, and this one, and this one. These do not come with DWM out of the box. In order to use these, you have to patch the system. And I'll talk about patches here in a few minutes. Let's go ahead and close some of these windows here. And we'll just leave it like this. So that's the primary visual difference you'll see in DWM. It controls tiling in a completely different way. Now, the other big difference is how DWM is configured. Now, like we talked about with i3, the code that it's configured in the configuration, the code that the configuration file is written in is a user friendly syntax, right? It's very readable, something that even a new person could you could read that code. And you pretty much would know what it's doing with DWM. It's not that way. So let me show you my DWM file. So let's CD into that config. Now, your configuration file might be somewhere different is wherever you've chosen to compile your DWM folder. I've just done it in a suckless file because I have a whole bunch of other suckless programs installed. So if we do an LS, we'll see a whole bunch of files here. And if the one we're looking for is config.h. Now, if you've installed DWM, I'd recommend always doing all of your changes in config.dev.h and then deleting this one before you compile. Because then you've gone through and made changes to the base system. If you've got if later on you've made changes to just config.h and then you patch something, you'll lose all the changes you've made in config.h when you have to delete that in order to get your patches to work. So always make your changes in config.h. So I'm going to just go into them into config.dev.h. And this is what let's close these we can actually see these and we can zoom in here. So you can actually see this is what the configuration for DWM looks like. And right away, you can see that this is completely different. This is the C language. If you've tried to compile this and you've missed a semicolon or an equal sign somewhere, you're going to find an error and it's not going to work. It's not going to build. And that's the biggest really the is the biggest difference between I3 and DWM is that you compile this code every time you make a change. So if I change a color down here, I could change you know change this color here if I wanted to. I'm not going to because I don't want you know have to go through and redo it but you change a color you save this and then you have to go through and run make and then you have to do pseudo make oops install and enter your password and it will go through and make these files you know in the way that it does. And you have to do that every time you've made a change and even more once you've done that you have to log out and log back in in order to see those changes take effect. Now there are ways you can get around that by you know either with a patch or with something with your excellent RC file. But for the most part if you want to see your changes you have to log out and log back in. And that's you know completely different than our three whereas you know and I three when you make a change you make a change in configuration file you save it and then you hit my shift R and it reloads I three live right there in front of you now like I said you can you can emulate that behavior in DWM. It's not something that comes to you out of the box and that kind of leads us to patches. So if we do another LS here we'll see I have a patches directory. Now this is not something that you will have out of the box. If I can actually you know type this is something that I've added. And if we do an LS here you'll see that I actually have see an LS so we can actually see it. I have like eight well like 11 patches here that I've you know installed in DWM and you can have this many or you can have many more but the more you've added the more you know problems you're going into having and basically what a patch is is exactly what it sounds like it's a snippet of code that you download and you place into the DWM configuration or source code in order to add functionality. Now with I three when you've downloaded that you get pretty much all the functionality you'll ever going to get with I three that has everything built right into it. You want scratch pads. It has a scratch pad functionality. You don't have to do anything to it other than add the scratch pad code to your key bindings with DWM. It's meant to be as minimal as possible or mostly minimal as possible. It comes with the bar but whatever it's meant to be as minimal as possible. So you actually have to go through and add those kind of functionality to that kind of functionality to it. So for example I wanted a scratch pad which is basically a floating terminal or floating application. I have to add this patch here. So if I've been into that DWM scratch pads basically what you're doing you're getting a description of the patch which is mostly unusual because usually they don't have that big of a description. It's telling you what files that it's editing. So two files change and has 65 insertions. So these are the things that it's going to add to the code. So it's going to add to config.def.h is going to add all this stuff with the plus to it. Okay. And it's and it even shows you where it's adding it to. So it's adding in between this line here that because you'll find this line in your config.h file and it's then it will add this stuff and it's adding it before the tagging system. That's how patches work. Now you don't do this manually. Okay. So if we do if we go up a level here and do an LS let's just say I wanted to patch in this here. I do patch and then dash P1 and then this symbol and then you know do the DWM hide whatever. Actually I'm pretty sure that's supposed to be P1 not P2 Matt. You could also just use patch. There are a couple of different ways of doing this and I might have that symbol turned around. I can't I can't remember. I can never remember. I would every time I have to patch something I always have to look it up. But the point is is that this term patch will actually go through and do this automatically for you. And for the most part it works with few patches. The more patches you have the more likely is your patches going to fail and then you have to go through and do it manually. And that would mean going through and copying pasting out of these files here into the configuration files that it determines in the patch itself. So if that sounds like a lot for you if that sounds like a lot of crazy things to have to do it is and it's not something that's going to be for everybody. Really the the patching system is where a lot of the hardness of DWM comes in because you're going to get a lot of errors the more patches you add. So as a new user DWM is probably not a great idea. And like I said at the beginning use i3 for a little while and then move to DWM. That's the best way to go or use something like BSPWM. With DWM you're looking at getting more invested in actually learning a programming language. So with DWM you have to know some cplay. You're going to learn that inevitably by using it now. I came into this not knowing anything about this and I've learned some stuff. I don't know why I've learned it. I don't know the reason why I have to use a semicolon at the end of the line other than I know that I do. I don't know why things are defined in those ways. I can read the code fairly well. It's not as unreadable as something like Haskell or even I was using awesome earlier today and Lua is kind of unreadable. It has some really weird syntax in Lua that you have to deal with. Commas don't always go in the same spot in Lua for some reason. I don't know. I mean I just spent a couple hours looking at it this morning and they don't always go in the same spot. With C++ it's usually fairly predictable but again it's something that you'll have to learn and something that you'll have to pick up over time if you don't know what going in. So basically those are the basics of I3 and DWM. Now I could spend hours and hours and hours on each of these window managers just going through the small niddley you know nitpicky details but just briefly which one should you use. For me I prefer DWM for most the most part. There are things that from I3 that I miss so I miss the ability to assign each workspace key binding. So as you saw in my I3 configuration file I have 19 workspaces and in in my SXHKD file which is where I control my key bindings in I3 I have key bindings associated with each every one of those workspaces so I hit super 1 through 0 and I can access workspaces 1 through 10. I hit control 1 through 9 I can get through to my workspaces 11 through 19. In DWM I can't do that now there is a patch to do that I know that there is but I've used so many different patches I don't want to add another patch because I know it's going to fail and even if I go through and add it manually it changes our in might not work plus it adds extra lines of code and it's it's can get messy so there are like I said there are things I miss in I3 but I prefer DWM's layouts and I prefer always not having to always choose where my my window is going to show up so I prefer the dynamic tiling window management system it's why I prefer Qtile and stuff like that but for you it's really going to depend on how willing you are to learn a language so if you're willing to learn some C++ and and actually figure things out in terms of you know where semicolons go and you know how the patching system works then DWM is probably really good for you if you're really really new and you're not interested in taking that jump yet I3 is definitely the better one to go now if you're a longtime user of tiling window managers and for some reason you haven't used either one of these they'll both do you well really well if you've used something like Qtile or if you've used Xmoment Xmoment add you'll probably be more comfortable in DWM if you view something like BSPWM you'll probably be more comfortable in I3 because they're much more similar now BSPWM is a little more complicated and has some weird things you do to assign where the window goes and stuff like that I don't know a lot about BSPWM but they're both well those are both manual tileers so they're both similar in that way they're also both coded and user-friendly syntax one's written in bash one is written in whatever I3 is written in so my best advice is to try both I have a video where you can install DWM on Ubuntu so I will link that in the video description below and in the probably in the cards above so you can check that out if you don't know how to install DWM that's pretty much the same on every system so you could probably watch that even if you're on Arch or Fedora or whatever Gen2 is going to be a little bit different because you got to merge and all that kind of stuff I don't know how Gen2 works at all I've never used Gen2 before maybe that's something I should do anyways thanks for watching you can follow us on Twitter at the Linux cache you can follow us on Facebook at the Linux cache you can support us on Patreon at patreon.com slash linuxcast and with that in mind I would like to take a moment to thank our sponsors or our patrons Devon they're basically sponsors you guys are sponsors patrons Devon Zach Marcus American Camp thank you for your support thank you for watching I'll see you next time


met this brazilian girl one time right when she got out of the car i was like this is not my type but my friend jeremy was there and i was like you can meet my friends they worked out great they stayed together for five years they never were not together for five straight years what after that for five years she was angry that he set the navigation voice to a sexy girl's voice and she brought it up as a big thing as like i feel like am i not enough for you so they eventually broke up


Hi there, thank you so much for joining me today. We here at DMA Global on behalf of the International Organization for Migration, or IOM, need your help to create a training toolkit that will help build DS4 organization's capacities across a variety of competencies. DS4 organizations, like yours, play a valuable role, whether that is in supporting the community, locally, nationally, internationally, building partnerships with governments, private sector and civil society at home or in countries of origin, and importantly in opening up channels of communication. As part of their migration for development agenda, IOM, the UNDP, and the Swiss Agency for Development Cooperation are embarking on a new initiative to help strengthen the capacities of DS4 organizations. This is where you come in. We're reaching out to you and other DS4 organization leaders from all over the world and asking you to reflect on the role your organization plays. What are your goals and objectives as a DS4 organization? Are you delivering on them? And if not, what are the challenges that you are facing? What are the obstacles holding you back? And importantly, what support in terms of training and capacity building exercises could help your organization improve its effectiveness? With this information, our team will compile existing trainings and develop new ones to meet these needs. This will all be available on an easy to navigate and free to use online platform, a home for DS4 training materials globally. This platform will improve the well-being of yours and other DS4 organizations, the effectiveness of the roles you play, and the well-being of the people you serve. So please help us in making this happen and lend your voice and experience. We invite you to spend the next 20 minutes completing this online survey. All your insights and data shared are confidential and will be analyzed as a whole. We adhere to the general data protection regulations and no personal data will be shared without consent. Additionally, a few organizations will be choosing to partake in the pilot version of the training that is developed. And if you're interested in being considered for this, please leave your email at the end of the survey, and either way, we will share the training platform with you once it's finalized. Thank you so much for taking part in this survey, and thank you especially for all you do at home and in your host communities as a DS4 leader.


There you go. Awesome. I know the stream deck's not working. So I gotta use the F9 and F... whatever. Uh, we could probably just do hits for Recap. I think that's fine. That's true. What's going on everyone? Sam here with latent sports cards. We are ripping one box, or I guess 2022 Panini Road to the FIFA World Cup. One box break, number three random team style. Here again is a look at your random results. As always, you can find these on the website under the results tab, as well as the link in chat. Let's go ahead and get started. Good luck here, everyone. See some fire come out of this. Again, thanks again for your... what was I gonna say, your patience. Again, we had some technical difficulties here, so we're back in business though. That's all I know. Empty. Sounds a little funky, but not terrible. All right, guess we'll just keep going with what we've got now. That is Mauricio Isla, going to Chile. Three out of 25. Three out of 25. And nice one here. Going to Norway. Sean M. 10 out of 99. That is Erling Holland. Congrats on the Holland base. That is sweet, man. Very nice one there. We'll take a Holland. Let me pull up this checklist really quick. Pretty sure I know where this guy goes, but I want to double check because it is a redemption. It's going to be... Yes. Going to England. That is Declan Rice. There you go, England. Who's got England? That would be Trey H. Congrats, Trey, on the Declan Rice. Sapphire. Sapphire will be numbered to 49. 49 on the definitive ink checklist or definitive ink sapphire autograph. England. Yes, England. Oh, cut long on the Holland, so we can't get it into a mag. We still will protect it and send it the proper way. We've got Alexis McAllister. It's going to Argentina. 45 out of 99 on the Jersey card. It's for Argentina. Holland base. 99. Nice one there, Argentina. We've got going to Brazil. 75 out of 99 is Casamiro. 75 out of 99. Rick E. with Brazil. Nice one coming up here, too. Not too bad, but noticeable since coming back on. Gotcha. Nice one there for Brazil. We've got 35 out of 99 going to Portugal. That is Bruno Fernandez. Nice one there that is not associated. 35 out of 99. Congrats, Eric W. with Portugal. This is solid, actually, too. Going back to Eric W. 84 out of 99 with Chile. That is Arturo Vidal. Nice one there. 84 out of 99. Very solid. Congrats again, Eric. Eric W. Nice one coming up here again. Going back to England. Trey, age 13 out of 49 on the Sapphire Auto. It's going to be legend. Nikki Butt. That's so sick. There you go again, Trey, with England. Sounds off. Say it's a little bit funky, but should be good. We've got going to the United States. That is two out of 99 legendary signatures. Clint Dempsey. Wow. That's huge, dude. Clint Dempsey. Congrats, Rick. This is nasty, dude. This one. This Clint Dempsey. This is so sick, dude. This next one is unreal. Loved Clint Dempsey, obviously. Dude, this next one's crazy. We've got going to England. That again is Trey H. Autograph's dual. 54 out of 99. Wayne Rooney and Michael Owen. Boom. Dude, that's so sick. Oh my God. What a card. The dual auto of two English legends. Wayne Rooney, Michael Owen. Holy cow, dude. That is unbelievable. Crazy box, guys. Exactly. That will do it for the break. We'll do a quick recap. Got Bruno Fernandez for Portugal. Got Casamiro for Brazil. That is Alexis McAllister for Argentina. Nikki Buck going to England. Archerova Dahl going to Chile. This was cut a little bit long on the Holland 10 out of 99. Will be sent properly, just unfortunately did not fit into the mag. We got Declan Rice on the definitive ink sapphire England. Clint Dempsey going to the U.S. of A, 92 or two out of 99. And how about the National Treasures Autograph's dual Wayne Rooney and Michael Owen. That is going to do it for the break. Thank you, guys, again. Next up, we got one more box coming up. Good luck to everyone.


Good morning John, I'm sleepy and there's a lot going on and I'm making this video substantially ahead of time because PodCon is happening this weekend and I will admit that to a certain extent not with my personal life but with the world at large of kind of sort of a little bit had it. I am feeling grumpy and I like to put positive energy out in the world but also I like to be myself and I like to experience the emotions that I'm experiencing and I found in my pocket of this jean jacket questions from when we did Live Dear Hank and John's while on tour. We're gonna do a Live Dear Hank and John at PodCon so that's gonna be great. What's this? This is just a coaster from my hotel. So I wanted to answer some of these questions. I don't know if we answered them on tour. I don't know why they're in my pocket but I will say that these are not necessarily the interest that I would give if I were in a good mood. I'm very excited for PodCon. Very excited to do all the stuff I'm doing in my life, my actual life. Project for Awesome is coming. My baby is very cute. Everything is good in my personal and professional life but I don't know if you've heard about the rest of the world. All right let's do the questions. How can you be supportive when a friend of yours gets a haircut you find really weird? All haircuts are weird. What other organism is like I'm just gonna my hair let grow forever and it's gonna get it's like imagine a zebra out it's like galloping along tripping over its fur. People are so weird.  All haircuts are weird. What if like Dorothy and the Wizard of Oz I want to believe that there's no place like home but also I don't know exactly where home is Rachel. Welcome to adulthood. This is from Lindsey who asked what should be the signature dish that I bake to impress new friends.  What else do you bake? Bake potatoes. Bake potatoes. Biscuits and gravy. Corn dogs. You bake corn dogs? You bake them. No you don't. You fry them. This is from Anthony. My brother spends a lot of time at home alone. I came home to him playing guitar and singing. I didn't know he did either of those things. I spoiled his secret talent. How do I tell him? Don't tell him. It's his secret. He wants to be a secret. He wants to let you guys know in his own time. It's gonna be really a lot of pressure at that stage between when you like don't know anything and then you start to get kind of good at stuff. This is huge gap between okay and good and you don't know about that gap in the beginning. Because like anybody who could do anything with a guitar is magic if you don't know what's going on. I would let him practice in peace. Anthony says you're doing very great sweetie. Thank you. That helped. This world is a tendency not to be as awesome as it should be. Brothers, would you be willing to support me in becoming the world's dictator? Below that it says your loyalty will be rewarded. I mean Dakota you had me until the end there. As a turtle biologist I must ask what is your favorite kind of turtle? I know I just realized I made a turtle face when I read that. I like sea turtles a lot. They're really good especially baby ones. Also like Teenage Mutant Ninja Turtles. I like Turtle Men. Like Dr. One's Turtle Men. Our least popular thing I've done on Vlogbrothers that maybe ever.  When I read it back it's way better than I thought. But this makes me question my writing. Does this happen to you? Yes it totally does. The thing to like give credence to is not like in the moment you're thinking about it and you're fixing and breaking and reforming. It's after you have done that reading it and how do you feel about that final product not the terrible mess in between. How will I ever know if I've actually succeeded Mika? Let me tell you friend that doesn't happen. You will never know. You will succeed in individual events but failure will always be just around the corner so find things that sustain you that aren't imaginary like friends. John I'll see you on Tuesday. Also hey John free domestic shipping at dftba.com for the next three days if you order $80 or more. Yeah.


environmental problems toxic chemicals toxic chemicals are harmful to the environment and to human health if inhaled swallow or absorb through the skin drain cleaner and pesticides are toxic chemicals dump dump means to get rid of trash and other unwanted things you should always dump your garbage in the trash leaving it on the ground is bad for the environment spill a spill is when liquid falls out of its container oil spills are harmful to the environment oil spills in the ocean harm fish and seabirds at risk when something is at risk it is in danger because of air and water pollution our environment is at risk the air we breathe and water we drink may not be clean common common means that something may happen often in some areas floods and avalanches are common people who live in those areas must always be prepared avalanche snow and rocks that suddenly come down a mountain are called an avalanche during the winter people living in these areas need to be prepared in case one occurs flood water that covers a large area of land for a short period of time is called a flood in Washington heavy rainfalls can cause flooding in low-lying areas wildfire wildfires are fires that burn out of control in the wilderness these fires are most often caused by people but they can also be caused by lightning drought areas that do not get enough rain experience a drought droughts affect the environment and the economy global warming global warming is the warming of the earth caused by climate changes global warming has caused changes in the weather sea level and air quality worldwide fuel fuel is something that provides energy or power cars and buses need fuel to run the increase in the use of fuel is causing environmental problems worried worried means that you are anxious or nervous because you care about something people today are worried about pollution and the changes it causes in the environment the end


Alright before I get into this video I want to remind you that we are sponsored by E-Win Racing.  They have chairs for all types and sizes. I have 3 of them in my office. I love them, been using them for years. Can't suggest them enough. They also allow you to do easy pay with Afterpay and Klarna where you can split your payments over 4 different payments to make them affordable right now today. Go ahead and check out E-Win Racing through the link in the description down below. So today I want to talk to you about a couple of things and one of those is going to be the possible date for the upcoming assumed Nintendo Direct. Again, a lot of your caveat words there because nothing's been announced. Also we need to talk about a new patent from Nintendo. Now let's first dive into the patent because this patent provides some information that you can argue has been rumored for a while but now we have some confirmation. Now they've been patents related to upscaling games in the past for Nintendo and we know that Nintendo is using a form of upscaling today with games like Nintendo Switch Sports. They're using FSR, Fidelity Super Resolution, which is AMD technology, but is able to be used on older generation GPUs as well as obviously AMD GPUs that get results to let you upscale lower resolution output games to higher resolution and make them look crisper and nicer. Get a little bit of a performance pump with the frame rates as well. But how Fidelity Super Resolution does it is different than the way that Nvidia does it. Now we know Nvidia has technology inside the Switch to take our X1, unfortunately the way Nvidia does it didn't exist at the time of the chip being made so it's just not compatible basically and that's deep learning super sampling. Now we've talked about this before and I'm not going to dive too deep into it because we have a lot of rumors that suggest that DLSS is going to be part of the 4K future for Nintendo's next platform. Obviously the Nintendo's next platform will be able to have games at 4K through DLSS, that's basically the way it's done. Well Nintendo really stay patent about a neural network AI upscaler for images and games. Now they don't specifically say games, but how the neural network stuff works is related to taking an image and making really damn good guesswork of what the pixels around it would be if it was at a higher resolution and doing it practically in real time guessing about a frame ahead of time, that way they could produce a higher quality image. This is exactly how DLSS works, DLSS deep learning super sampling uses a neural network AI to accomplish this. So it might sound scary when you're hearing neural network and AI, people worry about AI taking over the world, but this isn't new technology, this is something that Nvidia has been doing for a long time. Now why would Nintendo then, if Nvidia already has technology for it, need to have their own patent exist for a technology that already exists from a company they're partnered with. And I think the biggest reason isn't that it looks like in this patent that anything's done differently, from what I can tell how this works is very similar to how DLSS works and you can see examples of images that improves, granted we're not looking at 4K images here. We're going to the super low resolution stuff and zoom in way in, but what I think it does make a difference in is that whatever version of DLSS Nintendo uses, I think it's going to end up being a fully customized version. So while it will be based on Nvidia's deep learning super sampling, it will be a specific version of DLSS that no other device has. Now this doesn't mean it's going to be a better version, but I think it's going to be one specifically tailored to the exact hardware inside the Nintendo Switch 2 or whatever it ends up becoming. And that's important to note because Nintendo's obviously going to have preset hardware and be selling it for 5, 6, 7 years, Nvidia naturally upgrades their DLSS every year or two. So having a version that's specifically tailored for the hardware, the exact specs I think is something worth paying attention to. I kind of think that's what this patent is for. It is a patent for AI upscaling through a neural network that is tailored to whatever this next hardware is. There's no hardware details in here, so we can't extract that, but I do think it's noteworthy because this patent does confirm in some ways that Nintendo has been looking into neural network AI upscaling like DLSS to upscale their games in the future. I think this is a really important thing when it comes to all those rumors and reports and people that think it was all fake. Hey, this is a piece of actual stuff that Nintendo put out there sort of proving that yes, they were indeed working on this stuff at one point. So there is that. You might go, well, at one point, that doesn't mean they're not working on it now. The work on it could be done. It could be something we see in the future, et cetera. So it's not something to really worry about now. And the patent is for a technology that already exists, but it's just a customized version. That being said, we also need to talk a little bit about Nintendo Direct. Look, obviously it's been the hot button topic all January. We're waiting on that Nintendo Direct. We want to know what's happening. We want to know when Tears of the Kingdom is going to start getting advertised. We want to know what's next besides Tears of the Kingdom. What's after? When's Pikmin 4 coming out? Are we getting a Mario game? What's happening with the DLC for Mario Kart and Swatoon and Xenoblade? There's a lot of things we want to know. What third-party games are coming? Are we going to see Hogwarts Legacy running natively on Switch? Is that a thing? Is it going to see Gollum run natively on Switch? That's another third-party game. What are we going to see? Are we going to get a release date for Hollow Knight? What about GoldenEye 007? Who knows? Maybe that ends up releasing this week. A shadow drop with Xbox tomorrow. But the point is we want to know what's next. And the biggest thing is trying to predict when the Direct will be. We had some speculation and rumors from Paul Gale Network on a smaller event happening this month. With nothing announced today, I would argue there probably isn't going to be anything in January. So whatever sources Paul Gale Network had on that were must have been mistaken, at least at this point. Technically they could still announce something tomorrow for Thursday. So I don't want to completely rule it out, but I'm kind of thinking there isn't going to be anything. I mean, I guess they could probably squeeze in an indie world or something if they want. They did do one in December, so it would be interesting if they did them back-to-back, but that's alright. But when we look to February, look at the last four years. The last four years there's sort of been a consistent pattern with their Directs. And I'm going to give some credit here to fellow channel Mike Odyssey for pointing this out, and I just went back and confirmed his research just to make sure he's right on this, and he is. And that is that these Directs have not only happened in February, there's a pattern to them. One, they all happened on a Wednesday. That's an interesting note. We've all been thinking Tuesdays and Thursdays, a Wednesday. So there's that to think about. Why Wednesday? I don't know. I guess Nintendo's being consistent about Wednesdays for the February Direct, specifically. Not the Fall Direct, not the September Direct, not the E3 One. We're talking specifically about this one. The E3 One's usually on Tuesday. This one's now on Wednesday, and the Fall one's on Thursday. So we kind of have an idea of the day of the week. But we also have an idea of when Nintendo tends to drop them because based on the last four, there's a pattern that if they have a game releasing in February, whether it's small or big, it just has to be a Nintendo published game. It could be a published indie game, or it could be a published major game. And we have Kirby coming up, that they tend to do the Direct the week before that game comes out. So Kirby releases on February 24th, and with the 24th being there, and all the prior last four Directs happening on a Wednesday, and any of them that had a game releasing that month happened the week before, that kind of puts the target date at February 15th. Now this is just a pattern recognition thing. This is not a confirmation. This is not a rumor or a massive leak from some insider. This is more so just doing some sleuth work, confirming that sleuth work of Mike Odyssey, and seeing, yeah, Wednesday, the 15th of February, seems like the most likely date based on recent patterns from Nintendo the last four years. So kind of keep that date in mind. That's not that far away. What are we? Three weeks? Three weeks from tomorrow? That's really not that far away when you think about it. Finally we should see Tears of the Kingdom again. Finally we should see what's coming after. Finally we should see an idea of how Nintendo is going to handle their 2023, because for the most part, they announce most of the games coming in the current year in this Direct. Even the second half games that are coming, they might even say this Direct is for the first half of 2023, and then they end up announcing three or four games for the second half anyways. This happens every single time. We know you can't take what Nintendo says about that. In the first half of 2023, it's what this Direct is about, two literally, Nintendo basically means a majority of the Direct. Say it's a 35, a 40 minute Direct. So 25 to 30 minutes of it will be about the stuff coming in the first half, and then the rest will be the stuff coming in the second half. That's just how Nintendo does it. Plus there's this idea that Nintendo might mean by first half, they might mean first half of the fiscal year, which then that actually runs right up into the fall. So anyways, you guys let me know what you think about this down in the world. Do you think we're going to get a Direct February 15th? Do you think it makes sense? And do you think Mike Odyssey's right? Because he's the one that pointed this out and I wanted to bring it to your attention because I think he's onto something. Are you excited for the idea of the neural network AI upscaler? Likely a custom version of DLSS. That's my speculation. Also a fun fact, there's this little thing that popped up on Twitter that I'm just going to briefly mention. Essentially, the German and Aussie boards have registrations for Fire Emblem Engage dating back to 2021. And they basically say that the product was produced in 2021. Now we don't know exactly what that means, but the inference that a lot of people are getting from and including the person who originally posted about it is that this means Fire Emblem Engage was actually done in 2021, at least development wise. Maybe there were still some tweaking or final localization, but the main development was done in 2021. And then they just sat on it. Now Nintendo's sitting on games shouldn't be new. You think logically about things, felt like Breath of the Wild was probably sat on for an extra year because of the Switch. Mario Odyssey was probably originally a Wii U game. Feels like that game was probably sat on. We actually saw that in 2016. There's a lot of things that I think we can point to Nintendo in the past, having sat on games for an extended period of time. But this is one of the few times they would have sat on something that we weren't aware of, right? Like Fire Emblem Engage wasn't announced in 2021. It was announced late 2022 for January. And it released and came out as a really well-polished, decently received, well-received game by fans definitely, decently received by reviewers. So this kind of matters a little bit.  Things like Metroid Prime Remake, or maybe even Twilight Princess and Wind Waker, or maybe sitting on the next Mario game or something where Nintendo might have games done and they're just trying to decide when to release them or what's going to get moved to the next platform. You know, we are probably heading towards the transition period in the next couple of years to the new platform. So I do think that this is just something worth paying attention to. But yeah, by the way, I don't think Tears of the Kingdom is one of those games they were sitting on. I'm just going to be open and honest about it. I don't think it was. There's a possibility it was done last year and they just decided this is a better release timing in May of this year. But I don't think that's the case. I think they honestly did need extra development time. Zelda is a little bit of a different beast than some of their other games. They used their largest development team with their biggest budget. So I can see why COVID might have caused those delays and they still were working on the game last year. And probably at least polishing it up this year. All right, guys. Thank you so much for tuning in. I am Nathan, a RoboJet from Nintendo Prime. Let me know what you think about all this stuff down in the comments below. We'll be back on camera here at some point this week. Just doing a little organizing, let's say, in the studio. Catch you guys in the next video.


Good day, fellow investors. We are back. I can't promise daily content from today onward, so be sure to click that notification bell in order to get notified when we put up a new video. Nevertheless, we are back and we are going to start with some fun and discussing blockchain stocks. There are three stocks that I want to discuss today. Hive blockchain technology, Gain Capital and Xenuan Real Estate. Those are three stocks that are related to blockchain technologies, but approach it in a completely different way. So let's see if there is a way to make money on blockchain stocks, how to play it, what's the real fundamentals of the business and what will be the potential outcome of it. Let's start with Hive blockchain technology. So the basic idea behind this blockchain technology is that it will become the future basic technology for all financial and different kinds of transactions. We'll see if that will happen. Perhaps it will be like 3D printing that people were crazy about a few years ago, now it has disappeared. We'll see. Nevertheless, cryptocurrencies have really exploded in 2017. We can see here that the market capitalization went beyond 200 billion, perhaps now it's a little bit less, and the number of coins in circulation increased incredibly. 2011, the first cryptocurrency boom and now we are in the second cryptocurrency boom with more than 1,000 cryptocurrencies. Which one will survive? Nobody knows. Nevertheless, there are companies that issue stocks that mine those cryptocurrencies and want to make a profit on it. But they are making profits in one way definitely and the other way which is the way where shareholders make profits is a little bit questionable. Let me show you what's going on. So they first enter into a deal with Genesis, the mother company and a company that owns 25% of Hive blockchain to acquire a mining facility in Iceland for 9 million. This raises their revenue, then attention increases, cryptocurrencies are booming, everybody wants in. They manage to close a financing deal, then they go public, then number four they enter into another deal with Genesis to acquire another mining facility in Iceland. So Genesis puts in some money but they immediately get out the money by selling them a mining facility. Then it happens again, Genesis puts in some money but then the stakes got bigger, agrees to buy for 22 million from Genesis. Genesis hasn't invested that much money because the money is coming from going public and from a new financing round, where new shareholders buy shares. That money is directly sent to Genesis and they increase their facilities, what they sell to Hive blockchain. So Genesis created this vehicle to get free cash out of it by selling them the mining facilities and keeping an ownership. So the owners of Genesis, which is the mother company of Hive blockchain, have made an excellent investment. They invested a little bit, took advantage of the craze surrounding blockchain, got external capital new shareholders in and they got the money out by selling mining facilities. So they have completely de-risked whatever they have been doing. They got hard cash on their bank accounts, I don't know what they will do and they have kept a stake in the company if blockchain continues to explode in order to make even more money. However, this is very very interesting how the mother company sells assets to the daughter company and gets cash. That's how you make money and that's how shareholders take all the risk. So Genesis no risk, making money, making cash, getting cash out of the system, shareholders of Hive blockchain that invested later in the next round take all the risk and we will see how that ends up. If Ethereum or whatever it calls explodes, Hive blockchain will do fine. Let's see why. They have a lot of Ethereum coins, I don't know much about that, nevertheless, you can see here that the price of that spiked during this year. So there is a lot of value. However, they say they don't need to sell immediately the currency they own. They don't need to sell them immediately or if they would sell the currency they own, the 500 million coins that would completely probably disrupt the Ethereum market. So they are not even capable of selling that. So when I look at this company there are A, extracting cash from the company, so de-risking their mother company. Secondly, they are keeping a lot of these coins where the value is questionable. If those coins would really be valuable, then they would easily sell those coins to get financing. No, they are getting financing in other ways by promoting capital rounds to shareholders, to new shareholders. Very interesting, very tricky. It is on the Toronto Stock Exchange. I wonder what would the sex say if it was on the New York Stock Exchange. Very, very interesting what they are doing. We'll see how it ends up. It's interesting to follow. Now there is another company that is entering blockchain technology. It's called Gain Capital Holdings. It's a platform for forex trading. I have written an article two years ago about the company how there is a way to make money with forex. I followed the company during the last two years. I looked at it and I have seen that there isn't really any growth. They make some money but very little, so it was for me fairly surprised until the company announced this. They say they will launch Bitcoin trading on city index for UK investors. What happened? The stock price exploded. There hasn't been any metrics. They haven't shown any metrics. We don't know what will be the amount of business they will have from Bitcoin but the stock exploded. This makes me think that as soon as the craze stops, there will be no chances to short this Bitcoin craze. Gain Capital, you can short the stock, you can buy options. Hive Blockchain, perhaps it's still a small company. It's very interesting how the craze develops. It's something to follow but I would be careful with investing. If you are a market trader, if you're a sentiment trader, then you can take advantage, especially if Gain manages to show positive numbers about Bitcoin. You have to ask a little bit in the round who is using Gain Capital for Bitcoin trading. If you can see, okay, people are really using it and if there are good numbers at the end of the month when they disclose their trading numbers, then the stock price could even go higher. Of course, if the craze about cryptocurrencies continues. And the first stock I want to discuss, there is a link in the description below, is a stock that I recommended a few months ago that has nothing really to do with Blockchain. It just owns one business that is promoting and delivering Blockchain technology in China. Xinyuan Real Estate announces Blockchain-powered Real Estate Finance Technology Platform. This was one and a half year ago. Nobody noticed it, but since then things have changed a little bit in the Blockchain technology environment and now everybody is crazy about it. But watch the video about Xinyuan. You will see that it is a real estate company that also owns a Blockchain digital integration company or whatever. So there is always potential that if the market that is crazy about whatever has a Blockchain name, invests heavily in Xinyuan, but then we have to, as investors in the real estate business, we have to take out our money as soon as it becomes overvalued. I really hope it goes above 10, above 15, and then I say hasta la vista. We'll see how it works out for now. It is still undervalued from a real estate perspective and in addition, it has a Blockchain option. Very interesting. Thank you for watching. Looking forward to your comments and how do you see this Blockchain craze evolving in the future and if there is some real investment potential or we will see it cool down in the next few years and then pick up when there will be real Blockchain technology adoption like it has been the case for the internet in the past 15 years. Have a great day.