So, if you could please mute your phones, and otherwise, I'm happy to introduce Ondra Žiška, who is recently spending most of his time in programming tools for migrating applications and application servers as well, and that's the topic of his talk. So hello. Sorry for initial technical troubles. I wasn't able to make it displayed, and excuse me for my weak voice because I'm a bit ill. I would like to present to you Windup, which is a migration assistant by JBoss. It's a project which started about three years ago when some consultant wanted to automate his tasks when he comes to client and needs to analyze the application right away. But why should Windup be interesting also for you? What is Windup? Windup is a migration assistant, which is fluggable, modular, based on porch, rule driven, and that's just a few basic characteristics. I will introduce you each one. Excuse me, I need to put my phone out of the microphone, I guess. So Windup as a migration assistant, what it does. Imagine that you have, let's say, an eShop. You run it on a server. So you have your application on your server. But your server is relatively expensive because of licensing, because of hardware, because of any other additional costs, or you run on a really obsolete technology. So in that case, it costs you as well because you need to maintain it, you need to keep someone who understands the ancient technology. So you want to migrate, probably. And you consider migrating to a new shiny brand new server, which happens to be JBoss, of course. And so what to do with that? You take your application and you try to deploy it. And usually you end up with this, with the deployment exception. So you go into the source code and look what's wrong. But what if your application looks like this? It isn't just one war, or it isn't just one bundle, it's several, or like this, or this, or this. In that case, you are not probably going to use the same approach, opening IDE, and going through every one of them, when you consider the migration, whether to do it or not. And this is how the application may look like inside. So it's really a kind of chaos, and it may not be documented sometimes because the application can be 20 years old. And sometimes, even imagine that in a situation like this, some of the applications don't have the source code at all. You don't have the source code, and the people who made it are, let's say, unavailable. So what would you do in that case? Call windup. You would download windup and try it with windup. Windup is a tool which is exactly for this situation. You will run windup against your, let's say, year, which is a, in Java it means a bunch of applications somehow interconnected. And after it runs for several, in this case, hours, because it's quite complicated tasks, it comes up with a report. This is just one of the pages of the report, but it basically shows you some summarization, some statistics, some nice graphs, and then the details. I will show you what it produces later. Now, let's go to the demo. Windup is a console application. So windup is a CLI application, a console application, so currently this is the AS. Yeah, sure. Sorry. I will try to make it with, so windup is a CLI application, console application, so this is the only UI currently we have. There was also a graphical UI, but we dumped it for a while because it wasn't much used. It's, after all, used by developers and administrators. And the main output isn't graphical in terms of UI. It's graphical in terms of the report. So after scanning some of these, some of these parameters, you know that you are going to use mainly the input one. Here I have the application that I want to migrate. I will show you what's inside. Unfortunately, I cannot make it much bigger, but you can see that it's a normal year which contains one web application and some library and several files we use mainly for testing. But still there is some useful code which emulates how a real application looks like. This is a tiny one, so we can make it run only for a few minutes or few seconds, depends on your computer. But the principle is the same in bigger applications where the year is, for example, I don't know, 100 megabytes big. So I'm cheating a bit because I prepared the command here in advance. So let's look at the command. You cannot see it. So the command is basically running windup against an application which you have somewhere in your class, in your file system. Here is where you put the output and some flags basically for controlling whether to override the output. When you run it, windup, unzips it, then it decompiles it, then it scans through the class files or decompile Java files, then it scans the XML files, runs all the rules we have because, as I said, it's rule-based application and I will show you what the rule-based means later. And then it, every or majority of the rules scan the Java aspects of the application. Windup currently targets mainly Java application, Java EE applications. But it's actually a customizable tool and you can provide any rules you want. It doesn't have to be targeted for Java. It can be targeted also for .NET applications for C, I mean binary applications which were created by C. If you have a good enough decompiler, of course, that's one of the preconditions. And now it seems it's a bit stuck, which doesn't really happen always. It doesn't happen at all. But it usually, when it happens, it's during a demo. So I'll try it again. Okay. I'm running from master.  Master means the latest development code. So apparently we found a bug. I can tell my colleague there that we have to fix it. But I could, oh, I see, I'm not on Wi-Fi. That's right. Correct. Yeah. Because, of course, it should have stuck my mind. It's validating XML files against its DTDs or against its schemas which are defined as some online resources. So it's trying to download it. And because I'm on VPN still, but it doesn't connect, then there is a long time out. So we would wait for about six minutes. All right. So offline. Is it offline mode like this? I think so. Or offline. Or just offline. That's what I wanted to show you afterwards. But it's our documentation. Not offline. I'm here. Here it goes. All right. So this is the result. So this is the final report of the application. So the initial page currently isn't really nice because you only have one application. Usually there is for each application you have run against, you have one record. So let's look at our one application. Here is some report index which tells you how many accidents you find or found, wind up found, or how many issues you are going to see when you are going to migrate. What we are trying to do on this page is to tell you how much effort you will need to put into migrating your application from one platform to another. In this case, the first platform is WebLogic. And the target platform is JBLC AP6. So for this case, for this application, you would see several mandatory problems, several things that you have to fix, some potential issues and several optional. Optional means like, for example, if you want to upgrade, hibernate, you don't have to, but you can. Then the report contains a list of migration issues. This is a summarization. It's a statistic. Sorry. You can see it again. So I will make it bigger for you. And you can see the level of effort which is primarily good for assessing again the cost of the migration. For developers, the pages, the detailed pages are important. For example, we go down to the level of individual Java files. The main result for you as a developer are these reports. From the index pages, you go to individual sources and you see the particle places where the application has some issues. For example, here you can see that we are using the ghost for this line. You are using proprietary weblogic.transection helper. I will make it bigger again. And you need to replace it with something standard because Jbo's API sticks to the Java EE standards. So we encourage users to stick to the standards and replace the APIs with not Jbo specific but with the standardized Java EE APIs. So wind up is rule based. What does that mean? We have inside, wind up isn't just a bunch of scripts or hard coded Java code. It's a platform which runs rules and the rules are not biased towards any particle technology. It's written in Java but currently majority of the rules, especially the simple ones, look like this. You define a rule set and in that rule set you have several rules and the rules usually target particular knowledge piece. By knowledge piece I mean that you are an expert on some matter like how to migrate messaging API of weblogic into messaging, into Java messaging or other target technology. Most of the rules catch appearance of particular Java constructs which means imports, constructors, calling of a method or some annotation and the result is a hint on that line in the sources. And wind up then automatically creates all those statistics from it. The rules contain predefined conditions which for example can be Java queries, queries to the AST as I told you wind up decompiles Java classes or you can also scan source code. In that case you can query the source Java sources for particular constructs or you can scan XML files with XPath but these are just those we already implemented. You can implement any condition you like. Let's say you have a C project or Ruby and you want to scan your Ruby project so what you have to do is to implement your own condition and then implement wrapper for XML let's say for something to read the XML of your own choice format and then you would use it in the when part. Instead of XML file which matches some XPath you would have your own expression for matching Ruby constructs. Then there are predefined operations. As I told typically an operation is putting a hint on a particular line in the source code and it can be also XSLT transformation. It can also be a call of CLI command to JBCAP which makes it changes configuration and it can be a classification of the file. Let's say that you find annotation of entity on some Java class then you know that you can classify it as an entity being in which case it appears again in the statistics and it's on the EJB report which is another special report page of wind up report. Of course as I said you can code your own custom conditions and operations and in which case there is an API, Java API ready for you which is quite well documented nowadays and we are eagerly expecting your contributions if you like. The rules we were looking for some rule engine but none of them matched our expectations or our needs especially nested iterations because for example the rule engines which you probably know do not allow nested iterations or sometimes iterations at all. They target some different problems. They model processes. They don't model some scripting engine. The rules also have metadata by which you can enable or disable for example you are a developer which only focuses on JPA migration. So in that case you only enable those JPA related tags and you can of course write your own rules and contribute. Also one of the extension ways of wind up is that wind up is based on a life cycle. If you split the migration process into several parts then you can for example identify that you have some unzipping initial then there is the compilation then there is scanning of the Java files and in each of those life cycle phases you can put your own hook let's say and which means the rule and let it run right there. Wind up is modular. It's based on Jbosforge or Jbos modules and it's bugable. If you want to as I was talking about the rubby integration if you want to migrate your rubby applications you would do it as a new module. Simply you don't need to change the source code of the wind up core. You need to make your own module, put your own custom conditions and conditions and operations and wrap it into an add-on which is basically a jar and put it to wind up class path. It will just load it and if you made it well then you will have your add-on available and your operations available in the XML rules. Wind up is not just the application. Wind up is kind of ecosystem or community. It's primary or it's initial where it came from was Jbos consultants which usually come to site and they don't have much time to go through application of size of thousands of sub-applications. So they really need some substantial information in let's say a few minutes. So that's where it started but currently we are getting attention from everyday users migrating their applications because migrating happens quite often even between the versions. Upgrading is also kind of migration. You take your application which runs on all the versions of your server or of your let's say platform and you want to upgrade one or two major versions. So in this case you don't want to go one by one but you want to capture the knowledge of one developer into a rule and apply it on the rest of the applications so the other developers can spot the highlights without going through the code manually. Wind up is also migration knowledge base. We are building let's say starting to build knowledge base for migration specifically. If you go to windup.jbos.com, sorry Orc, you will see a links to currently it's hosted by Redhead Com, a knowledge base site. Then wind up is also the rules repository. Currently it works as a just simply as a GitHub repository but in the future we are probably going to make it something smarter. So you can on one place you could write your own rules and test it right away. You could put your knowledge, let's say you don't want to write the rule, you don't want to put it give it too much time but you want to just to make the idea not to die somewhere so you write it in a formula form and post it to our repository and someone may pick it up and write the rule. How much time do I have? Plenty, okay. We also have an Eclipse IDE plugin so you can imagine how it works. You open the project, run wind up plugin and it creates the quick fixes or how is it called so you can see right away in the IDE you can say 15, great, thank you. You can run the wind up plugin and Eclipse IDE will show you the particular places which are problematic and show you the hint what to do with the particular line. And also there is a main wind up plugin which you can use to run wind up regularly as a part of main build. So for example if you are if you have a continuous integration and you are in the process already of migrating the application then you can rerun nightly and push the reports to your management and they will see the progress. The next big step of wind up is to make it a service. Currently as you saw you run it as a CLI application, as a command line application but what would be nice would be if it was on a server and you could upload your application not necessarily to some public site but to your own internal site or cloud and wind up would scan it. It would analyze the application asynchronously, you would put it there in the evening and come in the morning and see how far you have got. And second, going through an HTML report which has the size of several dozens of megabytes isn't really neat. It's basically it halts the browser sometimes if we have some not really well-behaving JavaScript which you figure out but still on a computer with lower memory you can get into troubles. So what we want to do is to leverage the fact that wind up is backed by graph database and make it navigate you through the individual parts of the findings by clicking through it. So you could for example navigate by the individual applications or you could be in a source and click through the findings, you could find all the similar findings, you could navigate to let's say EJB and look where everywhere it is used and similar. It's similar to the find usages in your favorite IDE and wind up is also looking for anyone who can help the community, who can join the community. You are welcome especially if you are planning or already doing some kind of migration in which case you certainly have some knowledge about what causes the troubles and we would like you to put this information into the form ideally into the form of rules but also it can be just a text, you can send us an email, you can file a JIRA and we will then cover it with a rule set and your platform will be covered for the next time you migrate it or for the next time you migrate another application from the same platform to the same target platform. Also it would be great if you could share your applications. If you have any application which is shareable with public, if it's open source or anything and it's targeted for a particular platform especially non-Jables and it uses its specific APIs then we will be grateful if you shared the application with us because we would of course use it to extract the knowledge and see what are the points where the problems arise for the particular platform. If you want to see more about wind up go to the project site. The primary site is windup.jables.org from which you can get the documentation to the GitHub site. You can see what you can do to contribute. There are guides like the user guide or the rule developer guide and for the developers GitHub and how the core rules look like. I'm currently not connected but if I manage to connect to Wi-Fi I will show you some more rules. Now I have some questions for you. We have met really big applications so big that we were surprised that an application can get so big. How many applications do you think was in the biggest application, I mean year or group of applications we have seen so far? No, it was not one. It was not 25. It was way more. Orders of magnitude? 1,000? Who said 1,000 first? Okay. It's not. I think it was the guy in the back. So here's your card. Okay. Put it to someone who said thousands. So it is over 1,000. It is about 1,200 actually. And each of this application is about megabytes of class files. Now how many megabytes do you think that our current report has? I said that we have pretty huge HTML reports. It's divided into several files. But if you run against this biggest application we have seen so far, how large do you think that the biggest HTML file is? Which is the motivation for us to make it a service and a clickable web application. So how big do you think the biggest? Oh, not really. Not that big. A bit more. I think the closest match was the 20 megabytes. It is roughly 40 megabytes. Or 45 maybe. So now I will try to connect to the Wi-Fi. I see that some of you are already leaving. So thank you for your attention. And who wants to stay for a few more details about windup or who wants to ask something? Yeah, we have about five minutes. So any questions so far? If you don't have a source code, how will windup help you? Well, windup doesn't really need the source code. It's quite common situation that the source code isn't available at the time the analytic comes to the site. He only has the server, the running server, or the deployments themselves. So you run against the deployments and windup decompiles. We have internally we used two decompilers. Original windup, the ancient version used jet, but that wasn't really good for Java of the new versions of Java. It was good for Java 1.3. So currently we use Fernflower from JetBrains, from IDEA IDEA IDE. And then the Prozion by Mike Storble, which is kind of reworked Eclipse Decompiler. So you decompile all the sources, those which failed to decompile, that happens about 5% times you try it with the other one. And we get almost 100% of decompiled files. And the results are pretty good. It's not the same as the source code of your application, of course, because the formatting, I mean, because similar things, but it gives you really good results, including the annotations, including the generics. So it's really useful. The question is, well, I will not repeat the question, but restate what windup does in this situation. If you don't have the source code, it decompiles and does exactly the same report as you see here. So it really gives you the hints in particular lines, but it's not only oriented towards source code. It's also oriented towards configuration, because in the Java E applications, you can have the descriptors. You can have files which, let's say, in JBLS application server 5 or EAP 5, you had those JBLS-classloading.ac. XML. So that made the server to configure the class loading specifically for this application. And it's not supported anymore in the newer versions. So you either tell the user that this is not supported anymore and point him to the documentation, or you can also make the XML, if we know how to do it, if there is some matching one-to-one, and the logic is we can follow the logic of the original file, then we transform it using accessibility. And similar. There are some things which do not apply to a certain file or line, like, for example, if you use log4j, it's not recommended for the enterprise to use log4j or solif4j. So if we find this on class path, then we report it in the main report as well. And the conditions or the constructs found can be more complicated, but it gets more complicated to explain. So if you are interested in what you can do with windup, then you are welcome to come and have a look. But as I said, it's backed by a graph database, so we can, what we internally do in windup is that when scanning the pieces of the applications, we put the information into the graph. And this is where the plugability comes useful, because you, your plug-in, can actually access the information which was extracted by the other plug-ins, by the other conditions and other discoveries, discovering plug-ins. So you can see all the EJBs, you can see all the Hibernate entities or, sorry, JPA entities, you can see all the Java files, you can see those which, you can see also the findings on the hints, the problematic places already. You can see the annotations, and you can query the graph for whatever you want, and you get the result immediately. You don't have to scan yourself for these findings. You can go to the graph and get all the, let's say, all the places where you use annotation XYZ. So this is, this is how it's plug-able. Yes? Yes? Excuse me. It's complicated. There is an API which is called TinkerPop, and it has several implementations like Neo4j and ObjectDB. We are using, or we use TitanDB. TitanDB, yes. And TinkerPop is currently switching from 2.x to 3.0, and it was donated to Apache. I recommend it to your attention because it's a very interesting project, and the TitanDB as well was donated, and it has reached 1.0, and it's a really cool project to learn with. The question is whether Windup supports server configuration migration. It depends, because Windup is a platform. If you write rules for migrating the server configuration, then it supports it. But currently, we don't have many rules supporting it because we started work on it, but for the Jbos EE, sorry, Jbos EAP of the coming version, it was done a different way, which is much lighter. I have to admit that Windup has over 200 megabytes, so it's not something to distribute with a server which has about 150 megabytes, just for migration. But you can download it separately, and I think that over the time, there will be some rules for server migration will appear. Definitely for, I think that the rules for EAP upgrade will appear. If not by us, then by community. Thank you for the question. By the way, any more questions? We are out of time. Okay, we are out of time. Thank you for your attention.


Hey folks, welcome back for another episode of Code Club. In this series of episodes, I am trying to build out an image that shows the world colored by the degree of drought being experienced at that latitude and longitude. This is going to take a number of steps. In the last episode, I showed you how I go about organizing a project directory, how I connect that with GitHub, and then how I keep track of my software dependencies using a tool called Kanda, along with a companion tool called Mamba. In this episode, we're going to get the data that we are going to be analyzing with our project. And while we've certainly seen in previous episodes, how we can kind of do this using the browser as well as using R. In today's episode, we're going to use a different tool called Wget. And we're going to write a bash script using Wget to download the files we want. And we're going to do that, like I said, using bash scripts to make it all automated so that it runs directly from the command line without having to go into R or use any other tool like a browser. I'm over in Chrome. I'm going to go ahead and create a new tab. I'll do a search for NOAA GHCN. And so we'll see what that gets us here. And so that gets us a variety of different things. So global historic, climatology network, that's GHCN, the daily. And there's a variety of different files. And I'm pretty sure that we actually don't want the top one. We want this third one. This brings us to the daily summaries page. And so we want the daily data, right? We don't want it aggregated. And so as you can kind of scroll down through here, you see there's a variety of different types of data available to us. I want the NCEI direct download. This brings us to a web page that looks very low frills, right? And so we can see there's all sorts of different links in here. And if I scroll down here, there's a readme.txt file, maybe zoom out a little bit. All right. And so you can see that it tells you information about how to cite this information. And then the download quick start. So what do you want to know, right? And so start by downloading GHCND stations.txt. So remember that, which has the metadata for all stations, it doesn't have the actual data, but the metadata for each of the stations. And including like what where the station is, right, the latitude, longitude of each station, maybe information about where it is. And then we want to download one of the following tar files, right? So there's GHCND all, GHCND, GSN, GHCND, HCN, right? And so if we want all of the data, we want this all.tar.gz file, right? And so we can then uncompress and untar the contents to get like 100,000 different files to include to get all of the daily weather data for each of those weather stations, right? And so if you come down here, you'll see that the all is a directory with dot dly files, which are the files for all of GHCND daily, right? And so that's again, what is in this GHCND all tar.gz file, it is the compressed version of the all directory, right? And so we see that down here, right? So the all tar is the tar file, the gzip compressed files in the all directory. Yeah, so here now I see GHCND all tar.gz. That's 3.3 gigabytes. It is big. That's what we want, because that has all of the data that was in the all directory, right? Okay, so I'm going to come back to my Visual Studio code. And inside of code, I am going to make a new file. And so I will then call this get GHCND all dot bash. And so now this is a bash script. And so at the top of this bash script, I need to indicate to bash that this is a bash script. So that will then know that all of the commands that follow are bash commands, kind of like what I might run down here at the dollar sign here in my drought index directory. So the first line is the shebang line that starts with pound exclamation point, this tells bash or the interpreter that's running the command line, what types of commands are going to follow in this script, right? So I'll do forward slash usr bin env space bash. And so again, that tells bash my command line or interpreter, what types of commands are about to follow, right? So what I could do would be to say LS, right? So I'll go ahead and save that. So down here at my dollar sign, I could type bash, and then code forward slash get GHCND all bash. And so that is then running the LS command, right? And so that is running that command, much like if I were to run it down here, right? So if I were to type LS here, I'd get the same thing. Okay. So this is kind of a silly script, but I'm using it to illustrate a couple of things. I don't really need to say bash, and then the name of the bash script, because I can make this bash script an executable, right? So if I do LS dash LTH on code, I can then see that get GHCND all bash is read writable, right? So it's readable and writable. But it's not executable, right? So I can make it executable by doing ch mod plus x on code forward slash get GHCND all bash. And now if I rerun LS LTH, I now see these x in here, which indicates that get GHCND is executable, right? So now I can do code forward slash get GHCND all bash, run that, and it runs that LS command without me having to say the type of software that needs to run the script, right? Because it's going to grab that from the shebang line, right? So again, I'm sorry, that's if that's a little bit long-winded. But that is a way that we can get an executable script. Now what this allows us to do is we can put any commands in here that we want to be able to run from the command line, but that we don't want to have to manually type out each time. So we'll come back here, and I'm going to get the link to GHCND all tar dot GZ. So I'll right click and then get copy link address. And now what I could do would be to do W get on that link, right? And so one thing to know is that W get doesn't come with a Mac by default. Who knows? And so what I could do instead is I can add W get to my conda environment, right? So I need to make sure that I'm in my conda environment. So I can do conda env list. I'm in my base, right? So I need to conda activate drought. So I'll come over to my browser and do W get on conda. And what I will see is that there is a conda forge version of the W get package. So W get 120 dot three. And so what I can do is I can come back over here and I'll do Mamba install hyphen C conda forge. And then I'll do W get and equals 1.20.3 double check that number. Yep, 120.3. And we'll go ahead and run that very good that all installed. And so now I can do W get hyphen hyphen version. And I should see 1.20.3. Let's see. Yeah, W get 120.3. So I'm going to actually go ahead and come back up to the previous command. And I want W get 120.3. And I will then add that to my environment as a dependency. So W get 120.3. I can save that. I'm not going to burn down and then rebuild the environment right now. I think this is a pretty small minor addition. Maybe before I finish the whole package, I will burn down the environment and recreate it again. When I say burn down, what I mean is delete and then re recreate, right? Okay, so I can now go ahead and close that environment. And so now I have W get accessible to me to go ahead and download this tar gz file. So I would like to though have it be moved into a specific directory. So to put it in a specific directory, I can use hyphen P. And I want it to go then into data. Okay, so we'll go ahead and save that. And we'll then go ahead and let's get a fresh line here on a terminal. And like I showed you before, we could then do code. I get ghcnd all bash. And now it is downloading. And this is going to take about 30 minutes to download as it shows on my internet. I guess it's getting a little bit faster as it goes here. I'm going to go ahead and open up another bash shell here. So let's go ahead and make a new one with the plus sign. And so now if I look at LS data, I see that ghcnd all dot tar dot gz there. And I do ls dash lth, right? And so now I see that as it kind of run that command multiple times, it is getting bigger. And it is going into the right location. If I do get status, I see that I don't get the data slash forward slash ghcnd all tar dot gz. And that's again, because in the previous episode, I added to my dot get ignore file, the data directory, right? So we don't want to be putting a gigantic file like this up into GitHub. And so again, that's the reason we added that to dot get ignore. And again, this is running to go ahead and download this file, the ghcnd all tar dot gz into my data directory. Very good. So that's running. And I can come back to that by going over here. And we still have about 11 minutes to go. Initially, it says it's going to take a really long time. And then it kind of speeds up once it figures out how fast my internet connection is. So this is clearly not something I want to be doing a whole bunch of times, which is why I have a single script to do this, right? I can download this file whenever I want a new version of it without having to basically add all of my code to a single script, or I'm downloading it and processing it because that would just be painful to make, you know, subtle changes to the analysis if I had to download it over and over again, right? So again, this script will be really helpful because you can imagine rerunning the script every day to get a fresh version of the data, I'm going to now repeat this to get the other files that they suggested we get. Again, if I come back, I find the ghcnd stations and ghcnd inventory files, right? So I'm going to go ahead and create new bash scripts for those. And one of the nice things, again, about being here in Visual Studio Code is that I can have multiple terminals open at the same time. So I'm going to go ahead and create another bash script, which I'll call get ghcnd stations dot bash. And I will again, copy over the shebang line. Again, we'll do W get hyphen P into data. And I'm now going to grab that link of the stations, right, the stations dot text. So I'll go ahead and copy that link address. And then I will put that in there and save that. And we'll go ahead and do our chmod to make it executable because if I do LS LTH on code, I now see that I've got that new bash script, but it's not executable, right? So again, I'll do chmod plus x get or I need to do code forward slash get ghcnd stations dot bash. Now again, if I do LS LTH on code, I see that it is executable. And we can then go ahead and do code forward slash get all that stations dot bash. And it's downloading, right? And so this is going to take a couple of minutes to download. It's not gigantic, but it is still about 10 megabytes. Now I want to also get the inventory file, right? So I'm going to go ahead and create another code, which will be get ghcnd inventory dot r. And again, I'm going to basically copy this script over and replace this stations with inventory dot txt. So we'll go ahead and save this as get ghcnd inventory dot r. I don't mean r. I mean bash, right? So I need to go ahead and rename that. And so I can come over here, click on that in the find and explore, click rename, and then make this bash and save that. And so now that's our bash file. And I can go ahead then and do chmod plus x on code, gcnd inventory dot bash. Great. And again, I can run that to get the inventory data. Very good. So that downloaded. And again, I can look in my data directory, I'll do oslth on data. So I see that I've got the all file, the inventory and the stations, right? Those are stored in the data directory. And again, just to prove it to myself, if I do get status, I don't see anything from the data directory showing up as not being tracked or needing to be committed. Great. So again, we have these three bash scripts. I'm still waiting on the all one to finish downloading. It looks like it might be another five minutes. So I'll go ahead and do some editing and we'll check back in with you in about five minutes. So it took about 12 minutes to download on my home internet, which is not super fast, but certainly not something I want to be doing many, many times. As I was waiting for that to run, I was looking back at my three scripts here. And I realize that there's really only one difference between these three scripts. And that's the name of the file that I'm trying to download from the daily directory, right? So I think what I'll do is instead of having these three different scripts, so I'll have a single script, and I can then call each of the three scripts by giving it the name of the file I want. So I'm going to make a couple new files here. And so the first will be get ghcnddata.bash. And I'll go ahead and grab all this and pop that into here and save that. And I can create a variable that I'll call file. And I'll say that equals to dollar sign one. And so dollar sign one means use the first argument after the name of the script from the command line, right? And so then in here, what I can do is I can plop in in curly braces, dollar sign file, and I'll save that. And so now what I can do is I can make it executable so I can do chmod plus x code ghcnddata.bash. And then I know what I could do would be to do code, get ghcnddata.bash. And then the file that I want to give it would be say this inventory file, right? And so now if I do that, I'm planning that this was basically the URL it's trying to get. And it's got this percent seven around it. And so I think it doesn't like my curly braces. So let's go ahead and put just leave it alone. And we'll try that again. And so now that worked, right? So I thought I needed the curly braces, but I don't actually need the curly braces. And so we now have the ghcnd inventory dot text, it downloaded it. And so what you see now is that it saves it to ghcnd inventory dot text dot one, right? And so if I look at LS LTH data, I now see I've got ghcnd inventory dot text, and dot text dot one. And so I think I'd like to do is if that file already exists, I want to go ahead and remove it, right? So I'll then go and do RM dollar sign file to clean this up a little bit. I'll go ahead and remove that ghcnd inventory text one. So I'll do data, like I said, inventory dot one. All right, so let's try running this again. So in my RM, it's complaining that no such file or directory. And that's because file is should be in data, right? So we'll go ahead and try that again. And again, this is why we practice this with smaller files, rather than the big files, because the big files take a long time to run. Alright, so we'll go ahead and run that again. And so we don't see any error messages up here for the RM. And we see that it's now downloading it to ghcnd inventory dot text in data. So now if I do LS LTH on data, I see that I've got the inventory. Let's go ahead and rerun that then with ghcnd stations, right? So we'll remove that inventory and do stations dot txt. We get the stations no error with the RM. And that worked great. So I'm going to create a new script that I will call driver dot bash. And so this driver dot bash is going to be the driver, right, it's going to call all of my scripts. So I'm going to go ahead and give this the shebang line, right? And we'll pop that at the top of driver. And so then we can do code forward slash get underscore ghcnd data dot bash. And now I can put in the all the inventory and the stations, right? And so I'll come back to drivers. So that will run that to download that. And so let me go ahead and grab this. All right. And so now I want to put in the ghcnd hyphen inventory dot txt, I'm pretty sure it was, right, that takes t. And then we also want the stations, right, that's also a txt file, right? And so we can put that there. So again, I'll do a chmod plus x on my driver dot that I can do period forward slash driver dot bash to run that. That means look for driver bash in the current directory. So while that's all running, I'm going to go ahead and open up another bash script. And I'm going to go ahead and just in case go ahead and activate my drought environment. And I'm going to go ahead and get rid of those extra ghcnd scripts. So I'll go ahead and do RM code, get ghcnd stations, inventory, and then all. And now if I look at get status, I see that I've modified the environment file. I've got this general get ghcnd data dot bash script, as well as my driver bash. Alright, so that all ran through. Again, if we look at lslth on data, we see that we have those three ghcnd files. So to try to help motivate something for the next episode, what I'd like to do is one more step. And that will be to get a listing of all of the files in this ghcnd all targz file. Okay. And so again, this, this file is a targz, which means it's compressed. And what is compressed? Well, what's compressed is a tar file.   Perhaps you've heard of people being tarred and feathered a few hundred years ago, pretty atrocious. But things stuck together, right?  So that's a targz file. You can use the tar function to figure out what is in there, right? So we can do tar, tvf on data, and then ghcnd all targz, running this will then output the listing of all of the files, as well as there's when they were made, their size, all sorts of other good stuff like that, right? So I had run tar tvf, that V is for verbose, that T is listing out the files that are in there, right? So if I do tar tf on the data ghcnd all, right, I then get a listing of the directory and the name of the file in there, right? So what I'd like to do is take that command, and I want to redirect the output to a special file, okay? So I'm going to come back up here to code. I'm going to create a new bash script that I'll call get ghcnd all files dot bash. And again, we will grab the chevang line and plop that at the top here. And I'm going to grab this tar command and paste that in, right? So there's no need to retype everything when control C command V are your friends to copy and paste, right? And so now I can output this to a data file. So I'll do data forward slash ghcnd all files dot txt. And we'll go ahead and save that. And now what I can do is again, chmod it to make that executable on code get ghcnd all files dot bash. And now I can again do run all this, right? So I go ahead and copy and paste this down. So while that's running, I'm going to go ahead and add that to the driver, right? And so this now will get out the names of all the files that are in the archive, right? And so maybe what I'll do to organize this a little bit better will be to make it like this, right? And so I can put in comments. So I could say get all of the daily data from all weather stations and generate list of stations, right? And then here I can add another comment to say get listing of types of data found at each weather station, right? And then this third one, I can say get metadata for each weather station. Okay, cool. So now we have comments, we have the code, and we're in good shape. Again, this finished running. So I can now look at the output file. So I'll then do head data forward slash ghcnd all files dot text. And I now see that we've got an empty directory. And then I have all the dl y files, right? So maybe what I'd like to do is modify this to only return those lines that have dot dl y. And so we can do that very straightforward by piping this. And so we've talked about pipes in our well, we can also do pipes in bash, right? And so the pipe here is a vertical line. And I can do grep. And then I can do in quotes, the pattern that I want to match. And so I'll do period dl y. And then we'll redirect that output to this, this file here, right, the data ghcnd, cnd all files dot text, and that should get rid of that empty directory, right? So we'll go ahead and save that. And now rerun this, right? So we'll go ahead and do another head on that. And now we see that empty directory, or the directory ghcnd all that we had here is gone. And it picks right up with the dl y. I could also do wcl to figure out how many lines are in the file, ghcnd all files. And then the 122,010 files in that compressed archive, right? So there's a lot there, right? Maybe one thing I'll do to give it a column name would be to give it to do echo. And I'll say echo file name. And then I'll output that name file name to this text file, right? So I'm going to copy that up here. And so the single greater than sign will create and write to that file, right? And so basically, if we run these two lines, then we're only going to get what we had here, right? Because it'll write file name that word to the file, the text file. But then in the next line, it'll create a new file and write it again, right? And so we'll lose that. So if we want to append, then we need to do two greater than signs, okay? So we'll go ahead and run this. And then I'll rerun our code. Let's go ahead and do another head on this. And we now see that at the top, we have a column called file name. Of course, this is a file with one column. But hey, you can perhaps see down the road, where this might be useful as a table, right? And having a column name for that table, right? So we're trying to help future us out a little bit as we engineer the output of these files. So where are we now? Well, we have three new bash scripts as a result of this episode. We have a script that will download data from the GHCN website. We have a file or a script that will extract the names of all the files in one of those archives. It's not decompressing or unpackaging that archive, it's getting us a listing of the file names. And then we also have this driver.bash script, right? So the nice thing about this driver bash script is it tells us all the things that need to be run. The downside of this bash script, though, is it doesn't tell us whether things actually need to be run, right? And so, you know, this script that extracts the file names doesn't need to be run if we haven't downloaded a new version of GHCND all-target GZ, right? And so, this doesn't keep track of our dependencies. And we can imagine that over the next, you know, seven to 10 episodes here, this driver script might get longer and longer, and we might have more and more dependencies between the different files and the different scripts. And so what we're going to do in the next episode is to learn a new tool that's a lot like a tool I've used in the past called Make. But we're going to use something new. And that's going to be called Snakemake. And that will make it really straightforward to keep track of all the dependencies that we need to get a final output of our drought indices shown as a map on a PNG file up on a website. And so, doing this within Snakemake, with Kanda, with Git, with all these tools coming together, will really help to make a reproducible workflow that, again, we can run every day. So be sure to check out the video that I've got linked over here that will show you exactly how we do that in this next episode. Keep practicing with this, and we'll see you next time for another episode of Code Club.


Going on everyone Sam here with late sports cards been 23, but any prime racing hobby 8 box case number one random hit style Way this will work as we've got 48 participants. Thank you all again To the break. We're also gonna have 48 hits or hit combos. There's base and numbered cards Those will get paired up with like the lower-end relics that we deem the least valuable and Then as we're doing the break Sean will be typing it in once it's done We'll copy them over to this blank one We will roll the dice say it's eight times the nameless will go eight times the hits will go eight times and then Whatever hits next name is what you'll get. I'm interested see what this is all about everybody good luck Good luck beat boxes per case. Let's get after it ladies and gents. Here we go Brian racing. Oh That's rough cookies and cream. I forgot to put any cookies into it. Jeez All right empty See something sick man. I saw a really nice Kevin Harvick patch auto number to five today Like do I see on the back already? All right We're gonna start with a base car that is gonna be Michael McDowell 39 of 49 Michael McDowell 39 of 49 correct next up is gonna be a prime coverage 30 of 99 Michael McDowell again Michael McDowell race worn slash used material looks like fire soup. What is the um? 30 of 99 30 of 99 on the relic This is nice. This next one's dope man. We've got an AJ almond dinger that is gonna be 35 of 99 and that's like Names sheet metal. So that's a race use sheet metal from the car That's actually kind of nasty man Race worn slash used material. Oh, sorry 35 of 99 35 of 99 The sheet metal names AJ almond dinger. We've got nice. That is gonna be prime coverage Jimmy Johnson Nine of 25 Jimmy Johnson fire suit. That's a part of the logo down there as well That's awesome. One of the greatest drivers to ever do it Jimmy Johnson race slash Warren at use material Congrats and good luck on that one everybody nine of 25 Jimmy Johnson We've got first auto of the break is gonna be a Jerry cook signatures That is numbered 47 of 75 Jerry cook on card on card Jerry cook We've got a Corey LeJoy that is gonna be numbered four of 25 on the fire suit sheet metal Jerry's souvenir signatures Jersey auto Corey LeJoy That's sick man. So that's part of fire suit part of the sheet metal as well Corey LeJoy, let's go man. How about on the end told you I liked it Hall of Fame auto Dale Earnhardt jr 55 of 75 Good luck everybody on that one. That is so cool man 55 of 75 Dale jr There he is Autograph guaranteed it is on card as well man. We'll get that into a mag good luck on that everybody That will be mad. That is freaking awesome Great start great start here everybody great start box those Start off is Daniel Suarez 10 of 49 on the base 10 of 49 Daniel Suarez Next up race you sheet metal Harrison Burton 53 of 99 53 of 99 that is three colored sheet metal I did not realize they're gonna have sheet metal relics in this. I'm in dude Next up is gonna be a race use fire suit 98 of 99 Clint Boyer Clint Boyer good stuff there. Good luck on that We've got race used sheet metal is gonna be 70 of 99 Alex Bowman Alex Bowman Bunch of spots coming in here. Thank you everybody Next up first auto this box is Daniel Suarez. That is I don't believe numbered That is just base auto Daniel Suarez Nice just leave and top load this one really quick in case we had another base auto of him Michael out of here, man We've got a holy crap 80 of 99 Jesse Oluji on The fire suit relic that is rookie signatures 85 of 99 Jesse Oluji That is gonna be IW Uji Looks like another mag here everybody. It's gonna be a dual prime signatures Kevin Harvick and Tony Stewart Dude two huge autos to start the break and earn heart in the last one and now a Harvick and Tony Stewart dual auto Insane man. Congrats and good luck everyone on that one. I'm sure it's not numbered Stewart Mag as well. All right again everybody. We got 27 to go on the next one of this 27 to go I've got work to do damn it Chris That's I that's awesome though Chris Congrats, man. All right starting off with a Eric Jones for a 49. Yep base for 49. Yeah, the first card is always gonna be like a number card First up. We've got a Justin Haley 14 of 25 on the tires Race use tire 49 25 14 of 25 Justin Haley that is gonna be a fire suit 14 of 99 Eric Jones And race use fire suit another nice one another nice fire suit is gonna be Kyle Busch 16 or 15 of 25 16 of 25 15 of 25 15 of 25 Kyle Busch on the fire suit Is that the M&M fire suit? Maybe that'd be cool We've got a base auto of Morgan Shepard Morgan Shepard on the base auto. That's a bit of a throwback. I do the same thing just sleeve and top load this one We've got nice one here 62 of 99 is gonna be Todd Gilliland on the auto Todd Gilliland GILIL and 62 of 99 thank you Joseph picking up a spot. Yes, we did mark. It should be uploaded by now Flipping off the screen and Kyle Busch came out And nice one here 93 of 99 Kevin Harvick on the auto God he was such a stud man. He still kind of is Remember back. I used to play like NASCAR 0607 08 was my thing. You love those games Holy cow man Kevin Harvick. Hell yeah, man. Really good. So it's like the last card is always really really really solid Really solid Herman with a spot in number two. We're down to 25 half way there ladies and gents Halfway there 25 to go 25 to go Tog. Oh everybody Yeah, I got you mark. No problem buddy Butter butter brother buddy same thing Got another redemption Nice trackside collection based to 38 to 49 Kyle Petty Kyle Petty 38 to 49 We've got race use fire suits 30 of 99 Sam Meyer MIY you're Sam Meyer 30 of 99 Race to use fire suits. We got the dual race to use fire suit. That is gonna be Ricky Stenhouse, Jr 35 of 99 What is it 30 35 of 99 on the relic Ricky Stenhouse, Jr? We've got a Prime jumbo patch four of 24 Josh Berry dude, that's awesome This is the same one. I saw the McDonald's logo one of one. It was this jumbo prime Relic that is race worn fire suit right there There's gonna be so many cool logos on this man. Josh Berry Prime patch four of 24 Next up is auto of Natalie Decker base auto Natalie Decker Didn't get to Chris ghost. I feel bad for Sean. He didn't get into this line of work to do this much writing No, we've got a That is gonna be nine of 25 sheet metal Chris busher Chris busher on the souvenir signatures sheet metal relic auto nine of 25 and Then the redemption dual auto Daniel Suarez Ross Chastain dual prime signatures Good luck everybody on that one another awesome hit Daniel Suarez and Ross Chastain Wall ride Ross. Oh nice. That's awesome. That is champions 40 of 49 Brad keselowski I'll spell that on the base KES ELO WSKI 40 of 49 it's just on the base. Yes champions. That's cool. We've got race use fire suit Joey Logano 20 of 99 You grew up actually a town over for me He was racing when I was like like he was a little older than me, but He was so good, dude 20 of 99 Joey Logano from Middletown, Connecticut, baby We've got a That is Cole Custer. Nice 10 of 99 on the fire suits 10 of 99 Cole Custer. That is nice. We got another prime jumbo hatch 12 of 24 William Byron William Byron 12 of 24 looks again like the race use fire suit of William Byron That's cool, man. I love these prime Prime patches. I just went here. We got a base auto is gonna be Greg Biffle. This is my guy. I'm a big Greg Biffle fan the number 16 National Guard I Have a little die cast 16 National Guard Pretty awesome really awesome that again just base auto We've got another auto that is gonna be at 26 of 99 Daniel Suarez 26 of 99 and then to end it off. We've got a Matt Kenseth 15 of 49 on The auto he's probably I would say Kenseth my favorite driver of all time the number 17 DeWalt 15 of 49 Ken Seth 15 of 49 Matt Kenseth auto. Yeah, he's my favorite of all time man. He drove the 17 He drove the cat now he drove the DeWalt, right? Matt Kenseth Greg Biffle pride of the Pacific Northwest. I did not know that actually did not know that Chris. That's pretty dope though Another redemption could be big Nice another champions 21 of 49 Martin Truex, Jr. 21 of 49 Martin Truex, Jr. Yes, we've got race use fire suits Martin Truex, Jr. 94 of 99 on the relic 94 of 99. Yep. That's cameras killing me today, man. Apologize everyone try to make it as good as possible. Oh He was awesome to Tyler Reddick 81 of 99 On the fire seats. Yep 81 of 99 Really, that's pretty cool Do not know that we're literally right as you said it G men that is gonna be Jumbo Prime 1 of 27 at Casey Kane Casey Kane, that's K. A. H. N. E. He was really good man. He drove the was a number nine Budweiser a while ago Yeah, I matched him up with the others Nick of Just like the fire suit relics to 99. We've got base auto of Britney Zamora Britney Zamora on the base auto slap with some poisonals Next up is 34 of 99 Eric Jones 34 of 99 Eric Jones on the auto. Yeah, yeah back when Dodgers killing it.  No re and then Priess P. R. E. E. C. E. Dual redemption Look on that one as well everybody To go to go to go to go These jumbo patches look really good man's 48 for that right now Well, you have to Will end with one with a lot But we'll just have to take all the numbered cards and lump them together. I got Daniel Hemric 16 of 49 on the base Daniel Hemric. That is a Brad keselowski 51 of 99 Race use tire K E S. E. L. O. W. S. K. I yeah relic to 51 of 99 Next up. We've got a Joey Logano 21 of 99 on the names tires relic 21 of 99 Joey Logano next up is 20 of 24 William Byron William Byron on the jumbo patch two colors Crime color fire suit and everyone we've got 25 to go in the next one literally halfway there Next up is base auto of Tony Bredinger B. R. E. I. D. I. M. G. E. R. Base auto Yes, sir Oh, this is sick that is gonna be 24 of 50 Zane Smith on The midnight shadow box signature that is clean man the truck series Zane Smith 24 of 50 shadow box auto Congrats on that one and Then another eight of 25 Matt Kenseth auto. This is in the 17th the wall. Let's go I was like my go-to Eight of 25. I was like my go-to guy and the early NASCAR's was the Matt Kenseth 17th the wall All right last box. Good luck here, everybody. Okay, so that should be okay Actually, we'll move all the base and lump them in it should be fine heavy, dude Nice Hall of Fame base 18 of 25 Matt Kenseth. We've got a Ricky Stenhouse, Jr. 9 of 99 on The tire relic Ricky Stenhouse, Jr. 9 of 99 next up is driver hats 8 of 25 Martin true ex, Jr. Martin true ex, Jr. 8 of 25 on the driver hat cards look great, man This is sick. Dude. This is uh, this thing's heavy. This thing is heavy. We've got 19 of 25 Tyler Reddick Tyler Reddick on the sheet metal Showcase swatches as a piece of sheet metal for sure because it is heavy after I believe we had a base auto of her already Yes, we did have a Natalie Decker. So sleeve and top load this one and sticky note at number two That is gonna be a Natalie Decker base auto This will be the second one. So this one will be titled number two right here I'm gonna have Sean sleeve it top load it and number it right now And then we'll sleeve top one we get to it will number the other one number one So I'll be number two is this Natalie Decker. Thank you sir. This is Got you Yes, yes Natalie Decker This one's really cool man 1225 Ryan Newman Signature swatches and another piece of sheet metal another piece of sheet metal Ryan Newman. That's disgusting He drove the which one 12 I think for a while and then 14 of 49 Joey Logano On the autograph good luck on that one everybody Really good luck on that one. That's so cool Joey Logano. All right. I've got a lump a couple of these together really quick everybody That was can go together Rex jr. We'll go with the Should do it right there I believe Hold on. Sorry everybody. Just want to make sure I've got everything right here Kyle is a thing Kyle yeah, aha, there's okay Kyle petty base. That's what I need Sam Meyer perfect and delete row perfect. We are good to go now 48 perfect perfect perfect Katelyn Clark auto is true true Joshua. All right. We're gonna do the random now everybody 48 participants. We got 48 relic Autos and then combos as well 48 and 48. So good luck here. Everybody roll the dice. We're gonna go at four times one two three and four Hans H down to Lance H and Four times on your hits one two three and four That is the Jerry cook auto to 75 down to the Matt Kenseth auto to 49 that is Jerry cook Going to Hans H Co hey K with the Eric Jones auto at Nicholas W. Cole Custer and keselowski raining K with the Kevin Harvick Jeremy T with the Jimmy Johnson John S. Joey Logano Relic Jamie S with the Suarez auto Greg T. Dale Earnhardt Jr auto congrats buddy Matthew B with the Ricky Stenhouse Jr Jamie S with Tony Bredinger Base auto Greg T. Josh Berry patch Chris C with the Michael McDowell base and prime coverage Chris a with the Truex Jr. Hat relic Greg T with the two Eric Joneses Chai with the Wat Casey Kane patch Larry E with the Alex Bowman and Matt Kenseth Hall of Fame Michael D with the Clint Boyer relic John S. Zane Smith shadowbox auto Jason C with the keselowski Relic to 99 Michael S with the Chris busher relic auto We've got Larry E with the Stenhouse Jr. and Daniel Hedmerick kill F at the base Morgan Shepherd Christopher C with the Kevin Harvick Tony Stewart redemption Matthew B with the Tyler Reddick and Truex Jr. Base KLF the Britney Zamora Jamie S Kyle Bush William T. Sam Meyer Kyle petty base Tyler H with the Joey Logano relic Hans H Todd Gilliland Kevin C Daniel Suarez base auto We've got John S with the Harrison Burton and Daniel Suarez base Kenneth M with the Corey LaJoy auto relic Chuck F Jumbo patch of William Byron and then Paul S with the 20 of 24 William Byron John H with the a Woojee auto relic That is going to be Hans H for the Natalie base Decker base auto number one and then Jeremy T with the redemption of Suarez Chastain Christopher J with the Ryan Newman Matthew B with the Tyler Reddick sheet metal William T Matt Kenseth to 25 Nick P Joey Logano auto Sean P with the Bunsen your and the priest do a lot of auto redemption Greg T with the Justin Haley auto tire relic Braiding K with the AG almond Dinger sheet metal sloppy Joe with the Natalie Decker base auto number two Number two Adam B with the Truex Jr. Relic Braiding K with the Greg Biffle base auto and Lance H with the Matt Kenseth auto That will do it for the break everybody. Thanks again for the Phil. It's Phil the next one up


Going on everyone. Sam here with Layton Sports Cards doing the run for 22-23 Flux and 23-24 Prism Draft Basketball Hobby 2 Box Mixer. Number 13, Random Team Style. There's a look again at your random results. As always you can find those on the website under the results tab as well as the link that's currently in chat. So good luck everybody. Let's do it. Again, 7 to go on Star Wars Black. We're gonna start with Prism Draft. We'll do a random no matter what for all the not autographed college cards. Yeah I know. Kyle was very happy about that. And Forrest. Forrest is very happy about that too. Yeah, the Lakers have their full team right now. That's sad dude. It's embarrassing man. Council, Trequie, Beyond Smith, Anthony Black, Rookie, Azar Thompson. That is gonna be Jaylin Slosson to 75. I think he's a king. I believe Jaylin Slosson is a Sacramento king, but I will let you all know that. Yup, Sacramento Kings. Nice one there too. 75. Silver Jaw. Hyper of Seth 1D. Blue, Leaky Black to 199. Silver, Wide Screen, Jimmy Butler. Curry, Sidney Sasoko. Bilal Kulabali. Mattis Buzelec. Nice. Amin Thompson on the rookie auto. There we go. Always forget which Thompson is where. He's the Rocket guy right? Amin is the Rockets. Nice one there. Congrats Houston. Congrats H-Down. Very nice. There you go Rockets. Scott E. There you go Scott. And Bradshaw Silver. Amin Thompson. Omaha Billy to 249. And Anthony Black. We have a couple of you. You know what I'm kind of excited for? We have a couple of McDonald's All-Americans tonight for personals. Guzzella, Sturrant, Jokowi Walter, Jaden Ivey. That is going to be City Sasoko to 99. I believe he is a spur. I'm going to double check that one again. I'm going to verify. I'm going to verify. City Sasoko. Yup, Spurs. Spurs to 99. Silver Kyrie. Hyper of Scotty Barnes. Red, David Singleton to 299. And Chris Ball. Tatum. Colby Jones. Jalen Brown. Derrick Whitehead. Marquise Noel. Dougie McBuckets. Also going to Spurs. Congrats on that Spurs. I'm just going to double check. He feels like he moves around all the time. Nice one there. That is going to the Spurs. That's what I thought. Dougie McBuckets. Whoa! Look at Steven M. Bangles, Browns, Bucks, Rams, and Cowboys all in NT. That's at 9 to go now. Single digits on everything. Steven, thank you, buddy. Thank you so much. I appreciate that, Steven. Silver, Tiger, Campbell. Bryce Sence of all. We got a mojo. Tristan Vukovic to 25. Nice one there. You can just do Otto's first one as well. And Wemby. Nice one there. All right. Onto our box of Flux now. Good luck, everybody. Fluck. As Jake would call it. Three breaks remain all in the single digits. Thank you again. Appreciate that. Fultz. Silver Lebron. Lakers. Kat KD. Grusso. Silver AJ Green. And rookie influx of Oshai Bajie. Julian Champagne. That is to 49 Tre Man for the Thunder on the second year. And Joellen B. B Jets with the Colts. Thank you, B Jets. Down to 8 to go on NT now all of a sudden. 8 to go on NT. Thank you, all. Silver, McCall Bridges. And KD. Chet Holmgren rookie. Silver, Paul George. And Chris Paul, slow motion. Tre Murphy. Keegan Murray to 49 for the Kings. Nice one there, Sacramento. Rookie Otto, that is gonna be Brandon L. Congrats, Brandon. Nice one there, buddy. Brandon L with the Kings. Carl-Anthony Towns, Red. And Benedict Matheran. Christian Wood, Steph Curry, Red. And Damian Low Motion. And if you guys are enjoying the stream, make sure to like and subscribe. Drew Holliday on The Sunrise. Helps us out. Helps you out as well if you'd like to find us in the future. Always turn on post notifications when we go live. Andrew Aiton, Silver Bama Tobaya. Blue, John and Kaminga. Nice one there for the Warriors. Dude, this is the highest scoring. That's why it was 28-28. It's not even half time yet. Oh my God. Josh Minot, Silver Austin Reeves. It is. And Green, 2-5, Lamello Ball. Congrats on that Hornets. I am gonna have Dylan just dust this one a little bit. I think that should come off.  I don't want to touch it or anything.   It literally, as I was handing it over, it blew off, so perfect. Alright, let me do the random really quick for the non-autographed college cards, because there were a couple, there was a billu, a couple of buzelluses, so non-NBA. So again, I'm gonna roll a dice. Whatever team is on top, we'll get all of those. However many it may be, it could be 1, it could be 10, I don't know. 7 times. 1, 2, 3, 4, 5, 6, and 7. Going to the Hawks. The Hawks are gonna get all of the non-autographed college cards. All of the non-autographed college cards. Alright, quick recap of our autos here. We had a Dougie McBuckets, McDermott for the Spurs, Ahmen Thompson, Jalen Slosson, City Sasoko, and Keegan Murray. Pretty good mixer there. Thank you all again for filling that up. Up next is number 14.


If you hold… if you create any tension, either in the body or in the mind, you don't need another enemy in your life. You will just slowly work against yourself, not just in terms of physical health in many different ways, you understand. You will turn your own life energies against you. Today we know very clearly that people who are going through excessive tensions definitely are inviting ailments. There's no question about it. Medically it's a proven fact, isn't it? But much more than that is happening. You are not only inviting health situation… health or ill health situations, you are inviting a whole host of problems in the world because how or in what way you reverberate, accordingly you draw those type of situations towards yourself, those kind of people towards yourself, those kind of ultimate results to your own life. So, what we are talking about is not just about beating the stress, not talking about just being little more peaceful. If you want to create your life the way you want it, you need to take charge of certain fundamentals, otherwise you are just working your own energies against yourself. And this is not… when I said it's a formidable enemy because the very source of creation is here. It's better, it's best that this source of creation is working for you, not against you, isn't it? Yes or no? This such a powerful thing, it must be always working for you. If it works against you, you are finished. Nobody can save you, I'm telling you. If the very source of creation within you begins to work against you, ah, nothing, nothing in this world is going to save you. So it's very, very important. It is not just about being little free from stress, being little more peaceful, little more happy, it's not about that. To create your life the way you want it, it's very important that first of all the body, then the mind, then the energies, these things are attended to with as… at most care. This is as important as you going out and making money, creating your family, doing whatever because all those things you may have and still be… you may be miserable, not only for yourself, you may be causing much misery to everybody around you.  People are causing pain to each other, not because they're good or bad. They're just ignorant of the ways of life, isn't it? When whatever those people started nailing this man, it seems he said they know not what they're doing, all he's saying is ignorance is the only problem, isn't it? Not because they're evil, not because they're some devil's agents. Ignorance is the only problem. They know not what they're doing, that's the only problem, isn't it?


I've always loved Cartoon Network. When I was growing up, it was my favorite channel to watch. Even today it has some good shows, like Adventure Time and Regular Show. One of the newest shows on the network, The Amazing World of Gumball, is a cute and mildly entertaining show. Not really my cup of tea, it's a little immature, but my little brother seems to like it quite a lot. One day, I was watching Adult Swim when I realized that I'd been up so late that I hadn't even kept track of the time. It was already 4 a.m. I don't recall ever watching this late, so I stayed awake to see what would happen when it ended. A little bumper showed up at the bottom of the screen during a commercial break. It said that a special episode of The Amazing World of Gumball was about to come on. I was a little confused about an episode of a very popular new show coming on this early, but I was bored and decided I would watch it, thinking it might come on later in the day so I could spoil it for my brother. Sort of mean, I know. The flashy and energetic intro theme played, although it was played a little differently than I recall. The music was a little different, and the show's logo wasn't animated. Its colors were done rather sloppily as well, almost like something a little kid would do on a doodle board or a glow board. I ignored it, assuming that it was done just for this special episode. The title of the episode was, The Grieving, a sort of sad title, but I didn't really pay too much attention. It began with Gumball, the show's 12-year-old protagonist, standing alone facing a corner of his dimly lit classroom. He looked absolutely miserable, a far cry from the cheerful demeanor he usually had. There was no one else in the room, not even his best friend and adopted brother Daru in the goldfish, and the windows in the room clearly showed the night sky outside. I was really starting to get confused, why would he be at school at night, and why was he standing in the corner all sad and alone? After about what seemed like a minute of Gumball standing somberly in the corner, the scene suddenly changed. We were in Gumball's house, once again the scene is silent and a little disquieting. Richard, Gumball's enormous rabid father, walks in from the kitchen, he looked even more miserable than Gumball had in the previous scene.  He sighs, and slumps down onto the sofa, and starts sobbing intensely, sounding like someone who had just lost something important. I was starting to get a little creeped out, where was the silly fun cartoon that I usually looked forward to watching with my younger brother? This was something completely different. I was beginning to think that this might have been something the creators did as an experiment or something, a test of the animation or sound perhaps. Though it couldn't have been, aside from the opening theme, which was still different from the final shows, the episode had been much quieter than it usually was, only subtle sounds and very little music, and the animation was not anything to write home about either. It was not a bit like an amateur flash on new grounds, the character designs were somewhat sloppy and rushed looking, and the real life backgrounds used for the show looked different. As confused and somewhat frightened as I was, for some reason, I kept watching it.  Like Richard, she wasn't wearing her usual outfit, for some reason, she was in a black dress and was wearing a pretty black hat to match. Nicole sat down on the couch to comfort her husband, although she was looking a bit saddened herself. By this point Richard's crying had began to get more pain and miserable sounding, this wasn't the normal cartoon crying on the show, this was realistic and almost depressing crying, I almost felt like sobbing myself. Finally, after what seemed like hours, the sad scene at their home ended, as it shifted back to the school. We weren't in Gumball's classroom this time, we were in Principal Brown's office. Nicole and Richard were there, in their usual clothes, looking more normal and happy than they had before, but still slightly worried. Principal Brown however, looked extremely sad. He quietly and somberly informed them that their children, Anais and Darwin, were not present after lunch earlier that day. They hadn't been seen at all the rest of the day. Nicole was instantly furious at him, she began spouting various fucks and calls at him that I don't think would have made it on a more mature program like regular show. I was laughing at this, because it seemed sort of funny for Nicole to flip out in this manner and start swearing like a Sailor Energy rated cartoon, but my outlook soon changed when Principal Brown told her something else after she finally had quieted down. His eyes began to tear up as he informed them that they eventually were found, but they had not been found alive. He then went into graphic and merely nauseating detail, describing how their bodies were found, their parents sitting in utter shock. I could hardly believe what was happening, how could such a cheery and fun kid's show be taking such a dark and twisted turn. I was considering turning the television off, but I was too scared to be left in the dark by now, merely frozen by fear and disturbed intensely at the terrible things that he was saying. Another flashback, the scene was earlier that day, and the animation in this scene was even worse than earlier. I don't remember it very clearly, but I think he began his recollection by saying that the school had called the police department when they first turned up missing, believing that the kids had simply ran off and decided to skip school. They said it was very uncharacteristic of both Darwin and Anayas to go skipping school like delinquents. Darwin was a little naive and a bit ditzy, but he was a good kid and wouldn't have even dreamed of doing something like that, and Anayas was even less likely to run away. She was a straight-A student, despite being only four, which also troubled the police, seeing as a defenseless four-year-old little girl was missing as well as an older boy. The school had been thoroughly checked, so the police started to search the heavily-wounded area outside of the school. It took little time for the police to discover the horrifying fate of Anayas. In a small clearing outside of the school, Anayas's head was found in a small box. You likely would have expected something like that to be shown in the show's cutesy art style, but it was nothing like that at all. Realistic blood covered the box, inside and out, while Anayas's head was done in the normal style, but was drenched in blood and some other fluids, not all of them hers apparently. There was a note in the box, seemingly written in her blood. It was never stated during the episode what exactly was written on the note, but it apparently lead to the rest of her remains and Darwin's heavily mutilated corpse. What I remember most about this scene was how out of place it seemed. All the blood and gore from Darwin and Anayas's slaughtered and dismembered remains was done in a very realistic and disturbing way. It looked like the scene had been taken from a crime scene photographed on by a professional, not something from a cartoon. The way this scene was animated was different from most of the show as well. You may know that the characters from this series are done in vastly differing animation styles, from flash animation, to CGI, and I think that there's even a character done by someone putting their chin upside down to make a face. This particular scene wasn't like anything I had ever seen on the show before. Every little detail on Darwin's face was clearly illustrated.  Anayas fared no better, or what was left of her anyway. She was naked and her stomach had been slit open, her intestines were strewn around the trees and bushes in the woods, done once again in a very morbid and realistic style. I was feeling very ill by the time this incredibly disturbing flashback had come to an end, so I quickly ran to the bathroom to vomit. I was feeling better after objecting, so I had realized that I had good timing and had ran to the bathroom during a commercial. It was then I noticed that the show had been running twice as long, it usually ran for 11 minutes, but this episode was running for about 30. By then I was wondering if there was any information on the grieving on IMDB or something, so while the commercials were still playing I looked up some information about this episode on Google. Nothing came up, no information remotely similar to the plot or name of this episode existed anywhere. Now incredibly scared and wondering if anyone else was watching, I quickly dialed my brother Larry and asked him to turn on Cartoon Network and see if he was seeing the same shit that I was. He was pretty mad that I woke him up at this hour, but he's a nice guy and told me he would see for me. I thanked him and stayed on the line as the show came back from commercial break. The scene had thankfully panned away from the horrific sight of the children mutilated and was back to the principal's office. I asked Larry if he saw some cartoon animals talking or crying, since that was what they were doing on my TV. To my surprise, he said that he saw nothing like that, instead it was a run of an old Looney Tunes shirt. In utter shock, I dropped the phone and ran over to the TV to turn it off and as hard as I pressed the buttons it would not shut off at all. I tried every single button and none of them did a thing. I tried unplugging the whole thing as well, but nothing worked. The TV stayed on no matter what.  My door was locked from the outside somehow, and the door to my bathroom was now locked as well. It seemed that I had no choice but to call the police, since my other family members were gone that night, was the reason I could stay up so late to watch adult swim in the first place. When I hurriedly dialed the number, I accidentally dropped my cell phone into my cup of Pepsi. I was very scared, and had no choice but to finish the episode. I turned on all the lights in my room and got under the covers, hiding like my little brother does when I make him watch scary movies with me. I had apparently missed a little bit, but Gumball's parents were still talking to Principal Brown, so not that much. Nicole was asking him if Gumball was alright, apparently since she hadn't remembered him when Principal Brown told her what had happened to Darwin and Anise. He looked slightly confused and shocked for a moment, and explained to her that he thought Gumball was out sick today and he had spent the day at home by himself with a stomach bug. Nicole screamed and wailed, while Richard quietly told him in a very out-of-character voice that they thought Gumball had gone on the bus this morning, but it didn't seem that way. The police were called once again to search the building and the small forest outside of Elmore Junior High. They had found him in Miss Simeon's classroom, hanging by a noose with a blood-covered knife behind him and blood covering his clothing. The episode ended with the shot of Gumball's dead body hanging there in the corner fading to black. The credits rolled silently, not likely usual way-cartoon network annoyingly airs a promo that squishes half the screen. These credits rolled unusually slow and they weren't that fun to watch either.  I only recognized Ben Bucklitt's name, as he was the creator of the show, the rest were people I'd never heard of. The copyright notice at the end said, Cartoon Network Studios, 2001. Which was incredibly odd, seeing as the show was new for 2011. After all that was over, the screen went too static for a split second, during which some incredibly creepy and shocking video clips were shown between static intervals. I can still remember them all very clearly. The first was a picture of a person in a plague doctor outfit, those always scared me for some reason, and the way the person in the suit was filmed was just as bad. A red light, something that freaks me out incredibly, was shown over the clip. The next was what seemed like a video being played very quickly, over and over of a kitten's face being squished by a woman wearing high heels. Which was strange because a so-called friend of mine sent me a picture yesterday of a cat being stepped on and killed, similar to the kitten in the video. The last one was the one that disturbed me the most and made me want to both cry and vomit my guts out. It was my little brother, or at least a small child who looked very similar to him, being shot in the face by a person who looked like my father. You could clearly see the child's brains and blood splatter on the wall. I began to sob uncontrollably after that traumatizing clip, so much so that I passed out. When I woke up, my door wasn't locked, and my television was turned off. I went to call the police on the home phone in my kitchen and reports that I had seen some very disturbing things on TV and that my doors had been locked. When they arrived, they could find nothing like what I remembered from early this morning. I told my brother about the episode, and he fainted. My internet history was even cleared. They were angry at me, and just assumed that I had a bad nightmare when I was sure I hadn't. Good thing I recorded the episode. The officers were shocked at what I showed them. One of the officers felt bad for me and took me out to a small diner so I could recollect my thoughts. At the diner, I remembered that my family was out visiting my aunt, and they were supposed to be back by noon or so. It was already 11, so the officer and I drove back only to find a whole squad of police cars and even some government agents at my house. They explained to me that my little brother was missing and that my mother and father were major suspects. I was freaking out and trying to tell them about the disturbing clip of the boy who looked like my brother being shocked in the head, but they wouldn't listen. I stayed with my older brother, Larry, who wouldn't believe me either, still insisting that all he saw was an old Looney Tunes cartoon, and nothing at all creepy or weird. The cops eventually told me that they would contact Turner Broadcasting and tell them about the incident. A representative of Turner Broadcasting came to my cousin's house to talk to me in private about what I had seen and experienced that night. He was very kind, but it all seemed a little like some sort of front. After I could tell him all I remembered, he agreed to play back that base programming from when the incident with the disturbing Gumball episode had occurred. To my shock, all that was airing at that time was an old Looney Tunes short, nothing more, nothing less. I hysterically sobbed and moaned that what I had experienced and seen was completely real, but no one listened. Eventually, I discovered that Ben Bucklet had a Twitter account, so I sent a message about the episode and this was the reply I got. One thing, how in the heck did you find that? I never ever ever thought I would think about that old shame again. Don't tell anyone is Sarah. Yes, that's my name, but the amazing world of Gumball goes back further than you know. I used to have a really boring job as a teen, and I sketched little drawings of the Wattersons and friends. The episode you saw was never supposed to be seen by anyone, but the end of few friends of mine. It was a very, very awful thing to do, but we made the episode as a joke. A guy from my old job, who everyone hated, had lost a child to a crazed serial killer, who is apparently still out there somewhere. Anyway, we made it so we could make fun of how he came into work usually crying like a fool, which is why you saw Mr. and Mrs. Watterson cry so much in the episode. I know I am deeply sorry for what I did, which is why I tried to bury that stupid thing years ago. Literally, I went out into the countryside with my mates and dug a hole and buried it. What I don't get though, is how you described the blood and guts and stuff. We didn't have any scene with Darwin and Anais's bodies being found, all that happens in the episode is the parents are informed of the kids being found dead and them crying like crazy. We didn't even draw anything in the episode like that, at all. We are not that sick. Now, this is my theory. The lunatic who killed the man's child found the tape we buried, watched it, and heavily edited it. Then he hijacked the local TV station near, redacted, somehow. I blot out the name of my city, I'm paranoid enough, and it's a small town. And got the episode to air on your local cartoon network station. Now, why your brother couldn't see it, I have no idea, why it seems you're the only one who saw it. I have no idea either. Sorry, but I just don't know. Now, for the explanation you have been waiting for, the clips at the end. I don't know, I just don't know anymore. I'm deeply sorry, from the bottom of my heart, but I don't know why those clips were aired, I just don't. I am sorry, I really am, but me and my mates are just the ones who made those scenes with Richard and Nicole crying, that's it. I'm so sorry Sarah, I'm so deeply sorry. Best wishes, Ben Bartlett and everyone involved with The Grieving.  Or better yet, watch it at your own risk.


Hey everybody, welcome to JSA TV and JSA podcast, the newsroom for telecom and data center professionals. I'm Jamie Scott Okutaya joining you live from ITW 2022. This is so cool. We are live streaming here guys from this wonderful show and it's 15th year. So congratulations ITW for 15 years of excellency. Joining me today, I'm very excited to introduce you all to Howard Stevens. He is the CEO of Tomia. So for our viewers who might not know, tell us a little bit about Tomia. Well, thank you Jamie and it's very nice to be with you today. Very nice to be back in person with all of our industry colleagues. So Tomia, we're in the business of helping the mobile network operators operate into connectivity together in their business to business relationships. So whether you're phoning someone abroad or whether you get on an aircraft which we're starting to do again and you phone home, we help facilitate all of those relationships between the operators. Well done, well done. So tell me, what are some of the mega trends that you are seeing in the wholesale industry currently? Yeah, I mean, the first mega trend quite frankly, given that we're in the business of interoperator connectivity in roaming is that we're actually starting to get on planes again. So the last two, indeed the last two years has been pretty challenging for us all but that's all starting to change. And I think with that change comes the operators also starting not to think about cost saving in the interconnectivity world, but how do you invest and how do you grow? And in terms of the other trends, one of the interesting things about COVID is when we stopped traveling on aircraft and the operators still saw roaming sims in their network ultimately it had to be machines. So it helped the operators focus quite significantly on what was happening in their networks and what was driving these sims and IoT became a reality. And I think we're seeing now that people are looking not just to understand where those sims are but how to rate them and monetize them. And we're going on several journeys with our customers helping them do that. And 5G is now starting to happen as well. So 5G will accelerate all of that IoT. And ultimately all this is about enterprise. So I think the last overarching trend is that enterprise and reaching out to your enterprises and being closer to them and seeing that as an opportunity is the overarching trend that we're seeing in the marketplace. Unbelievable, so interesting. And of course, leveraging all these traditional services to address new business needs really does require this level of sophistication. And I can see how, how has Tomia positioned to really support your customers to reduce this complexity that lies within the process? Yeah, so the traditional way of operating is going to be changing, particularly in the network roaming side as IoT and 5G comes to the fore. So the average operator today is managing two, three, 400 roaming connections with their partners and within those two to 300 connections they're managing voice, SMS and data. And there's been a very traditional way of moving those connections around to make sure they're getting the right sort of efficiency from a margin and a revenue point of view. But what we're seeing with IoT is that it's not going to be individual partner agreements, there's going to be individual agreements per line of business for IoT. So for shipping containers, there'll be a contract. For solar panels, there'll be a contract. For cars, there'll be a contract. So this means that you're going to be dealing with tens of thousands of agreements as an operator. So you have a lot of complexity coming if you're going to be able to manage that in the most effective way. So we're in a very unique position to help them with that complexity and pull in automation. So we have the ability, we have all the ability and the history on the network roaming side and on the clearing side. And we have a very, very powerful analytics tool in the middle to allow the operators to automate significantly larger parts of that process to ensure that they don't get caught out with that complexity. So simplify it for them and automate it for them. I love it. Simplification and automation absolutely makes sense. Now, when we talk A2P messaging, applications to person messaging, it's been around for a long time. It has. But you guys, particularly now, doing a little bit different MNOs, looking for something a little bit different now in the marketplace? Yeah, so this is a, this is quite an interesting one actually because I've been involved in A2P directly myself over the years. And everyone thought that text messaging was going to fade away with new technologies coming in. But that just simply hasn't happened. And it is still the most trusted mechanism today for people to communicate with each other. The MNOs traditionally have handed off a lot of the relationship building and the connection side to the enterprise, to aggregators. But with the text messaging continuing to be so strong, this really has started to become an opportunity, I think, for the mobile network operators to take back that relationship and also to control the pricing in their own environment. And we're seeing a lot of mobile network operators actually now take that control back and we're helping them and can facilitate doing that. Given all the history we have on the board, it's very, very similar to do that from a text messaging point of view. And we've done that with a few operators with many more talking to us. So it's something that just hasn't gone away and continues to deliver value for the mobile network operators. So long may it continue? Yeah, well, I mean, I know if I'm getting a text, I feel a little bit more like it's a secure, I mean, how many even texts to confirm applications do we see out there? Absolutely, here to stay. And obviously, Tomeya leading the way. Can our viewers learn where they can go to learn more? Well, they can come onto our website, Tomeya Global, or they can reach out to us here at the show if you happen to be at ITW. So feel free to come by our booth on the exhibition board. It was so wonderful, Howard, to have you here on JSA TV. Thank you for your time, especially during this great, crazy day of ITW. Welcome back, everybody. And thank you so much for joining us. Thank you viewers for tuning in to JSA TV and JSA Podcast. As always, guys, think green and happy networking.


Our man of the match, Brandon Parks, scored five goals for the entire season. NGC man of the match, Trophy, goes to you five for the entire season. And your hat trick today, how do you feel about your performance? How do you feel about the team's performance? I feel very good about my performance. I've been training two hard pre-season, very hard for this performance and come out on the field and show you today. Well, it looks very difficult for you all to even get the Premiership Division title, but are your goals focused now on intercall and in what way? Yes, our goal is to focus on the intercall, to place first in the intercall and in all the intercall. Well, all the best to you, Brandon Parks, congratulations. Our NGC man of the match, Brent Sancho is with another player that made an impact today. Well, thank you very much, Hans. It's very unusual here at Sportsmax that we do a second, of course, mention for man of the match and that young Keelan Williams with his second half exploits have certainly deserved the opportunity to speak to us here on camera. Keelan, of course, unfortunate with the loss. Talk to us about your second half performance in particular. Your two goals and assists throughout the game. Well, the first half, we wasn't focused and when we come off and next half, well, coach talked us and let us concentrate and pass the ball a little more, play three wingers and after we started to communicate more, second half and well, when I was going to the goal, I just see the goal open and I just shoot and I say, yeah. It was all for you. Yeah, it was all for me and just confidence just rise up and we started to score more. Well, we saw the confidence and of course, from your first goal, as we just saw into your second goal, where you started to take things into your own hands as a player, it just felt that if we had more time, you might have gotten back some of those goals. Tell us about that confidence and how do you take that confidence into your next fixture? Well, for a few games, I always tell them, I go in and take them on, that's be there to be for the scrap something. I show I go into score. I tell them I go into score, I have to score and everything can rise up. Yeah. Thank you very much, young killer. Congratulations on your performance and all the best for the rest of the season. Of course, an honourable mention to young Williams and what he's been able to produce in this half of