In the morning we started with the cube monitor and we created the example working from the internal flash. And our goal for this afternoon will be to move this example, which we named the hands-on number two to the OctoSPI that this hands-on will be executed from the OctoSPI. And to protect this code, which is normally readable from OctoSPI, we will use the on-the-fly decryption and also we will encrypt this hands-on number two that nobody will be able to read it without key. Then plan for this hands-on. And for this, we will use the OctoSPI one, which is directly connected on our board. And it's possible to see or configure this memory that way that it will be visible inside the cortex, memory space or at address 90 million. Then if we're referring to the 90 million, in our case today it will be OctoSPI one. There is also OctoSPI two, which is on the other 70 million and I'm missing here one zero. And this is not currently used. I think we're using it for SRAM or SDRAM, which is also connected there. But in our case, it's no OctoSPI. Then this is the mystery behind the 90 millions. To be able to run the application, we can do two things. One is to modify the hands-on number two to initialize the OctoSPI and then modify the linker a little bit heavily. Or we do the separate thing and we will create small application, which we can call bootloader. And the job of this application will be to initialize for us the OctoSPI, initialize the on-the-fly decryption eventually, and then just jump into the hands-on number two, which is directly inside the OctoSPI. And this is the approach which I choose for this hands-on. And for this, we need to create this bootloader. And I already pre-prepared a small project, which we use for the start. And we need to import it inside our cube IDE. And the name is SOM, I think, called hands-on number three. For SOM, it's called on-the-fly decryption underscore OctoSPI boot test. Then you should have inside your workspace at least the hands-on number two. If you have already had the hands-on number three or a boot test, then you don't need to import anything because you already have it. In my case, I don't have them, then I will import them. Then I will select the file and import. Again, we importing the existing project into workspace because I prepared the basic of this project. And here I should put the path to my ecosystem workshop because there is the folder where I have the hands-ons and I want the hands-on number three or in your case, it can be on-the-fly decryption boot test. Okay, made my boot hands-on number three is here or on-the-fly decryption is here. I have here one mistake, then I need the rename this IOC file to have the same name as a project. Then I will name it hands-on zero three. If in your case, the project is named the boot test, then you don't need to change anything. Then this was unfortunately my mistake and we were creating the package. I will describe what this hands-on number three is doing. Currently, it will be not possible to build because I put the one file which using the OctoSPI but currently I know OctoSPI drivers inside our project then it will be not possible to compile. And inside the main is smaller team which basically he is trying to look inside the application which is on the address 90 million and check if on the first position is a value which can be considered as a stack pointer which is the first thing which you should have at the beginning of your application or you usually have it. And he checking if it's inside the RAM memory and if yes, use the second word because there should be the reset vector and he trying to jump on this reset vector. Then this is what this small code is doing, this one and this is the code which we have usually inside our bootloader examples and inside our USB D a few examples then or this loaders and it's called when you jumping from the one application into the second one and we can open this IOC file. Please check if you have the both with the same name, the project and the IOC, they have the same name and I will try to open it. I don't want to migrate, it's not necessary. And what I want to do, I need to add the OctoSPI because it's there. The OctoSPI memory basically came from the standard SPI memory when we have the chip select clock and the one data in, one data outline. And it's now a little bit involved because we have now up to eight data lines. So we can read one byte on one clock cycle even more. We have the chip select and the clock, this is still the same. And we have the one optional additional signal for the data strobing because we're running on the high frequency that it's good to stop the data. And in our case, we will use the feature of the OctoSPI called DDR, which allow to read the data on the writing and the following edge. This is also purpose of this strobing signal because he can give us information when the data are already valid. The OctoSPI one, which is directly connected inside our discovery kit on this pins. This is what I check from the schematic. And our job is inside the QPE mix, configure the same situation that this pins will be configured to the OctoSPI. This is what we will do now. And you should have opened, if you open here the IOC, you should have see the same view. And I am not sure which UV you're seeing here. I recommend here to select the A2Z because I can better orient in it and select the OctoSPI one. In the categories, I think it's inside the connectivity, the OctoSPI one. Then select OctoSPI one. And here select the mode, which should be the OctoSPI. Then we select the clocks, which will be taken from the port one clocks. Chip select, also port one, chip select, data strop, also port one, data strop, data from zero to three, also port one, zero to three, and data four to seven, also port one, four to seven. As a result, all this thing circles with the pins inside should be green. If there is the circle with the pin inside, which is not green, then probably this one is not correct. If it's this done, in the addition we here enable the on-the-fly decryption, we only need to select on-the-fly OTF deck one. It doesn't matter which you select in your project because they are independent unit, but in my file, which I prepared, I'm using on-the-fly decryption one, then please select the on-the-fly decryption one and only activate it. As a result, there should be the green checkbox inside the OctaSpy one and on-the-fly decryption one. If you have it, we can store save the project with the diskette or control S and the KUPE mix should ask us if we want to generate the code and we want, and I want to switch back the perspective and he will regenerate the code. In this step, we should have here inside the domain of inside the Henshaw number three, added the OctaSpy in it and on-the-fly decryption in it, which is a good sign. And as a consequence, we will also have the drivers for the OctaSpy and on-the-fly decryption. So from this moment, it will be possible to compile the Henshaw number three. We can test it. It will possible to build it. But unfortunately, it's not enough because to make the OctaSpy running, it's not so simple. We need to add some few steps because by default, the OctaSpy memory, it's running as a standard SPI memory. It's using one data line. So what we will do is good to send the reset command to the memory to put it into the default state. Sometimes it's good to read the ID to check if it's working. And then we want to switch to the OctaSpy iMode to use all eight pins, the data lines, and enable the DTR mode, which will send data and the commands on the rising and the falling edge. This is done inside this small library, which I prepared or the file of the OctaSpy.c and the H. And we need to only add it into our project. You should see the OctaSpy here inside the source already and we only need to add few things inside our main. And for this, I can use this file to copy 0.3. I will put it next to it to be visible. And we need to copy the include of the OctaSpy.h. So by at the beginning, I recommend line 25 inside the main. Please check that you have the main from the hands on number three and not main from the hands on number two. To be sure, you can click here on this link. And basically it will show you which the file which you have opened here. If I open the different main, it will show me that I am in main inside the hands on number two. But I want to copy this and I want to copy this OctaSpy in it and memory map in it somewhere in the main and I recommend it around line 100 below the user code begin two. And this init will initialize the OctaSpy mode and the DTR mode. And this memory map function will switch the STM32 to know the memory the OctaSpy will be now linked on the address 90 million. Then after this, I should see here the content of the OctaSpy at address 90 million. So I can save, I can build and I want to check now what is at the address 90 million and to be sure that I can verify that it's somehow working. I can put something at the address 90 million and for this purpose I prepared some small BAT file which should be inside your workshop folder and inside the tools and inside the workshop and the tools should be the BAT file load test tags. Then we can execute this file. Please check if you used the cube monitor before then unconnect and connect the board to release the connection to the stealing. And here can run this load test hex which using basically the command line of the cube programmer and he will flash the content of this hex file into our OctaSpy. This only small routine to put something which we can recognize inside the OctaSpy. Okay, my load is done and I can now run the debug of the hands on number three. There is nothing to change and I should start inside the main. I will put here the break point at line 104. I putting it here because then I want to open the memory but I want to open this memory window after the OctaSpy is properly initialized because otherwise the memory window is a little bit confused. I can run the code with the run or F8 and I stop here and now inside the memory I can check the address 90 million. It should be nine and seven zeroes and this view doesn't helping me to recognize what I put there but I can here click on the new one and I will select the traditional one where you can select also the ASCII but the traditional one is maybe better and I can see that I have here the ASCII translation of the content which I put inside the OctaSpy and I have here the text we are trying to check if OctaSpy works. Then it seems that in this state I can read the content of the OctaSpy and on the address 90 million I see this content which is good first step and then seems the basic functionality of our bootloader the initializing the OctaSpy works. So we have the situation when the OctaSpy can give us the data and then the second issue I need some valid content put inside the OctaSpy because currently now my application, the hands-on number three is trying to jump to OctaSpy memory but there is only my testing text and no valid application. So now the question is what to do with the application from the hands-on number two to make it running from the OctaSpy it's not possible only to upload it directly we need to do some small changes. One of these changes and a very important one is that our hands-on number two is created that way that he's supposed to run from the address 8 million which will be not true anymore we want to run from the address 90 million then we need to change this and this will be done inside the linker and the second issue is that we need to tell this hands-on number two where we expect to have our interrupts because by default he expecting the interrupts on the address 8 million but we want to move them to address 90 million two so we need to add this line which is setting this Vito register which is the register telling the core where search for the interrupt vector table the most important table inside your code and this we need to put also into the 90 million. So we start to modifying the hands-on number two then now open the correct hands-on please hands-on number two and first we open here this linker file this STM city to H735 something something underscore flash dot LD which is this famous linker file and definitely check that you have hands-on number two it will not work if we use it for the hands-on number three and what we want to change here we will do the small change we will scroll up and at the line 49 should be defined the sec memory called the flash and currently it's put on the address 8 million and we will only change it to the 90 million we will change the 8 to 9 0 you should have 9 and 7 0s it's very important if you change only 8 to 9 it will not work later you must have the 9 and the 7 7 0s okay I can save this it should be at line 49 inside this linker file and the second part it's inside the main of the hands-on number two and we will put it at the beginning of the main I recommend the line 107.7 and we take here this system control box vector set from the 2 copy 0 3 it will be faster and I put it on the line 177 then from this point after this is executed this code, this application hands-on number two can use the interrupts if he used the interrupt before I call this it will basically end up inside the interrupts from hands-on number three this is the purpose otherwise it will not work second possibility is also to add this inside the hands-on number three but I think you must be sure that it's not changed anywhere in the hands-on number two which I think we have it somewhere inside the template okay then this was the one change and the basic needed change and there is the one issue which I discovered later then when we already created the package there is the one issue that we're using some board support package files for the audio, for the LCD and unfortunately this packages will configure the clock source from the OctoSPA1 and OctoSPA2 to PLL which will be not an issue in the normal situation the issue is that later on when they enabling the configure in the audio they disable this PLL2 and as a consequence it will stop the OctoSPA1 and OctoSPA2 when we already running the code from the OctoSPA1 then our application will basically deadlock then this is the part which we need to correct which is accidentally put there inside the code and we need to put it corrected inside the BSP files and it will be here we open here the diverse the BSP and the discovery, discovery BSPs and here the OctoSPA.C and we will search the line 995 995 and we need to do a few changes I already have some old file interesting because it shouldn't be here I think you should have here the two and you must change it to three and the second part is that you should have here this function I'm not sure why it is not in my case, interesting to have here this function and we need to remove it and put here the hello okay yes I want then here change the two to three and here put this function which was here somewhere else and put here for example hello okay this will basically prevent to switching the OctoSPA2 PL2 but they will stay on the system clock and they are not possible to disable which is good then we will always run from the OctoSPA1 flash without issues then we can build the hands on number two and if you will check the the build analyzer and the memory then here the flash should change from the others 8 million to 90 million I think it will take a few seconds to update yeah now it's changed to the 90 millions so this application is prepared to run from X10R Quad SPI if you try to debug the hands on number two now because the debug will upload this into our memory if you try to run the debug you will discover you will get an error it's because he is he don't know how to download the code on the address 90 million because for the debugger or the loader which loading the memory this memory is not known he definitely knows the internal memories he knows the RAM, the flash on the address 8 million but he is not sure what is this memory and how he can put the code inside it then we need to tell him and this we do if we open here the debug configuration or the run and the debug configuration and we select here the hands on number two this is important we want to change it for the hands on number two and select the debugger scroll a little bit down and there should be the option for the external loader because this is the external memory then we use the external loader and to tell the flashing routines how to put the code inside this flash then you can scan it and it will show you all the external loaders which we have they are basically the loaders for the memories which we have on our boards because okay we know them we know the configuration of the board the paints and all this all this information and we need to select the loader for STM32H735 it's somewhere if you put here this this bar to the middle then it should be here somewhere inside the middle of your screen I will show it again that is somewhere in the middle the 25 or 35 it now doesn't make any difference then they should be the completely the same but we have the 35 then we select the 35 and after we select this then part of the code which putting it's loading the code it's now know how to put the code inside the address 9 million this file is basically small program which was created for this microcontroller and for this memory for the specific configuration for the discovery kit and it's consist basically the routines for the initialization read write and erase and this can be we have the training showing how to create your own loader in case that you have your own board and your own external memory and your own device then for this you can create this loader and you can download the content to this memory with the debugger okay I run the debug and I have no error that seems that this somehow working then the debugging is running and you will probably see that he is somewhere inside some disassembly and he cannot show you what is the code this is because how the GDB server is enabling the debugging and also some other ideas when they reset the device basically after the uploading the code and they directly put the program counter into start of this application of the hands on number two which is not precisely the flow which we want because we want it first to execute the hands on number three which will initialize the octa spi and then we can jump into the hands on number two and this we can do if we stop here or the suspend the execution and we click on the reset here the reset the triangle with the arrow and it resets the the chip which means that the device is executed hands on number three because this is inside the flash then hands on number three is jumping to hands on number two and we see that we are currently inside the hands on number two and if i look somewhere inside the registers maybe i should see that the program counter it's starting on the others 90 million then currently this code is executed from octa spi and if i put here the the nine 90 million and also change the bsp then the code should be normally running and i should end up somewhere here inside the benchmark okay so my code is running if i check it now with the cube monitor which i have still still opened from the morning and i think i will try to connect i will just stop and run my board and i should be able to connect yeah seems that connection is successful and i see that without cache the performance of the octa spi is pretty low okay it's it's uh expectable because it's very slow very small bandwidth comparing the antenna flash if i enable the cache it should cover me the the disadvantage of the octa spi pretty pretty well and i can check the situation when i start to offload the the cache but this was only for the for the testing again this is not normal code which we created for the for the hands on number two which is not normal application the normal application more is more linear and even the linear code it's pretty good handled by the octa spi but the jumping on the memory this is the issue and this is usually the main focus of the of the cache so that seems that in my case the execution from the octa spi works pretty well we definitely managed to put our code inside the octa spi and we managed to create our simple bootloader so this is very good good progress now the issue is that everyone who have this loader which we use or will answer the octa spi memory everybody can read its content and can use this content again because they can understand it because they see directly the readable the valid data then we will try to protect this this content inside the hands on uh inside the hands on number two to be more secure and for this reason we will use the on-the-fly decryption on-the-fly decryption is basically using the as and the basic as acb mode is doing that we have the as unit we have the key and we put there some encrypted data and we get the decrypted data or text back but we're using something called the ctr mode which is a little bit more complicated but give us more advantage because we're using the key but basically we are not decoding the data or the instruction or the code we're decoding the something called the initialization vector or this is my how to say how i imagining it and the initialization vector is composed from some values called the non-serve and the version these are values which we can select how we want it's the similar to the key how you select them they will they will exist and there is one value which belongs to the region i selected for our purpose region number one because the octo spay have the on-the-fly decryption is possibility to use up to four region but i'm using region one and the second part of this initialization vector is the address which is the address which we want to decode this is the value which is changing with the address for the 90 million will be the address 90 million for the higher address the address will change and this is the value which will be decoded and it's good because when we ask the octo spay for the address 90 million he will immediately start in the same time to start this decoding and when the octo spay finally give us the data for the 90 million we simply do the XOR and we have immediately the data to use then the slow and the delay with the decryption will be minimal and i was not able to measure any which is good for us so we need to add the decryption and this is done with the file which i used on octo spay.c we only need to add this on-the-fly decryption in it and what this function do it basically set the key which i select as a one two three four seven eight and then it's setting the initialization vector so he putting this nonce values and this version this is this this values which we can select how we want i selected the a5 c3 and the version a bcd and the parameter of the on-the-fly decryption is which location will be covered with the on-the-fly decryption and in our case it will be a region of the 90 million because this is where it's our octo spi one the octo spay decryption will work then we only need to add this into our code so i will here go back into the main inside the hands on number three and i will here the copy this octo spi uh decryption in it somewhere at the line 102 if you have the similar numbering and i can i can build the project now and after this is executed then on the address 90 million he will always try to decrypt the data from the octo spi which is good i can test it by running the hands on number three and what i will see i will probably see nothing because currently inside the octo spi is my hands on number two and he will basically try to decrypt this hands on number two but issue is that this hands on number two is not encrypted at all then if he try to decrypt it then he will create complete nonsense then if i look on the address 90 million then on the first address i should see the stack pointer value which is somewhere inside the ram and i see that the first value is bd something which is far from the ram on both directions then this this code was maybe decrypted but i'm not getting any valuable result then i need to somehow modify the hands on number two and i need to create the encrypted version of this binary so i need to change somewhere the binary and create encrypted version the question is how to encrypt the hands on number two in addition to be useful for our decryption and for this i prepared one bot file which will do some steps uh basically i'm using for the encryption of this bin binary of this hands on number two the open ssl tool which i will give him the key and the initialization vector but the issue is that the open ssl tool acquire a little bit different by byte order then it's inside our binary it's usually a difference between microcontroller world and pc software then i need to reverse the bytes around the open ssl reverse the bytes back and then i'm using the tool which will create from the the hex file from the binary then for this i will give him the address where i wanted this hex file to start which i giving the 90 million and at the end of this binary uh he will program everything with the q programmer to our memory automatically so for this i prepared this bot file which is inside the tool which is the encrypt underscore bot and it requires as an input parameter the path to the file which i want to encrypt the name of this file i need to give him the key which i want to use inside the open ssl the initialization vector and address we can run this manually from the command line but it will be a little bit annoying to run it each time when we change the hands on number two then we can make some automatic version and we can use eclipse to do this all for us then we need to convince eclipse with some modifications and first is that i need here this this name which i i selected as a nk path you can copy it from the to copy zero three and i will put it by inside the hands on number two by clicking right click on this project and i will select the properties and i will here go to the c c plus plus build and inside the build variable and i will add new variable called the nk path i will select the type as a as a file and i will browse these files and the file should be inside my workshop inside the tools and there will be the nk bin underscore bin dot bat this is the bat file which will do for me the encryption and it basically if i use inside the eclipse this nk path name it will refer it with this this long value and he can execute it then i will add it like this and i will apply it okay i hope it's it's okay now i can close it and i will here copy the last command which i have inside my to copy is very long and a little bit complicated so i recommend to copy it and we again put it inside the hands on number two and inside the properties and i now put it inside the settings and inside the settings you should have something called the build steps and this is possibility which you can call some functions or the bin files or the bat files before the compilation starts or some post build steps which you can use some bat files after the compilation finished and this is what we will do then we will put here this long command and what this will do this dollar and the bracket means that what is inside will be executed and we have here the nk path which is our sorry our build variable which is linked to the to the bat file then he will know the bat file and he will execute him and if you remember from this from this file the first parameter is the path to the file which we want to convert and the his its name this is the second one then this pwd is the path to the bin file and the second parameter is the project name which is the name of the of the binary if you want to know how i discovered that this is the project name that here inside the build variables you can show all the variables and somewhere here will be pwd and i know that this is this path to the debug and inside this will be the project name hands on number two then decide how i discover what to put there okay then this will start the binary and the fourth parameter is supposed to be my key which is and it's a little bit inverted key because unfortunately how i told you that pc tool interprets the values a little bit differently than my code then inside my code i selected the key as 1234578 on the first place but unfortunately inside for this open ssl the order is a little bit changed and this 1234578 is at the end then if i compare it inside our ide then it fits that 1234578 is at the end and the fifth parameter is my initialization vector which is again composed film this non-ser values from the first one and the second one again the order is a little bit a little bit changed then be careful you need to switch the lsb and msb basically there is the four zeros which is defined by our reference manual for the on-the-flight decryption then it should be always zero there is the value for the version the abcd it should be the same abcd there is the region which is used in our application and i selected the region one and the last one it's the value of the address which we will use divided by 16 then it's i think only nine million and the last parameter is the is the address where we put want to put this hex file which is this 90 million so this is the this is the mystery behind this line then this is the key and this is the this is the initialization vector and they should match the values inside our project if not the decryption will be not successful okay we can save it apply and i can try now to build the hands on number two uh build project and i will check completion is done and then it was run automatically my script you see the there is the written encryption start encryption end then i have some cleanup i'm creating the hex file then i created the hex file and i'm running the cube programmer which will upload this encrypted hex file into the octo spi then now after this build i have inside octo spi the valid code which is encrypted and i should be able to to see if the if the result is correct then i can run the bug for hands on number three again and see if there are any any issues i again put the breakpoint on the 105 and i open the memory double click open the traditional and you see then the comparison between the previous attempt it seems that on the first address or the ninth million it's something 24 and this value is basically the run then it seems that this value is for me valid and the older values should be the position of the interrupt vectors first is the reset vector non-mask cable interrupt hard fault handler bus fault handler maybe and other faults and they all starting with the 90 million then it seems that definitely this is for me the valid valid it looks like that i have on the address 90 million valley code then i can decrypt correctly and i can execute the valid code with the decryption which is good then i can close this one the issue can be now if you try to debug hands on number two you will discover that it's not working how we want it and it's not possible to debug the hands on number two why because the build the building will create for us the encrypted hex file and also the build will upload the hex file into octo spi but if we try to debug he unfortunately take the hex file which is not encrypted and he will again rewrite the content with the octo spi and then the decryption will stop working again then we need to somehow prevent it and we can do it again inside the debug configuration inside we will switch to the hands on number two and we can here modify the startup of the debugging and we can tell him that we don't want to upload this file because we know that this is not encrypted then this is not good for us then we can here edit it and we can uncheck the download so he will not download this code anymore because it's done with our build and if i click on the debug i will be able to debug encrypted code inside the octo spi and if i running and i should be somewhere inside my main i am inside the main and i should be able to step yeah and if i check the registers i should see that i am inside the octo spi on the others 90 millions and even with the decryption so it seems that my my decryption is working i can also check my demo inside the note red it should work i hope it's still working and basically when i measure this i was not able to see any any difference compared to the code without the decryption then this was always the same it's because how the octo spi work because the octo spi works that i need to send the command i need to send the address then wait some dummy cycles before i get the data back and during this time he is able to decode this address this initialization vector and in the time when i get the data he have the result of the decryption and he simply do the xor and i get the data immediately without any delay so this was reason why i was not able to see any any difference i have here the results also i create some small graph showing how is the how is the performance measurement also be be careful with the performance it's a little bit tricky because this is not maximum how to say maximal performance of the core it's usually the setup which we created and i think definitely it's possible to squeeze the performance even more by the optimizing the usage of the memories and the other stuff but for us we can effect as a performance then in our case the without cache the flash was running always 73 percent and when the cache was enabled we get on the 100 percent and when we stop losing the cache the the performance drops slowly to 73 percent when we use the octo spi without the cache we run always on the 8 8 percent and if we stop using the if we were not able to use the the cache the performance was dropping to this 8 8 percent but be careful again this this code which we created is a little bit really unusual and in the normal situation i was never seeing the code which work like like the ours which is more linear which is better handled with the cache so if you will decide where you allocate the cache i would definitely recommend to allocate it to most of the cache to the octo spi if if possible because the flash performance is still good because the drop of the for the flash with the performance is maybe 25 percent but with the with the external memory is maybe 94 92 percent and it's usually better to cover external memory with the with the cache to decide which which memory will use the cache you can change it here with the configuring the unit called the mpu called the memory protection unit which can also set the behavior of the cache memory here are also the values which i was not able to see any difference where i used the on-the-fly decryption for the octo spi and not using it then the behavior was completely the same then this was no not the difference for me and only to see the bandwidth of the of the octo spi it's currently running on the 91 megahertz and i reading data on the rising and falling edge which means it's multiplied by two but don't forget that you need to set with this also the commands also the that the addresses and also wait for dummy cycles then the real bandwidth of the of the octo spi is much lower okay so if i summarize what what he did we were able to change the hands-on number two to run from the from the octo spi and we were able to run the on-the-fly decryption then we were not able to see any difference with and without on-the-fly decryption we checked that definitely the octo spi performance is much better when we're using the cache because this is the main purpose of the m7 i believe to use the cache and mainly for the external memories because otherwise it was not make no sense to use the external memories for the code for the data it's okay but for the code it was tragic and we were we were checking what is the difference of the of the drop when we start to or floating the octo spi memory from the out from the cache okay then thank you


From DailyDoseOfWeirdNews.com, I'm Darren Marlar, and this is your Daily Dose of Weird News. This episode is brought to you by The Audiobook Inside the Mirrors by Jason R. Davis. Here are a free sample and support Marlar House by downloading the audiobook for yourself at DailyDoseOfWeirdNews.com. Philosopher Professor Eric Schwitzgebel of the University of California Riverside has dug into the nature of jerks, or what he calls jerkitude, with a new essay that basically explains why jerks are the way they are. Genuine jerks, he explains, typically have a tough time realizing that they're jerks.     A recent study found that 73% of people sleep with their smartphone. I'm not exactly sure what that means, but it sounds very inappropriate. Golfball diver Scott Leodick, who is recovering after being attacked by an alligator in a water hazard at a Florida course, says he survived by punching the gator in and around the eye. You see, watching the Three Stooges was actually good for something. How do you hear that, mom? A scathing obituary has shown up in the Cherokee Scout newspaper in North Carolina. The death notice for Cornelia June Rogers Miller was most unflattering in its depiction of the great-grandmother who, quote, died alone after a long battle with drug addiction and depression, unquote. The obit read, "'Drugs were a major love in her life as June had no hobbies, made no contribution to society and rarely shared a kind word or deed in her life. We speak for the majority of her family when we say her presence will not be missed by many. Very few tears will be shed and there will be no lamenting over her passing.'" Yikes. There's a lesson to be learned here, folks. Feel free to be mean to the entire world, but you'd better make an exception for the lady who writes the obituaries. Women can no longer wear sleeveless dresses at the House of Representatives. Female reporters and congressional staffers are also being forced to stop wearing open-toed shoes in order to enter the speaker's lobby outside the House chambers. No bare shoulders. No visible toes. Are they worried that members of Congress won't be able to control themselves and attempt to start nibbling? A survey says millennials plan to keep new cars for five years or less. Although the way they drive, I don't think they have much say in the matter. A study says the average baby boomer has less than half the money saved that they will need to retire. The good news is each will receive a participation trophy for trying.  Or as they call that on United, first class. The March of Dimes is selling their headquarters in New York for $13 million. Huh, I wonder if they'll donate it to charity. A 19-year-old California teen hit the lottery twice in a week for a take of over $655,000. As you might suspect, this has radically changed her plans for college. She's now thinking about upgrading to the mid-sized dormitory refrigerator. Billionaire inventor Elon Musk says the secret of solving LA's traffic woes is creating a series of underground tunnels. But wouldn't that destroy the natural environment of the endangered mole people? Americans will spend $100 billion on summer vacations this year and that figures out to $1 for every year. A pet goldfish is no longer confined to four glass walls thanks to a robot designed by a team of students for the Build 18 Robotics Tournament held at Carnegie Mellon University. The robot moves according to the position of the fish relative to the middle, according to student Alex Kent. The concept of an animal-controlled robot is also reminding a lot of people of snuffles or snowball from Rick and Morty. But this bewildered fish doesn't seem to be lusting after world domination, at least not yet. This is terrifying, though. We are one step closer to Saturday Night Live's Land Shark becoming a reality. Police in China arrested a man who robbed a bank disguised as a tree. The man entered the bank with branches and leaves taped to his body. After patiently waiting in line with fellow customers, the man made his move, ordering the bank cashier to fill a bag full of cash. Unfortunately for the suspect, he wasn't able to leave quickly enough and was captured by police. And a fiscopalian priest driving on a Florida highway was arrested for pointing a gun at another driver. At the jailhouse, he tried to pass a collection plate to pay for his bail. Two bears chased after a runner who was training in Maine. Fortunately, he got away, but the bears won't get away. Authorities are tracking them down using the video of themselves the bears posted on their Facebook page. Two Oklahoma men were arrested after fighting over which is the better movie franchise, Star Wars or Star Trek. Which is stupid, because we all know Stargate SG-1 is better than both of them combined. Please support my channel by sharing the Daily Dose of Weird News on Facebook, Twitter, Reddit and other social networks. If you liked this video, please give it a thumbs up and be sure to subscribe if you want to see more. And click that little bell icon next to the subscribe button to be notified when I post new videos. Find even more weird news that I didn't have time for at DailyDoseOfWeirdNews.com. I'm Darren Marlar and I'll see you next time, Weirdos!


paul cantibani let's bring in both and how about we do it that way let's bring both carner and garrick in uh... guys one in one of you on this side of me one of you on the other uh... uh... you're gonna give it to get all right so i can walk me through tell me that tell me the story of the heck as we saw justin bring it up a few weeks back what is the story on that yes it's just you know player the game type of hat you know uh... whoever shows out has a good game it gets a hat and then you guys put in a heck of an effort uh... get the the the way things turn coaches mention it's a stable right take me through the way that you guys push each other every day if i can have you slide in just a little bit that's all right we make sure we get you on the camera a beautiful mug uh... that the way that you guys push each other to make sure that you're all ready to go when your numbers called upon uh... like we come in early for practice every day the face off guys and it's normally like just a scrap we just we we fight we fight with each other like it's all just we're just trying to grind like trying to make each other better nobody's trying to just be there just to be there they're all trying to make themselves better it was much needed tonight obviously connor the you guys were in trouble tonight you guys are pushed what was the conversation like at the half and and how did it happen that you guys are able to turn things around i mean yeah going in the locker room you know everyone knew what was on the table you know we had to win that game uh... we've been there before and we had those senior leaderships you know kind of guide us uh... say the right things the locker room gets pumped up and i definitely showed out on the field so i have to get the dub and i'm happy move on let's talk about that gear what's it gonna take you guys i there is a tradition of winning championships here at steven says that a couple years what's it gonna take for you guys to go on the road on saturday night and get the job done up at your we just gotta work hard this week in practice we all gotta just put our noses down to the dirt just grind that's it there you go right and then you can be conference champions i would try to get to know everybody uh... all year so this is idea i'm going to give you in if you had a horse since you're the stable to you the saturday's the kentucky derby if you own the horse running in the kentucky derby what would you name your horse counter-hopping i'm gonna start with you all easy beast beast that's not bad yeah but there's ever been a kentucky derby winner named beast what about you gary uh... probably like lucky come on man you got beast and you're going to lucky i don't know about that alright who do we need to shout out who has helped you get to this point who you want to say thank you to shout out erinwood i'll shout out my little brother too he's uh... back at home go kyle what's up kyle hi kinda what about you yeah shout out all the boys at home the fam and uh... special shout out to my physical therapist too you know i came off two acl surgeries i've been in grind to get back here playing again so thankful for that thankful for them and uh... yeah ready to keep it going alright boys great job tonight well done best of luck on saturday thanks for hanging out with us counter-hopping gary gudro the stable here at stevens and appreciate that for them i'm glenn this has been go mustang sports dot tv


Hi, everyone. Thanks to come to this presentation. My name is Paulaj Zvargo, and I'm working for Allotropia. In this presentation, I would like to talk about some calc improvements in this year. I also want to introduce and show a little demo how accessibility sidebar has been improved in the last few months. So, let's get started. On this first slide, you can see a problem related to car comments. When we hide the column row or cell, the comment didn't disappear. Of course, this screenshot, the note should not disappear because there is no hidden row column or cell at all. This is the previous, how it looked like. And let's see the result. On the left side, you can see the result in an orderly office version where the comments didn't disappear when we filtered out the row. On the right side, you can see the result after sexing the issue and the comments are hidden. It's also working if you just hide the cell column or row or anything else. And the comments will also be hidden. Let's see the next one. On this slide, you can also see an improvement in the fix related to car comments. The goal was to show the author name and to create or modification date of the comment. It was quite complicated because during code review we decided to not change the visible comments. The reason is that the comment box often needs to be resized to fit the author and type metal. But permanently visible comments are really part of the document layout as they can be precisely resized and moved around. And we don't want to break the layout because the other alternative is to open the metadata to the comment content as a readable text like accept us, but this would only work only for new comments. The third option might be to have a dedicated sidebar view of comments and show the metadata there instead of in the document area. But that was a way out of the scope in this case of fix. So as you know we have two different status of the comments. So we only can show the author name and the creation or modification date of the comment in the temporary mode. In edit mode we cannot show that we only show the content of the comment. But if anyone has modified the comment or created a new comment or we import a document or ODS or OXM, it will show in temporary mode the original creator name and the date as well because these two format contains these datas. And also the export works as well. Let's see the next issue in this case. The cell validity didn't accept any formulas in the cell and we got an error message. So as you can see. So first of all we had to solve this problem. First of all we had to calculate the result from the formula, then we had to check that the result is valid for the cell and is acceptable after we set the validation for the cell. You can see on the left side it was wrong but on the right side you can see it's working now working with all kind of functions. In the example there is a today function and in the validation we do I don't know that it's seeable because it's very light but there is no error message there. Okay, the next fix was just a smaller issue in case of clock the hyperlink wasn't stand out well like in writer where the hyperlink has color and underline attribute as well but in clock the hyperlink no underline attribute only the color attribute. So I had to extend it and the result is maybe I guess it's seeable on the right side as there is an underline and of course it's not a direct format on the text but it's a already set attribute for the hyperlinks. Okay, the next one is related to VBA macros the export as fix format VBA function which as you can see on the left side of the screenshot didn't work earlier and we got an error message with basic runtime error the property or method not found this export as fix format function is used for the PDF export and now it works with worksheet and verbooks object as well the verbook VBA object you can export all the worksheets and the worksheet object you can choose which worksheet you want to export to PDF also there are attributes related to this VBA function like the type fine name, the quality of the PDF export or include document properties you can set that you want to export with that or without that also you can set that you want to ignore the print areas in the function attribute with true or false and also you can set that you want to open in the document after you exported or published into PDF which I think all the attributes except the ignore print areas is not working at the moment at all the others you can set and it's working also the import and export as well the next one on the left side you can see that the XL6 file with the SHA 384 encryption didn't work you can see on the left side in different versions there are different problems I mean the other versions the file was corrupted or opened with the encrypted data so you can just saw many stupid things there on the right side you can see how we can open this kind of encrypted file without any problems so in the password popup window popup you can type the password and it will open perfectly and also the import works as well ok, the next one it's related to writer for the smaller improvements in this case we have a hidden section between two paragraphs if we accidentally delete the hidden section between two other paragraphs in the file the hidden section will also be deleted without any notification maybe because we didn't remember that there was some kind of hidden section so in the earlier versions it was deleted but in the newer version we have a confirm dialog as you can see on the right side and you can choose you want to delete or not if you select that you don't want to delete the hidden section only the other selected paragraphs will be deleted but the hidden section will stay at the original place if you select yes, of course everything will be deleted also the hidden section the next one was UI improvements in this case the menus with sub menus was always enabled even if all the sub menus were enabled an example is for example the table menus in writer the table insert menu or the table delete menus menus are always active even if we cannot insert row or columns at all that's also true for a lot of other menu items in the library office the plan was if all the sub menus are disabled let's disable upper level menu as well also it was an accessibility program as well so accessibility tools should keep those menus which are not available so let's see how it looks like now I'm not sure but on the left side you can see in the order version there are three levels of the menus and all the sub menus are enabled but the upper levels are not disabled so in this context also all the second level should be disabled and because of that the top level menu should be also disabled on the right side you can see there is no option to select the first level but on the left side you can select all all these menus it's also important because I think we have a setting flag for that so we can hide all the disabled menus in the library office so if you set the true in the options all these menus will disappear as well this is another example and with the table insert and the table let's delete menus which are also unable now on the UI and also the sub menus as well let's move on to another part of this presentation and all through PI also works on the accessibility check sidebar and automatic accessibility as you can see in the meta a lot of issues have been closed so I will show a little demo or how it looks like now how it works, what we can complain about on the sidebar just some notes here the concept of accessible design and practice accessible development ensure both direct access and indirect access meaning compatibility with persons accessibility technology, for example computer screen readers and also the automatic accessibility check is also necessary for the PDF UI and PDF accessibility checkers as well just short notes and I will show it later that we have document level accessibility checks like document default language is not set or document title is not set on the document or we have missing alternative and description text checkers for objects and we have formatting related accessibility checkers hyperlink, simulated captions and a lot of others so in this conference of course there were other presentation about accessibility issue which you may could be important also to check that with I think microvicorn already talk in myai stejl as well and Semi will talk a bit later and he will also show some accessibility sidebar improvements so this is an example document you cannot see it now it's working I guess so this is an example document with a lot of accessibility issue as I mentioned there are document level accessibility issues there are two examples for that here for example the document default language is not set, we already have this kind of fixed button so if you click on the fixed button for example in case of document default language it will go to to these options directly to the options where you can set it and fix this issue so if I choose a language and click apply then this accessibility warning should disappear as you can see there is not anymore that's also true for the document title it's not set where you can set some kind of document title set that that warning will also disappear there were a lot of problems around updating these issues in the code base there were a bunch of fixes for updating properly because updating these warnings is related to the nodes inside the document so if something is modified in the content node we will also check the number of the accessibility issues on the sidebar you can also see some missing alternative and description text which is also important for the screen reading applications which will read for example if we have no name description of an image or any kind of object this screen reader application cannot read loudly so for that we have these kind of warnings for example pictures you can also fix these issues and directly the description windows will pop up and you can of course type something here and if you fix the issue it should also disappear and also the object will be selected in the document which is also useful and it's also true for any kind of shapes images and text frames as well because you can set then any kind of description or content so you can fix these issues but also if you type something into a description it will disappear after you fix the issue there are also some formatting problems in the document you can double click some kind of accessibility warnings and it will select the exact text in the document and you can remove the format in this case for example for the text formatting there is additional meaning which means we have direct format on the paragraphs and clear direct formatting it disappeared from the list so there are also two remaining warnings for this direct format in the document we also have another warnings for example avoid new lines to create space which is important because a lot of people put a lot of empty paragraphs into the document just to make some space extra space with that we can also jump into the document to clicking on the link on the accessibility sidebar we can just delete it also we have hyperlink related issues for example the hyperlink text is too short if you double click on that we also select the link in the document and we can delete that or the hyperlink text is the same as the link address we also have a warning for that so if you are clicking on that it will be selected and you can fix those issues also there are a lot of other accessibility warnings for example avoid footnotes in the document it is important because the screen readers cannot read these kind of things in the document us oh ok, tie so I just lost a lot of things here in the document and we have a lot of other warnings mostly there were problems as I mentioned around updating the issue or we didn't jump into a direct place into the document or just completely missed in the accessibility sidebar so I think nothing have lost just thanks to our customers to finding the work around accessibility issues and thanks for the questions 19 minutes or 30 minutes so if you have any questions do you have any questions thank you thank you


Okay, so hi, I'm Nia, I'm on the Board of Directors of the NetBSD Foundation. I maintain programs in the base OS, also in package source for the past four years. I do embedded and desktop stuff, particularly audio production. And in this talk, I'm going to tell the story of NetBSD 10. I'm going to go into the gritty details of release engineering, the wins and the pitfalls, and some of the technical and community side of making what is going to be one of the biggest releases that we've made in recent times actually happen. And this lovely diagram here in ASCII shows how NetBSD releases are supported. So what you can see is that we can support two stable branches at a time which get continuous updates. For example, NetBSD 8 and NetBSD 9. When NetBSD 10 is released, NetBSD 10 and NetBSD 9 become the supported branches and NetBSD 8 stops being supported. The so-called current branch is changing constantly and might include breaking changes. A new stable branch is made when the current branch is deemed ready by the release engineering team. Changes are backported from current to the stable branches when they're deemed non-intrusive enough and don't break compatibility. Occasionally, we make a release which is a fixed snapshot of a stable branch. Releases don't get updates so you should pay close attention to security advisories and figure out whether it's necessary for you to replace a component update to a stable snapshot or whether you can take other countermeasures, which is often possible. This next diagram shows some of the major tools we use for ensuring that NetBSD branches are stable. Build.sh is the main tool we use for building NetBSD from the source code. It supports easy cross-compilation across many platforms and CPU architectures. For example, you can cross-compile NetBSD for MIPS or ARM on, say, a X86 machine running macOS or a NetBSD machine running something else entirely. In tandem with the builds, we use lots of static checks which cause immediate failures if the source code contains anything problematic. Over 20 years now, I think Linux has just recently adopted some strict errors as warnings functionality in the last couple of years. A Python script called Anita is a really important part of release engineering. It helps install NetBSD automatically in virtual machines for over nine CPU architectures. This runs separately to test some real hardware, which might be slow and awkward. A lot of people like to complain that we rely on cross-compilation and virtualization too much for our test suite, but we're doing lots of tests on real hardware, including for some of the less common CPU architectures. Inside the virtual or physical machine, the NetBSD suite containing over 10,000 tests run. Through Rump, it runs various parts of the kernel in user space, making tests very reliable and allowing us to simulate real hardware setups. For example, Rump allows various network components to be virtualized, and that basically prevents the test setup from breaking and allows monitoring it safely. We're also using various sanitizers which detect common programming errors in the kernel at runtime and feed various fuzzing tools, which feed randomized data into the kernel to detect bugs. By now, it should be very clear that this is state of the art, and very much needed for our small team to maintain a very large code base that's over 30 years old now. Late 2019 is when NetBSD 10 starts to take form as something really special. When the first release from the NetBSD 9 branch was being stabilized, Duran starts making frantic commits that drastically improve the performance of the NetBSD kernel, especially on multicore systems and those with a mixture of low power and high power CPUs like modern Intel and ARM chips. So here is some benchmarking that was done two years ago now, nearly two years, and all we can really say is, wow, about the performance improvements that have happened since the release of NetBSD 9. Yeah. Just amazing statistics like build times being completely halved. But it pretty immediately becomes clear that some of Andrew's changes are causing instability. Our tools instantly detect new failure cases in the kernel, and Andrew now has to dedicate his time to ironing out and fixing them. So many bugs were found by fuzzing the kernel. Many bugs were just found by users while they were testing the current kernel. So what have we really learned from this? We learned very quickly that user participation is critical for testing the kernel. A lot of kernel errors are detected at runtime during operation, so it's good that we can get lots of detailed reports from our users about our error checks failing. Kassert, which is the kernel assertion tool, it allows the kernel itself to indicate its state is wrong or confused and report a message useful for developers. It was really critical for ironing out some of the bugs that were found during the optimization stage in late 2019 and early 2020. In NetBSD 10, we're removing an unprecedented amount of code for old wired network technologies, which were replaced by gigabit ethernet. Some are still useful for the retro computing community and were kept. NetBSD is a group of people with a range of interests, and it's important that we keep everyone relatively happy and avoid major conflicts. So this was done really well on a social level. Just for illustration purposes, this is some of the older networking cards that support was removed for. This is FDDDI, if you've never seen one before. The port looks very strange, and this is an IBM token ring connector, which support was also removed for. And really this was done because in many cases this hardware just no longer existed in the world. No one was using networks with this type of cabling. So the results of the great driver cleanup is that many drivers were removed entirely, and it went really well compared to previous feature removal proposals. And it's allowed us to, in general, do lots of widely sweeping changes to the networking stack to improve performance and just to clean up the APIs internal to the kernel and make the kernel a lot cleaner. So as we move through 2020, it becomes pretty clear to us all that NetBSD 10 is going to be an amazing release, but we're still really far from being able to call it stable. Our release engineering and testing tools make that much obvious. And in summer 2020, the randomness saga also begins. A lot of what I'm going to discuss here is covered in Taylor Campbell's EuroBSD con talk from last year, so I'm not going to focus on it too much. Please listen to that later. Fundamental to NetBSD is the fact that we support lots of old, small and quite low-end hardware and some really new and fancy hardware. Some of this hardware is very suitable for modern internet security, but some isn't, specifically really old and deeply embedded hardware. My lack any good sources of random data importance to internet security, but it's plentiful on large modern x86 boxes. We need to provide a good user experience in both cases. It took more than a year and many flame wars in the community. My hands are not clean of this for us to figure out how we wanted things to look. POSIX did make some decisions on our behalf, which simplified things or alternatively made things more complex. And there were a lot of problems that weren't easily foreseen. Like there were some problems with Python due to it. Randomly deciding it needed critical entropy early in the startup process, which prevented many applications from running on hardware that didn't have a good source of entropy and required manual user intervention to stop Python from hanging. So there's 2020 in summary. We got some new security features for 64-bit ARM in the kernel. We got pointer authentication and branch target identification, which are amazing for avoiding some particularly nasty exploits. We got massive improvements to support for the Xen hypervisor. So we got really fast multiprocess networking for Xen and some support for some new fancy virtualization modes. We got boot load improvements for our EFI ARM boot loader. So more configuration options, the ability to load kernel modules in the ARM boot loader, and Raspberry Pi for support if providing that you flash the EDK2 EFI firmware on your Raspberry Pi because it's been broadly decided by the ARM team that we want to move forward with mainly booting the ARM ports with EFI now. And support compatibility with WireGuard, which caused some drama. The maintainer of the code base in Linux was not very happy that we had committed an implementation without consulting him first. And we also got some surprising improvements on the retro-computing side. We got support for multiprocessing on some deck alpha machines. And we moved the location of the default database of installed packages, which caused some headaches and delayed some stuff in the package source world. It's another example of what theoretically would have been a quite straightforward change causing headaches later on and causing the release to be delayed. It's now 2021 and a few developers are starting to focus on some potential wide improvements to the NetBSD kernel's code quality. It should be pretty obvious to most experienced programmers that an API that's not simple to use will result in lots of code being copy and pasted badly. And this was the case for an API called config found in some device drivers. The obvious solution is to make config found easier to use for programmers, which was done, but what's more complicated is making sure it can't be misused even before the code is compiled. NetBSD9 had some of this for config found, and various developers objected to the simplification because it lost some of the error checking. A long discussion started before an agreeable compromise was reached. And here's the code we eventually settled on, all the style of usage for config found. It resulted in some quite prettier code in the kernel, I think. By 2021 some of our users are starting to complain about our GPU support being limited to hardware that's a couple of years old by now. And they're quite lucky because a major graphics driver update was being worked on with our code being synced with Linux 5.6. But this comes with thousands of lines of code changing all at once. This seems to be an easy change by any measure. And some errors are particularly difficult to debug. So some problems are difficult to figure out. Even with our kernel error checking tools, trippy colors appearing on the screen is a good example of that. This doesn't give developers much to go by if there's just graphical corruption happening with no useful debug information. A lot of users were interested in testing the update, but didn't have the knowledge required to report problems well, which is a really difficult problem to navigate in open source in general, I think, getting users more involved in the testing process, getting users more actively involved in the bug reporting process. Some users were confused by our priorities because from the perspective of a developer, you're updating existing working code and fixing bugs there before adding any new hardware support. So they're like, oh, you're updating the code, so my fancy new GPU should immediately work, right? No, we're focusing on updating the older drivers first and then we'll do the new ones. The kernel assertion tools were very useful for getting diagnostic information from the kernel, but code ported from Linux doesn't necessarily use any equivalent. It was a problem in the testing phase because the NetBSD kernel hackers were used to having loads of diagnostics and loads of checks to make sure the kernel state was consistent, and the code ported from Linux wasn't really being as thorough. I'd love to hear about any ideas for making large kernel changes easier to test for inexperienced users if anyone has any good suggestions or ideas in that department. And this was our 2021 in summary support for loads of new ARM hardware, including the Apple M1, and I'll get to that. Here is a nice Wiki page we have on the state of Apple M1 support in current, and quite a lot of hardware is supported, even X11, so you can get graphic support on the M1 Mac Mini. The Odroid N++2, which is a smaller, cheaper ARM board that's still quite high performance, that's quite popular with NetBSD developers, as well as some lower-end ARM hardware. Lots of performance improvements specific to ARCH64 as well. Major improvements to Linux compatibility, loads of new system calls, support for the Linux compatibility layer on 64-bit ARM, so you can run 64-bit ARM Linux binaries on NetBSD. There's a support for our virtualized GPU driver, not GPU driver, it's just virtual machine drivers in general. So lots of enhancements for running in KVM, and stuff like Behive as well. And we added NVMM, of course, and support for native language support and GNU-REGAX extensions in the regular expressions layer, which the GNU extension part being turned off by default. Some GNU extensions that just happened to work were enhanced previously, no longer work unless explicitly enabled, which caused some compatibility issues, and we spent a little bit of time ironing that out in package source because some programs were just using GNU-REGAXes without realizing that they were using GNU-REGAXes. We did a large audit of the kernel APIs and found many bugs and fixed them. We reworked the system for password logins and disk encryption and adopted a new algorithm that dynamically scales with the hardware quite considerably based on the amount of memory that's in your system and the number of CPUs you have, which is, again, very good for NetBSD because we support such a diverse range of hardware platforms, everything from stuff from the mid-1980s to stuff released this year. We started improving support for the UDF file system, which UDF is basically a portable standardized file system that was originally made for rewriteable DVDs, but it's actually useful for a large range of applications where you need a file system that works across operating systems. NetBSD actually has some of the most advanced UDF support of any operating system out there. Of course, the GPU driver update happened, and we switched the default compiler to GCC10, which is likely going to be the final compiler that ends up in NetBSD10. And Grant grants the support for running code developed with new C++ standards, and this is quite important if we want to maintain a release for several years because one of the first things that tends to break is third-party software that's depending on very new C++ standards that the base compiler that we're shipping in a stable release doesn't necessarily support. By early 2022, it was pretty clear that we wanted to do a release soon because we'd managed to get all of these amazing features in. Unfortunately, when developers hear that there's going to be a release, they've got a tendency to rush their changes in, and this adds more instability to the equation and tends to delay the release even more. To make matters worse, we're running out of version numbers for current, which cause developers to group large changes together. It would be really nice to figure out an effective way to avoid this problem in the community. I think even the people who had rushed changes in had eventually agreed, this is kind of unsustainable and we need to find a better way of managing the project. By mid 2022, the release engineering team was very unhappy with the amount of delays and basically no more major changes were allowed. We ran into the final regression, which is currently delaying the NetBSD 10 release, but we had introduced support for FFS access control lists in the FFS file system and this was done in a way that was accidentally incompatible with NetBSD 9 and there were various file system corruption issues. So basically we have to introduce a new version of the FFS file system that fixes this compatibility issue and then finally we'll be able to branch NetBSD 10 and do a release. This is a couple of unfinished projects. We are currently working on a massive update to the Wi-Fi stack. We're synchronizing the code with FreeBSD to a large extent with many of our own local customizations as well and we need more volunteers to work on this project. There's a nice wiki page that basically lists the drivers where we have the hardware on the foundation side and there's somewhere we still need the hardware and various Wi-Fi drivers that we've managed to convert already and this is most likely going to make it into NetBSD 11, hopefully. We need to... It was determined that we wanted to deprecate the PF firewall for NetBSD 10 and basically decide that NPF is the one through firewall that every single NetBSD user should be using and basically there are still some obscure features that need to be ported over and it was decided to basically delay the problem. NPF is no longer compiled by default but users can still get it if they want to and of course by the time we get to NetBSD 11 we're going to have to update the GPU drivers again because by that point another year's worth of hardware will be released and people will be complaining and we're getting to the end of the story so this is our NetBSD 10 in summary. We have made leaps and bounds on performance and especially on multiprocessor systems this is going to be absolutely astonishing. To many extent this wasn't a release that was major for switching kernel components over to work in parallel with that had mostly been done in the past but this was more release about ironing out improving locking semantics and basically reworking kernel algorithms to better scale on systems with many, many CPUs. Lots of new and extended device drivers and lots of removed ones support for tons of new hardware. Lots of new user space programs which is not something that usually happens but at least one of them was written by me so I'm quite happy about that and significantly improved user space programs we had a project to work on the iNet daemon because it's kind of becoming fashionable again and people decided that it needs to be made more flexible and lots of work on the default shell as well and tons of work on the test suite which is a kind of underrated feature but it's very important if we want to basically ensure that NetBSD remains a very reliable platform and people managed to add over 2,000 new test cases which is amazing and various new tools for analyzing the kernel in order to better detect bugs before we make a release. Compatibility with wireguard VPNs is the obvious one faster, better disk encryption which means basically that disk encryption now takes advantage of hardware cryptographic acceleration that's found in many new CPUs and loads of enhancements to various little nice bits like the Linux compatibility layer and also something I haven't mentioned yet is that the user space file system layer received a massive overhaul to support newer user space file system APIs so we get nice things like NTFS support for free and I'd say the weight has definitely been worth it I think this is going to be one of our best releases ever and I'm extremely excited to be able to publish it so that's all. Do we have any questions in person or from the stream? Yes. So this is a question about the deprecating PF and the replacement that we've got lined up. So for a number of years now NetBSD has had free firewalls in the base system which is obviously not an ideal situation we have IPF from Darren Reed who was a NetBSD committer in the past and a lot of people are using IPF and I'd say it's still quite popular IPF is not going to be removed for probably another few years at least there's PF which is obviously ported from OpenBSD and hasn't had a maintainer for quite some time so that's the big target for removal because the code base is quite old and getting quite rotten and there is NPF which is the unique NetBSD special source basically and it's very well integrated in the kernel it has excellent support for scaling over multiple cores and it has an active maintainer so NPF is the future basically and we're very happy with it I'd say anything else? Yeah, the RISC-5 is the code existing in the kernel I'm not entirely sure of the current state of RISC-5 support we also have foundation funding available for people working on 64-bit power PC support but NetBSD is increasingly arm oriented a lot of us are kind of obsessed with ARM and this is where a lot of the development these days is focused we're big into the ARM stuff All good? Okay then Oh, thank you