in the other file, and again in a way that is not static, right, and theoretically it should work. Except for one thing that I didn't think of. And that is in fact we need to extern it, right? Again, trivial.c, in fact it can be static, thinking about it. But I have to do an export symbol. Again, we need to tell the internal linker about it, so it works appropriately. You'll see here that I've actually been able to make it static and I've called export symbol in order to make the appropriate function work. So what I'm going to do now is I'm going to, whoopsies, build it. And so I'll get out of here, I'll do a make. So the thing about externing is you only need to do externing for something where it's stored. So for a variable. Functions, we provide prototypes all the time without externing. So you don't need to extern function pointers. I do unfortunately need to add this to the make file, so let's just quickly edit that. And for some reason my editor is doing silly things. So let's do the build, here we're going to make, and this will be the last of this because a function isn't a prototype. Yeah, I'll just get rid of that. Again, we're not relying on the, we're not relying on the kernel, sorry, on the compiler linker to do this, so it can be static. The fact that we are exporting it using export symbol is sufficient. It's just that the compiler itself gets messed up. So I'm making a mistake of some sort that I am not seeing trivial. I shouldn't have to, that isn't a prototype. No, but the thing is you don't need to provide a, you don't need to provide it in this particular case. I guess the kernel does. Oh, we will try that then. You're probably great. The function version isn't a prototype. Okay, sadly we're out of time anyways, it doesn't matter. All I wanted to show you here was that in fact when you build the two together, this is what happens when you try to root code on camera. All I wanted to show you was that when you have modules and one depends on the other, when you insmod them out of order you get an error. That's pretty much all I wanted to show you. Once we install them and then use ModPro, it would have automatically loaded them in the appropriate order. Okay, anyway, that's it for today. Unfortunately, we've just run out of time and we need to get on to the next presenter. The next talk that we're giving is on Uboot, but otherwise for those of you who are here to see modules in KBuild, I hope I answered your questions, I hope you know more about modules in KBuild, I hope this now brings you into the ability to write your first kernel code. Yeah, and we have a couple of questions. I'll take two questions then we're going to have to move on. It'll be under user source by default. That's where the package puts it. No, you have to install the package first. So the package, yeah, yeah, yeah, nothing. We're going to give you those on a USB stick. So yeah, it's nothing you need to do. So the next talk is momentarily. And I'll make adjustments if necessary. So we get a good level, okay? Thank you. Can I ask you to do another favor and wear another mic? Yes. I mean it's going to be recorded by the conference, so you can just get the recording from the conference. Yeah, it's going to be recorded. Can you actually hear me? It's probably not on. Oh, it says on, but it does say on, doesn't it? Yeah, let's see. Yeah, can you actually hear me? It's probably not on. Oh, it says on, but it does say on, doesn't it? Yeah, let's see. Test, one, two, three. Okay, so it has to be. What about now? Test, one, two, three. No? One, two, three. I mean if I have it like here then it's working, but it's like, it's not working. Yeah, anyway, yeah, so I guess I'll be talking like that for a while. Let's get to the UBOOT talk. Just like being said, I'm a software engineer. I work on UBOOT, Linux, OpenMVidit, and this is the stuff I work on mainly. I am maintained in those three projects, one way or the other. In UBOOT I do USB, I do SOGFPGA, or NSAS stuff, and I'm one of the most active maintainers there. That's quickly about me. Can you just assemble it for me? I can do that. I can do this. I'm going to put it right here. Let's see if it's in. Yeah. Test, one, two, three. Hello? Test, test, test. One, two, three. Yeah? One, two, three. Test, one, two, three. Test, one, two, three. Yeah, absolutely. Now, where is it actually? Yeah, go ahead, let me look at it for a second. No, that's in good shape. Okay. I know what's happening. It's running away from you. Yeah. You don't like this. Yeah, just whatever. Is that going to work? How is it now? Can you hear me? One, two, three. Test, one, two, three. Yeah, test, one, two, three. Test, one, two, three. Yeah, there we go. Now it's better. Yeah. Test, one, two, three. Yeah, you're good. Yeah? Okay, yeah, well. Oh, yeah, this is so much better. Super. Thanks. Yeah, so I wanted to start with a slide about booting a computer. So basically what happens when you turn on the device, which you have on your desk, is that there's some sort of power sequencing happening in the CPU, obviously, but then the CPU has to end up somewhere in the memory, which is called the reset vector. And in that place, in memory, there has to be some initial code. Now this will be your first stage bootloader. Nowadays, it's going to be in the chip, because the technology is just advanced so significantly that people want to boot from something else and parallel flash. So there is some sort of bootloader buried in the chip, which does the initialization of the platform and then loads the next stage bootloader from some external media, which can be like SD cards or it can be USB, it can be whatever, something more complex. Usually this second bootloader is loaded into an on-chip RAM. The bokeh legal is this, the MLO, it's loaded into the on-chip RAM, executes it, and that, again, that's some initialization of the platform. It usually brings up the DRAM up, the U-boot proper, into the DRAM, executes U-boot in the DRAM, and after that U-boot loads the Linux kernel into the DRAM, executes Linux kernel, and the Linux kernel does its thing again. So this is basically the multi-stage loading, which happens today on a contemporary platform. It didn't have to be... It wasn't like that every time back in the past, it usually happened to be that the CPU core had the address was directly routed to the pad of the chip and you just attach the parallel flash and the CPU core just directly booted from the parallel flash. So your first code running on the core was something you controlled. It's not like so. Replaceable code on the Pocket Beagle is U-boot, and I would like to talk about this today. A boot loader, yeah, it's just the one thing it does. It can load the next stage and execute it, which usually is Linux. It can be anything else. It can be a VST, whatever. It doesn't matter, but it can also be used as a really good debug tool in boot monitor. That means, like, the U-boot can start the Linux kernel, right, and then you will not see it again, but it can also drop into U-boot shell where you can, like, poke registers, operate buses, and so on, debug your platform, which is really useful, not only if you're, like, trying out new hardware, but also when you have, like, your platform, for example, out of manufacturing, you want to check out quickly if things work or not. And I would like to show you how to use that U-boot shell and really, like, how to poke the hardware and really test out everything. So, first of all, this is how U-boot looks like. If you power up a system, what you see here is the U-boot SPL, that's the U-boot tree loader, and that just loads the U-boot dropper from the, in this case, the card into DRAM after initializing it, and then it starts the U-boot dropper. The way you can identify that these things start, it is by just printing out on the serial console that they are running. This print, the U-boot SPL and U-boot information is, like, the first thing U-boot prints out on the serial console to notify you that, hey, I'm running, like, at this point, everything still works. What else do you see here? U-boot itself, U-boot dropper will print which CPU it is running on, how much DG RAM you have. It will also print the board name, which is somewhere down here. Right. In case you are getting, or trying to get support from the U-boot community, you should include definitely the U-boot version. In case you have some extra patches, you should include that information as well that you have some extra patches. You should definitely include which board you are using. Now, once you get through the entire U-boot boot log, you will get to the Out-of-boot countdown. The U-boot will be running this countdown. If it reaches zero, it will just do the default boot action. If you interrupt the boot countdown, it will drop into the U-boot shell. Minor note on the U-boot SPL versus U-boot, there are three different things, actually, which can build out of the U-boot sources. Nowadays, you will usually meet only the U-boot SPL and the U-boot proper. What that means is that with modern platforms, the first thing that happens, or that can be loaded, is some sort of small piece of code, like tens of kilobytes big, which has to initialize D-RAM. It gets us for that, and is able to build a stripped-down version of U-boot, which will do the D-RAM initialization, and then chain load the U-boot proper. This is what the U-boot SPL is. There is also possibility to build a smaller version of U-boot, which is the U-boot TPL. You will likely never run into that, but just so you know it exists, it usually is present on devices which have sensing one end, and we are talking about like units of kilobytes big artifacts built from U-boot sources, which basically is responsible for loading like the U-boot SPL into the on-chip RAM, executing that and then U-boot SPL is responsible for initializing the D-RAM, loading U-boot proper into the D-RAM, and executing U-boot proper. So on some specific devices, you may also have to use the U-boot TPL. But usually you're never going to run into that one. So that's it for the interaction into U-boot. Now I would like to show you some commands which are useful in U-boot. First useful command is echo. It just allows you to print whatever some string. It doesn't interpret any control sequences except for the C control sequence which says do not print new lines. Otherwise it doesn't behave like the shell echo which does support interpretation of the control sequences, okay? The other thing is help command. This is really useful because even if you get like completely alien platform which you have no idea about what it can do, if it runs U-boot, if it gets into the U-boot shell, you can just do help. It will print you all the commands that the U-boot supports so you'll know what you can do with that U-boot. Now you can also do like help command which will give you more detailed information on that command. And this is useful even if you are like confident with U-boot but you just don't remember what's the order of like arguments for specific command. You can just do like help command and get this information. In this case it's like help for the USB sub-system which you can see in here. So what can we do? We can stop the USB. We can reset the USB bus. We can stop it. We can get the USB 3-listing. We can get USB test mode running. That sort of stuff.  If you need further help you can look into the U-boot documentation which is in the U-boot sources. You can see it down below here. Also in case you have some specific question you can visit the U-boot IRC. It's on 3.0. I mean if you ask questions please wait at least like a while then just immediately leave because no one responded to your question quickly. The people maybe like in Europe you know just ask at the time when they are asleep okay they just cannot reply immediately. And if no one really replies on the IRC which usually doesn't happen but it can just ask in the U-boot mail English. So that's it for getting help. Now getting board info even if you have like a board which you know about just want to check what the board is about is done using the bdinfo command. And here the interesting parts are the DRAM information here. So basically U-boot is using just physical addresses and in case you need some sort of memory with which you can operate on the U-boot shell you just run bdinfo, look at the memory layout you see okay there is a DRAM it starts at 8000 on this board. What is that? Yeah here it starts at 8000 it's 2000 with 8.0 big and this is the area which you can use for whatever you want loading files experimentation whatever. It is just a small detail that U-boot itself will relocate itself at the end of the DRAM so you should probably avoid like the last 16 or so megabytes of DRAM because otherwise you can put up the U-boot or it's structured and bad things will happen the system will become either unstable or it will hang or something like that. So like using most of the RAM is okay it's just the last couple of megabytes that are not okay. You can also see at what location U-boot itself actually relocates it it's the Reload address somewhere down here to look it up. Yeah the Reload address at the Relocation address which U-boot placed its code but this does not take into account Molocare which is like above that and U-boot stack which is also above the Molocare area so you should like round it up a little and then avoid that piece of memory. I mean you have plenty, you have like 512 megs of memory anyways. There's some other interesting stuff in here Ethernet address which is like the current Ethernet address we can't really make use of that on the Pocket Beagle but in case you have a board which has actual Ethernet then yeah the current Ethernet address is also in this list I think. So now that you know what your memory layout looks like you can also do something with the memory like read it, write it. For that we have the memory dump and memory write commands MW and MD. Well they allow you to access both DRAM and device registers and device registers can be sensitive to access with they also support off-access which allow you to select like how wide the access to the register should be we support byte what else do we have here. What access which is 16-bit long that's the default that's the 32-bit and quad on 64-bit platforms which is 64-bit access. By default the MD the memory dump will read 64 words of data but you can specify how much data you actually want to read out from the memory. That's an argument to the MD. Another trick is that if you do like MD and some address potentially some amount of data and then enter it will dump that that much data. If you press enter one more time it will dump one more time and add many data again. So like you can do like MD some address okay but I want to read some more enter will read some more and so on this way you can keep dumping the memory. You can actually see it at the end here this is just a matter of pressing enter here. Okay. You can also use these commands to access device registers in this example here I'm using it to toggle the blue LED on the pocket beagle board. So what I do is first I just dump registers of the GPIO controller. This is something I fished out of the datasheet for the OMAC chip. So I noted that address 4804 C130 there is GPIO controller direction registers then there is input register then there is output register and value register something like that. So I set the direction register here to most of them are inputs those which are set to zero are output that's for LEDs and then I can set the output value register using the MW command to just turn on the LEDs. You can just try it on the pocket beagle yourself you will see that the blue LEDs come up. Now these particular masks I'm using here are converted to these face masks here and just these four specific bits which are connected to the same GPIOs which control the LEDs on the pocket beagle. Now there are a couple of additional commands which allow you to poke around with memory which are not that well known and are less used. It's memory modify. This command if you run it on some sort of address will reach out the value on that address and print it on the command line and ask you which value you want to store to that address. So if you supply a value it will store it to that address. If you just press enter it will do nothing and automatically increment the address if you supply a minus then it will go like one address but four. So this might be interesting if you want to interactively operate with some sort of register or something. Also NM is another command which doesn't do the automatic increment of the address. So you can basically do something like NM 0x4804 C13 C C13C This will allow you to change the GPIO controller output register and then you can just specify different values and toggle different LEDs on or off. With that? With this stuff? This is just syntax highlighting which went wrong. Sorry about that. It's probably just shell syntax highlighting. Yeah but this example is just showing that you can do the NM on some sort of addresses. We'll read out that address. You can specify something if you don't specify any value here. It will just skip the address not write anything in there. And this is basically the LED example done using the memory modify command. Oh and if you specify Q then you can just exit from the command. Okay. Last two commands which are kind of useful. Cp is memory copy. The same thing applies as on the memory dump and memory write. And Cmp is memory compare. Now this is useful if you are debugging stuff like you're reading data through some sort of bus and you want to be sure that when you read the data twice that the data are exactly the same. For that you can use the Cmp command. In case the data are the same the Cmp command will tell you so in case they are different the Cmp command will tell you that there is this sort of offset that offset the data are different. So okay. These are the tools for manipulating the memory and checking the memory. But what I would like to look at next is actually you would actually have two types of shell which you might run into. Nowadays by default it should be the hash shell which is like much more modern much more sensible shell but there used to be a shell version before that in the uboot and it was really painful to use that. So you might have run into this and the experience was probably not so pleasant. Hopefully now a days you will just run into the hash which is imported from busybox some time ago but anyways. If it's a pain in the... then you are running the old one pretty much. You will notice severe limitations of the shell if you like try to do something. What's that? If it doesn't behave like a born shell then you are like running the old one. There was quite a simple test in that let's see. Yeah for example I believe TAP completion didn't work on the previous one so you can try that one for example. Anyway I will focus on the hash shell because this is what's enabled on the beagle as well anyways and I would like to talk about that one. It's similar to what you are used to with your born shell on your regular PC and also it does support environment it does support environment persistency you can have scripts in the environment in addition to values so that's what the beagle shell does. Now the beagle environment is pretty much what you know from your standard channel that is key value storage but there are a couple of details to it. First of all the default environment so the default key values are stored in the uboot binary that's the default environment but on most of the boards there will be some sort of dedicated uboot environment storage so that when you save the uboot environment it will be stored in this additional environment storage and when you power cycle the board whatever you had in your environment it will not get lost but it will get loaded from this storage now uboot always has a life copy of the environment which is in the RAM but unless you explicitly save it into the storage it will get lost so you can kind of change the life copy of the uboot environment do whatever you want with it if you reset the board then all those changes will be lost for it you can experiment with the uboot environment whatever you want you can do to it and then just reset the board and you will start from trash which is probably convenient at this point now to operate the uboot environment there are a couple of commands for that print the environment content if you just run it like so without any arguments it will dump the entire environment on the the environment is quite rich so if you run like printend it will be just really really long list you can also just say ok printend specific environment variable and it will just print that one for example printend arc will print arm because arc is arm there might be a bit of a confusion about printend and endprint so the situation is as such recently we decided to consolidate everything under the end command so you should be using like end print endf, save, endf whatever this is the modern way to do it obviously for compatibility sake and because you will see everywhere on the internet there are legacy aliases like printend, saveend, setend and so that's just to clarify the situation so ok now we can print the environment great you can also access the environment as a variable so if you do like echo dollar arc like you see at the bottom it will also print arm so whatever is in the environment whatever keys are in the environment you can access them this way as variables now if you want to modify the environment you can use setend name of the variable and then the content or an endset you can also do like 3D questions if you want to pull the user for some information using askend and you can also if you have some sort of like long script in the environment you just use the editend and you can kind of move left and right then when you hit enter this environment variable will be adjusted so you can use those and finally if you did some changes to your environment you want to make them persistent so you can use saveend this will just commit it into the environment storage now in case you want to undo that stuff like you want to just get back to the default environment you can use just like fdefault-a the local copy of the environment if you want to make this persistent then you can do like fdefault-a and then follow it by saveend so that's the environment access but there is not, no you would probably have to do that yourself on the remote machine side patches are welcome yeah okay so anyway that's it pretty much for all the environment variables you can also use the run command to store scripts in the environment so if you have like environment variable which you set to like echo hello and then you do run name of the other environment variable it will run just a script so in this case if you do like run foo it will print hello because that content of the environment variable is just evaluated you can chain multiple of these commands using the semicolon operator that's just like you know it's from the shell just like you know it's from the shell it just ignores the return value of the previous command so it will just run those commands one after the other in this case hello world it will print hello world that's the run command but yeah there's one pain point here which is the environment variables people keep running into this one if you do like if you want to set some sort of script in the environment which is accessing variables it just so happens that you will run into this first case where the line 2 is immediately evaluated and then you wonder why is it printing like something which I do not want yeah because it is immediately evaluated this foo variable there now to work around it the best way to do it is just to use the single quotes around the entire script content when you're setting it into the uboot variable just like it is done here at the end so that's probably the best practice around it and yes you can escape the dollar sign and if you like start chaining the command you'll also have to start escaping the semicolons and all the other dollar signs so when you have like more complex script it gets difficult using the single quotes around the entire script is just so much easier so there is that another thing is uboot has a couple of variables which have special meaning that will always contain the version of the uboot bootloader so if you want to inquire for example your customer which version of uboot are you running you can just tell them ok either run the command or do like print and you will immediately get the latest information which version he's running if you have multiple like standard input output possibilities you can configure those using the std and std out std adder variables if you set that variable it is immediately triggering the change in the input output so be careful about that interesting variable is load address so if you're loading any sort of data from anywhere this will be the default load address to which uboot will load those data I'll get to loading commands in a bit now once the loading is done you can see the file size variable and that will be the amount of data that you would load it so like if you load for example a file from sdmmp and want to print it you can do like md whatever dollar file size and it will print exactly the amount of bytes that was loaded so this is the automatic variable which is useful really useful it is also useful if you want a file from let's say tftp and you want to write exact amount of bytes then you can just use the file size boot command is the default boot command so in case you have this auto boot countdown in uboot when you just start it up if the countdown counts to zero it will run this boot command which is the default command which is executed then and it is really meant to stop the boot arcs and external boot arguments interesting variable is preboot now this will be useful for example if you do some sort of commissioning this is a script which is executed before the auto boot even kicks in in case you have something which needs to be done at that point you can put it into the preboot environment and it can be useful if you have it like built into your default environment and then in the preboot you do your like one time thing for example one time provisioning of the board and then certain preboot to clear it from the environment and then save ends to write the environment into the system so the next time when the system reboots there will be no preboot variable and it will just not do this provisioning action anymore then there are a couple of variables which are used to configure network IP address NATMASC server IP PTH adder for MAC addresses and finally there is one last command which I would like to show you about for manipulating the environment which is set expert this might not be present on all the systems but it's really like an environment manipulation like this army knife sort of device so this one allows you to well it allows you to do like basically three things one is to load memory content into uboot variables another thing which allows you to do is do arithmetic operations both on uboot variables and on memory addresses which can be useful like if you are doing for example some types which need to pull some sort of bit somewhere in memory or whatever yeah you know you can do like both my business standard multiplication division and you can do also bitwise operations which is useful and in case you have regular support enabled in uboot then they also allow you to do basic regular expressions so you can like have a variable in the uboot environment basic substitution on it for example including like back references and this sort of stuff it's all there so that's what you can do in an environment but with the uboot shell you can also do conditional stuff basic things like true false commands return 0 for true and false returns non-zero it also has a return value so we can have uboot check for that and we also supported the dollar question mark variable which prints the return value of the previous command we also do support the shell if conditional where you can provide whatever if command then do some operation else do some other operation that supports it to this one we also support the short-term for conditional expressions with the or or and and this is also supported here is some example of that so if true echo hello hello will print hello obviously so there is that we support test command so we can like use the standard shell test command which allows you to do like arithmetic comparison and string comparison this is all supported as well you can use it in the if command so like if test something something then do something this is supported there is one small detail about that is we do not support if negation that means like if not something then do something is not supported but what you can do is like if something then do true else do whatever your desired operation is for loop iteration over the list of elements that just like you know it from the bone shell for loop while loop is also supported this example here will run indefinitely so you can like press control C to abort this while loop this one and that is pretty much for the Yubu shell there are also hardware manipulation commands here is a GPIO command which you can use to manipulate the GPIO pins on your board we support reading out the GPIO input which by the way also has a return value so we can do like if GPIO input some number of the GPIO then do some action this is also possible you can set the GPIO you can clip the GPIO you can toggle GPIOs using this command so if you need to poke GPIOs in the Yubu environment you can just do that I2C commands commands for accessing the I2C bus on the Pocket Beagle you have actually multiple I2C buses if you do I2C bus you will see the list three of them and you can use the I2C commands to operate the devices on those buses I2C dev allows you to select which bus you want to access there is only one at a time so you have to always switch with I2C dev and then you can do something like I2CMV to write memory or MD to dump memory convenient is I2C probe it allows you to probe the bus for devices which are sitting on the I2C bus one thing about the I2C probe is that it can confuse some old I2C devices so I2C by default it's not a bus which you can probe nowadays it works mostly but there can be some devices which will just be confused by this probe action so be careful about using this one and I2C speed you can set up the I2C speed in this example here I am accessing the accelerometer actually on the bacon bit escape so I'm setting I2C bus to accelerometers on bus 2 and then I2C probe I see there is just one device the accelerometer I can just read the registers using the I2CMW I specify that it's supposed to be chip 1C because that's the I2C address of the accelerometer and I'm reading from 0 8 bytes and this is what I get out of it yeah success I did manage to read some data out of it okay so that's for hardware poking commands next thing loading from storage so you can access different kinds of storage SATA, SDMMC NAND whatever for each of that we have a dedicated command to access the raw storage and its common properties but you can also load from file system like SATA, DMMC USB sticks whatever so for that you can use the load command or ls command to list that storage device there used to be times before this generic file system interface was available where we did have dedicated command for like listing XFS listing VFADFS so you might run into ubooth which will have like these commands XLS, Xload but nowadays the modern way to do it is just with ls and load the generic interface which detects the file system here's an example of loading file from SDMMC so what I do here is there's a lot of extra stuff but first I rescan I have like all the latest information from the controller then I'm looking at the partition table I see that I have only one partition in here which is of type Linux okay there is probably X file system on that I can list the MMC in this case it's controller 0 partition 1 okay I see that there is some sort of file it's perfect I can load the file to load address which is the default load address and then I can dump the content of the file and I'm using the file size here because ubooth conveniently set that up for me to just exactly dump the amount of bytes that the file has we won't be able to exercise this one loading from network but ubooth has a network stack in it it's UDP only it doesn't support DCP but this is not that limiting and it significantly reduces size so this allows us to use ICMP obviously ARP and then we can use TFTP we can use NFS over UDP we can use DHCP to obtain information from the network now in order to use the Ubooth network stack you need to set up a couple of properties obviously you need to configure your network in case your vendor does not provide you with any way to obtain MAC address you might need to set that one up as well and then you can start just using ping to test whether the network connectivity works you can TFTP download files from your TFTP server or you can just use DHCP to obtain the IP address information and then download the files that's how loading from network works now if everything else fails and you just have no way to get files into the Ubooth you can still use load yes which allows you to load files over serial line so the way this works is you would support multiple of these protocols actually we support Xmodem Yesmodem and Kermit and in this example I'm using the EAmodem to like load EA you can specify also an address here to which you want to load the stuff and then in your terminal emulator you just say ok send over Ymodem this file and you would be receiving the file and storing it to that address so you can do that it is useful in case your Ethernet for example doesn't work for some reason then you still want to and you can just look it up if you want ok but that's about the question actually I would like to look it up so you can just load stuff over serial and I would like you to actually try this one out now finally it's bootloader right so you probably want to boot the kernel but even this is not that easy because if we have like Gathillion different Linux kernel formats on ARM you will find that image which is the raw one which is basically a Linux kernel image with a decompressor together you just put it into the RAM and basically set up a couple of registers just jump to it and the Linux kernel starts loading there is no protection against Petra now in the times of old there was an attempt to solve this problem and the U image came up which is like the U boot image but it's been legacy since forever because it's like just an envelope for a file so there is CRC32 and there are a couple of metadata in that U image which say like where that image should be loaded what's the entry point and couple of information about that image but the CRC32 is just today it's too weak it's useless so this has been legacy but there has been image format which supersedes that and that's the fit image which is like a multi-component device tree based image format basically allows you to write some sort of device tree specification and pull in blocks like the Linux kernel and have configurations which say ok this kernel goes together with this device tree and U boot will know how to interpret that and boot the kernel including the device tree and so on and you can bundle any amount of blocks you can configure different checks some algorithms and so on so the sort of flexibility is what the fit image is all about in case you're building some sort of embedded device definitely look at the fit image because this is what you want to deliver in the field now booting the kernel it really depends on which image format you have that you use the different commands for that so for that images we use boot set for U images and fit images we use boot M you just specify like the image address in case of the boot set you might need to specify also device tree location if your machine is device tree capable and you can specify also in it the address there we go or you have boot E because for some reason boot set was not good enough so we have to use that one and here's an example of booting the kernel so first of all we need to set some boot arcs because otherwise the kernel would not know where to send serial output then we just load the VM Linux we load the device tree and then use boot set somewhere around here the kernel with the device tree address and then the kernel starts booting so it's that easy to boot a kernel on the vehicle now speaking of device tree you would be able to also manipulate the device tree using the device tree command so when you load the device tree from your storage into the RAM you can say fdtadder pointed to that address of the fdt in the RAM and then you can modify the fdt in the RAM in case you want to modify it you need to first do fdt resize because whatever you just loaded into the RAM is like the flatten device tree blob and there is no extra space so if you want to add nodes you first need to do fdt resize to have you boot just add some extra space for your new nodes once you do that you can do fdt print to print whatever is in the device tree you can do fdt sad to add new nodes into the device tree and all that is like done on that device tree blob which you loaded into RAM so if you then do like boot that with a Linux kernel and that blob the Linux kernel will be given this modified device tree blob so if you want to like experiment with tweaking the device tree here is your way to do it yeah, so what you can do is like you load your device tree into the RAM then you use this fdt command to like point you here is a device tree and now the fdt command will be able to tweak the device tree or like add new stuff to it remove stuff you have to load the device tree manually into RAM so the way like booting the Linux kernel with device tree works is that you load the kernel into RAM you load the device tree into RAM and then you say assuming that it is an image right, then you say ok, so jump here but with these registers with these ARM core registers which point to here in the RAM what the device tree is sitting and the kernel will boot it will start executing and the first couple of instructions in the kernel just say ok, if these registers are set to these specific values then this kernel is being booted with device tree capable bootloader device tree is telling me the bootloader is telling me the kernel that device tree is somewhere in RAM and I should use that address for the device tree location so yeah, you have to do it explicitly yourself like load everything into the RAM and then say boot Linux device tree yeah, the bootloader is passing some sort of register settings to the kernel and the kernel is interpreting those early on in the boot and you can see that the bootloader will pass a tag to the kernel at which point the kernel is likely not running with device tree so this is what happens in the old times when ARM was being used without device tree yeah here is an example of the fit image content so this is like the device tree describing the fit image where you can see here is being pulled into the kernel section you can specify a lot of properties here, name where the kernel should be loaded was the entry point of it here I use a hash algorithm for this kernel section which is like CRT32 but I can have like secure hash algorithm 1, 256 whatever I can also have like this section digitally signed to prevent tampering here is an FDT section which is pulling in device tree it's an ARM device tree with again CRT32 and then there is configuration section ultimately here which is tying together this kernel and the device tree again it can have a different checksum algorithm it doesn't in this example now if I have this sort of fit image source file I can compile it with MK image it will generate the blob on the machine and blob will contain the kernel image the device tree and people will know where to put those and where to start those so the final bit is getting the input sources you can get them from the gate repo here in case you need some specific tweak from a maintainer you are in touch with a maintainer he might point you to one of these forks for the maintainer trees both of that is available through both gate and ICDPS protocol in case you were trying to clone new boot sources recently it could be that you had some trouble because we just replaced the server so I think last week the server had some sort of failure it could be that you were not able to get easy access to these repos that should now be fixed there are also sources for the uboot available on that USB stick you have now if you want to build the sources clone them, export architecture for which you are building in this case this would be ARM export your cross compiler prefix which will be like ARM Linux or ARM known whatever and then make your board that config and make the board that config in this case the 35x pocket beagle you can check if the config is present in the config directory so it has to be there otherwise you wouldn't be able to configure the uboot and then just make it it will generate the uboot binary for the pocket beagle that's uboot IMG and the MLO which is the SPL and that's it for the intro part do you have any questions in a little bit too much oh yeah you do and then this will write it into the storage so there is this environment storage partition whatever depends on how your board is set up into which the environment will be stored and this will be persistent at that point so if you do safe and it will be made persistent all of it the local snapshot of the environment any other questions if you can disable the output do you mean it will still check yeah I usually set it to like really long value when I do development but I do not think you can disable it from the uboot shell you have to do it program like you have to tweak the uboot itself there should be some configuration options for that yeah to disable autoboot but I would have to look it up what that is I would try something boot delay to minus one maybe that might actually work quick break we are going to do a quick practice in the last 10 minutes then we are going to do both the labs and Mark do you have some labs for people to try yeah absolutely so there is a practical part we are going to play with that after the break so everybody quick file break and when we come back we will do the practical part of the board incidentally we should do the practice you can play around with the uboot a little everyone has to be a little accessible I will do it BN one second give me a second don't worry you are doing great you are doing great yeah someone will help you out a bit this gentleman great yeah okay so task zero is just drop into the serial port see if you can do stuff like version or help if you can access that super task zero I will give you a couple of minutes for that so if you are getting bored let me know the slides are organized so that alright so anyway before you start discussing stuff and the slides are organized so that there is always some sort of task here which you should do and then on the next slide there is a solution for that okay so task one is just to drop into the uboot prompt task two is to conveniently load content into your uboot environment like the load y command please try it out this way you can kind of develop your uboot script and then load y them into the uboot environment so you will have always a sort of local copy of whatever you created for the uboot so that will be task one zero and one are nothing exciting do you all have actually access to these latest slides okay if you don't have access to them they are on the eail github repo so please download the latest slides in case you get bored you can start moving forward with a subsequent task and if you have a problem with task zero or task one raise your hand and let me know if you need assistance so you can just create your text file like key equals some sort of value exactly just save it as a text file and then use the load y to load it into the uboot and then import to import that file actually if you look into the slides like a couple of slides before that you will just find an example of it you can kind of put it together and it should be easy on the next slide there is also an example yeah in the github there is a latest slide loading environment over serial port into uboot just using loading just load the file yeah over serial port and then import that content into your uboot environment so you can have like your custom scripts written on your pc and then just import them into the uboot environment conveniently for this that's the instruction yeah okay so who of you actually is in the uboot shell right now can you raise your hand so what about the rest of you do you have some problems with that or do you need some assistance that's about it what's that yeah but you are now in the on Linux right so if you reboot yeah if you reboot then eventually you will get like this this sort of out pad this is what you will get so then just press space and this will drop you into the uboot shell I think yeah or you can just press the reset button on the board there is like one in the middle one of these three buttons yeah just try all three of them something happened there there you go super super so I figured I should explain task one a little bit more so the idea here is that use the load E command to load some sort of file containing environment and import it into your uboot environment so that you can conveniently this way import uboot script yeah yeah no there is not but you can like use shift page up shift page down I think so should work maybe it's the terminal emulator property what are you using what was that can you help up yeah going up and down there is like escape something like that I think it was like control A escape like escape and then you can go page up page down okay if I'm not used to strange oh did something happen maybe you too can kind of cooperate and figure it out yeah I don't think so yeah alright now it's in copy mode oh that's the one looks like you're here controlling oh cool so yeah so here's the question did you manage to get this loady working with the ymodem so the question what are we supposed to do with this task so what I would like you to do is prepare a text file with the uboot environment that means like a key and a value tuples in that text file then use loady to load that into memory and then import to import that uboot environment this is what I would like you to do here in this one was that I don't have an example text file but you can create one with like hello equals world that's this sort of yeah exactly and you can probably also put some sort of script that like you know foo equals echo bar something like that this is kind of how it should look like so if this is readable you can just create a random file then use loady and send it over to imodem when you finish loading you can just do md.b load address file size you'll see that the file was loaded and then import to import this environment file this is what I would like you to do to try this sort of thing was that was that yeah in the linux command line you just like use the cat command which means read from standard input until you type eof do you have a linux machine I do I'm just run you shell in your linux machine oh no I'm on your development machine


Hi everyone, Joe for jaskiescasebreaks.com coming at you with 2019, 2020, Panini, Mosaic, basketball, Salo Pack Break No. 169, 167-0 is coming up after that, 17-0 is coming up after this, 17-1 is coming up after that, and you can see kind of in the background here, 17-2 fills up that 15 box basketball mixer, so let's make that happen. Big thanks to all of these folks here in 169. All the teams are in, so as always we're going to do the break itself first. Let's roll it, randomize it 3-2, 5 times for each list, 1, 2, 3, 4, and 5. After 5 times, we got Gabriel down to Colin, 5 times for the teams, 1, 2, 3, and 5. After 5 times, we've got the Pistons down to the Suns. I'm not going to read off all these teams right here just for a little quick pack break, but let's highlight some of the big names, right? We've got the Nancy, Grizzlies, could be interesting, and Nick Stover, Pelicans. Let's get all that on one page right there. Let's print, and use that die right there. 1, 2, 3, 4, 5, 6, 6. NBA debut, Cameron Johnson, so nothing earth-shattering in the pack. That'll go to the Sun, that'll be for Colin. Pink Camo, exclusive to the Celepax, and Steph Curry, and his Team USA gear for the Warriors. LB for Mark B. Nothing too crazy there, but let's grab everybody's names from Courtney all the way down to Tim Tyler, and it's going to be top 3 after 11. Top 3 after 11. 1, 2, and 11 in final time. After 11, big thanks to from number 4 down to 30. Thank you. I appreciate you giving it a shot. We have one more pack to do to get into the mixers. If you want to try again, feel free. Congrats to Tim Tyler, Colin Smith, and volleyball Nancy. There you go. Nice for the top three right there. I'm Joe for jaskyscasebreaks.com. I'll see you for the next one. Bye-bye.


This video was brought to you by my patrons. Thank you so much for your support Hello there So I was studying some object-oriented design and I faced some techniques and some Terminologies that I'd like to share with you, but not as a tutorial I just want to raise the discussion about using this object-oriented design Terminologies and techniques in Godot engine. So let's start by talking about aggregation a very short description of aggregation is that it is a subset of Association so it implies that one object of one class owns an object of another class But here in aggregation we have a subtle difference because it is a specific subset of Association and it implies a relationship where the child the object that one class owns can exist Independently from the parent class. So let's try to understand this better using Godot engine Here in Godot one of the clearest examples that I can think about is the relationship between nodes and resources So if we go here in the help classes, we can see that we have note that inherits from object And we also have resource that inherits from reference some nodes most of the nodes use Resources in order to perform its behavior. So for instance, let's add a sprite here a Sprite can use a texture, right? So let's go here We have the Godot icon here and you can see that Godot icon is a texture here is a stream texture So help classes stream texture and it inherits from texture which inherits from resource If we drag and drop this resource here Now we have a sprite that aggregates a texture that aggregates a stream texture So this is the clearest examples that I can think about Another one is let's say a animation player. So if we create a new animation here Let's just say spin and if we save it to the disk Here we have the spin animation and if you go here in help classes Animation we'll see that an animation is also a resource and that the animation player is a node So the animation player uses it aggregates an animation So this list of animations that we have here is an aggregation of Animations in the animation player. So the animation player has a relationship of Aggregation with many animations and the reason why I think that this is a aggregation relationship So the sprite to aggregate a texture and the animation player aggregates some animations is that in aggregation? The child is independent from the parent. So they don't have a hard ownership between each other They don't have a hard ownership relation between each other. So let's see if we can try to prove that I will create a node here and I will add a script. So I will name this just test and Let's drag and drop the sprite as a child and what we'll do here is that I will create a var texture and On the ready function on the ready callback, I will say that the texture will be the sprite Dot texture and then I will kill free the sprite kill Free and here in the process callback We will try to access these textures. So let's try to print the texture here And the reason why I'm doing this is because in aggregation the parent and the child doesn't have a hard Ownership relation. So we can delete the parent which in this case is the sprite And we'll still have access to the child in this case the texture if everything goes well We'll have the texture printed here. So test it and here we have it So we have access to the texture even though the sprite is not available anymore. It was freaked from memory the next example and This one is not on me because I see a lot of people talking about this in the forums in the Scourge server the Facebook group is that the scene tree the way we arrange nodes in the scene tree It's also an aggregation relation. So if we add let's say a sprite and we add a Animation player here. We have a sprite that aggregates an animation player And if we save this I will save this just over this Okay, alright, and if we play this we have a sin tree. I will go to the remote sin tree here We have a sin tree, which is also a node that aggregates a view part Which is this root node so you can see that it is a view part here that aggregates a sprite That aggregates an animation player. Okay, but here's the thing I was searching in the web for how does aggregation work and I find out I will put this link to the source in the description so you can also have access to it But I will quote what they say in the screen right now It's important to note that the aggregation link doesn't state in any way that class a owns class B nor that there is a parent-child relationship But if we go here in the help classes node, we'll see that node Has a parameter a member property called owner very often This is just the root so in this case the case of animation player It will be the sprite but very often it can be the parent node of this node as well And we feel go down a little bit We have the add child which implies a child relationship and we also have get parent down here so we also have a parent-child relationship and I don't know if this is actually a Aggregation relationship that we have here in the sin tree So I would like to hear from you and another thing that I think that proves that this is not a Aggregation per se is that when we will see in the composition approach that when we use Composition it implies that the child's dependent on the parent So let's say if we free the parent we will also free the child But here in Godot here in the sin tree if we free the sprite for instance We will also free the animation player. So this will configure a composition not an aggregation So to prove that let's create another scene here I'll add a node drag this as its child and create another script here So I will call this test 2. Okay, and I will save this scene as test 2 as well And I was make basically the same thing. We'll have a var a On the beginning and a will be the animation player and then we'll free the sprite q Free and in the process callback will try to have access to this a node here So if they are indeed an aggregation So if the child doesn't depend on the state of the parent, we will have access to the animation player So let's print a here if they have a hard relationship between each other If they have a hard ownership between each other, we will not have access to the animation player anymore So I'll try to test this and We have here a deleted object So we don't have access to the animation player anymore And I think that this this is kind of strange because I heard from very professional people that the Sin tree makes use of an aggregation approach. So I don't know if this configurates or not I'll be very happy to hear from you what actually happens in the sin tree here But for this video, this is it if you like this kind of discussion If you like to talk about design patterns architectures engineering leave a thumbs up So I know that you want more of this content Don't forget to subscribe as well so that you know that I am producing this kind of content By the way, let's welcome adventures my newest patreon. Thank you so much for joining us and for this video That's it. I hope you enjoy it. Thank you for watching keep developing and to the next time


We have an egg. We have a secondary oocyte. My secondary oocyte is chilling in the fallopian tube and it's slowly making its way toward the uterus. But guess what? It isn't going to matter, doodly doodly doos, because that egg needs to combine with a sperm if it wants to finish and become a baby. Aw. So let's go back and remind ourselves. We have to have the boy half of the scene come back into the mix. So let's remind ourselves about what we already know about the fellops. We know that in seminiferous tubules, in the testes, sperm were being produced. We also know that the sperm produced in the seminiferous tubules travel through efferent ductuoles to the vast, to the epididymis, where they learn how to swim. It's important. If you're going to swim all the way into the fallopian tubes, you better know what you're doing, otherwise you'll drown.  And functionally, that's not a big deal because there's so many sperm, only 500 million heading out. You can choose one or two along the way, whatever. So they're waiting in the epididymis for go time. So things start getting all fun, exciting. They're starting to think it's go time. The parasympathetic nervous system's doing its thing. We have a erect penis. Everything's ready. Sympathetic nervous system starts getting into the mix. Things are getting really exciting here. The loopholes are in the epididymis going, okay, we're ready. Put us in, coach. Put us in. And sympathetic nervous system says, okay, let's go. And all of them get dumped into the vast efferents. The vast efferents is headed up through the spermatic cord. We're going to shift views because we need to take a closer look at, okay, the big picture. Where is all this happening? It's totally cool because, come on, there we go. Here was our epididymis. It's okay. I don't ever have to do that anymore. Here's my epididymis and it turns into my vast efferents. Are you cool? My vast efferents is traveling up, goes through the inguinal canal with the spermatic cord and then it separates out. Now this right here is my bladder just for perspective, which means that is my ureter heading into the bladder. So that just kind of gives you a perspective and I'm looking at this whole thing from the side. So the vast efferents, and maybe I'll try making it yellow to see if you could actually see that, the vast efferents travels all the way around and from the posterior aspect comes back anteriorly and is going to ultimately head for the penis. So along the way we have some players who are going to contribute some stuff. The first player who's going to, you know, I mean this is kind of a big deal. You've got your 500 million sperm, they're going for it and everybody in this area is like we want to help. Like let's, you guys are going in, we want to make sure that you have everything you need to make it happen. So the first person who gets to contribute is this little glandular structure called the seminal vesicle. And if you notice this, the seminal vesicle actually empties in and I mean you could say it actually kind of joins with the vast efferents although we become a new thing when the seminal vesicles dump in. So first of all, we'll get to all of that. The seminal vesicles, like life is good, you know, we want to pack you a lunch. So they donate sugar. They also donate bicarb, baking soda. Think back on your bio one days. Why would they be throwing baking soda? Sugar and baking soda? What, are the seminal vesicles going to like make a cake or something? No, they're not going to make a cake because most of the time they don't do stuff like that. The bicarb, the baking soda is there because vaginas can be kind of acidic. And sperm are like, we don't roll in acid, man. We don't like that stuff. So the seminal vesicles are like, we got you. Let's throw in some bicarb, this is easy. And then the seminal vesicles also throw in a hormone-like substance called prostaglandin. Prostaglandin. And I tell you prostaglandin because you might see that someday in the future. For some reason I've heard of prostaglandins before. Guess what the prostaglandins do? We packed your lunch, we've battled the acid. The prostaglandins soften the cervix. What? Now there's all sorts of interesting applications that we can think of here. What's the cervix? We didn't even talk about a cervix yet. Check out, let's go back to, I mean, we're going into the vagina. If these guys are lucky, they're headed into the vagina. And the vagina kind of maintains an acidic environment most of the month, most of the month. And it maintains an acidic environment to combat bacteria and like get out of there. Like we want to keep this place kind of inhospitable. But besides, for only 24 hours, that's the only time when we might possibly make a baby and the vagina would like to help make a baby regardless of what you think. So the cervix is this like, it's basically the opening to the uterus. So it's the, it is a hole.  Like the uterus kind of sits down in the vagina and the tip of the uterus, the cervix, you can actually see it.   So sperm, in order to get into the fallopian tubes where the secondary oocyte is hanging out, you have to get in there and you go through the cervix. And then once that secondary oocyte gets fertilized by sperm and embeds in the uterus and makes your uterus about the size of this room, then that little cute little parasite that just embedded in your uterus will come out through the cervix. The prostaglandins soften the cervix. They kind of open it up a little bit. They make it more like, come in guys, come in.  And if your cervix gets softened, you are more likely to get ready to push your baby out. All right, let's go back and see where we are now because that was just one guy. We have two more people who are going to contribute materials to this scene. We were in the vas deferens. The seminal vesicles dumped their stuff in. The tube is no longer called the vas deferens. It's called the ejaculatory duct. It's called the ejaculatory duct. As soon as seminal vesicles dump in their goods, we are now the ejaculatory duct. The ejaculatory duct is passing through the prostate. Does that work for you? Can you see? I mean, this is my prostate gland which means, what is this right here? I'll make it this color. What is this whole thing right here? That's my urethra. This is prostatic urethra, membranous urethra, spongy urethra. So this whole thing is urethra and the ejaculatory duct is next in line after the vas deferens and the ejaculatory duct is going to dump into prostatic urethra. Prostate. We're going through the prostate. We might as well add some stuff here too. Thanks, guys. So the prostate adds in some goods. First of all, the prostate adds in more food, and later, the prostate is like, I want to be super proactive and it adds in antibiotics. And then, this whole thing is so phenomenal, the prostate adds in semen liquefier. What? The semen liquefier is called PSA, prostate stimulating antigen, something like that. And this is something that they test for to find out the health of your prostate, the fellow's prostate, because the ladies don't have a prostate, because we don't need to have semen liquefier produced for us. But when the semen comes out, it's kind of in a little blob. It's kind of in a, like, it's not super gelatinous, it's like, it kind of holds its shape. And so, that's hard for sperm to swim through. They're like, dude, just melt the stuff, and then we can swim better. Prostate's like, I got you. We'll throw in the semen liquefier, plus some antibiotics and some extra snacks for the big, long trip. And we got one more person, because now, now the sperm entered into the urethra. Prostate's added all that stuff. It goes through the membranous urethra, so all the sperm and all their juices are coming through. Travels into the penile urethra, I mean, the spongy urethra. Somebody else says, don't forget my gift. It's like, they're going off and they get gifts from all the special wise men. So this guy right here is called the bulbo urethral gland. Bulbo urethral gland. And this guy is the clown of the team. This guy's like, yeah, you're going off on your big adventure, sure you need antibiotics, sure you need food, but really, let's throw in some fun stuff. You got to have some fun while you're at it. This guy throws in the mucus to make for extra slip-slidey fun. So now my 500 million fellas are busting a move.  And if they're lucky, they get to go into a vagina and up the tube they go and into the cervix and they're like fighting their way through and the cervix is looking all soft and lovely. Thank you, prostate, and they swim up through and they swim in through the uterus. Now it's like a choose your own adventure. Which side do you pick? Nobody knows, half of them go one way, half of them go the other way. Who's going to get lucky? Someone gets lucky, maybe they get lucky if they got there in 24 hours before that egg died and they make a baby. Well, first of all, they fertilize that egg and then the egg gets to finish. That secondary oocyte gets to finally finish and actually be an ovum. And now I finally get to call it an ovum. Yes. And then for like two seconds it's an ovum because what happens next? It already got fertilized. So the two nuclei, sperm nucleus and eggy nucleus combine and now we have a zygote. And that little zygote's going to bounce its way down the fallopian tubes and into the uterus. And then it becomes a true parasite of, like it's totally a parasite. It burrows into your uterine wall. It like starts eating the wall of the uterus. It takes over your immune system. It like hijacks your whole system. And then it makes you have to dilate your cervix to 10 centimeters in order to get it out. But we love them. They're so cute. Okay. After all that, you now know why we're doing this whole thing. You've got all the anatomy to go with it. Now the next time you're like, what is he thinking? Or why are men so weird? Or think things like that. I'm going to tell you how actually we are really, really similar to the fellas. The fellas are really, really similar to us. All right. I'll be right back to enlighten you on that whole phenomenon.


We are here. We are wrapping up day two of PTC 23 our first day interviews. We did 16 interviews today busy back-to-back. We talked to so many people, but we still have so many more people to talk to But we're just gonna do a little cover of everything that took place today. I mean wow It's been such an amazing day here at PTC 23 the biggest PTC today I know and you can tell here It's busy the floor is busy the bars are busy the restaurants are busy Everybody is out back in Honolulu and happy to be here. It's very obvious Yes, and we are so happy to be here JSA and today was a big day for us at JSA Yes, we're so excited that we officially launched as part of our greener data movement The greener data directories. So I mean everyone's talking about it here at PTC. We couldn't be more honored to carry on our mission to build a more Sustainable world and a better place for the next generation. So the greener data directory it is a rolodex of the you know organizations that are committed to a more sustainable footprint and how To reduce carbon emissions across the world. So this is a global movement The greener data directory you can find more information about it at greener data net or follow hashtag Greener data. Yes, and it's totally searchable search by solution search by geography And there you have access to all of the sustainable providers So, you know that you're doing good by choosing those providers Yes, and part of those 16 interviews included so many different companies some of our clients some of industry thought leaders Like bill climbing was here. Yeah, so fun. How fun is he? He's doing his selfies for Ukraine. So I'm sure if you've been on LinkedIn hard to miss those I think he said earlier we saw him around 930. He was up to 85 at that point 85 selfies that he had taken he said they already had saved enough to provide a medical van to Ukraine aid So absolutely amazing everything that he's doing. We then heard from cumulus data They gave us an update on their sustainable data center that they're building in Pennsylvania their flagship data center So we're really excited to hear about the updates that are coming for that one heard from bloom energy Yes, boom energy launched their data center division here at PTC 23 So super excited to be a part of that with our partners at energy and back to cumulus data I mean, we're Pennsylvania girls. Yes We can be more honored to represent cumulus data as well as boom energy to very sustainable fake focused Organizations here at PTC 23. Yes, both in that greener data directory and speaking of cumulus We had them on yesterday on a panel with Jau and it is actually Jau's birthday today. So happy birthday Jau Happy birthday Jau JSA we got to take him out to dinner last night So we had a lot of fun celebrating with him a little birthday Eve celebration So we'll see if he'll let us post some pictures from his birthday celebration We got to sing to him at the beach house Moana, which is just absolutely beautiful All of the venues here are beautiful that the social events are taking place that how Kulani beach house Moana Even here at the Hilton everything is just so tropical so lovely So it's hard to decide where to go, right? There's so many good options. So many good options I mean back to last night just as a recap We were honored to be invited and attend the women tech forum event. Yeah, so another critical Topic of our industry is women in data centers So of course we as women were honored to be there part of that event. It was a great movement I think it may have been one of the biggest events they've ever had it was yeah They have the huge lawn at the beach house Moana and it was full busy on and then at seven they welcomed their male allies So we let all the men come in at seven, but we kept the first half just the ladies So there's a lot of fun. So thank you to the women's tech forum for having us. Yes Thank you to the women's tech forum for having us and What's up for tonight? I mean there's so much to do The choices are endless and there is so much to do so you can bounce around to multiple options Tonight we're doing the console connect reception. So we're really looking forward to that one that one is poolside So have a nice drink by the pool after a long day of meetings and in the meeting suites We were saying, you know, we're in Hawaii, but we're in these rooms all day So it's nice to get out, you know and see the beach once we wrap things up. Yes, and then tomorrow Stay tuned for some more fabulous interviews on JSA TV here live from PTC 23 and then tomorrow night is the PTC awards Yes, award so bloom our customer that we mentioned earlier is the bubbly sponsor So everyone that is coming to the awards can have a glass of bubbly on bloom and enjoy themselves And good luck to all of those that are shortlisted We'll be there to celebrate with you when the time comes Including some of our client and friends on that shortlist tomorrow of the very prestigious PTC awards program. So that's coming up tomorrow But before that be sure to tune in again live on LinkedIn on YouTube on Twitter For JSA TV live we have about 17 more interviews tomorrow. Yes, so tune in and Be sure to Follow us on JSA net we have linked in JSA. Jamie. Scotty on associates and Twitter at PR telecom PR Hashtag greener data for all you need to know about our big launch today here at PTC of the greener Data directory and congrats and to our team that's been supporting us at home We couldn't be doing this without you so special shout out to our JSA TV team Mary Laduke and Blair and our marketing team Led by Courtney Burrows Amazing team that we have at home supporting us and all of our fabulous media mavens Who've been pitching and getting all of our hard working hard to get our clients and the PTC daily I'm getting all that news shown. Yes, and that is not a one-time submission. That is every day so shout out to our media mavens back at home and Happy networking happy networking mahalo mahalo see you tomorrow


Latest news about Mbuelelo old John Mabizla. Former Bafana Bafana and Orlando Pirates Captain Mbuelelo old John Mabizla before and after pictures, he is struggling to survive. Let's respect life Mbuelelo old John Mabizla the sad reality of football in SIP. From 10 to 0. Former Bafana Bafana and Orlando Pirates defender, live treated Mbuelelo Mabizla unfairly, he is now living like a beggar in the streets of Peter Merrittsburg. I am told by his buddies Mr. Fakumani Dlamini and Saibong with Ladladat. He is even without R2 to buy cigarette and in the Habu Department of No Bathing. We are learning from Mbuelelo's life that no matter how good or talented you are, but if your behavior is bad you're most likely to fail in life. Mbuelelo had his chances in life, but he wasted and burnt all his opportunities by disrespecting his employers and abusing drugs.He was infamous for absconding for days without a trace, misusing lifelines he'd been given, and was generally regarded as a miscreant in any dressing room. I have no doubt Mabizla so wish he can be young, and starred all over again so that he can correct all these ills of the past.Love life.


All right, best running back of all time. Best running back of all time. Ooh, I'll say the Danian Tomlinson. The Danian Tomlinson with his second touchdown run today. Running back, I like Barry, he's shifty. Handoff goes to Barry Sanders. He is in for a touchdown. All around, probably Barry Walter is really close. But Barry's my favorite song by us. But I see the Barry Sanders or the Waltzman. They give the Peyton a sweep to the right side. By one man still on his feet. Stuck in the way of the 20. Set, set, and all right, man.


Yo what's poppin boys and girls ladies and gents welcome back to another video thank you guys so much for the support if you're new to the channel hit that subscribe button hit the notification bell also hit the like button you guys have been enjoying the content we're trying to spice it up today doing a little bit of bank fishing we're gonna be throwing some big jigs for some big bass we're gonna hop around to some ponds and try to catch a big in man try to catch a big one I love throwing jigs anytime I get a chance to where I can go somewhere where I'm like you know what I think they're gonna eat a jig good you best of bet I'm gonna be throwing it you guys are wondering about the conditions today it's pretty cloudy outside got a little bit of clouds got a little bit of Sun peeking through it actually just came out and it's very beautiful today I think the high today is actually gonna be 90 degrees which is crazy because we haven't had 90 degree weather in a very long time so it is gonna get really hot today but I think we're gonna end up catching them pretty good so let's go ahead and hop right into this I have a jig box that I brought out with me I got all my rods so we're gonna go ahead and rig up get out on this pond right here start off here and I see if we can catch a big in what are you doing Cody come on Cody oh man come on bro come on man come on man so we have all my rods with me today I have a couple different ones I got a mock smash Mach 2 Mach 2 Mach 2 Mach 2 real custom pro custom pro so who did it who was it oh my gosh so we're just gonna be using one of my custom pros with the Mach 2 that's where we're gonna be putting the jig on today I'm probably gonna rig it up on this rod which right now I have a just a little Texas rig that we use in one of the recent river videos if you want to check it out I'll drop the linker down below so we got a few boxes with us today we got our j-box we got our frog box because we're probably gonna film a frog episodes to stay tuned for that we got the trap house and then we also have some rage crawls we got some of the smaller chunks right here we got a black and blue a green pumpkin and then a summer crawl and then we have a regular rage crawl pack right there this is actually my last pack of rage crawls which is pretty depressing because we smoke them on that so let's go ahead and show you guys what we got in the jig box and what we should tie on so the biggest thing when picking out your color is what is the water clarity what are we fishing today and I'm gonna show you guys this pond so recently this pond has actually been really dirty the water has been super murky there's a dead algae bloom and they also cut down like a lot of trees along this bank over here and ever since then the waters just got really dirty but recently I haven't been out here in probably like three months but recently it's been super clear like you can it's hard to tell on the camera but it's almost crystal clear me and Fletcher usually call this place the aquarium because the water is crystal clear it feels good to see the water clear up so there's actually a bass right there that's catchable and I'm just going to walk away so with the water being clear like that I think our best bet today is the go with a natural color probably like a green pumpkin watermelon red or like maybe a green pumpkin blue jig I think that's gonna be killer so let's go ahead and pull one out of the box tire on catch fish already it is time to pull out the big jig you like that one Cody was it on beat all right I don't know dude my sound cloud to be down below your boy about to become an artist all right I think we're gonna go with this one right here which is like a blue and green pumpkin jig that's gonna look fire in that natural water we only have two of them which I'm kind of sad about wish I had more so we got some like regular black and blue like skipping jigs got some footballs up here got some more football jigs like a green pumpkin with a little bit of chartreuse in it got like a pubion jay color but yeah we're gonna go with that one right there it's just like a standard green pumpkin with a blue swirl very slight but I think that's gonna work well in this clear water in the crawls that we're gonna be using these are the rage chunks which are a lot smaller so we have rage crawls right here you can tell they're a lot bigger these are the chunks is gonna work good on the back of this jig I'd almost rather use a crawl though the thing is with this jig you have this little screw lock these chunks are gonna be a little small for that screw lock so probably just go with the rage crawl and this one is in watermelon red still gonna put off that natural vibe it's a great clear watercolor as well you guys are looking for some soft plastics to fish in clear water watermelon red like that is just like a go-to color just like the green pumpkin so to rig this up on this jig I'm gonna go through the head of the bait crack it through you have this little screw screw lock all we're gonna do is screw this crawl onto the back of this jig this is gonna save you so many little crawls so many soft plastics with the way that you can screw it on this jig it's it's actually crazy helps the bait stay on there very good you can tell it's flush on there that is the jig that we're throwing it's a little natural color think it's gonna smoke them all right we're gonna cut off this Texas rig we might use her later today I'm not sure I don't know if we will or not we're gonna cut her off first thing we're gonna check do we have any phrase in our line let's pull a little bit of line down and feel it cut just a little bit off now we're good to tie this jig you guys wonder what knot I'm tying basic standard uni knot it's about all I tie boys and girls I know most of you guys probably tie a polymer but whenever you get a chance I would look into the uni knot so very strong not all right we're all rigged up let's get it started we're gonna walk down this pond like I said ultra clear water super super clear you can almost see these fish when I came down here a second ago I saw one roaming up on this grass and I don't see the fish anymore but one thing I do see is a bunch of bait fish some smaller bluegill you have a little bit of grass on this bank which creates for a little bit of cover so what we're gonna do I don't know where that bass went but he could be under one of these little grass patches I don't see him at all and I should be able to but then again he could be hiding so so this bait down the bank right here let's see if he's in one of these patches and if he'll come out and eat it I guess he's not let's keep going down the bank look to your right that was so cool that was so freakin cool all right buddy oh I wasn't supposed to happen look at that right there nice little bass is that not crazy Cody we just saw this fish just come out of nowhere and boom slapped him up real quick I was gonna try to throw back in super fast and catch his friend but yeah he kind of spooked off here we'll just throw him in over here but that's get the monkey off her back chunky little guy almost a two-pounder throw her right back thank you baby that was cool oh right there oh my god there's three of them I don't know which one I caught look at them out there chasing each other dude this is crazy look look did you see him going look oh my god he's gonna eat it for what just happened oh my god I'll see a good bass I think he sees me but there's a good bass right there always gonna eat it there's two this is the small one just call that one I'm gonna throw him in over here oh my gosh watch this that's a good one she should eat it oh my god yeah she's about to eat it about to eat it she just went away you gotta be on bed boy she's acting more walk over here give that one a second that fish should bite but it's just being a little finicky bro I just saw three fish guys we just came out to a new pond I like walked up there's three of them just sitting here am I what it's crazy that's a big one please eat it that's pretty good one oh he's about to eat it oh look at that right there just got out here look at that pretty bad I'm gonna be honest he's a pound and a half he that should be a two pound fish but look at this you see how skinny he is so he looked a lot bigger you have a scale yeah all right let's do it pound and a half what do you think I think that's about a pound and a half see he should be two pounds but you see how skinny he is I don't think oh no you got so you actually brought one today he's bigger than I thought he's a pound pound and three quarters I thought he was a pound and a half yeah we'll give him that like I said that could be a two pound fish easy but just with how thin he is but he's almost two pounds pound and three quarters right there there's another one right there so I'm gonna give him like a tiny toss right here I think I stuck him stuck two of them there's so many right here Cody I'm like watching him swim around super clear water dude these fish are stacked right here look at how he ate that jig that's a chunky dude it's a pound and a half here so this is a pound and a half that should be in a one-pound body here go that's a pretty that's a pretty fish too got pretty markings there's so many fish stacked up swimming that thing that's a good one too I'm in for a slay session today guys I'm like in the mood so you know I talk about how to fish ponds and a few videos but if you really want to catch a lot of fish in my opinion the best way is to cover a lot of water pay attention to what you're where you're throwing at I'm just walking down this bank throwing parallel cast and I just had that fish eat it this is a standard skipping jig I'm actually working in like a swim jig hopping it throughout the water that went toward up thank you for biting buddy oh my gosh these fish are mean in here man so you can tell what this bastard this curl switch it up put another curl on I'm gonna pick that up there we go got a new curl so I know we talked at the beginning of the video and I was like you know the conditions today a little cloudy well this Sun has just got out just literally beaming on us now and there's a little bit of clouds still in the sky one thing I noticed about this bank you know I wasn't gonna sight fish these bass it got a little windy you got this winds kind of pushing up in this bank not only that but this bank right here is a big shade line it's also got a lot of cover on it see this bank right here you ain't got anything you got a little bit of grass that's about it the bank across you got laydowns you got cover on the bank and you got shade and you got a little bit of wind pumping up into it as well so if there's any bass roaming they're probably gonna roam right here there's any bass they're gonna be tucked up they're gonna be on that bank so we're gonna pay attention to that these fish are just tearing up my crawls today he did the same thing I that's the only crawl that brought out with me I need to go back and get another one look he ripped it off and it's still on my hook he's ripped it off the bait somehow got up there it's pretty fish though I was just swimming it like a swim jig again got a little bit of wind going past this little point should have been some fish stacked up on it and there you go thank you buddy oh god that's a big I think yeah that's the best one yet did you see that what is up with fish pooping on us man that was weird that was really weird see it on his fin dude he just squirted it out right right in front of me you got a little nervous that's a nice fish would you look at his tail man you see how it split up in all those little corners yeah it's pretty neat it's really pretty fish I had him in the bottom of the lip that's why he felt so big but it's about a two-pounder might be your biggest thank you bud they're eating so good you know we talked about throwing on that other side of the bank that's exactly what that was that first cast right up in that corner it's pretty predictable guys you can tell where a fish is gonna sit and that just looked so good that I think there could be another bass with him over there there's a lot of laydowns that come off the bank and I think we make another cast over there we could catch one squeak squeak McGee I feel it I feel it and he's a tiny guy I did not expect that little tiny thing get up here boy it's not what we're looking for but he is pretty I will tell you that the colors on these fish in this pond prom is always spitted that was the best one yet I was probably a two-and-a-half pounder I was walking down the bank get back down to the spot and I was just reeling it eat that thing that just shows you can work a bait in multiple different ways guys you don't have to fish it out everybody tells you how to fish it you know you can sit here and reel a jig and pop it and work it just like a swim jig or just any moving bait and you know still catch fish on it I'm just getting unlucky with these squeakers right now that gosh you ate that thing pretty good thank you buddy it was insane they're just loaded and they're stacked running at me this is just squeaker central why you squeakers doing this to me that is look at the colors on that fish though yeah he's small but like look look at the golden that is a golden bass it's awesome thank you bud oh my god that's a good one so not dude that's a freaking chunk look at that one you know earlier before I went back and picked up this cross you know we're walking down this bank and I was like all right that little grass patch I didn't get a bite about five minutes ago ten minutes ago but I just came back and caught that right off of that patch made sense he's a fat one too that's a two-pounder nice thank you for biting buddy she like swirled after it never ate it I was a decent fish too she might eat it she missed it oh man that was cool that was an awesome catch right there well man today was a blast guys I love getting big jigs you know coming out to some ponds coming out to some lakes wherever and just catching some fish on them you know I want to film a big jig or just a jig video on the river here soon but I had a good time bank fishing today you know I haven't been bank fishing as much but you know I understand that a lot of you guys really enjoy the bank fishing videos and I want to get some good content for you for y'all but yeah the jig got it done today little striking skipping jig with a rage curl catching some beautiful bass in this clear water pond and man I had a good time if you guys enjoyed this video please hit that like button if you guys are new to the channel hit that subscribe button and I'll catch you guys in the next video see you buddy


Hey guys Titus here and today I'm bringing you a pattern test with Rob Roberts new Raptor series chokes. I'll be using my 20 gauge fronky affinity 3 paired with heavy bismuth. The target I'm using is a 12x18 splatter target which is the same size target that I use when I do the mounted ones. No I'm not going to be able to track the flyers that come out of the shell but I'll get what I want. All shots taken in this video will be from 30 yards. Reason being almost every choke looks pretty good at 20 let's be honest. I'm also not going to be doing 40 yards it's very rare that we're actually shooting ducks at 40 yards and you say yeah I do that quite often well to be honest with you put a mallard silhouette or a target up at 40 yards and step it off you'll be surprised how far that looks it's very rare that we're actually shooting that far. I'm going to be testing all of the chokes of the new Raptor series from Rob Roberts except the turkey choke so I'll be doing the r1 the r2 the r3 the biz and stay till the end for kind of a bonus shot I'm going to actually do one shot with the heavy 12 and the tss choke. Before we get started I just want to say that I did get to meet Rob Roberts at the 2023 delta waterfowl expo and he did a short interview with me on our podcast the nvm show if you haven't watched it go check it out and he explained why he came out with this line of chokes so if you want to find more information out about that why he did this line go to our podcast the nvm show you can find on any platform that does podcast check that out and he'll explain why he did that he's also going to be coming on again very soon after this video to go more in depth and a lot longer podcasts so let's get started all right guys now we're going to go ahead and start out with the biz choke first heavy biz myth three inch sick shot all right now we're going to try the r1 time to try out the r2 all right now we're going to try the r3 last but not least heavy 12 with the tss rob roberts choke this gun shooting high i need to shim this thing maybe that's been my problem this whole time with this gun so this is where you wish you had the big paper because now we're going from an issue of my gun shooting high which i never felt like this 20 gauge did but i was also sitting down in a chair resting on a chair so i don't know if that was fair analogy of this i maybe should have been standing with shooting sticks either way i had a very solid rest and most of my all my hits were high so anyways this was the the biz one choke and i had 106 hits on this 12 by 18 paper again these are the size of the duck targets that i use so same exact size you just don't get to visualize a deal but i'm really thinking i gotta shim my gun so maybe this is a good thing i feel like i shot it right with my 20 gauge but i definitely feel like it could be better and now i'm wondering if i've been over shooting over top the ducks a lot this was the definite the best pellet count at 30 yards i had was with the biz choke now i'm going to show you something here in a second that i felt like looked better it had about six less pellets but i felt like it was a cleaner pattern and now i'm wondering what's up here you know what i mean so i might have to do another video i feel like it's fair just to say this was the first one and just post this one but anyways that's the first shot with the biz choke with the heavy biz this is the second one again i probably shot high but i mean that's a pretty good looking pattern in my opinion especially for this small of a paper at 30 yards but that was like 20 less pellets now we start with the r1 okay now this is the r1 choke but that's a lot more of an open choke at 30 yards so it's not bad for you know and i'll put i'll put up on the screen what this is supposed to be considered this is the r2 chain bad but you can tell again my shot's high okay the next one's kind of almost my favorite looking one but there's not as many pellets in the table this is the r3 and i think this one actually looks really good i feel like that one just looks the best but again with that gun with that load that one just works best you know i don't feel like really a lot of shots high i just feel like it's there but so anyways that's that one and then last but not least this is that heavy 12 and look how tight that is that's crazy that shows how tight that choke is again at 30 yards against high so i guess you know i didn't really get to see what this chokes did per se like that's what i was really here for was the goal but i've never did real much of a pattern testing with this fronky affinity delete three so now i'm like well guess what i gotta go home and shim this gun so i really want i don't mind being like 40 60 high but i do not want to be that high i mean that's that's the majority of the patterns up there so nevertheless i hope you guys enjoyed this video again go check out our podcast um he's been on the podcast rob himself they're at the delta waterfowl event he's gonna be coming on the podcast for a full hour long audio will even be a lot better it wasn't the greatest on that one but i think you'll enjoy the mvm show what goes on there also i will be shimming my gun and if i can before season because the season starts like right around the corner i'm gonna try to get back out here and do one more time and maybe get two or three pieces of 40 by four foot by four foot paper out here just to get the full thing and see if i dial it in a little bit more so anyways hope you guys enjoyed this video um i'm still very happy with the chokes and each choke is for a specific purpose right and like i said the best the most amount on paper was the biz with the heavy bismuth so i think i'm gonna stick with that one i was really happy with the r3 it looked good but that might have just been that one shot so anyways hope you guys enjoyed this video and we'll see you guys on the next one


This paper proposes a novel intersubject transfer learning approach for improving spec-based BCI performance. It involves training spatial filters using multiple covariance maximization to extract SSV-paralleted information from the training trials. Then, the transferred spatial filters are used to construct two new transferred templates, which are then compared to the original template to calculate the contribution scores of each source subject. A four-dimensional feature vector is finally constructed for SSV-P detection. Experimental results show that the proposed method outperforms other methods in terms of accuracy and robustness. This article was authored by Yu Zhong, Shen Kuan Xie, Zhao Yongshu, and others.