Welcome to this session in the course on data structures and algorithms. We saw last time the logic of evaluating a post fix expression using a stack. In this session, we will look at the actual computer program which implements that logic. Let us very briefly recapitulate the algorithm that we had developed last time. In a post fix expression as an input string, we want to output the numerical value of the evaluated expression. So, the steps are very simple really. First is get values of all operands present in the post fix expression. Once we get that, we traverse the post fix expression character by character. We examine each character. If the character is an operand, we push the value of that operand on the stack. If the character is an operator, we need to evaluate that operator by doing the following. Assign the value from the top of the stack to a variable operand 2, pop the element from the stack. Assign the value from the top of the stack to a variable operand 1, pop the element from the stack. So, we got two top operands which are stored on the stack into operand 1 and operand 2. Evaluate the result of operand 1 and operand 2 using the current operator character that we have encountered and push the result back on the stack. Finally, when this entire post fix expression string is traversed, at the end we shall have the final result on the stack which will return the top value of the stack as our answer. This simple algorithm, let us quickly see the C plus plus program which implements this algorithm. In our program, we will write several functions. The first function is get values. Now, all that it does is, it is to store the values of the operands in the array, the values array will contain individual values in different elements. The parameter to this function is post fix expression and the array is operator is another function which just looks at the current character and it checks whether the character is an operator or not. Calculate values is actually the function which will take operand 1 and operand 2 and the operator will evaluate the operand 1 and operand 2 with the operator that has been given and it will calculate the resultant value. Evaluate post fix is the entire post fix operation and this is the one which is called from the main program will do all the calculations for the entire expression and return the final value. So, it is a simple set of functions that we will see. We will let us look at now individual functions and the implementation of the entire logic. Let us look at the is operator function. What is the objective? Examine the current character. If it is an operator return true, s return false. So, very simple our operators for the current example is plus, minus, star, slash or raise to. If the current character is any one of these it will return true, s return false. Simple logic. Now, let us look at the character being an operand. What are we supposed to do if the character is an operand? We have to accept the value of the operand from the user and store it in an array value. Here we do an interesting thing. We use associative arrays for storing values. Those of you who have done CS101x course from IIT Bombay would recall that in one of the examples on digital image processing for calculating histograms, we had used an associative array. Now, let me explain the purpose of using an associative array here. Ordinarily for few operands, we need only a small array to store the values of these operands. Now, in our examples we are using operands represented by a single character small a to z or capital A to z. Note that their ASCII course are contained within the 0 to 255 which is the total span of all ASCII course. Now imagine that if we use a value array which is of size 256. Now, this is a large array but suppose we said that the value of an operand A will be stored in that element which corresponds to the ASCII code of A. Value of an operand capital P will be stored in that element of this array which corresponds to the ASCII code of operand character P. This way while many of the locations in the array will remain unutilized but we will be able to use the ASCII code of the operand directly as an index of this array. So, for example, if we have a postfix expression AC plus here A and C are operands assume that the user has entered number 5 for value of operand A and number 7 for operand C. What we will do is we store the value 5 in the 97th element of the value array. Why because 97 is the ASCII code of A. So, you see we do not require to search for the actual operand course and then find out in which location the value will be stored etcetera. We directly look at the operand directly find out its ASCII value and directly use it as an index. Similarly, if somebody inputs a value 7 for operand C we know the operand C we directly use the ASCII code of the operand C which is 99 and push the value 7 in 99th element of the array. This makes our program work far more efficiently. Let us look at the implementation of this in the get values function. The get values functions if you recall if the character is an operand we are supposed to accept the value of the operand from the user and store it in the array value. This is the same explanation that we have seen in the last slide, but this is the implementation of our logic. We define a care as current care and examine the postfix string. If the current care is an operator we are not supposed to do anything here, but if the current care is not an operator we will come out here. This is an operand now we need to collect the value of the operand. We ask the user to enter the value of the current care operator and whatever value the user enters is directly inserted into the current careth element of the value which corresponds to the ASCII code of the care. So, see how easily every value is captured and directly inserted at its logical place in the large array value. When we have completed all of this we would have collected all the values. Note that the postfix expression string itself will contain operands as well as operators. We are ignoring all operators we are only looking at operands and collecting values of those operands. Next we look at actually calculating the value of the operation. So, we want to perform the operation on operand 1 and operand 2 and the result is to be returned to the function evaluate postfix. This is the function calculate value. It has two operands and the operator as the parameters is extremely simple. If operator is plus or minus or star or slash or raise to we perform the necessary operation and this is the end of the function. The result is returned simply like this here. Next we look at the evaluate postfix function. This will get the postfix expression array itself as a parameter. What it is doing? We first declare the stack a float stack because that is what will contain all the values. There is a current care here. We start examining the postfix array starting with i equal to 0. We of course will require result operand 1, operand 2 and remember the array of values 256 size is the array but it will contain some elements with appropriate values corresponding to the operands that we have encountered in the postfix array. Please remember before coming here we would have already collected the values in this array. By get values giving the postfix string and the value array this will get all the values from the user. Now we will examine each and every character of the postfix string. Assign the postfix ith character to current care and based on the current care we have to evaluate. Now there is a code for evaluation which will have to be written here. Once that code is executed I will go to the next character. So every character in the postfix expression I will handle we will see the code for evaluation in a moment on the next line. When this entire by loop ends we would have completed all our evaluation and we know that the final result will be the top of the stack. We return the stack dot top which is the final answer is the end of the function. Let us look at the code for evaluation. In this program the code for evaluation is expanded here. There are two possibilities. Remember we are looking at the current character. The current character is either an operand or an operator. If the current character is an operator then we have to evaluate that operation. If not it is an operand we simply push the value on to the stack. What is the value? Value current care. Remember current care is an operand its ASCII code itself serves as an index to the array value which will get pushed on the stack. Let us look at how the actual operation is evaluated if the character is an operator. What we are supposed to do? You recall from that logic that we have examined earlier. We first take the top of the stack and assign it to operand 2. Then we pop that element out. Then we take the top of the stack and assign it to operand 1. We pop that element out. The result is simply calculated by using the calculate values function which we had written earlier which takes operand 1, operand 2 and the current care which is the operation. Finally it will result into the calculated value and that needs to be pushed on to top of the stack. This completes the entire operation associated with one operator. So, anytime we come across an operator this is what will be executed. Anytime we come across an operand this is what will be executed. You will notice that at the end I would have completed the entire evaluation when this while loop ends and that is the end of the function. We have in this session looked at a C++ program which implements evaluation of a post fix expression using a stack. This concludes our examples of use of stack in various applications. Thank you.


Hello and welcome, everyone. Thank you for joining in myself, Karan Kural. And I welcome you to the session on Become Black Ops QA with Selenium 4BD DevTools API by Anton Angleff. Thank you, Anton, for joining us. And we are glad you can join us today. All right. After this first delay, I hope that you already enjoyed your coffee and we are ready. So as you can see from the title, we are going to talk about new Selenium 4 and CDP. And as you know, many browsers provide a set of tools that use the work of developers. They are also known as DevTools. For example, Google Chrome developer tools use the Chrome DevTools protocol called CDP short, which can be used nowadays in Selenium 4 tests. And many of its features are marked as experimental and often deprecated quite fast. And as you know, the protocol is not very stable and some of the features depend on the browser versions, as you will see in coded demos. So also, as the name suggests, it is available for Chrome browsers only. And if you want to use it with Firefox or Safari, you cannot. So to solve these problems, WebDriver maintainers have started working on this next generation cross-browser browser automation-slash-tasting API called WebDriver Bidirectional Protocol. So it is a better idea usually to couple your automated tests to a specific browser version. So it's recommended to use bidirectional APIs whenever it's possible. So you should be careful with the CDP usage in your tests. However, it might be useful as we will discuss. And yeah, so keeping all this in mind, let's review the endless possibility of these two APIs. And also in Maya, I'm Anton Andriov. Maybe many of you know me from my website, AutomatedPlanet.com and read some of the many articles or from the YouTube videos on the landing test channel. Also, maybe you own one of the books about design patterns, about high-quality automated tests. So one of these, I have my own company. We are many people working on enterprise, big-scale projects establishing test automation. And as a hobby, I write books and talk to conferences. So here is our short agenda. First, we'll talk about geolocation testing, globalization, localization, time zone, and other types of testing. First, we will see examples how to do this via CDP APIs. Next, we'll investigate the bidirectional APIs and how we can use them to troubleshoot tests and improve the overall maintaining process of tests. We'll talk about, for example, the PIN script method, collecting JavaScript errors, DOM mutations, console walks. And the next big part is related to capturing and monitoring networking traffic. And I will show you what type of validation we can make. First, all of these are related to simulating, yeah. So all of this is related to simulating networking speeds and other parameters. And also, we'll talk about what is fast and what are the proper metrics to work for and how to collect them using CDNM. Let's begin. First, a little bit of theory and then we'll move to code examples. Because, you know, you need to understand the different types of testing we can utilize the CDP. Yeah. So probably you have heard the terms internationalization. It's like also called globalization and localization testing. Where they mean different things, I mean the localization and internationalization. And let's review them and later I will show you how to do these things with CDP. They have the same goal to ensure an exceptional user experience for global market users. And if we need to give a definition to localization, it's about adopting the UI and the content for a specific region and look out. And also it takes into consideration the region's cultural and linguistic specifics. And during this type of testing, we may verify translated text, addresses, format sequences, keyboard usage, visual lines to the culture, time slash currency formats, alignment with data. And if we need to manually perform testing, we can use the DevTools as depicted in the image. You can change below here the coordinates, you can change the time zone and the look out. You can do that from the sensors view in the DevTools. Here is another example, an AliExpress user can choose the preferred language and the page contents are translated into that language. This is where localization comes into the picture where the contents are localized to meet the requirements of the specific culture and region. And this is an example of AliExpress in Japanese. And what about the globalization also called as internationalization testing? It focuses more on product features and capabilities that allow the app to be used globally. For example, be able to change the language of the website, the previous AliExpress example. This you may check are support for multiple languages, support for different time zones, support for various number formats, text in other formats like left to right, right to left. And another globalization feature of the website is offering personalized items based on where you're located. And of course, time zone testing is important. Here I found an image. Here's an example for Kindle, Amazon Kindle come down where for a short period of time, you get some discounts, right? And here is another image. However, this is related to the time zone of the user. I took the previous screenshot with U.S. time zone set while the following one with Australian time zone configured. And Canon Bear Australia is 16 hours ahead of Washington DC, United States. So the deal wasn't yet active there. So time zone testing is something that you need to consider. And lastly, if we need to compare localization to globalization testing. We want to test that everything continues to work when we change the settings. In contrast, we do localization testing to verify that the functionality usability interoperability and other testing methodologies to build a product with global appeal. For example, in internationalization testing. If a linguistic accuracy has a lower priority, then, yeah, you can ask your questions in an agent of the talk will discuss them. Yeah, so for example, in internationalization testing, linguistic accuracy has a lower priority than finding issues in product design that could impact globalization capabilities. On the other hand, this is top priority while doing localization testing. And last thing is the name is just a location testing is a type of testing where you perform tests on your website from IPs from various countries worldwide. And here are some of the features that can be tested with Gail location browser testing. The first one is called go fencing, which is a method to send notifications to your users through mobiles by leveraging the geographical geographical area specified by the user while using your web application. For example, last time I traveled to Munich, Germany, I received a notification for my booking complication regarding local places to visit. Another one is called gail tagging from the left, which allows you to put geographical tag over social media elements such as photos, videos, cure codes, etc. And using gail tagging, you can implement geographically based authentication through QR code identification or on your web application. And the last thing is called gail blocking. And it's used to apply restrictions to your web app concerning the walls and the norms of a country and many online streaming companies such as Disney, Netflix, HBO and more use gail blocking to deliver rich media content based on their country norms. For example, you may have seen the current image while accessing the video through a thumbnail on YouTube. And let's see an example of how you can do that with CDP. As I said, you can do that with chromium. So this is Chrome driver edge driver. We can go first, we need to go first, get dev tools, and then we need to create a session. And after that, this is Java. So in Java, we have this send method where after that you need to use the particular domain, whether this is simulation network performance security and then this particular domain classes they give you access to the various methods that you can use. Later in a minute I'm going to show you the documentation. So, at least for setting the geolocation, you have three options here. The first two are really important. These are the longitude and longitude. In Java, we use this, there's the case is written in a way where since you can miss some of the parameters that can be empty, sometimes you may use optional empty or optional and then set it. So today from the emulation domain, you can set the time zone and the local, you can find the list of all of them on Wikipedia, for example. And there are two places that you need to check. The first one, of course, is the official documentation. And as you can see they are separated from DevTools and bidirectional API. We'll talk more about it, but as I said, CDP or Chrome DevTools, it's coupled to the Chromium engine. So, yeah, basically it's available in Chrome only. While the bidirectional API it's available on, it should be available on browsers. And as you can see, there are not so many examples really. Here, we have only the maybe most used of them. However, as you know, we can do many, many things with CDP and maybe the best place to check what are the available options because maybe if you use it in the past, you notice that there are so many methods in this particular domain. And what are the domains? This is, by the way, the official Chrome DevTools GitHub page or documentation. And here, as you can see, there are many, many different domains. This is actually the emulation domain. And as you can see there, like, we saw three examples and there are three things in the Selenium doc. However, there are so many other options here. And it's the same for all of the different domains. And this is how actually while I was working on my new book, actually I was experimenting with these different options that we have here. However, this is an excellent place to see what is set as experimental because when it's marked as experimental, this means that it can be deprecated soon and I mean it's not reliable to put it in your tests. And when you click on them, you can see like a description what this is doing and there is a description for some of the parameters. Sometimes they're not really described well, so you'll have to guess and try it. In a couple of examples, I looked into the official Chrome source code to find out what these are doing. But yeah, this is something that you need to check. But this was related to if you run your tests locally on your local browsers. However, as you know, many of them in our, you know, when we are on our testing continuous integration usually we use some kind of Selenium grid, no matter whether it's a local grid, or you run them in Docker or you use your or you use Docker based grid or commercial platforms such as slender the source labs browser second others. There's no problem now to use them in slender for you just generate the capabilities from. If it's a commercial grid, then they have this capabilities websites that they can generate the capabilities for you, you need to be careful there because in order to use CDP. Of course you need to use chromium but also they have this flag where you enable the CDP and also. The other thing that you want to use Selenium for that there is a version of Selenium. And then the another important thing that you need to do is to initialize this augmenter class, and then co augmenter augment driver, this is basically will improve the base of the remote web driver and it will add the capabilities of calling get DevTools. Otherwise the code after that is the same. And let's see an example for the geolocation testing before moving. I was, you know, all the code that I'm going to show you actually it's open sourced and I did. And I'm recording almost each week videos for another test YouTube channel regarding Selenium for and we have all of these free videos there that they're really won't come all the subjects that I will touch. I won't be able, you know, because they're like separate lectures of them. And during the lecture about geolocation testing, I use this website to demonstrate the geolocation testing. It's like a simple GPS coordinates website that basically when you press this button, it will detect your current location. And then you can provide a second location and calculate the distances. This is just for for the example of using these sensors about reading the GPS coordinates, however, many often this modern web applications, for example, the Starbucks app. They have Starbucks here in Bulgaria and you know they they have on their web store. They detect where you are and they show you like the nearest shop. And if you have to test something like this, you need to be able to simulate the coordinates right and the simplest way to do it with is with Chrome DevTools you can change the coordinates. And many often in this enterprise projects that I'm involved we do exactly that. So, in order to demonstrate that, let me show you some code for the geolocation again. This repo lambda test Selenium for Java tutorial you can call it from GitHub. The geolocation testing. The thing that they did is like in the in the first test in in here I use Maven J unit. I start the Chrome maximize it and then in order to simulate something I create a session, and I use the simulation set geolocation right. So the thing that I showed you before, the interesting part is here where I created the data driven test where basically I provide different coordinates for the different capitals of the cities around the world. And I calculate the distance between me and this capital. And I have here the predefined distances. And this test will be run for every of this particular sets of coordinates. And as you can see every time I'm initializing the new Chrome. Then I'm creating a new DevTools session. And I'm overriding set the geolocation override. And then I just, you know, go to the example as I told you basically, I click the button that that detects where I am. And then I click distance and check whether the correct distance was calculated or not. This is not really so important what exactly we do the Selenium. This is the important part where we can we use it. That's what I wanted to show you. Now, trouble shooting as a tool creator for me, maybe one of the most exciting new functionalities that even you cannot find in the Selenium docs but I'm going to show it to you. It's about executing JavaScript on every page without using the JavaScript executor every time. Like I'm the creator of maybe one of the biggest C-sharp open source frameworks using Selenium. So in the past, it was still doable with prior Selenium 4. And we had this functionality score for example, highlighting on user interaction in the browser, which is quite useful, especially when you need to troubleshoot your test because you are seeing what your script is doing, especially if you're recording videos. Another useful thing that over time we found that it's really helpful are these toast messages. What are the toast messages there? Sometimes these pop up messages are called toast. And the name is because it pops up from the bottom of the user screen just like a piece of toast. And I'm going to show you how to implement this tool with JavaScript. And actually, we are going to use Selenium 4 to integrate it into our tests. As I said, it was possible before, however, now it's easier with the bidirectional APS. Still the maintainers can correct me really. I'm not completely sure because it's not part of the documentation whether this is CDP or bidirectional. I think it's bidirectional API because really you cannot find such a method in the CDP docs. So here is what I'm doing. First in the beforeage, again, here I know I haven't organized everything in a framework or library. It's just here to ease the example. So we create a new session of the DevTools. And from Get Domains, you can get the domain JavaScript. As you can see, this is how I presume that actually this is bidirectional API because you don't send this commands from different domains. From JavaScript, you have this pin method. And the thing that this pin method will do is actually that we are going to reuse this JavaScript and basically WebDriver will initialize every time when you want on a particular page, which is awesome. You don't need any more to want big scripts, etc. every time with JavaScript executable. And in order to implement the highlight here at the bottom of this reusable script, or you can pin it second time, it doesn't matter. I created this simple JavaScript function called highlight that will accept the font element that we located with WebDriver. And we get the default background in the default border of the element. And then we set a new background color, which is this red border. And then we use this native setTimeout function that accepts a code back. And basically, the thing that it will do is that after one second, it will return the element to the original background and border. And later, if we want to highlight something, you just execute this highlight function, which again accepts the element that we found. And as you can see here, through the JavaScript executor, we execute the script calling this already defined from the pin script highlight method. And then from arguments we're providing the element that we found. And this is how when you execute your test, this will highlight it and then unhighlight it in one second automatically with the JavaScript. And then, then as you can see, I have another method that in a minute I'm going to show you how I implemented it. I use this library. It's called getHepiredFundit. It's called jgrowl. Basically, in order to use it, no matter where, you need to have a link in the head to basically to its script and CSS. And after that, through the dollar sign from jQuery, you can call jgrowl and provide some message and it will pop up. So why this is useful? This is useful again when, for example, you have a problem with some of the tests, you can enable this type of troubleshooting. And I found it especially useful when we have these big enterprise projects, we usually set up heavily a lot of data with internal APIs. And this is really useful to show what we created or what we typed in a form or how you found an element and stuff like that. So this can be useful. And you can see that later during the video recording or screenshots and failures. So in order to implement that, again in the in-script, I do a few stuff. This is the part for jgrowl. On the window on-volt event, I subscribe this widget here. And the thing that I do is I check whether the website has already jQuery. If not, I create a script stack. I basically change the type to JavaScript. For the source, I got this link from a jQuery official website, which is their CDM. And then to the head of this particular webpage, I'm appending the jQuery JavaScript stack. So if we already have a jQuery, we assign the door sign that is popular for jQuery and this is how we use it. We wrote the script for jgrowl. And the second thing that I do with jQuery is that to the head, I'm appending the CSS stylesheet. And later, we can use this method here through the JavaScript executor, I can refer to jgrowl scripts. And create these toast messages with the message that I provide. And also here, it's up to you whether to put some kind of a slip if you don't want to pop up these toast messages too fast. And how we hook all of this to WebDriver? Well, we can use the event firing decorator, which is like the nature of extending WebDriver. You need first to initialize this WebDriver listener. And then you have so many other methods that you can override. But basically before or any element is found or called, you can highlight and send a message. As I said, there are many of these points where you can execute that. Or as I said, you can do this by hand, but I usually prefer to have an automatic way in the frameworks and libraries. And then we just add the listener to the event firing decorator instructor, and we call the decorator to add this to the original driver. So this is working for remote WebDriver as well. Just don't forget to call the augmented. That's all. And then other troubleshooting stuff for bidirectional API. So here I use some of the bidirectional stuff on the same example with the coordinates. The first one is that you can find the documentation is called HTML DOM mutations. And basically the thing that this code will do is that when there are changes to the HTML DOM, you will collect all of these changes in a collection and later you can do something with them. Why this is useful? Well, when you troubleshoot websites that have a lot of JavaScript involved in, for example, injecting ads and changing them over time, this is my example of how I use it in the past. I saw what was injected, whether it was blocked or not. And yeah, how we use it, it's really important for all of these bidirectional APIs that you need to use synchronized list, not a simple array list, at least in Java. Or in your particular language, you need to use a thread safe collection, because everything is happening in parallel of these DOM mutations or requests, etc. So you need to put them in this synchronized list. And then usually, in some kind of a way, you have these listeners. In this case, you call unlock event, and you use this lambda syntax to add it to the list. So basically, almost the same for collecting the JavaScript exceptions. This is awesome feature where it's really important to watch for JavaScript errors, especially now when all of these asynchronous websites, they heavily use JavaScript. Many often, there are some problems between the dependencies. And even if you don't see like a functional program right now when when you execute the stuff, sometimes there are problems with other related third parties so it's good to watch for. And the same thing about the console messages.  Later, it depends how you want to play it, I usually print them on the console and this means that when you execute them in Jenkins with corrections whatever you're going to see all these exceptions and why the console walks are important because many often you will see like warnings like this, meaning that even if you don't see an error, this doesn't mean that you should ignore all the warnings and that you don't need to notify the devs that they need to change something. Or if you use a more sophisticated framework, you can even fill the tests if there are any JavaScript exceptions. Yeah, so many new capabilities regarding troubleshooting. Let's return to the slides. The next thing that's the next big part is about capturing and monitoring network traffic. In the past we use proxies to capture and modify the edge traffic. However, if you don't care about the browser, it might be even much easier to leverage the power of CDP. And this functionality opens the framework to be used in broader range of automation scenarios like security testing. For example, in your event handlers, you have access to all basic HTTP request response properties you can examine inject or do whatever you want with them. You can use them for performance testing. You can use the HP event handlers to get file sizes you want to send or receive and even build regression tests to ensure you know your files don't grow beyond the specific size. In a minute I'm going to show you an example. And another thing that you can use is the so called black hole proxy pattern. It tries to reduce the test instability by getting rid of as many of third party uncertainty uncertainties as possible. And modern websites have a lot of third party content loaded on every page. There are social networking buttons images coming from CDS tracking pixels analytics and much more. And all these items can destabilize our test at any point so black hole proxy takes all HP requests going to third party websites and book them. This doesn't mean that you don't need to test them, but you need to test them in separate tests. And of course, part of your location testing is to simulate how your website was using slower internet speeds. And this is especially important in the case of mobile web testing, and we can use the methods provided by the network demand that you will see in a minute. And of course here from network emulation, something really, really important. If we return to the example of the example of Starbucks. Actually Starbucks website is one of the good examples for progressive web app. They're totally different. They're totally different lectures about progressive web apps but in short, because this is a location testing. You need to reuse the code base and basically provide you the working feel of the same app, but on mobile on desktop, and on the web, and they need to behave like like a real desktop app. And this means that basically how this works is that they use this native new capabilities of HTML five and behind the scenes they are fetching all the resources and this means that they can work. And with network emulation, you can basically turn off the Internet and test how whether this is still working. And let's see some examples for, for example, capturing HP traffic. So here are some examples. Here I use most of the time CDP. One exciting new bi-directional API is that you can register a basic authentication. You can find that on the docs. Another bi-directional API is about network intercepting. You can use that for security, for example, you can add headers, you can set statuses. It's pretty good. In order to implement the black hole pattern, this is really easy. You need to send the enable network command. I know this is ugly, but this is how it works with this optional empties if you don't set them. And then it's really easy because you have this network from the network domain set blocked URLs. And here through Ragex expressions, you can provide full URLs or disable all particular resources. And later you can add listeners, for example, to check that something called failing can etc. This is how it is easy to implement the black hole. Another really exciting feature or capability of CDP is smoking API calls. Basically, when adding a listener, when you enable the fetch, you can pause a particular request and then you can change it. Why this is important because many of these modern web apps, they have this front-end calls to many third parties. For example, e-commerce websites, they use these payment providers. And in the past, something that happened to me is that these payment providers PayPal or others, they charge you for, for example, calculating the different taxes, right? And even in one case, actually, this taxes API for the test environment, it just returns every time white random numbers. And as you can guess, when you receive a random number for tax, you cannot basically verify anything. So we had to implement this mockup server returning hard-coded values. And however, back then we didn't have this capability of CDP. So we had to our developers, they put it on the test environment, they just changed the payment provider with this mockup server. But right now you can do that with this capability of CDP, or you can even modify. Also for these modern websites, you can verify, you know, these progressive web apps, they push notifications. You have this chat application so you can verify them as well. You have this capability for web sockets and event sources. And if you need to capture the HP traffic also, you have this listener for responses received. And again, in synchronized list, we can put all the responses. And when you put all of the responses in, you have the list of them. We can create such assertion methods where we can check for that there are no error codes, that particular request was made. This is especially useful for checking analytics calls with particular data. Actually, in one month ago, we had such a use case. And this doesn't mean that you don't need to integrate with, for example, Google Analytics stuff and check that everything is there, but anyways. And also, you can check for no archimages if you enable the compression server, this is excellent way to verify that. And for progressive web apps, when you turn off, you know, the internet, you can disable the cache clarification, check that everything is received from it for the progressive web app. And if we need to emulate the network, just really quick, if we talk about getting metrics, maybe we won't have so much time left to discuss that. Anyways, regarding the emulation, as we discussed, it's really important to right here, you can enable the network again, and then call emulate network conditions. And as I said here, if you check that to true, it will turn off, we will check how your web app is behaving offline, and you can change the download and the upload speed and change here whether this is 3G or 4G. And then in order to get performance metrics, you call this send performance get metrics and we print them. And this is a full list of all of them. But yeah, anyways, keep in mind that most of them doesn't mean anything to you, but really this five here, they're really important. And maybe this to hear about the many people forget about them, but actually, this is related to if you use them, you can catch like memory leaks and this is actually something that we find out during testing of one of a single page application that we're working on. These three are related to performance. Again, their whole video about that on YouTube that you can find will send it as a resource. Also, you have this matrix, you know, in the commercial clouds already with Google White House about the performance so you can use that as well. And you can check the website of Google.  It's called Web Dev Matrix. In here you can find all about this matrix that Google team defined. It's really interesting. Again, you can watch the whole video about the performance matrix. It's something interesting and you can use these capabilities of CDP to reuse your functional test for performance as well. So again, regarding the resources, I will pull out the presentation. You can download the full source code on GitHub. You can check all of these YouTube videos on the LandTest channel. Also on my blog, on Ultimate the Planet, I've talked about a few of the stuff. And of course you can check the Selenium docs and the DevTools documentation that I showed you. Thank you. Thank you so much, Anton. That's a really good session. We get to know a lot of things in the session. So we have a lot of questions, although we want to finish and take all the questions now. So what we'll do, so those questions, those people who are left with the questions they can discuss with Anton in the Hangouts table. So we're going to take top two questions. So I'm going to read it out for you, Anton. The first question is from Kartik Hola. Does CDP work only with Selenium 4 or can this be used on older versions? It's Selenium 4 and above. You cannot use it with, for example, Selenium 3. This is something related to the new release. New, new. It was like half a year ago, so it's not so new already, but yeah. Sure. I hope it answered your question, Kartik. The next question is from Gaurav Mamgen. In case of running geo-location test cases over cloud platform, which can be hosted over any time zone, would it be any issue with DevTools? Again, it really depends on, if I get the question right, regarding the commercial clouds. If you use them, they have their own capabilities usually to change the time zone, so it's better to use the native capability of the cloud grid. And also, this is related, I forgot to mention that, but related to geo-location testing. It depends on which of the clouds we use, but basically, if you don't use the CDP to change that, actually they have built-in way to run the test exactly from particular IP, from this particular country. This is not an emulation, but it will be from the real IP, because many often in some of the projects that I was working on, actually not all of the apps use the native sensors for detecting the coordinates, but sometimes they use these paid third parties for detecting the IPs, and this is how they do it. So this won't work in every website. And thank you, Anton, for this lovely experience you shared with us, really.


Everybody forced here ripping 21 22 chronicles basketball hobby six-box half-case number one. This is release day here We're hoping to pull some gallows some some where they had the sneakers spotlights in this as well or the Think they have those as inserts here. So yeah, hope we pull some big cards today This is PYT six box number one. Like I said, we have Angie with the heat ball tee Pacers Ben. Oh bulls chase D. Pistons Kurt S. Sixers Dave a with the calves Denny H. Magic Edgar with the Celtics Eric W. Wizards George K. Raptors Gretchen has the Warriors Harold with the Hornets Hideki Clippers Jake O. Nuggets Jordan N. Blazers Kai H with the Pelicans Kihun K. Jazz Lionel with the T Wolves, let's see Luchang Hawks Michael V. Grizzly's Nicholas T. Mavericks Patrick C. Spurs Patrick T with the Thunder and the Lakers Scott Y. Bucks Wayne S. Nicks Nets Sons Wenman M. Rockets and U.S. with the Kings. Good luck everybody. Thank you very much for joining Yeah, let's see some let's see some low numbers here. Let's see some nice rookie hits Here we go Always a fun rib here. Good to see. Come on. Let's see a gala first break Okay All the key rookies in the front there There's a Cade Prestige Start us off Mowgli base You got your moody There's a Jalen Green looks like red foil 74 149 there you go Rockets Prestige Jalen Green looking card there the back for you Good star for Houston numbered green there. We've got a Scotty Barnes rookie Phoenix Phoenix on my favorite ones. Oh Look at that. Look at that limited rookie Jersey Auto Rockets Jalen Green in the first pack Congrats Houston 84 of 99 Houston all it took was one pack for you to have a great break congrats Wenman M Had the prestige numbered and now a rookie Jersey Auto Geez man, I guess that's good start. That's a great as the first pack of the day Mark he all is always a cool set as well. Trey Murphy the third for the Pelicans and with the essentials of school this year too Corey Kisbert for the whiz awesome star Congrats Wenman with the Rockets Heck yeah, that's what we're looking for right there. That's a cool rookie Jersey Autos and In what are we breaking in Chronicles Moses moody luminance do Sunmu rookie Playbook. Oh, yeah playbook Blank there crusade primo honors Franz Wagner Honest design is interesting this year honors Franz Wagner XR Kyrie and a Luca numbered 11 of 75 essentials Luca 11 of 75 Mavericks Rockets did pay off one pack Right, what do we think so far? What's our favorite looking set that we've seen so far? There's a hometown heroes. I auto soon move. We got airborne rookies and stars auto Brandon Clark Grizzlies Numbered five out of 99. So airborne was in what playoff football this year as well Pretty cool looking cars there Grizzlies with the auto Duarte essentials and Tatum marquee No, not a hit in every pack. It's two autos per box on average So no hit in every pack Moody But usually if there's not like a hit you'll at least get like a number card for the most part, but it could be Little all over the place. That's a nice, you honest there limited you honest 13 of 99 Milwaukee Then we got prism update Dwayne Washington, Jr. Pacers rookie Jalen Green hometown heroes red Yes, okay, there's the numbering Very hard to see there 23 of 149 or Rockets again, this is a Rockets box through and through it seems like Brats again Wenman marquee curry and XR Edwards, yeah, one looks good Xire Williams Xire Williams, there's a bassie Absolute rookie red for the sixers 39 of 149 absolute chronicles this year Shengyun, there's an honor silver step curry for the dubs so your Williams there Williams and Last for the box one here Franz d-book Yurt seven rookie for the heat from absolute a Timeless treasures Evan Mobley that looks good, too, man 79 of 149 Cavaliers very good first box good rookie color nice autos Cavaliers nice Mobley. There's a Halliburton optic update Quentin Grimes giddy essentials and Mobley marquee Alright I'll do it for box one moving on the box to here. Let's see what we got on the next break Looking at Celtics Hornets bulls nuggets Lakers T Wolves and Thunder guys seven to go on the next one You go let me tweet that out Really good first box here. All right, let's spread let's spread the hits around now Houston surely got their fill box one We do have chronicles and soccer personals everybody personals will rip tonight after group breaks We have them at 299 99 free shipping of course if you have whether you have a reply That's a platinum foil coming up Oh Loody Loody there's those look very similar the threads in absolute very similar You've got one-on-one Thunder rookie train man from limited on the platinum foil Okay, see Well last spot payoff right there for one of the last spots Who is that Patrick I think Okay, see yep, congrats Patrick T on the one-of-one platinum foil limited Shrae man Then they were third to last team taken heck. Yeah, dude. We'll get that bag for you. What a break so far They be on Mitchell nice and orange wave Pistons rookie Phoenix Cade Cunningham or these number two 31 of 75 Pistons Pistons doing well Kessler Edwards and Janice essentials Man I'd say this is a fantastic starts of the day One big rookie Jersey autos one of ones. There's a year at seven rated rookie Robinson Earl It's a Phoenix LeBron Interesting photo that you said in there an airborne heat Max struz Otto Not a lot of his autos out there for a 149 for the heat Marquis Cam Thomas and a shengun XR You have one of one second box here at the Jersey auto Jalen Green Fantastic start to our day here. There's a comminga luminance Primo Davion Mitchell Luca we've got those sumo essentials and a Kessler Edwards gold 6 of 10 XR for the nets 6 of 10 nets there wow man Yeah, the airborne silver does look a lot better. It looks a little dull as base. It's a fine insert Well, yeah, the silver really makes it pop. There's a Mowbly prestige Williams Sorry, there's I'm not gonna play I can't play ball these cards guys.  Oh, we got gold standard Who's it gonna be? Who's it gonna be? Of course, it's Trey man gold standard RPA thunder Number 17 of 25 Dang man Trey man box here. We had Jalen Green in the first tray man in the second Oh peek at gold standard there. We got gold standard football coming up later today, too About the look of those Jalen Green essentials and a comminga marquee Marquis looks a lot better this year. I think Essentials does too. I mean, I think Benini is doing a good job of updating a lot of the looks of a lot of their sets At least as far as like car design this year has gone pretty well with Benini. I'd say There's a moody luminance crusade Lebron Silver Phoenix Evan Mobley Cavaliers Get a KD essentials marquee Josh Christopher You have to pick it up after the after these after the box here. I have to get we'll have to get through the paper a little quicker I think now that we've seen the sets Thomas treasures Mobley again 68 of 249 cabs having a very nice break as well a couple of numbered Thomas treasures Mobley's Highland on the honors Suggs Phoenix a d-book and a Duarte marquee Okay, how's it going Jake? Rosie they weren't here take beat me in fantasy this week. He had digs and waddle So that that pretty much buried me, but it also helped that I started trey Lance It also helped that happens Because my team did okay. Otherwise like I had cup who who was good. Yeah, and then I also had I wanted to play Do well. I think that's about it Jake's defense didn't help him out got rookie red for the pelicans Herbert Jones 66 of 75 Go Kai owns Highland on the honors Suggs on the Phoenix again essentials Mitchell essential Suggs Most of the big cards do not go to the big breakers. We get the distributors get the products We don't get cards directly from Canadian. That's never happened Herbert Jones crusade we've got Dalano Banton on the rookie auto Raptors 38 of 75 from hometown heroes Anthony Edwards marquee and a Jalen Green XR Not entirely sure yet Shane. We're still we're still figuring it out. We don't know how many we're gonna get So I think we're still waiting to hear things like that before we give like definitive answers Kings rookie gave you a Mitchell 91 of 99 unlimited nice Davion hometown heroes Davion A blue James book Knight Hornets hometown heroes 85 out of 99 Clinton Grimes marquee Kyrie, but from what I understand is if you had One of the teams that was affected so extended base short prints would be Padres Reds Tigers Mariners Royals, right? So if you had one of those teams in a break, you're gonna get at least a pack I would think I but again, we're still waiting to hear how many we're gonna get and and all of that so We're still in the figuring out phase, but Evan Mobley on the playbook like here Gave you on Mitchell honors Got per se Luca got marquee Scotty Barnes Raptors and blue Alperin Shengun marquee. That looks nice, man The color on marquee is gonna look good this year 71 and 99 Rockets rookie But yeah, you won't even have to do anything. We'll just ship him out once once we get him Shane We're gonna do all the work and then once we do get the packs are pretty much We're gonna ship him out as soon as we get him Once we figure out every little detail basically, we'll let you guys know But yeah, we're still we're still figuring out just like everybody else's Kate Cunningham. We've got LeBron Phoenix got a Pistons limited Luca Garza rookie Jersey auto 96 of 99 Colin a Scotty. I mean, we've seen nice hits from rookie so far. So I would not be shocked. Got Duarte XR It's a nice one and essential Scotty Barnes. I want to see a gala though Gala's what I really want to see today, and then they have a sneaker spotlights. I think too like the base inserts Crusade LeBron. We've got a silver honors Evan Mowbly Cavaliers Not sure how I feel about the honors design marquee LeBron and an XR Trey young Wrong Luca Brown Dwayne Washington, Jr. Rated rookie got Quentin Grimes By the way, when you see rated rookies like that, that's just like it. It's like an update So you'll see some prism update like you'll see a hardened prism update. I'm sure in this Pretty sure I saw that but yeah, whenever you see rated rookies or like the or like the prism base That's just an update. It's only a few cards every every time they do chronicles Cameron Thomas on these that's silver. That is silver. There's a silver on down here. I'm sorry That's that one top of it for you. Scotty Barnes XR and essentials Jason Tatum Yeah, so you're spot. They have just a base. They're numbered though. Those are those will still be pretty big I would think This is it's a different line. I think Dave on Mitchell. We got warriors gold standard. Wow. That's nice looking Jonathan Kaminga 89 of 99 There you go dubs Book night hometown heroes a halibur update. That's a halibur update right there Jones Donovan we got Jalen Green. There's a Dwayne Washington, Jr. Prism update a rookie cornerstones Nick's Quentin Grimes gorgeous card six of 25. Wow. I Really like that Dude, look at the patches look at the card design That's pretty right there. There you go. Nick's on a Jericho Sims Chronicles cornerstones a little bit of gold trim on it too pretty nice one Nick's There's a train man and a Franz Wagner on the essentials You have a favorite set Jake That's a lot to choose from The corner yeah cornerstones always look really sick you got an Isaiah Livers pistons rookie numbered 10 of 249 From Thomas Treasures Schengen rookies as ours. Oh purple purple rookie prism update key on Johnson Blazers That's a nice one. Actually You go blazers 31 of 49 Good stuff who's got Portland I personally think that Keon's a pretty deep not like a crazy deep sleeper, but He's got some talent to a man. Pretty good pretty good intent at Tennessee when he played college Yeah, nice key on 31 of 49 good all around Forward as well. I think Jalen sucks Franz Wagner That's a good-looking card right there And yeah, so obviously he had prism rookies, but they were with the Clippers. He was traded. I think at the deadline So you'll see some updates like that and it's just kind of cool about Chronicles as well a Scottie Barnes Phoenix Pistons again now and Isaiah Livers Hometown heroes rookie Otto 148 of 149. Yeah, he should get time to I'm not sure like the blazers team is a weird team So they're gonna need young young players to set up if they Want to do anything in the West honestly Don't be a decent team, but if they want to make some real noise They're gonna need some help from their young players don't soon move hometown heroes Crusade Primo marquee Cunningham and blue marquee Herbert Jones. Love the look of these 87 and 99 for the Pelicans Blue marquee Herbert Jones All right, let me check spots on the next six boxer guys and we'll keep it rolling here Next one We're looking at Celtics Hornets Lakers Teal's thunder five to go guys still a thunder there That's probably where he'll be. Yeah, definitely definitely a bench player, but hopefully he can develop a nice roll Yeah, these boxes good I mean you get a lot of rookie color for the most part most the sets are pretty rookie heavy with some key vets as well Yeah, definitely Chronicles more of a rookie product So you get a lot of you know, you'll see a lot of Kade and green and Mowgli and others of course Jeremiah Robinson Earl played some patches Rickie 89 to 149 for okay, see Thicker stop cards you there's the hardened update Nice orange wave Evan Mowgli honors rookie for Cleveland They've had a few numbered Mowgli's 45 of 75 on the on the Mowgli a few numbered Mowgli's like I said Kester Edwards XR to soon move If you're looking for a random styles Chronicles, we have those going later this evening everybody We just have PYT's all day today, but good amount of teams left. So let's get these breaks filled up Keep it rolling here today for you Kate Cunningham on the playbook Mowgli Crusade Silver Suggs hometown heroes magic Shengyun essentials and marquee giddy. I'd like to I like to see this guy.  Maybe he's coming up. There's a giddy Absolute you've got purple rookie Raptors. Dallin O'Banson 10 to 49 plates and patches Do Sunmu on the Phoenix rookie for Chicago like the Phoenix's Curry honors Markey Boston marquee Suggs Boston Junior cards The only thing and this is literally only a breaker thing is Ripping Chronicles and you have all the chrome cards and the paper cards that one of the chrome cards move the paper cards don't That that's it other than that. This is awesome man Cavs hometown heroes Evan Mowgli Jalen Brunson Mavericks of Prentice auto 30 of 149 It's a neat design any crusade apprentice auto Jalen Brunson, there's a Kade Cunningham XR and an essentials moody Pulled a carry case every move desperate man. I hope we see a gala. Maybe a gala Barnes for you Free Apollo that's a huge card Suggs rookies and stars yet another orange coming up. Yeah at the back here moody on the XR and an orange Marquis Trey Murphy the third. I'm telling you man the marquee color I love it 67 of 75 It's not like overdone, but it really accents the card nicely Pelicans TM 3 rookie to 75 Ron absolutes Pacers hometown heroes to warte. We've got an ish Wainwright rookie Suns Phoenix auto ish Wainwright numbered 121 of 149 That's the first rookie on I pulled him These are all messed up. Yeah, I'm gonna have I don't know what happened yesterday Robinson Earl Kevin Durant It's all flipped it's all tops interior here the sleeves Yeah, so those 75 I have I haven't been saying it for those are 75th anniversary Anything number to 75 this I'm pretty sure it's all 75th anniversary stuff So that's why you'll see those stamps on there. It should all be like that as far as like base parallels Or it's not they don't have it in every single step, but they should have it in a lot Yeah, a lot of this like marquee that's a 75th anniversary 75 So not every set has those parallels. You'll have to check the checklist. That's a big checklist Mitchell hometown heroes you got LeBron Phoenix Trey man and I don't assume a marquee rookie numbered 25 of 99 for Chicago Nice IO mom. Let's see a gala Fymish treasures Cade Conningham pistons numbered 33 of 49 Nice one Detroit Zaire Williams and Herbert Jones Williams marquee and bones Highland LeBron crusade Luca Garza again here pistons Phoenix rookie Otto 61 of 149 61 of 149 Marquis Jalen Suggs and an XR Franz Wagner Wiggins. There's a Kaminga Chronicles base Suggs again got Shramer for the third pelicans again now two of 99 they plates and patches pelicans have done fairly well There rookies Jalen Suggs Phoenix nice Hornets hometown heroes James Book Knight rookie orange wave 74 of 75 So yeah, that is 75th anniversary. I don't see anything that indicates that but the checklist says 75th anniversary gorilla I would assume anything to 75 and this would be 75th anniversary Scotty XR essential statum Two more packs two more It's like every other card is flippin this There's an alvarado rookie pelicans prism update Never see him coming Nuggets Dan Issel on the Hall of Fame auto 80 of 99 Nuggets on the Dan Issel we got Tremor for the third and Corey Kisper. Hey luminance. You've got Watford Playbook Bones Highland on the honors silver Scotty Barnes hometown heroes Raptors and on the back you got jaw and Herbert Jones. That's gonna do it. Give me a sec We'll do a quick hit recap everybody before we do the recap. I'm getting you a link for the next one We need to get it filled Salt or no Hornets Lakers T Wolves thunder still the thunder. Wow. Hey Brennan. What's up, man? Happy dual release date to you All right, so we have autos Pistons Phoenix look at Garza Suns Phoenix ish Wainwrights Airborne for the heat max truce heat Pistons Isaiah livers hometown heroes rookie auto Apprentice Jalen Brunson Mavericks auto to 149 Hey another airborne this time is Brandon Clark Grizzlies to 99 on this one We could Garza limited rookie Jersey Auto Pistons to 99 Dan Issel Nuggets Hall of Fame auto to 99 Banton rookie hometown heroes auto Raptors is 75 Gold standard RPA Nuggets Trey Man 17 of 25 cornerstones quadrallet rookie autos, Nick Jericho Sims 25 6 to 25 on the Sims We also had a one-of-one Trey Man limited base for the thunder and Rookie Jersey auto from limited is Jalen Green 84 and 99 for Houston Good first break lots of lots of other good rookie color in there as well. Thanks again everybody We've got six bucks number two coming up


みなさん、ありがとうございます。このキーノートをスキップしてくれましたが、彼らはそれに関することができません。なので、エムーヴィの話をしなければなりません。私たちはバルソーナで、グレーシリーとグレーコンフレンズを紹介します。とても怖いですね。このスキャラスティを決めるキーノートを作っています。このキーノートの名前は、このキーノートの名前は、松本雪の喜席。そして、カンジンのキャラクターは、このキャラクターは、ポイントリー。このキャラクターは、オージジェムこれが行くそしてこれがワイズリだからペイントリーからサマンがワイズリそういう風にアルファベット私の名前はユキヒロー、マッツモードル私の名前はユキヒロー、マッツモードル私の名前はでもボタンはマッツを呼ぶことができますそれにインプレミュレーションモービーランゲスのNRiモービーランゲスのマッツモードルでも何かがそのため、初めのRubyプラギュメントの文字は1995年の時に公開されました。そのため、私が自分のプラギュメントを作っていたのです。しかし、この年間、プログラムがよく優秀になったのは、1.9年から新たなVirtual Machinesが早くなったのですが、コアライバリーが多くの新たなVirtual Machinesが多くの新たなVirtual Machinesが多くの新たなVirtual Machinesが多くなったのです。リシエル・ルビーは、2.1年から2.2年から新たなVirtual Machinesが多くなりました。実は、その年間、Ruby自身が多くの新たなVirtual Machinesが多くなりません。I'm no longer the core developer of MRI.So, let's call it C-Ruby.Just because now, the Ruby programming language mainly implemented in C programming language.So, the C-Ruby is the Ruby.So, when you think of the language and the implementation,probably many of you, instead of some JRuby guys or the Brian here, think of the C-Ruby.But we have some different implementation of Ruby that I call AutoRuby.That stands for the alternative Ruby implementations.So, about 15 years ago, at that time, there was no alternative implementation of Ruby and no alternative implementation of Perl.And then, we had Python and Jpython back then, later renamed to Jython.So, back then, many people claimed Ruby implementation, Ruby syntax is too complex to implement alternative implementation.So, I agreed with that.Just because now, the Ruby syntax appears to be simple and try to be natural.But in reality, it's quite complex.So, it is too complex and it is too implementation dependent.So, I myself didn't believe that someone come up with the alternative implementation.But 15 years later today, we have no alternative implementation of Perl programming language except for Perl 6.And then, we have Python and then PyPy and several others.Is Jython still alive now?I don't know.But in Ruby, we have, I don't know, I can't believe that we have bunch of alternative implementations.Like JRuby on top of JVM, which is a great platform for the programming languages.And Rubinius on top of C++ and the people behind Rubinius is pretty computer science geeks.So, they read through the science papers.So, they pick up the ideas and put into the Rubinius.So, the Rubinius itself is pretty great ideas, full of great ideas.And RubyMotion is a LLVM ahead of time compiler of Ruby programming language.So, you can compile the Ruby into native applications on iOS devices like apps.So, and recently, they try to support Android as well.So, that's great.So, then RubyMotion is based on Mac Ruby, which is on top of the OS 10.And we had, we have, I don't know, Iron Ruby, which is on top of .NET from Microsoft.And we, I recently haven't heard about them much, but we had Maglev, which is Ruby implementation on top of the gemstone, small talk virtual machines.And it ran quite fast.And then, we have, we have some newcomers, like Topaz, which on top of PyPy, is a jitting language in virtual machine platform, primarily target to Python, of course, from the name.You can tell from the name.And then, Topaz is Ruby implementation on top of PyPy.So, Opal is the very newcomer, which compiles Ruby program into the JavaScript.So, you can run Ruby on top of your browser.Quite nice.And then, this is all run, Cardinal, which is, which is on top of Parat.Parat is a virtual machine for the Perl 6, which is way back.And then, it was experimental, but it was quite nice try back then.So, it is kind of easy to implement it, 80% of the Ruby programming language.But it is quite difficult to fully, maybe 99% compatible Ruby.And then, some people, like people behind JRuby, people behind Rubinius,did that great task.I'm proud of them.So, today, I'm going to talk about yet another alternative implementation namedMRuby on top of C programming language, the background.In the year of 2009, I talked with the engineers from the embedded systems field.So, I want to make, I want to see Ruby everywhere.So, we have dominated the web, almost.And then, but nothing out of the fields.Like a research computing, in research computing, Python is much stronger.And then, we have R to compete.And then, recently, we see Julia.And then, or even on super computing, so very few people useRuby in super computing.And then, on the smaller devices, for example, apps.So, many people use, say, Objective-C, or Java, or C, or something elseto develop apps on the mobiles.Or even smaller computers, like, you know, the Raspberry Pi,and they are doing all.So, you do use the other language, Ruby.So, then, we talked, discussed about the future of embeddingprogrammings with engineers from the embedding field.So, they told me, they are having the fastest CPU on smaller computers.And then, they have bigger memory.And then, the ratio of the software in their systems is getting biggerand bigger.So, the software is getting more and more complex.So, they need to develop more and more software effectively with lesstime, and less money, less people, and with smaller team.So, they claimed, we need a weapon to be productive, effective, new tool, and new way of development, new language.So, we concluded, we needed to, the people in the embedding fieldneeded to learn from web, or test driven, community driven, and open source.So, these movements are not really big in embedding field, just because, you know,it's not that their way.They want it to be stable, they want it to be conservative, just because, you know,you cannot, it is very difficult to upgrade the software in the systems, in the hardware.So, because of that, they want to be moved slowly, and go the very stable way.But the things are changing.The lot of devices are on the net, connected to the net.So, you can, now you can easily upgrade the software, just like apps, or just like web.So, we predict in 10 years from 2009, so the way of the embedding development will be changed just like web.So, I have done a small survey.So, the CRuby is not good for embedding system.It's just too big, and it doesn't have good embedding API.So, CRuby's API design is designed to be enhanced Ruby interpreter, or virtual machine.So, you can add new features, tasks, or you can link the new library to add features to the interpreter.So, you can write your application in Ruby.But the people in the embedding field want to implement their systems in C or C++, thenenhance their systems with the more flexible language, like Ruby.So, the architecture is upside down.So, the CRuby is not suitable for that purpose.No embedding API, too much POSIX, so the implementation of CRuby is rely on the POSIX.So, the POSIX available on the POSIX platforms, like Linux, Windows, and Mac, it doesn't care.But for embedded systems, most embedding platforms are not POSIX aware.So, CRuby is too much POSIX.So, JVM does not have no embedding API, and it's huge.And then, it's too much Java.And then, you have the micro-edition for embedding system.Java micro-edition is, yeah, you can use Java micro-edition for embedding system.But it's too small, I mean, API-wide.So, micro-edition is not really the Java we imagine.So, I don't think we can run JVM on top of the Java micro-edition, which even doesn't have the proper garbage collectors.So, Rubiness is not that much good for embedded systems.It's bigger.It's quite a memory extension.So, no embedding API, and it consumes much memory, and we need a new one.So, but how can we manage?So, I asked some people about the new idea, and we got a grant from a Japanese government segment named METI, which means the Ministry of Economy, Trade, and Industry of Japan.So, for me, it's not about money, it's about motivation.So, our team got a grant for a two-year project, so we got to finish it within the two years.So, that's my primary motivation.So, since, I mean, 2009 to 2011, we worked on the alternative implementation named MLB.So, yeah, we need to be responsible when we got money.So, we got MLB.MLB stands for Matsumoto's Embeddable Minimalistic Modular Ruby.Matsumoto means my family name, but you may know that Matsumoto is pretty popular, a common name, a common family name in Japan.Actually, we have three Matsumoto's in top contributors of MLB.No, we are not relatives.And embeddable.So, we designed an embeddable API just look after the Lua.So, Lua is a programming language designed from, came from Brazil.And it's pretty good for embedding.So, embedding in the devices, embedding in the applications, embedding in games.So, I look, I designed the API after Lua API.And the minimalistic means requires less resource and a focus latency than throughput.So, to accomplish that, we designed incremental generational garbage border for MLB.The modular means you can separate the unneeded component of the language when you built MLB in the systems.So, compiler and runtimes are modular.So, you can drop the things that you don't need.So, like classes and paths and call generators and then MLB itself is very configurable.So, like MLB use, you can define the compiler option to use float instead of double.Or, you can embed your value into the floating point numbers by using the technique named non-boxing.Or, you can use the instance variable implementation for segmented listsfor your implemented instance variable implementation instead of the hash.And it runs on the various platforms.It only requires C99.So, everywhere you can run C99.So, you can run MLB.It runs on Linux, OS X, Windows, or on iOS, Android, or even on bare metals.Like on top of Arduino.The bigger one.So, it has very flexible architecture.You can execute your program from a file or you can execute from your root program from a string.So, you can execute your program from the compiled binary file.Or, you can load your compiled binary from your compiled C embedded strings.So, syntax-wise, MLB is 1.9 compatible.So, we don't have no keyword arguments in depth.We don't have refinement.We don't have complex relational big num numbers.And the biggest difference from CRuby and MLB is like this.We are 1 divided by 2 will become 0.5.If the integer overflows, it goes to the float instead of big num.So, for MLB, the float and integers should be more compatible than CRuby.So, you can grab the source code of MLB from GitHub.So, to compile MLB, it's quite easy.Like a git clone, then if you need it, so the build config file, then rate test.By compiling via rate, you can get static library and MLB as a sample interpreter.So, MIRB is IRB for MLB.So, interactive MLB.MIRB is a bytecode compiler, so you can compile Ruby code into binary.Then the last one, MIRB test, is the test suite.So, you can compile all the test suite into one single command.The MIRB test is also an example of how to embed your Ruby programs into C.And a very important aspect of MIRB is MIRB-GEM, which is a counterpart of the RubyGEM.But the MIRB only requires C99, so we cannot load things dynamically.So, everything in MIRB-GEM is compiled statically into the interpreter, actually, library.So, the MIRB-GEM is kind of like a statically linked gem.So, to use MIRB-GEM, so install the MGM, that's kind of confusing.So, MGM is the tool to manage MIRB-GEM.Then MGM update to download the list of the MIRB-GEMs.So, you can have the list of the MIRB-GEM uploaded onto the repository.So, you can have the MGM.Currently, as of today, we have 129 MIRB-GEMs, kind of many.So, it goes like this.List on the tiny small description of the MIRB-GEM.Of course, you are not supposed to be read this.So, for example, we have the MIRB-IO.So, the core MIRB does not have any I.O.Just because some bare metal systems does not have any file system or the standard I.O. or anything.So, the whole I.O. is optional in MIRB-GEM.So, you can parse and output JSON.You can access SQLite3.You can access MessagePack, Redis.You can access the C function from Ruby using the LiveFFI, which LiveFFI is available.You can access Fluendee, Livuv, which is the backend of Node.js.You can access those functions.You can control the JavaScript compiler from MIRB.MIRB Synetics is a kind of clone of Sinatra in MIRB.You can control Arduino, a wiring pi from MIRB, or even the Linux C groups.It's quite easy to make MIRB-GEM.You can create the name of the directory of the name of the gem, then create the file名のMIRB.GEM.REG, which kind of seems similar to RubyGems.So, license, author, small summary, and then you can add a dependency.Then, you can put your C++ file in the source directory.And then Ruby API is pretty simple, something in between Ruby and Lua.So, I don't think I have time to explain about the detail of the MIRB API.So, maybe in the next year, I'm going to have an MIRB workshop or something, anyway.So, you can compile the Ruby file into a library.So, when you use the Ruby library, create a directory named MIRB live,then, put your Ruby program on it.You can create a test file in the test directory.So, it is automatically test when you drink.So, check out the MIRB deal in the repo.So, even in the core, we have a bunch of MIRB-GEM as a sample.And then, you can access many things.So, these gems are optional.So, you can drop off the things.And then, that's quite easy to handle.So, you can put your MIRB-GEM in GitHub.So, use MGM config to build config.rb or add config.rb.Require automatically, fit and compile the gems.So, you don't have to worry about that.Or maybe you can use your own config file by specifying the environment variable before rake.So, we have MIRB right now.MIRB is small.MIRB is fast enough.It's not that fast, though.So, what can we use MIRB before?It's everything.You can use it everything.But, remind that MIRB, the feature-wise, MIRB is smaller.Like, we don't have some features in CRuby or JRuby, Rubinius.So, it doesn't have the portability.Portability is the primary motivation.So, we cannot have the things which relies on the specific platform.For example, we cannot have, say, the operating system access.But, you can add it later using gems.So, anyway, you need a language.You can add programmability to your systems.Anyway, you want tickle or Lua.You can use MIRB.So, API-wise, it's similar to Lua, but I think it has better API and a better language.Yeah.No offending.And then, it's comparable performance for embedded systems.So, especially for prototypes or customizable ones.For example, a company in Japan is experimenting prototypes of vending machines.So, some of you might visit Japan, and then you may notice that in Japan, we have vending machines all over the country.So, and some vending machines are very, very intellectual.We have some kind of a touch screen on it, and even a game on it.So, some vending machines even has a face recognition.Not to sell the buckles to younger children.It's quite complex systems.So, they try to include M Ruby to make them easier to add new features.So, they are right now experimenting on it.Or the micro-satellite.So, some friend of mine back in Japan created the very teeny computers that runs M Ruby, this size.And then, they put everything into the size of the beverage can, coke can.And then, put them as a satellite.So, the M Ruby in the space.So, they called it CAN-SAT, CAN-Satellite.So, that CAN-SAT is so small.So, you can lift a bunch of CAN-SAT with the piggyback into the real satellite.So, it would cost them, I don't know, maybe $1,000 or $10,000 or something.So, that's not expensive.So, even the high school student can design this CAN-SAT.And then, some people control robots using M Ruby.Or home automation like an Arduino or maybe Raspberry Pi.And then, you can use M Ruby for extending enhancing applications.For example, the web service.So, we have the Apache module that enables to control Apache using Ruby.So, you can replace the mod, you can control routing, resource throttling, using that C group feature from the Linux.So, you can limit the bandwidth or CPU resource or memories or whatever to the certain request from the client.So, the same guy developed the engine XM Ruby.So, you can control the engine X and Apache using the same script, same Ruby script.Or maybe in the future, not no one working on it yet, but in the future, we can have an editor which can be enhanced using M Ruby instead of Emacs list or VM script.Some guys embedded M Ruby in the databases.No SQL database, it used to be called avocado database around Arango.Arango database embed M Ruby in it.And then, some people considering about embed configuring games using M Ruby.So, some people already use Lua in the commercial games and the other guys are considering embedding M Ruby in the consumer games.Or routers, the Japanese net company ships the router that embeds M Ruby.So, they can write routing rules and the CUI interface using M Ruby.So, if you want to provide programmability to your systems, you can use M Ruby everywhere.So, right now, like I said, I no longer work as a programmer to develop C Ruby.So, we have much smarter guys like Koichi and Nobu and maybe Zack and so many Ruby contributors.So, I don't have to work as a programmer.So, I work as a designer, lead designer of the language.At the same time, I'm born to be a programmer.So, I want to be a programmer.So, as a programmer, I work on M Ruby.So, it's quite fun.So, some people ask me that will M Ruby replace C Ruby?That's a fair question.So, the language designer himself working on the other implementation.So, you may suspect the M Ruby will replace C Ruby in some future.But the answer is no.So, as I said, primary motivation behind M Ruby is the portability.So, it has less functionality and it is still 1.9 compatible.So, can M Ruby be used in server side, not in the devices, not in the ground systems?So, it's yes.The answer is yes.It is less memory.So, with generationally incremental garbage collector.So, and then we already have M Ruby UV.So, we can.I recommend, yeah, it's still a challenge.But you can theoretically use M Ruby in server side.So, can I involve in its development?The answer is of course yes.It's open source.So, check out github.com M Ruby slash M Ruby.So, you can do whatever you want, play with M Ruby.So, if you have new things, new interesting, just tell me.And if you have improvement ideas, if you find bugs, please submit issues to the github.So, I will glad to see you involved.And happy hacking.And thank you today.


Hey everybody, welcome to JSA TV and JSA podcast, the newsroom for data center and telecom professionals. I'm Jamie Scott-Okitaya, and I'm so excited to say we are live broadcasting from the floor of ITW 2022. And it's a great year to be all back together post pandemic, and it's the 15th anniversary for ITW, a really remarkable year here. And on the floor of ITW, there's a lot of great news breaking. And joining me today to prove that is Mr. Mike Jonas, of course, the president of Light River. Mike, welcome back to JSA TV. Welcome back to us all. Yeah, welcome back to live. I love it. Well, it is certainly been an extraordinary few years since the last time I got to see you face to face. It's been so long. So for our viewers who might not be familiar, can you set the table, give us a little info on Light River? Of course. So Light River, we're in our 25th year of business and still doing the same thing we've always done, design, deploy, and automate packet optical transport networks, primarily for telecom service providers, cloud and data center operators, which are much in evidence here on the floor at ITW. And also we have a meaningful business with the investor owned utilities. And that brings us to the big news breaking. Your news regarding the acquisition by grain management LLC. Can you tell our viewers a little bit more? Yeah, you bet. So I mean, Light River has been growing organically and inorganically during those 25 years and a confluence of business events really, really required a bigger stage, more capable partners and more dedicated to this space. And as we look through the environment, we found grain is as vested in telecom as we are. 100% of their assets are invested in telecom assets, telecom operators or telecom facilitators, such as ourselves. And it just made a lot of sense to help propel not only Light River, but the entire grain portfolio forward faster and not only the long haul and the regional networks that we've historically built, but the new access edge, the new fiber to the home is hitting everywhere, probably every booth in this building is talking about that. And some of the new relationships we have because of the grain acquisition are poised to pay huge dividends for us now and in the future. So exciting, grain, Light River, such great companies, great people coming together, partnering to do, again, such a great service to telecom. Now, what are these key growth initiatives that Light River is up to, things that we can look forward to as 2022 unfold? Well, yeah, so we spent a good deal of the pandemic building out our facilities. We invested during those two years, our customers were growing, we broadened our facilities, we broadened our features, we broadened the software capabilities radically during those two years and are hitting the floor hard as it comes to making sure that we can deploy the latest and open network technologies for all three of our primary sales sectors. So they're all moving towards open, they all want to deploy it, but they now want to deploy it everywhere. So we're gonna be taking these networks further to the edge than ever before and there'll be higher capacity, higher features and more appropriate to that end user experience. I gotta say, you're award-winning. Every time I turn around, you've won another award. So it's so amazing, obviously, the industry recognizing Light River for its extraordinary work. So what are you looking most forward to here at ITW? The energy, the energy is back. I mean, what else can we ask for? I've got dozens of meetings, as I'm sure you do, but with people who are eager to not only catch up, but go forward and it's gonna be a great couple of days. Yeah, absolutely, absolutely. The energy is back, the industry back together after a trying few years with this pandemic, but so nice, again, to see you, Mike, in person. I missed you. Usually we do this at least a couple of times a year, PTC, ITW, but again, so great to see you in person and here on JSA TV, thank you for your support and always your breaking news. It's such a great honor to watch Light River scale and grow. Appreciate the opportunity to catch up and we will see each other more than once every two years from here on out. Absolutely. All right, guys, thank you so much for tuning in to JSA TV and JSA Podcast. As always, think green and happy networking.


Well, what if I was to tell you that Breath of the Wild 2 is releasing this year? Not just because I think it is, but what if I told you I had a counter report to what was stated yesterday by Zippo on our E3 leaks video? What if I was to tell you a more reputable source, someone who's a bigger deal than Zippo has come out and stated, or really inferred massively, that Breath of the Wild 2 is coming this year. Excited yet? Alright, so I'm going to first go over what Zippo said yesterday. For those who don't know who Zippo is, and this is the first video you've seen of me, the first video you've heard, Zippo is a well-known, well-regarded leaker on Reset Era who's gotten a bunch of information correct in the past from Paper Mario and just a whole slew of them. Paper Mario is one of the biggest ones because he got the title correct on that one. But yeah, he's just been a really big leaker over the years. He's never been 100% correct, but yesterday he put out a blog post, he's been promising for a while going over all of the various things he knows and has heard about happening at Nintendo. And we did a video on that yesterday about E3 leaks and Nintendo leaks for the upcoming year and there was a lot of really good stuff in there including a new Mario Kart game or Nintendo Kart or something like that, very exciting stuff, but in that whole mess was kind of a damper on Breath of the Wild 2 and you guys have seen the reports everywhere, right? It's literally, I'm like Game Rant, it's on Express.uk, it's hitting a lot of major outlets, even still today, what Zippo had to say about Breath of the Wild 2 and how it's releasing next year, not this year. But I finally went through and reread Zippo's blog post because he did do some updates today that we might talk about in other videos, but he didn't update the Breath of the Wild section, but in rereading this section, it actually made something stand out to me and specifically it made it stand out because Mr. Jeffery Grubb, Jeff Grubb baby, if you don't know who he is, he is a video game journalist, alright? He works for, I think it's a video game chronicle, I could be wrong on that, I'm trying to remember his example. Anyway, he is a big name in the journalist kingdom, he does the Jeff Grubb game mess live stream over on Twitch Monday through Friday and he has a bunch of industry insight information, he's the one who told us we're getting the Wind Waker and Twilight Princess HD for the 35th anniversary of Zelda and every time he tells us stuff, he's basically right. As an example, he knows roughly around the time the next battlefield game is going to get unveiled, right? So, it's not going to be at the July EA play event, they're going to unveil it in June apparently. So, he's got a bunch of inside information and he talks about what he's able to talk about that's not locked down under NDAs of course and he put up a post that basically said that Breath of the Wild 2 is coming this year, but first let's get into Zippo. So, here's what Zippo said on his blog. So Breath of the Wild 2, many are wondering if this is the year it releases, after all it was announced about 2 years ago, I'm going to go and say no. If any Nintendo game was affected by the pandemic, it was this one. From what I have heard, the game is nearing completion, but a release by the end of the year just isn't seeming feasible. The game needs a bit more time and with the last year in mind that's entirely understandable. What I foresee is Nintendo doing at E3 is finally busting down the doors on the game and giving fans and the press tons of details on it with a Spring 2022 date attached to it, but that's just my prediction on it. And he has this in a specific section on his post where he says things he's not sure about, but everyone ran with this and I put it in my video yesterday and I didn't make the headline Breath of the Wild 2 is delayed, but a lot of people are talking about how Leaker Insider is saying Breath of the Wild 2 is delayed. But Jeffrey Grubb came up because he's speculating, right? He's giving his educated guess at Breath of the Wild 2 is coming in 2022, but Mr. Jeff Grubb put out a tweet yesterday because Sony fans were kind of celebrating Horizon Forbidden West, right? Horizon Forbidden West is a big game coming to PlayStation later this year. It's going to be in PlayStation 4 and PlayStation 5. And yeah, that with Final Fantasy 15, no, 16, Final Fantasy 16 are like the big games that Sony is like banging on for their holidays. And that's great. It was slated to come out in 2021. Fans were worried it was going to be delayed. And then Sony basically reconfirmed yesterday that no Horizon Forbidden West is going to be a 2021 title. And because, you know, it didn't look like Nintendo has anything major coming, it doesn't look like Microsoft might have anything coming around the time, at least that Horizon Forbidden West might be coming out later this year. That, hey, you know, Horizon Forbidden West is enjoying, you know, its own launch window with nothing major impeding it. Sony fans were like getting super excited about it. Well, Jeff Grubb tweeted out a meme. And the meme is that, you know, the Jeff Momoa, where he's sneaking up on the Henry Cavalier, who plays Superman, and obviously is in, I probably butchered the pronouncement of his name. And he's also obviously the guy who plays Witcher and plays Jeralt. So here's the thing, we all know that meme, right? Because factually, you know, Jason Momoa did sneak up on him on the red carpet there and surprise him. And what's happening is, it says, it specifically says Horizon Forbidden West is getting a release window to itself, all right? But then Jason Momoa is Breath of the Wild 2 sneaking up. So it heavily suggests, of course, that Jeff Grubb has heard and totally expects Breath of the Wild 2 is coming around the same time Horizon Forbidden West is later this year. And I actually find the idea of Horizon Forbidden West and Breath of the Wild 2 releasing around the same time in 2021 to be highly intriguing. You want to talk about console wars. You want to talk about fans going at it. There already has been heavy debates in the past over what's the better game? Is it Horizon Zero Dawn or is it Breath of the Wild? A lot of people conclude, well, Breath of the Wild is the one that won the Game of the Year awards. Breath of the Wild is higher rated on Metacritic. Breath of the Wild is sold better, although Horizon Zero Dawn is no slouch and sales. It's sold better than any prior Zelda game before Breath of the Wild did. So yeah, Horizon Zero Dawn is a big deal and it is actually a very good game. So there's always a debate because those are like action adventure style games that are exclusive to Sony and exclusive to Nintendo.  Now imagine those games didn't actually release even in the same year, let alone the same release window. So imagine Horizon Forbidden West and Breath of the Wild 2 come at each other around the same period later this year. Wouldn't that be just insane? Can you imagine the debates that are going to rage? And I'm going to play both of them. So it's going to be a lot of fun for me as well to be like, hey, I get to play both of these like around the same time. That's awesome. So what I want with the big takeaway from this is that Jeff Grubb is basically throwing out there. Hey, Breath of the Wild 2 is coming this year. Horizon Forbidden West fans don't like get so cocky to think that you're not going to have any game potentially competing with Horizon Forbidden West when it comes out. Because yeah, you're the Zelda fans, you're going to hear from them. You're going to hear from Zelda fans because Breath of the Wild 2 is coming around the same time, at least from what we're seeing here from Mr. Jeffery Grubb. I find this to be highly awesome. And even when you go back and look at what Zippo said, because he's guessing, right? He's doing an educated guess. And his educated guesses are usually pretty accurate. But he does say he knows the game is nearing completion. So he knows it's nearing completion. He knows Breath of the Wild 2 is almost done. But he's just assuming because of the pandemic. Because remember, he says if any Nintendo game was affected by the pandemic, it was this one. He's presuming the pandemic has caused the game to be slightly delayed into 2022, early 2022. But still, he's presuming he doesn't actually know. He just knows the game is almost done. And we have heard from other sources that localization is done. Localization is one of the final things that happens. So, yeah, I honestly feel 2021 seems locked in. So some fans were kind of disappointed when they saw that news yesterday, a 2022. So I felt like I really needed to make this video to let the Breath of the Wild fans out there know, hey, don't lose hope. Jeff Grubb is giving us hope. There's a lot of reasons to think that Breath of the Wild 2 is still launching in 2021. We're just going to have to wait for E3 for confirmation. That's the big thing. We will hear from Nintendo then. I also have a video coming later today on when we're going to find out Nintendo's E3 plans and then we'll dive into what some of those E3 plans might be. I know we've talked a lot about Nintendo's potential E3 plans, leaks, rumors, my expectations. But now we have a good idea of when Nintendo is going to be announcing those plans from a reliable source as well. Not Samus Hunter. Samus Hunter, by the way, was just talking about when Nintendo is going to share plans internally. Now we have a decent idea of when to expect those plans to come out because I know every single week people are like, oh, man, when's Nintendo going to drop the E3 news? Well, we now have an idea of when that's going to happen. So that's going to be coming up in a new video. And don't worry, I'm going to be trying to package some other things in with that news so you kind of get a kind of a double or triple feature there. So thank you guys so much for tuning in and I'll catch you in the next video.