Good morning. Good afternoon and good evening everyone and thanks for joining me today My name is Brandon Sattram. I'm the vice president of experience engineering at blues wireless and IOT product company Now to get things started today. I want to talk about purgatory Specifically the prototype or proof-of-concept purgatory that we often find ourselves in as builders And we all know that hardware is hard But that in and of itself doesn't explain the reason why 75% of IOT projects take twice as long as estimated And that many of it being canceled at the pre launch stage before the company even sees any value from the effort And often it seems like the reason that this happens is because of the time that it takes to get a POC off the ground From an idea to something working and running on a small number of devices often one, but sometimes just only two or three Consider an example So let's say you're looking to build a device to monitor out or outdoor conditions on a farm and for your POC you start with your garden So you buy the hardware you need and you grab your favorite MCU or single board computer But this project is going to be outside So you're also going to need a cellular modem you grab one from quick tell or you blocks or you grab a Nordic 916 dev kit to help round some of that out for you And that's great So you have the pieces but now you have to assemble them and in order to do that You have to figure out how to program the modem using whatever flavor of AT commands your modem vendor actually uses And you need to source a sim and data plan from somebody then you need to figure out where to send your data How to communicate remotely with your project if needed where to store certs how to encrypt your data and or The data for transport. Oh, and if you want to be able to perform for more updates for the project You're managing when you're managing more than just a handful You're gonna have to think about how to do a DFU back to the device and hopefully not brick it at the same time Now alternatively you could sign up for an IOT platform where all of these decisions are made for you But you give up flexibility and control you take the MCU Language data limits and pricing model that you get and you don't have a fit you follow the guardrails that are set out for you And in either case what we engineers have to deal with in this space more than almost any other is complexity And you know at any time that I think about complexity I think about a quote from our CEO of blues wireless Ray Ozzie now quote is complexity kills It sucks the life out of developers it makes products hard to build plan and test Now that's something that he said years ago long before founding blues, but boy, does this apply to the IOT space We are a wash in complexity in the Internet of Things And over the years we've tried to come up with various ways to manage complexity across our space Some vendors manage complexity by setting up guardrails that you must navigate to make things easier Sure and others try to standardize the processes board layouts or pins to make the ecosystem more modular And there's some good examples to this in the early days of Arduino's rise There were a small number of pin layouts Which made it easy for other vendors to create shields that plug easily into a compatible Arduino to add additional capabilities The Raspberry Pi is an even better example with a 40 pin double-wide header the pie in the add-on ecosystem that it created was So popular that the same header can be found on almost every competing single board Linux class computer out there just for the sake of compatibility with peripherals And then there are some examples where we made a solid attempt, but the results were honestly kind of mixed So take peripheral connectors for instance and in 2013 seed studio introduced the humble Grove connector of four pin JST that could be used to connect serial I squared C or even digital and analog pins GPIOs devices And they fostered an ecosystem with a huge number of Grove compatible peripherals But let's face it as our boards and our projects got smaller the humble Grove JST looks pretty beefy So other vendors like spark fun and Adafruit introduced their own variants using the smaller JST Spark fun calls theirs quick and Adafruit calls their STEM a QT two different names same connector and are they compatible kind of For most applications you can use breakouts from spark fun and Adafruit interchangeably with boards from either vendor But there are a few edge cases mostly around whether or not the peripheral has a logical little shifter and Regulator so that it can be used with either three volt or five volt logic which can potentially burn out the sensor if you get it wrong And another example of where we've gotten mixed results to date in the world is in the world of firmware updates Firmware updates perform remotely or over the air We spent a lot of time trying to solve this problem in SDKs and platforms But does anybody really solve this problem in a way that doesn't force developers to give up control or embrace having to deal with complexity themselves? And that's what I want to talk about today the current state of OTA DFU and the two most predominant approaches that we have to choose from Today and then I want to introduce a new third way that I think marries the best of both worlds Into something new that we at blues are calling outboard DFU and I'll do a couple of demos along the way Let's start by talking about OTA DFU as it stands today, and I'll provide a little primer on what both of these TLA's mean So starting with the DFU part which stands for device firmware update This is the process of getting new firmware on a device by laying down a binary with an updated program on some known memory address In nearly in nearly all cases DFU relies on the existence of a bootloader on the device to be programmed The bootloader is a small piece of code that is stored in non-volatile memory That's responsible for launching the main application loaded onto the device We're providing a capability for updating the device firmware Now for the latter capability many devices require that the device be placed in bootloader mode in order to apply the firmware update For example, if you've ever flashed firmware to an SDM 32 device using the arduino usb Arduino IDE and a USB connection between the computer and the usb port on a board You've done a serial DFU and you've placed the device in a bootloader mode manually by holding the boot and reset buttons Alternatively if you've used a programmer like the stlanck or jlink to apply firmware to a device You've not had to do this because the programmer can automatically place the device in a bootloader mode using the SWD connector on the board It's basically a hard-wired connection to place the device in a bootloader mode and that fact will come back around in a little bit So that's DFU The OTA piece of the puzzle stands for over the air Which means the process of delivering new firmware to a target device happens over a wireless connection And often you'll hear OTA DFU associated with using Bluetooth update devices from Nordic or Sylabs using their mobile apps But it doesn't have to be a blue it doesn't have to be Bluetooth to be OTA DFU Shipping a binary over cellular or Wi-Fi is also over the air And in a world where nearly all IoT solutions all solutions are cloud connected OTA DFU is a table stakes feature in these types of solutions And we insist on having it because if we're going to take the time to add remote monitoring and control to an application We probably also want to use the remote control capability to fix the product without having to touch it Especially if those devices are no longer in our control And in a world where we have to deal with botnets made up devices with firmware that can't be patched It's beyond frowned upon to deploy a solution without thinking through how you can fix bugs or apply updates Not if but when needed But even today in 2022 OTA DFU is still complex And there are really only two approaches to it that are available to developers and each has sizable pros and cons We call the first let's just call the first OS DFU And this is where one in which the vendor solves the DFU problem in to end within their kernel and their cloud service The vendor solves all of the complexity of DFU for you provides a cloud console for updating uploading firmware and Facilitates managing firmware delivery to devices across the fleet on the device side The vendor provides firmware update capabilities as a part of their kernel or our toss and Manages every piece of receiving new firmware from the from the cloud service Placing the device into its bootloader and then updating the application or our toss on the device restarting it once it's updated The advantage of the OS DFU approaches that it is completely hands-off for the developer once they load new firmware in the cloud console The platform takes care of everything else from delivery to on-device updates But the disadvantage of this approach is a lack of control on the part of the developer in order for the vendor to make this experience Hands-off you have to place high guardrails in place and dictate a narrow set of supported hardware Programming language and even IDE to get the benefit of OS DFU You do have to yield some of your freedom as a developer to the vendor The easiest way to tell whether or not a vendor uses an OS DFU approach is just to look at their hardware support For host MC use do you have to use the hardware that they sell and manage in order to use this feature as opposed to an Off-the-shelf kit or a chip based on your skill set or preference That's probably OS DFU On the other side is cooperative DFU and in this approach both the vendor and the developer have to complete some of the puzzle to make OS OTA DFU work they cooperate to make the DFU happen Usually the way that this works is that the host vendor is it the vendor hosts firmware binaries and provides secure delivery of those binaries to a host But then the developer is responsible for writing the code needed to verify the binary apply it to the host and then restart the device And this approach is different depending on what form of wireless protocol you're using for OTA DFU At least at the edge down onto the device itself For example of Bluetooth is the update mechanism and the server in this case is often a Bluetooth capable device like a phone And the device must be brought within a few meters of the host in order to initiate the update And on the target the process varies from one MCU vendor to the next and the wireless communication protocol But it does sort of typically consist of getting notification that new firmware is available receiving firmware from the server to host to the host one chunk at a time and then placing that firmware in a temporary location in flash Validating each chunk and or the entire binary when it's done Copying the complete firmware into the appropriate location for the application in flash and then resetting the device to run the firmware And if you're not using Bluetooth for OTA DFU then you're likely using cellular and Wi-Fi And in this case the server is an actual server It's in this a remote cloud service that hosts and delivers the binaries for you But beyond that the process is pretty similar to what I described above your host still has to get the binary Validate the chunks or the entire thing place the device in its bootloader, etc. etc restart it and you're good to go And in the case of my company we we offer today as something like a cooperative DFU style approach And I'm going to walk through that briefly because I'm going to demo exactly what it looks like And for us OTA DFU consist of two components the no card and our note hub IO cloud service And the no card is the hardware side of the equation that works with your host It's a device the cloud data pump that comes in a small 30 by 35 millimeter package And it has an m.2 connector so that it can be incorporated into any design or field replaced as needed The no card comes in Wi-Fi and cellular variants that are project swappable and the cellular variant includes 500 megs of data in 10 years of secure cellular connectivity in over 139 countries and counting and the data and the the plan is included in the cost of the device As a data pump the note card is meant to be used with the MCU host of your choice So you can pick an STM 32 ESP 32 Nordic device or even an 8-bit Arduino and communicate with a note card using a 100% JSON API over serial or I squared C You can also use any embedded language that can print strings and we have SDKs for C C plus plus Arduino tiny go rust and circuit Python And the cloud side of that equation when it comes to OTD if you facilitate with note hub and note Hub serves really key three key functions for developers One is that it's meant to be a secure end point for note card devices to transfer data from your host Or to receive messages from the cloud down to your ultimate hardware solution It's also meant to be a thin piece of middleware so that you can route event data from your sensors to whatever cloud service that you use and Then finally as a device and fleet management command center for monitoring devices updating configuration and shipping firmware via OTA Tfu and note up can deliver firmware updates for the note card itself and its core functions Running on an ST that run on an STM 32 L4 chip on the board and it can also securely download verify and deliver Firmware updated updates that are meant for your host and as recently as a couple of weeks ago The blues process for host firmware updates was in line with the cooperative DFU approach that I've already described note of host the firmware and delivers it securely to the note card and once downloaded and verified the note card Informs the host that a firmware update is ready But then the host like before is responsible for retrieving the binary one chunk at a time Verifying it and applying the new firmware using the host to find approach of putting the device in its bootloader and so on and so on So let's take a look at the demo of this process with a note card and with an ESP 32 now switch over the cameras and desktop for that on the desk here, I have the an ESP 32 that's connected to the blues wireless note card via This a no carrier F Which is this daughter board that we have that facilitates a connection between the two so the ESP 32 is communicating in the note card And I'm going to show off the cooperative DFU approach This is running a binary and I'm going to update it and sort of show you what that flow looks like if you have to manage all that Firmware yourself, okay, so I have my ESP 32 app I created it in platform IO running inside of VS code and In the project, I'm going to walk you through very briefly just sort of what what this process looks like in terms of What I have to actually include in order to do OTA DFU using this cooperative approach with the note card and Sort of the big piece of it is when the application runs it scans to make sure I have two partitions because this is the ESP 32 It uses the ESP IDF partition system and this is in my Sorry, this is my DFU dot CBP in my main dot CBP I basically am running The part the main part of the application right and so you'll see there's a couple of different things I need to do need to actually provide a product string I have my button pin and LED pin on the ESP 32 connected here I'm setting that product you ID which is that unique identifier that tells the no card exactly where on the cloud service side to go And that's here on the on the right hand side and then sort of the bones of my application is I'm basically I Set my connection to note hub to our cloud service using the hub dot set JSON request I give it a serial number Set it into periodic mode basically configure its connection to to the cloud service and Then so that's sort of the main part of the process The other main part of the application is me actually checking for button presses if I if the button is idle I'm checking to see if there's a DFU that is available on the note card side If I get a double a double press I perform a sink I set the LED high and low and then I can also do a sort of dummy Measurement voltage measurement that I send that as a as a data point as an event to note hub via note add Request that's all sort of the standard the main part of the application everything else that's in here facilitates this part of actually doing the DFU detection whether it's the setting the product to ID information here And more critically importantly checking the DFU status when I start up and then in my loop Basically polling for DFU at all of that logic happens inside of this DFU dot CPP helper And this is what actually pulls in the ESP IDF Helpers for working with the partition system. I have a helper in here that shows me that the available partitions I'm actually set in standard dual partition mode. I Have a helper function that handles doing a CRC check on those chunks as I get the the chunks from the note card And then the polling process do so does sort of the the main part I'm actually getting every chunk of my firmware binary from the note card The way that the process works is the note card Gets the firmware from our note of cloud service and as soon as that's there It sits in the note cards flash ready to be handed over to me on the host side It'll my ESP 32 needs to do is basically get that one chunk at a time To CRC each chunk to make sure it's valid as it transferred across Serial or I squared C and then I go through the process of reading those Validating it and only after that can I get down to the point where I can actually Set that into my boot partition and then reboot and bring the device online This is 311 lines of code that exists solely to handle that DFU process And then has to live on the main host itself So in a cooperative DFU approach once I've count once I've built all that my firmware needs to know how to handle a binary when it comes across I can build the binary and once that binary has been built I grab it from wherever location it lives in this case in platform IO It goes in a build directory that I can get it from and then what I'll do is I'll come over to the note hub side of my project and I'll load the firmware in here And you'll see I actually already have that in here if I make a change and I set the I go to my main dot CPP and I set the major minor to 1.1 and that's the new version that I want to run I'll upload that That firmware here and you'll see I've got this 282k Binary that's sort of sitting there ready to go and the reason it's so large is because it has all of the spidf DFU partition awareness stuff that's actually Invaked into that binary as well And once I have actually Assigned that or once I've actually figured out the right place for that to go I can then in note hub go into the host firmware tab Choose a binary to update and I'll set that I'll select this this version right here click proceed And what happens on the note hub side is that that process kicks off and the next time that I actually Perform a synchronization so I can actually connect to my note card here using The dev tools at dev.blues.io And the next time that I perform a sync I can actually see That I'll start to see that binary actually being downloaded From from the note hub service and it goes and gets that I'll see it actually here showing his idle right now because my device needs to reconnect But you'll notice that I'm getting some notes here to actually go and sync that information All of this trace information is what's happening behind the scenes as the note card goes and starts to fetch the binary And pulls all that information down and so in the background I don't have to see this on the host side in the background. This is all being downloaded But once that download actually finishes, then my actual main application loads I go into dfu poll And then I go through the process of downloading and rebooting. So that's the cooperative dfu approach Right the cloud service gives me the binary, but it's my responsibility on the host side to do the rest of the work So one of the important things to notice about that demo was that my actual application code made up a very small part Of all the code that I had to add to my app in order for this process to work Even with a library or a helper class that we provide to facilitate the transfer and update the process My app still has to know a lot about how to update itself for this process to be useful And in general the strength of cooperative dfu is that the developer has complete control over the host they use And there are no guardrails beyond those imposed by the bootloader process dictated by the host be it st Nordic sylabs or the like The drawback as you saw in the demo is that the developer I am responsible for handling the application of that new firmware Up that myself I have to use that approach is all in my code And not only is that manual and time consuming that litters my project with code That's not core to the actual problem that i'm trying to solve But if it changes introduced that I that I create that bricks the device The host ends up in a state where it can no longer be updated at all Meaning that the benefit of ot adfu is completely lost So with these two approaches it appears like we developers basically have two choices We can either give up control and get hands off ot adfu Or we keep control and add time consuming and potentially device breaking work to our plates But today I would like to introduce a third way One that provides an early hands-off dfu without sacrificing choice And it's something that we call outboard dfu And when we use the word outward we use it here like an outboard motor on a boat Which is a motor that is attached to but not an integrated part of the boat itself It's effectively lashed onto a craft and when placed in the water it can control and propel it But it can also be removed or replaced without damaging the boat itself An outward dfu is a capability that we've recently released in beta And it provides the benefit of being able to use note hub for hosting and delivering binaries While allowing the note card to serve as the outboard motor for controlling the dfu process So that you don't have to litter your app code with a bunch of dfu aware code and functionality And the best part about this is that we can do this while also giving you choice of mcu family Programming language and all of those things that we really prefer to have as developers And this is possible because there's an increasing number of mcu's modern mcu's that have been produced in the last decade that ship with their primary bootloader and rom Unmodifiable by any user operation So on these devices which includes all modern xt micro electronics and expressive microcontrollers When a reset pin is asserted the device enters its rom bootloader Which can then load and execute code from a derived from a variety of sources including flash ram ur usb i2c and spy And this rom bootloader behavior is controlled by actively probing ioports And by sampling the state of strapping pins that are specific or specific or specially locked boot option byte Boot option bytes in flash And these manufacturer provided rom bootloaders present Really new options for us as engineers specifically We can perform secure firmware updates in a manner that is far more flexible in terms of language and artas And far less vulnerable to bricking devices and introducing inadvertent programming bugs So putting it another way using this approach you can defer the dfu process to the no card And allow it to be the thing that handles updating your host and it can do it regardless of the state that the host is actually in So remember how I said earlier that using a programmer like the st link or jlink doesn't require the manual button press bootloader dance The reason for this is because those programmers connect via a special j tag header Which has direct access to the strapping pins or option bytes of a host And with outboard dfu we're taking the same approach By providing the capability for connecting the note card to the strapping pins on a set of hosts that we support And putting the device in a bootloader mode laying down firmware and then restarting the device and at present We support this with the stm 32 esp 32 and nordic and nordic nrf 52 8 40 So you can use any of these in a custom design using a guide that we've created that lays out how to connect To a set of pins on the no card To the mcu's reset boot and uart pins And this also works with our note carrier f and an stm 32 feather board that we produce called the swan Adafruit feather stm 32 f 405 express or the adafruit nrf 52 8 40 express feather Or with the stm 32 processor micro mod board from spark fun. It works with all of these devices So let's take a look at a demo of this now and see how much simpler our application code actually ends up being So for the next couple of demos, I'm going to keep the camera on my hardware the whole time So that you can actually see some changes that we're going to be making as we as we do firmware updates But I'm back to using I'm on my desktop and I'm using the note card as before This is a wi-fi version of the note card our note carrier f Which does support this new outboard dfu feature because it's been wired to the boot reset And uart tx and rx pins on the feather connector and for this host I've added this stm 32 board that we call the swan and It uses an stm 32 l4 r5 mcu and like all modern st Devices it has a rom bootloader and like we discussed previously the the boot and reset buttons are the manual The manual human driven way to get this in the bootloader But we're going to be able to do this automatically. So with everything powered up and connected Let's actually take a look at the firmware and this is a simple arduino app That blinks the user led every second. This is basically what happens and I have a a pound of fine 1000 milliseconds so every second it's going to set the led high delay set it low delay and loop again That is the main functionality of my application That's simple the only things that I need to do in order to enable this outboard dfu process that I talked about Is just like I did a cooperative dfu. I set the connection of the note card into the note hub cloud service So it knows where to go. I set its product uid same as before I'm going to give it a serial number to distinguish it and I'm setting in a continuous mode So it has a continuous connection and then for outboard dfu All I need to do is I sent a second request called card dot dfu I set the name of the processor st m 32 esp 32 n r f 52 8 40 You tell the note card which one of those it is so that it knows exactly what to do In order to stream firmware into the device Turn it on and I go and I go and so if I actually wanted to change this from 1000 milliseconds to 250 So I want to update every quarter of a second And then I built that version of the binary should take about a few seconds to actually build it So I've built that binary and just like I did for cooperative dfu I come into the firmware section of note hub dot i o I add this binary swan arduino odfu. It's the second example here. It's 55 k So not that big compared to what I had for the esp 32 that included all that partition logic and my custom functionality And then when I go in back into my device of you, I see that I have my device online I go into host firmware And then I will select the arduino odfu bin right here And so I am going to upload that And then what I'll do in order to actually start the process is I will Perform a sync from my device just as you saw before I'm in the web rep I'm in the blues the dev dot blues dot i o web rebel again And as I perform that sync I should be able to actually see that a There we go. There is the binary that's actually coming across I'll see these requests in trace mode that shows me that it's downloading the binary One little bit at a time And it is actually as it goes through the process of downloading that binary It's going to get it all together So as soon as that process finishes you'll notice that I lose my connection in the web rebel because the device has Restarted it's lost power. It's come online again. We also notice that now my light is blinking a little bit faster I can reconnect to the device Uh, and it's fine. It's come back online But I've all immediately seen that change as it actually has shown up On the device right there So it's as simple as that literally in order to opt into this outward dfu process This is all that I had to do and because the note card knows how to perform that process for the esp 32 It's as good as done right far easier than the esp 32 example from before Uh, but you know it gets better because without word dfu Because the host really doesn't have to know anything about updating itself You can effectively do a brain transplant between languages between our toss is really anything So for example, I have another project here And this project is a zephyr artos project So, uh, this is a it connects to the same note card and it runs the same sdm 32 host But you'll notice that the code is quite a bit different because this is an actual zephyr application. It's not an arduino application So i'm using the exact same idea here my In this case what the process is doing is slightly different I'm making a connection into the note card, but i'm doing the exact same hub dot set in this case just changing the name of the Of the serial number of the device so that I can distinguish it And I have a couple I have some logic here to uh to to pick up a button press And then anytime there's a button press it does a note dot add and also turns off and on The led as well, so i'll be able to see slightly different functionality that comes across when the device actually comes online So much like before what i'll do is i'll go through the process of building this And then I can pull it up into note hub when i'm ready to go And you'll see when I come in here that the dfu status from before is completed I have another version of the firmware for zephyr, which you saw before and this is about 46k So relatively small not much to it And then includes that note card library and i'll do a very i'll do the same thing as before i'll click update But this time i'm going to select the zephyr binary file. Click proceed It'll queue that for dfu update And if I come back to my device, what's going to happen now Is i'll turn on trace mode and I will sync like before And just like you saw before what i'm going to do this point is just sort of wait for that Binary to start to come down the note card is going to pick it up And just like before it's going to download that you'll see it's kind of already starting to come across It's going to download it and then we'll see the functionality change on the device And just as before I lose my connection to the note card as it restarts, but I can reconnect This point turn trace mode back on and now remember what I had decided to do for here is anytime that I press the the user button On the device that I'll get a note that pops up and you'll see that note shows up here And then it ends up syncing to the note hub service So when I refresh here, I can actually see my device id is now zephyr outward dfu if I click on my events Now I can actually see these button counts events that have gone across and without doing anything Really physically on the device all I do is I'll have the note card to go from an arduino application into a zephyr artos application In a matter of minutes using this outboard dfu capability. It's pretty stinking cool So that ability to move between languages is powerful And it's actually something that we've seen is a real need in the iot world where for the sake of speed and getting a poc out the door we often want to be able to ship something written in arduino Or circuit python quickly even if we intend to migrate to something like zephyr or free artos in the future And speaking of circuit python There are actually a couple of additional features related to outward dfu that are particularly interesting if you're working with this language On your devices because circuit python is awesome It's fun to use But a binary with a circuit python virtual file system in scripts is 500k And I don't think that any of us want to burn up the data plan on a cellular device pushing half make binaries down to our devices And so one of the cool things about circuit python that actually enables us to have a solution for this is that it actually exists in three pieces In each is paid to a known memory address. There's the circuit python uf2 bootloader. That's at address hex Hex eight zero zero the circuit python runtime. That's at hex eight zero one Or your app the circuit python scripts and libraries that are at address hex eight one zero So what this means is that if you can build a binary that targets just those addresses You can update just that piece of the app and save a lot of transport time And data which is pretty interesting and this works through our outward dfu approach with a couple of open source Utilities that we've created One is the open source circuit python file system builder Which packages your python your python files and libraries director directory into a binary format And which then allows the second utility to come into play and that's called the note card bin pack utility Which we we can use to tell the note card when that when the process is loading when outward dfu is happening It tells the note card which memory address to update when performing that outward dfu And bin pack actually works with any binary type so you can use that to peg Parts of your application into any memory address and update those independently, but this is extra useful with circuit python So let's take a look at a demo of this now and i'm running the same device as before But this time my swan is running a circuit python application that's blanking the led so let me show you Okay, so i'm running the same device as before but this time my swan is running a circuit python application That's blanking the led every one second and so here's the circuit python application. It's very simple Use the same product uid The one that's on there is running every one second i'm going to change that here in a second But again just like before i'm calling hub dot set Sending the json request to the note card in order to assign it to my project And then card dot dfu to turn that on and again just like my initial arduino application very simple On and off of that led every one second In this case i'm going to change this to point two five and then this is where i'm actually going to go through that process Of then creating a binary from my files that i can then flash only by itself onto this drive this device Already has the circuit python run time the uf2 bootloader the virtual file system is there But it's that file system piece that i want to change so i can keep this as small As humanly possible all i really want to put on is the code dot pi file and then the library which includes my note card sdk as well so in order to actually Do this i'm going to open up the circuit python file system builder. It's an open source Repository that you can clone to run locally. I'm going to set up a virtual environment for this Set up the virtual environment for that and then what i'm going to do is i'm going to run python Main dot pi i'm going to pull the files from my file system So this is a pointer to a folder a directory that has the live and code dot pi And then i'm going to turn that into a binary called circuit python files dot bin And it was good as done that goes in that bin directory there And then the next piece is bin pack as i mentioned before bin pack is the piece that then Tells the note card in the outboard if you process what precise memory address in order to send this to so This is part of the note card utility, which is another open source utility that we have that's available in the blues GitHub repository, so i'm going to call note card slash bin pack. I'm going to say this is bin pack for the stm 32 The address that this binary is going to be pegged to is hex 8 1 0 0 Like i mentioned before everything it hex 8 0 0 everything it hex 8 0 1 The uf2 boot loader the circuit python runtime those will stay the same The outboard gfu process is only going to update this little piece right here So that then creates that binary for me So I can see the bin pack binary right here I have one that i've created already and this is when I go back to Note hub and actually upload this firmware. So this is the last piece here. This bin pack file. You'll see Unlike the 500 meg Binary that I would get if I did everything in circuit python. This is only 78 k that has just my files So I can push that down just like before and just as you've seen me do two other times already I'm going to go into the device host firmware section.  I'll go back here And I will initiate a sync just like before and then when it sees that binary it's going to pull it down One little bit at a time just like every other part of the process and then apply that to the device And now my device is back online. You'll notice I'm still connected here to the note card But look now the led is flashing Every quarter of a second again still running circuit python and I did that process through Outboard dfu so you've seen in just a few quick demos going from arduino to zephyr to circuit python All using this exact same brain transplant outward dfu process So that's outboard dfu and we think that this is an exciting new way to think about doing firmware updates and to rely on cloud infrastructure and intelligent controllers to facilitate the ot adfu process without taking away your ability to choose the mcu family Language or our toss that you're most comfortable with So to learn more about outward dfu and blues visit our developer portal at dev.blues.io And if you're interested in grabbing any of our hardware trying out a dev kit You can grab that at shop.blues.io spark fun or digikey Or you can scan this qr code and get 20 off of any of the kits that are available in our store So thanks for joining the session today if you have any questions Please feel free to reach out to me at brandon at blues.io or on twitter at brandon satchelman also be here for q&a So thanks again


What is going every- Rhyme, crash land next to me and pick me- NO SELL! How's it going everybody? Datoi here and I am so excited because while Dragon Ball the Breakers might not be coming out until 2022, the closed beta most certainly did come out very recently and I am ecstatic because very recently with a group of friends I got to hop in the game to try it out and it was a ton of fun. This video is going to be a highlight of some of my favorite moments from that stream of just going through and playing against Cell as a survivor and some of the crazy stuff that happened along the way. If you end up enjoying the video, of course let me know down below in the comments or just by leaving a like, but with that said, let's go ahead and get into the gameplay. Before we get into the video though, I did want to let you know that this video is sponsored by absolutely nobody, it's just brought to you by me and I wanted to let you know that I am making a brand new comic called Beginning End and the first three chapters are finally done and fully free and available to read on webtoons and other sites like Webtoons. The link will be down below. This is something I've been having so much fun working on on the side of making these videos for the channel, of course, and I would love for you guys to all go check it out on webtoons and just let me know your thoughts on this series. The first three chapters are what I consider to be the first big episode. We go from the characters being normal and happy to... It's a really, really fun time and I can even make my main character look somewhat like Yamcha and do an attack that somewhat looks like Spirit Ball. Obviously, for legal reasons, that's not Spirit Ball, but I mean, come on, dude, it's a pretty cool attack, nevertheless. Anyway, go over there, check it out on webtoons, run those numbers up, let's just try to see how many people we can actually get over there. And with that, I just wanted to thank you again. If you do go check out the comic, I appreciate you all so much more than I will ever be able to express and let's go ahead and get back into the normal video. We're the ball breakers. Let's go. Let's break some balls, dude. Yo, who I woke up next to? I woke up like this. No, I'm the tiny blonde guy. Oh, Ryan! Yo, Ryan! It's me! You know, stop. Stop, stop. Oh, my rescuing this guy. I'm going to get you, Nano. I'm creeping up. Yo, Nano, let's creep up on Ryan. Ryan, stop. We're going to get you. That's already first form.  I don't have any Xanny. I'm pouring this world, too.       Hey, what's up, losers? Skirt! What? Skirt! Nano!  Yeah, yeah, yeah. You know what I'm doing. Am I? Wait, Nano. TP, Nano. No, Nano! Nano, my heart's beating! Run, Nano! Nano, run! Oh, damn! My car, Nano! Give me a ride! Motherfucker, you get back here and give me a ride!  Damn! What? Oh! Nano! Nano! Hey, good luck, Nano. Nano!    Give me up, Nano. Nano! Get me up, Nano! Oh! Rhyme, crash land next to me and pick me. No, Sal! No, I wasn't talking about you, man. I would never say that thing. Sal, if I would have known. Sal, quick! Did anyone find a dragon ball? I'm down there. Sinner! Sinner! What? You came. Sinner, you came that late to help me. Spit that! Rhyme, what are you doing? Abandon her. Hold on, Rhyme, hold on.    Why are you going for Sinner? Sal's taking you out of part of the map. Rhyme, go back for them. Rhyme, go back. Come back for me, Rhyme. Rhyme! Oh! Yes! Yes! Dude, I'm getting the best medical help I've ever seen. Thanks, fella. Sal's here! Sal's here! Everybody leave! Everybody leave! I know he's coming! He's coming!  Leave! And that's how I made my great getaway. Deon! Deon! I'm coming to you, Deon. I don't like crash land. I'm taking. I'm back out of my outfit. Was that Sal? Please tell me that wasn't Sal. Who was that? Oh, Rhyme, is that the teleporter? The teleporter. Oh, that's the key. We have to... Oh, you set the key. All right, so what other keys do we need? Oh, we need E. I think he's here. If he's here, then I'll... Why is our screen shaking? Wait, is the area being destroyed? No, no, no. That area is down there. Okay, area B is not gone, Dotto. Area B is gone. Okay.     Hey, I found a dragon radar.  Oh, just tell me where the keys are. Okay, where? Follow me, follow me, follow me.  That's all I'm gonna say.  Right, right, right, right, right, right, right, right. Oh, look, I got it. Nice, get it, get it, get it. Is that Sal over there? Oh, dude. Don't worry, don't worry. Follow me, follow me, follow me. Who's doing all that destruction? Is that Sal? Chris! Dian, hurry, Dian!  My heart's beating, my heart's beating. Sal's here. You just did it. Sal's here, guys. I think about that too. Sal's close, Sal's close. Sal's pissed. Sal's pissed, Sal's pissed. Uh-oh. There's no message. Oh! I'm pendulum. Boom, chicka-hoo. Ka-ee-ah. How do I beat this guy down?   Come on. I'm going to personally use this time to escape, Dian. Buy me time.  You coward! Dian! He picked up the dragon ball, guys. Guys, please save me. He's got me by the nait. Dian, Dian, Dian, I got a dragon ball. No, no, I'm going to help Dian. I think- No, I'm dead, bro. Wait, you transformed him into perfect Sal? He did. It's all Dian's fault. Dian! Bro!  I'm a potted plate. Does anybody know how we win? How do we win now? Did somebody find a time machine? I'm scared. I don't want to die. He's destroying another zone. Don't worry. Don't worry. We're going to win there. He's destroying another zone! Rive! Just rush me. Who? Dotto's playing Piccolo. Because I'm going to see who Dian is.  He's a little strong. He's a little strong. Get the time machine, Rive. Get the time machine. Hold on. Hold on. Hold on. Oh, no! Rive, do you have a time machine? No. We have a key thing. What do you mean another key thing? We don't have time. Hey, go, Sal. Come on. Sal. Where is he? Did he not follow me? Hey, Rive. Hey, Sal's destroying the time machine. No. Don't put me next to him. Hey, Sal. He found the lava. I'm going to throw a hand through here. I never know that's you, Dotto. He actually lost him. Yo. Let's go, Dotto. No, I think he just went to go. He just went to go cook Dino. Dotto, you just go fucking... Dotto. Oh, my God, Dotto. Dotto, he's going to destroy it. You've got to do something. Otherwise, you lose. Where are you going? I don't know.  Sal got that ship, Rive. It's probably it, dude. The map is, like, tiny now. We have three so far. Escape in the time machine. Where's the time machine? Wait. You can use the sand pod. I'm going to the beacon. He's there. Dotto, just... All right. Where's the time machine? Where's the time machine? Somebody point me at the right direction. Right there. Right there. Right there. The blue beacon. Right there.  You're right there.   Did you just drop a smoke bomb?  Dotto, block it.  I'm going to... No, I got this. I'm going to deflect. I'm going to reflect right here. Hold on. So they're just not going to show us brutally dying? We'll get him next time.   Ah, Nano got... Okay, yo, yo. If Nano got cell, we're about to win this game.    My eyes are down.  Who's next to you? Who's next to you? Oh, Dion, is that you? I'm kind of... Bro, my shirt's off, bro. Bro, high five me, Dion. Oh, a key, Dion. No, wait. This is a... No, this is a power key spot. Oh, Nano, Nano. Dion, wait up. Wait up, Dion. Let's go, bro.   Nano, bro, why the shit's so loud? Let me show you a trick.  Look at me, look at me, look at me.  Hey, hey, let me pull up on Nano real quick.   Wait, there's an NPC here. Dion, here's the thing. I think we both... I gotta rescue this, though. You can rescue him? Yeah, you get stuff for it. Oh. I was gonna say we should use him as bait for Nano. Wait, can we shoot him? Can we shoot him with our guns?  Oh, Dion, come on. Dion! But this game needs more music. Get this rocket launcher, Dion.  Dion, let's go.   He's in his first form. Gato, that's why we have to rescue the people because he can just get the random civilians, too. I know.  I feel like he's gonna cook us now. No, no, no, no, no. It's Nano, guys. Nano never wins in games. Dion, promise me something.   Tina, come on, follow me. Tina, follow me. Do you need this car? Tina, get on this car. All right, follow us, Tina.  Oh, this is the area to put the dragon balls. The power key somewhere was somewhere around here. Is Jay getting messed up? Wait, is Jay getting messed up? I'm gonna lie. I ain't trying.  Oh, he's trying to destroy this area!    Run! Wait, which side? Which side? Oh, this side, okay. Where are you going? I don't know. I don't know. I can't find it. Tina, just loot the room, Tina.  All right, let's go, Tina. Let's go. Let's go. Let's go. Let's go.  Damn, Sora got cooked! No, Sora! Should we save him?  I found the power key radar. Can you find the one for B, please? Tina, you still good? Cell not showing up? No. Tina, did you save him? Hurry up. I did. I got a barrier recovery... All right, come on, Tina. Come on, Senna.  He has the radar, so Dion has our best hope. It's for the power key, not for... Yeah, yeah, but still. Who had got a barrier recovery device? I don't know what I mean. The power key, Dion. I found it. I found it. All right, what is it for? Because I found the key placement. Please say E. Right here. Dion, right here. Right here. Dion, over here. Look left. Look left. Down. Down. Down.  You're going up. Down. Burn around. Right here. Right here. Right here. Please. Oh, my God! Go put it in. Put it in. Put it in. Put it in. Right? Here we go.  Hey, you guys can help to make it go faster. Oh, we can? Come over here and help to make it go faster. Oh, we can also... Yeah, yeah, yeah. All right, nice, nice, nice, nice, nice. Oh, yeah! All right, why do we all jump? We're going to die. All right, Dion, lead us. Lead us. So what do we need? I don't have the radar. So we... Do we need Z? Can I change the scale of this? Yeah. Hey, I can get another key. I can get another key. Wait, what do we need? Oh, God! Oh, God! What's happening? Oh, my screen shaking. Sprint, sprint, sprint, sprint. Why is my screen shaking? I don't know. He's destroying something. He's destroying... No, he's destroying the... Is he destroying areas? He's destroying... We're not in that area. Yeah, he's destroying E, I think. Yeah, he's destroying the wrong area. Oh, I still got scared. I still got scared. Where are we going? I'm scared. Jake has a dragon ball, but that one dragon ball is not going to help us, Jake. He's here! He senses my energy! Run! Oh, God! I found the dragon radar. Where are we going? I don't know! It's going to run! He's here! He's here! Don't lead him to me! No, don't come in here, Dotto!  We're supposed to be here, dude. Dion, protect us. Dion, we made a promise at the beginning of this match, bro. He's coming! Here he comes! Here he comes! Are you disconnecting right now, Dion? No, no, no! I'm right here, so to get back on your car. If we can't trust him... Oh, God!  Rhyme, do you have a radar of any sort? I have a key radar! Dion's going to heaven! Rhyme, get Dion's rocket launcher! How do you shoot it? All right, let's go. Let's just get away from Cell, dude. All right, Rhyme, do you have anything, Rhyme? A radar. I have a key radar. Can you use it? Yeah, I don't see anything on it. Maybe we have to... Maybe it's time to go. I know it must be done. It's time to go. Time to go? Are you leaving? Wait, Rhyme, don't leave without me! Um, Sina? My heart's beating. My heart's beating. It's okay, Sina.  Run! Sina, keep... Sina, hurry up! Hurry up, Sina! Wait!  You're fucking... I got a gold rocket launcher and a dragon ball. Who cares about the dragon ball? We need an Emperor Time Machine. Hey, hey. Oh, no!  Where am I? Oh, the water? I am? I did. I'm in the water. I'm in the big drinks. Wait, I can fight him. I can fight him. Where is he? Where is he? Guys, guys, I'm here to help. I'm here to help. Who's shooting Key Blast? Me. I'm here to help. Sina, I don't think our cars can get out of here, if I'm being honest. Sina, he's here. I got you. I got you. Oh, he shot me out of my form. Just stop him, Rhyme. Buy time. Sina, go. Is that a way out? I'm dead.  All right. Sina, call your car. Sina, get in the car. Okay. Okay. Just don't panic, and we're going to be fine. We're going to be just fine. There's got to be a key in. There's got to be a key in. Freeze this place. Dear God, please. Where are you? I'm at freezes. I'm at the big spaceship. It's a ship. The spaceship. Am I getting cooked? Sina, go. Go, go, go, go. Oh, I made it out. All right. Oh, no. Oh, no. Sina! No!   Sina, flee! I wonder, no, because my stream went down. It's got to be me, I guess. No, it's definitely us, because my went down too. Sina! Hawaii at this point.  What's up, dude? You took my pod, Sina! You took my pod! Sina! Sina! It's up to you now, Sina. Call your pod, Sina. Call your pod. Just sit up.


The narcissist will do this at the end of every relationship. There is something that narcissists do at the end of every relationship. And this is something that every narcissist will do. It never changes. They all do the same thing. No matter where you are in the world, they all follow the same playbook. So if the narcissist hasn't done this yet, it's inevitable that it will happen. And it is something that can help you to the soon, whether or not you are dealing with a narcissist. Because normal, healthy people won't do this at the end of a relationship. They won't act in this way. But the narcissist will. And that is how you will know what you're really dealing with. Because this is something that they all do at the end of every relationship. It's something they have to do to survive emotionally. And to protect their false image of reputation. When the narcissist first targeted you, they put you on a pedestal. They saw you as perfect. They saw you as ideal.  You were better than reality. They had to see you this way for their disorder to function. Otherwise they would be unable to get supply. Because they have a black and white mentality, where a person is either all good or all bad, or right or all wrong. There's no in between. You're either this or that. So when they first targeted you, they had to see you as perfect and ideal. Or else they would be unable to obtain supply. But as time went by, you began to have more and more disagreements. You would argue about petty and insignificant things, which may have started to reveal their true nature to you. You may have realised that they were exploiting you. They were selfishly taking advantage of you, in order to benefit themselves. And the narcissist immediately senses this. Narcissists are empty shells. They're empty voids. They have nothing within. Which is why they need their supply. To reflect back to them how they want to be seen. But if you're no longer doing that, they have a problem. But once you've witnessed all of these mindless arguments, and you've seen how out of control the narcissist can be, now you're reflecting something different back to them.  And they don't like what they see. They see it as an attack on their character, as though you're deliberately trying to hurt them. Even though you may not have said anything. You may not have questioned them, or confronted them on anything. They are heavily dependent on you as a supply. So they're very finely tuned to you. They're very finely tuned to your reactions. Because that is what gives them supply. As soon as you start to realise what you're really dealing with, they will immediately know that something is not right. They will notice that you're not reacting to them in the same way as you did. They will sense that something is off. And that is when they will come down on you like a ton of bricks. They will become very authoritative and demanding. They will show a desire to punish you. They will want to get revenge for everything you saw wrong in them. Because narcissists do not take accountability. Instead they deny or deflect it. They blame you. They have to see it that way for their disorder to function properly. Their disorder is designed to protect themselves from any pain or weakness. If they even take a moment to question whether or not you're right, it triggers their shame. It makes them feel completely inadequate because they have a black and white mentality. At some point in their lives they learn that people are either all good or all bad, or right or all wrong. So for them to be good and right, you have to be bad and wrong. And if you're bad and wrong, they have to punish you. Which is why at the end of every relationship the narcissist will blame you for everything regardless of what they did to you. They may have abused you verbally or even physically. They may have damaged your property. They may have stolen things from you. They may have smeared your name to everyone you know. But they will still see you as the problem. They have to see you as the problem because they are shame-based individuals who are doing everything they can to avoid reflecting on their shame. And there's really nothing you can do to get through to the narcissist because anytime that you try to tell them what they're doing wrong, they take it as an attack. It triggers their shame which is followed by rage and then they just want to destroy you. Narcissists cannot accept feedback. They cannot accept constructive criticism because they want to have the authoritative position over you. They want to tell you what to do because it gives them supply. It makes them feel powerful and important. It makes them feel like they're in control. But the reality is that the only reason why they greatly desire power and control is because they don't have it. They feel completely helpless. They have no control over their own lives because they refuse to take accountability for where they find themselves. Instead, they want to dominate you. The judge, jury and the executioner because then it takes the focus off of them and everything that they are responsible for. There are few things a narcissist hates more than accountability. It's their kryptonite. It knocks them off their high horse and brings them back to reality. And the reality is that they have caused a lot of problems. They have ruined a lot of people's lives. They always find a reason to blame you for something. But if you go back and look at the root cause of the problem it always goes back to them. Anything else that followed was just the effect of their actions and deep down they are fully aware of this. They know that if they had made better judgments and the right decisions things would have turned out very differently. And that is why they deny everything they've done. They blame you for everything because if they were to accept even one fault or mistake that they've made it would open the floodgates to everything else they've done and the shame would be too overwhelming for them to deal with because the reality is if they had made different decisions they would have been a different outcome. The problem is that narcissists have a lack of respect for themselves and a lack of love which is why they treat you with a lack of love and respect which is why things turned out the way they did because I can guarantee that if they were emotionally qualified for the position of being with you it would have been very different but narcissists are very childish and immature which is why when all is said and done they will blame you for everything they will hold you accountable for things that they are responsible for and then they will smear your name they will make everyone else buy into the same narrative which will be very easy for them to do because although they may have been abusing you behind closed doors they were manipulating everyone else into believing that they're the Samaritan because they have to do that to get supply so when it all comes down to it no one is going to believe you everyone is going to side with a narcissist and you will be left to take the fall on your own


I'm here in the ITU TV studio with Daniel Cavalcanti, advisor to the Brazilian Telecom's regulatory authority and chief negotiator with the Brazilian delegation at the recent World Telecommunications Policy Forum. Daniel, you're very welcome. The recent WTPF concluded with the successful endorsement of six opinions, but one of the big talking points of the conference was a proposal that the Brazilian delegation brought. Can you please give us an outline of this proposal and why it was such a talking point at the conference? OK. Brazil presented could have been a seventh opinion coming out of the WTPF. And it is based on our national experience where we have a vibrant multi-stakeholder environment for internet governance. In fact, it is reflected in the Secretary General's report as an input document to the WTPF. But we feel that the international level, we still seek full engagement of all governments as one of the stakeholders in this multi-stakeholder environment. And particularly, we would like to see more participation of developing countries and the least developed countries. So in that sense, Brazil presented a draft opinion that dealt with two main points. One is clearly presenting and defining the role of these governments in this multi-stakeholder environment. And the second is recognizing that many countries still lack this full participation that the ITU could play a role in capacity building for developing countries and particularly least developed countries so that they can actively participate in this multi-stakeholder environment at the international level. And can you give us an insight into the types of discussions that were held once you presented the proposal and how it evolved over the course of the conference and where we are now with your proposal and what might the future be for it? Okay, so from the outset, we had broad support in many continents. As soon as the draft opinion was introduced, a number of countries seek the floor and express their support. But we must recognize that others, although they saw merits in the proposal, they would like further refinements in the language and specific issues that were dealt with in this opinion. I might say that throughout the negotiations, we had an input document that resulted from the work of the IEG, where we had been conveners of this particular opinion and then resubmitted directly to the WTPF. And we were provided with an opportunity to, after consultations with those that were in favor and those that would see possibilities for improvements, we came up with the second draft text, which was then submitted to the floor. And again, we consulted directly with a number of parties, especially European Union, United States, those that had voiced more directly some concerns with the text. And in the end, I believe the consensus was that although we were not ready to approve a draft opinion at this point, that the issue was very much on the table and all were in agreement in that respect. And in fact, although not approved as an opinion, the forum did provide a way forward so that the issue can be further discussed. And you mentioned that there was concern among certain members of ITU and other participants that there wasn't enough participation from different countries in this very key issue of internet governance, which is only going to become more important. What are the main reasons, do you think, behind this relatively low level of participation at country level? And I think you mentioned particularly developing countries and what can be done about it. Well, there are all sorts of limitations, starting with logistics, that the forum, the fora, that do address the issue at the international level tend to meet at different places around the globe, which so many countries have limitations in terms of this participation. But there is also in terms of the expertise to deal with the issue and a full understanding of this environment that involves multiple forums, multiple stakeholders. So it is a complex environment. In fact, from the floor, we heard a lot from developing countries and a bit of their frustration about the possibility or even their ability to actually voice some of their concerns at the existing fora. That is not to say that these are not the adequate fora, it's just that the countries have not managed to achieve an adequate level of participation on an equal footing with other stakeholders in this complex international arena. And this week at the WTPF, while the opinion wasn't officially endorsed, it has certainly gained a lot of traction and a lot of support across all sectors and all stakeholders. What would your aspirations be for the future of this document going forward in terms of really defining the role of government in internet governance? Well, in the end, the question of, it's a complex word with what is called operationalizing the role of government. That is, getting meaningful participation by governments in this multi-stakeholder environment. And the second point, which is capacity building in our view that could benefit from the assistance of the ITU. The way forward provided by the forum and is included in the chairman's report is that through the ITU mechanisms of the council working group on internet related public policy issues, we will continue discussions on this with a view that further on, the council might examine the output from this council working group. And hopefully the issue could then again be pursued and discussed on a formal basis in some of the upcoming events of the ITU starting next year, 2014. Daniel, thank you very much. Thank you.


It helped companies to figure out exactly what they could be doing to actually be transforming their company while they're continuing their business. One of the things that we're looking at in the research this year around performance metrics would be looking at the maturity of your transformation to a more digital supply chain. By doing this, it really helps you to look at how are you doing related to demand, people, risk, and technology. As companies start to think about a digital supply chain, they're going to be getting data from so many different sources. There's going to be this interconnection of them with suppliers and customers, consumers, internet of things, but all of that also creates more risk. And if we look at it specifically from a cyber security risk, the opportunity, all those are endpoints that create more weakness in our network. Cyber security risk is really transforming into something that needs to be embedded in the organization and have organizations really think about people, process, and technology. Not to think of it as a technology issue.