OK. Mi je Marijana Perala. Je z AT&T Mobility.  We already talked about some networking limitation in default neutron of ES ML2, which actually in my opinion prevents doing really scalable service chaining and then I'm going to talk to you about what other service chaining requirements and then how MPLS, VGPP pens actually can implement service chains, tudi je tudi veliko technologičke zelo, kaj je zelo, kaj je zelo, kaj se vseh čaljene, začači, tudi začači, pažne in izgledačnje aplikacije.  And typically there overlays over some scalable IP-fabric solutions like closed design. The second is SDN, software defined network, which basically provides programable forwarding planes. And the third one is the standard based routing technologies, today implement in data centers and overlay networks. above parlance and Mustafa Grannh, and this is all actually possible because of how Neutron was designed. Neutron architecture actually is very flexible and extensible and mainly through the plugin mechanism and its APA extensions, that allow different technologies to be implemented and so it allows for innovation. Plaggin, nekaj nekaj pump applications.  V nek newspapersu poz США,čok na settling enečnosti, poradj Victoria, tr seeking drives in Yarobnoorki provakonentsi. Svoj je, v efektorji v vzeličniht, kaj je bila vzelaženje, če je obočenje, vzelaženje, če je monolitica. Kaj pogledaj smo tudi svojo strategija, kako je, ki gavimo, ljudi vzeličnje, tezvrši technologi bo način z vzeličnih vzeličnih. Vzeličnja je začina zeloženja, nekaj je vzelaženja, nekaj je vzelaženja. Vzeličnja je modulina načinje, kaj bi te elementov jednak na njih ax. Vsi je komod navajjevanje finanic komod ne vokro. Štef je, da je zformučujem na stranke in ni zformučujem. Ca bolj ni izformučujem zformučenje s končnimi ob воспustenimi prihudimi, če je neki napomsk. Štef ni, da ni je tukaj tukaj tukaj svojimi, neko prejávanje. Am listem fri vči pred Paciferike, ali še v Hogwartsu ispajen. Stavlječno je bil, da ne gelšč Gang Neutron gledačno je plagič, kaj je zapravetori vo linux globne serve. Skupne je zetka, ali stavlječ je ne zetka, in pa je zetka, ne bo začetila vse izgledačne zelo. Second is that routing is limited to static routing right now. This is being addressed, because dynamic routing is being introduced into Neutron. However, it's still in the context of Linus virtual router. So the first problem is still not being addressed. And the third one is because of the fact that the routing is not a core feature. The load balancing, ECMP load balancing is also not a core feature. And it is also problematic because, of course, there is load balancer as a service, but load balancer as a service does not have infinite capacity, right? Eventually you have to load balance to the load balancer, right? So you need some kind of a core load balancing functionality. And I kind of go one by one of those limitations, and then hopefully I get to how to solve, how to resolve those limitations. So I kind of say what is needed and why Neutron, what Neutron doesn't do. So default Neutron, I mean. So cloud applications require optimal and controlled connectivity. So optimal connectivity is basically that you would like to traverse from network to network without going through the middle virtual router. And even with DVR, with distributed virtual routing, you still, one still has to go, you know, the traffic still has to go through that router, right? It's switching and it's routing. The routing is not native. And you saw, I was in the talk yesterday, the DVR talk, and it's implemented, but it's quite complex. So it's still the Linux appliance is still there as a router, and it's very complex to actually do east-west routing. So, of course, another limitation associated with lack of core routing is that today cloud applications are deployed and managed as a service. So they would like to, you know, those services, owners of the services would like to define and control their access policies. OK, this is not possible today with default neutron router because you can define the policy only from the exit of the client network, right? So it is an application or client of the service, and when the policy is applied, it's on the router at the exit of this network, right? So basically what it means that the application, that the policy definition is equivalent to its implementation. And this is not what is needed in... This is very limited. Second is lack of dynamic routing. This is much more obvious, right? And I think that in general community agrees with this limitation and it's being addressed, you know, typically it is explained as in terms of resiliency, right, that you lose one path to external network, then if you have dynamic routing to external network, you can failover. But also with lack of dynamic routing, it's very difficult to extend the networks across data centers. Or it's very difficult to preserve the virtual network context across the WAN. So that's especially true for private clouds where enterprise customers already have virtual networks in the WAN in the metro network, and they would like to extend them into the data center. It's difficult to do if you don't have dynamic routing. And the second piece of this lack of dynamic routing is that cloud tenants want to be able to dynamically plug in services between networks, and you will see, I have more details about it, but you need dynamic routing to do that correctly in a scalable manner, and in automated manner, you need dynamic routing. So default neutron doesn't have dynamic routing right now, and there is no generic service insertion support also. The third one, which I mentioned before, third limitation is lack of integrated load balancing. So network services, which are deployed in virtual machines, they require horizontal scaling. So the traffic has to be load balanced to those multiple instances. There could be tens of hundreds of instances to which the traffic has to be balanced. So the notion of having integrated load balancing is crucial. So these limitations and solutions are pretty obvious. So if you have only default gateway routing, it's not sufficient. We need to have fully distributed routing, as we have today in neutron fully distributed switching. There is static routing, we need dynamic routing. No build in load balancing, fully distributed load balancing.  And all those three elements, aspects, actually are very important. So these are the possibilities, which are needed to implement dynamic service insertion, also known as service chaining. And I just want to quickly kind of show you, explain kind of what is service chaining and how it relates to neutron. So service chaining is basically a form of network policy. So network policy defines connectivity, and also insertion of network services. So service chaining is simply a form of network policy. Doesn't we need to reinvent a new construct for service chaining? Basically it's a network policy. And operators, for example, I work for mobility, so things which we want to do is that we, for example, this little service chain, very simple service chain represents so-called GI interface of 3GPP network, when your data call terminates on the P-gateway, packet gateway, mobility packet gateway, and then needs to be processed. And one of the processing examples is port 80 traffic, HTTP traffic, which typically goes through ADC load balancer, then goes through HTTP proxy, and then firewall node function, and then to the internet. So this is kind of the level of how operator would like to express the policy and would like to get some magic that this policy is implemented in the OpenStag cluster. And that's where the OpenStag and Neutron plug-in come into the picture, because the service chains is composed of Neutron networks. I just kind of drew a little picture how that here on the left-hand side you have an abstract representation, on the right is kind of the implementation of it. So we have some kind of overlay networks which are stitched together in the way that the traffic from the source, which is a network attached to the P-gateway, and the network attached to the internet that is external network, is adjusted in such a way that the traffic goes through those service appliances. And so we translate and program such that this happens in the actual physical network. So it will go from what to how. Now, why routing and dynamic routing and distributed routing is so important for service chaining? So here I'm showing a very simple example that we have two service chains, right? So we go from network A to B, the traffic flows through appliances as one, as two, and as three, and they may be on multiple instances, and which I'm showing, you know, some have two, some as three, you know, could be tens, could be hundreds. And then on the other service chain we have something else, maybe different appliances and only two of them. So basically the point of service chaining is that it has to be a way to communicate, clearly network A has to know how to get to the prefixes in network B and the same, you know, to the network C. And network B on network C could be tenet network, so they could be simply attached to some VMs or they could have, or maybe some prefixes are injected through those networks. So for example, network B could be a network attached to Internet and it's learning some prefixes from Internet. Maybe network C is attached to some VPN in UN, and it's learning some prefixes through this network. Oh, but it could be also that network B is simply a bunch of VMs sitting on this particular subnet. Very often, like, for example, in mobility the mobile pool are not addressed of the p-gateway. Mobile pool are sitting on the p-gateway and they somehow have to be injected into the open stack routing system. So there is definitely routes which need to float from ingress to egress and vice versa. So in this particular case, network A has to know the prefix to network B and somehow those routing of those prefixes in this case 20.0.0 slash 24 has to be such that the traffic is flowing through this particular chain. The same for network 30 that the routing has to be adjusted in such a way that when you leave the network A the traffic is attracted to the lower chain and when it leaves the chain it actually can be forwarded to this destination <IP_ADDRESS>. So this is what means to integrate the service chain with routing. Without integration this cannot happen automatically. You are not going to go around and configure some static routes everywhere. It's simply not possible because new prefixes are injected all the time. So it is a dynamic scenario. So that service chain itself. Now the second one is the virtual appliances in load balancing. So here we have situation when services are deployed in multiple instances, multiple VMs. So for example service one has two VMs, service two has four, maybe service has three VMs. And to scale horizontally automatically that way we have to have load balancing at each hop of that chain. So that has to be load balancing at the compute host at the source network which is network A and then at each network which connects consecutive hops. Because imagine if you would like to do load balancing just from the source network the number of combinations you have here is just combinatorial. You cannot do that with embedded load balancing in the product. And of course load balancing has some additional requirements which are basically flow based because to preserve traffic flow in case of the instance failure the load balancing have to be flow aware and also for appliances which are stateful such as firewall the load flow base have to be symmetric. So the solution has to preserve flows both directions because of the state. The third thing which I wanted to mention is that what is connected with load balancing is so-called high availability aware load balancing. So very often appliances are running their own high availability protocols on some private network. So in this particular case I chose the second service service two which has four instances it sits on some private network and is sending some health checks those instances are sending health checks to each other usually the application level health checks and then if one of them fails one of the other instances takes over the failed one and somehow that information has to be communicated to the network to the network which sits in the front of it which is network C in this case. So for example if the instance 4 fails here somehow it has to be communicated to the network C not to send the traffic to that instance anymore and this has to happen dynamically. So that particular instance has to be removed from the ECMP set at the network C and this also has to be done through routing because it's a dynamic event. So I kind of show you three limitations of current default neutron of ESML2 and also how to solve them and you can see that basically how to solve them is to implement fully distributed routing as a core neutron function as today's switching is and then load balancing will come for free and also the dynamic routing also is something that is already happening in neutron. So actually there is already technology which does those things and it is called MPLSBGP VPNs it is technology which exists for quite some time so it is very well tested it scales very well and it can address all those challenges of service insertion and just networking as such in OpenStack between the OpenStack cluster beyond the OpenStack cluster across OpenStack clusters and obviously reusing something which is already there and is used is much easier more effective, economical than defining new protocols which takes time and effort and also they have to be tested it takes long time so standards don't mandate implementation so it's only the message format which needs to be met and so here I'm just showing how you do service training with MPLSBGPNs so MPLSBGPN has this notion of virtual routing and forwarding instance or table which is used for networking but the same mechanism can be used for the service training so it gives you immediate integration with routing and how it is done is that we have this in example we have this tools service chains I showed before and we have those VRFs which are basically distributed routing tables and they sit at the tena network so the ingress network on the left and the ingress network on the right and also at the service instances so when the prefixes are injected then the reachability is automatically should be automatically adjusted so the traffic is forced to go into the particular instances in a particular order and BGP MPLSBPNs they have three kind of building blocks to do that it's notion of route target which is basically define the isolation the next hop self basically changes the next hop it means come to me don't go directly from left but go to me and then label tells you so if you reach the service VRF on the compute you have to have a label to tell you go to the first green box not the second one so the label does that for you so basically this flow is the control plane flow so the traffic will flow from left to right but the control plane goes from right to left the same so that's for top service chain then we have the same situation for the lower chain and then traffic steering is basically an ACL which is applied in the ingress not at the egress of the network so as I mentioned to you before the default neutron does not allow you to do things at ingress you have to do things at egress and it breaks a lot of things so here ACL is at the ingress and now we have traffic flowing this way and some other traffic flowing this way so maybe ACL has port 80 traffic goes at the top chain and the non port 80 goes at the bottom chain and then we also have places when we insert load balancing which is basically at the places when we have a scale out services so the scale out is the green as two service so the load balancing is applied at the VRF at the previous hop the same for the lower chain when the load balancing is applied at the VRF instance before the scale out service file and then integration with HA is that it's applied at the places when we have scale out services so basically if there is any failure then the VRF is in form of this failure and then can propagate this information to the upstream hop such that the upstream hop can remove the fail VM from the load balancing set so basically here the building blocks is VRF ACL it's BGP multi path which will do service training for you immediately, you don't have to reinvent anything so applicability to a VPN is obvious I mean I am just listing some you know properties of MPLS BGP VPNs which you can see will be very useful in neutron so it's definition of VPNs is based on its policy based by definition its virtual interface may be a member of different VPNs this extra net construct it's support for traffic filtering it's BGP flow spec they are all standards by the way there is a proven scale so deployment with many millions of routes are common we in our network have multiple millions of routes there is optimal route distribution so the routes don't go to all the compute all the compute or VRFs don't see all the routes only see the routes which they need to see and it's done by the standard called BGP route constraint and support for scalable multicast and there is multi vendor interoperability for at least 10 years so the question to ask is one not to use this technology for the back and technology for modular layer 3 plug-in so this seems to be kind of low hanging fruit which could be used and is used but it is not a part of the core neutron so it's being deployed but not as a part of core neutron and here I want to list some of the standards and open source projects which define or use MPLS, BGP, VPN so it's two RFCs which are the base then there is ITF draft which extends that notion to the end system meaning to the compute then there is a draft which kind of describes it's an informational draft in ITF which defines which describes what I kind of explain here how the service is done and of course there is open stack it's neutron and then there is one open source implementation of this technology which is open control which is compatible with version 2 of neutron API but it needs of course API extensions to implement this technology today so this is I think I am finished, I think it was pretty yes, please no, no the BGP does not go to compute at all the BGP the question was whether the BGP has to go to VNFs I mean, BGP doesn't even have to go to compute but it doesn't go to VNFs for sure because that's a pictorial view so I'm showing here how the traffic flows but if you can see here maybe I go here it goes only the control plane is only touching the VRFs the control plane does not go to the VNFs you see those lines here, I don't have a pointer but if you see the lines RT plus NEX, observe plus labels they exchange between the VRFs running on the compute nodes you can imagine they are replacing OVS so VRF imagine is like OVS and so the information does not go to VNFs VNFs know nothing about this technology at all not necessarily that's not how it is implemented today the BGP is only in the control in the central controller and you don't have to run the BGP down to the compute so for example OpenContrail is using XMPP but it can be other protocol it doesn't have to be XMPP any other questions? what is available for public inspection I think it's here yes, I mean the implementation we have our own internal implementations we do our working on this is not yeah, you know it will be for public use because we are building the cloud based on some of these technologies I mean then you go to yes, I mean I don't know if somebody maybe somebody implemented open open source no, we have not implemented the with the VR no, I mean it kind of replaces the DVR it doesn't DVR is still based on the Linux namespaces this is not this replaces the obvious Linux bridge not in this way I don't know how the service chain will work with DVR I mean somebody would have to demonstrate it I don't know how it will because it still have the issue that DVR router is shared it's not a private router it's a shared router between different virtual network so where would you apply the policy I don't know at the exit of the network hey Maria we can use the mic here too guys just one question are you at all looking at NSH header technology now, some of the announcements have just recently come out so the difference, it's a good question the difference between this and NSH header is that this doesn't require a change in the NFV so NSH header would have to be understood by those services and this is a complicated thing I don't know if you know of any services who understand maybe there are some, but you need it everywhere second issue is that I don't know how NSH is signaled there is talk about signalling but how actually this signaled is not clear so this there is an issue that you may include a metadata in the packet it's in the header but it's better to do it with the IP header than some new header which will introduce another complication in your solution, what would you advocate to associate the VPN with the neutron router construct or associated with the network or what do you suggest advocate in your solution so what I am suggesting is that to use the fully distributed routing so they replace the Linux bridge or VS with fully distributed router not to add a router as a service but to have the routing function as a core part of the neutron it will simplify a lot of things it will help there is an effort in OpenStag which is group-based policy project and how, yes, it's great to have policy but how it's going to be implemented with default neutron it's not clear but with this kind of technology you can implement it very easily so that technology basically does for your routing switching if you want and thus network policy implementation in very clear and clean way isn't OVN trying to do that? yes, so OVN is kind of an example I guess a proof that maybe the OVS has to improve so maybe the suggestion that's what I said that maybe ok, I have to go through all the tics, ok, then maybe that's maybe that's OVN that's how OVN should look like sure I think it's normal questions, thank you


Welcome to the National Archives Catalog. This video contains a series of lessons on searching the catalog. You can start your search here. I've typed George Washington and I can click on the magnifying glass or enter on my keyboard. The search results page gives you so much information it can be overwhelming. Let's examine the page so you can understand what you are seeing. By default, you get to see everything. Across the top of the page, there are five simple filters. Available online. Descriptions with digitized copies of records. Web pages. These are archives.gov web pages and they are not catalog descriptions. Documents. Digitized textual records. Images. These are digitized photographic and graphic images. And videos. Digitized motion picture records. By default, your results are 20 per page, but you can use this drop-down menu to change the number of results you see. Let's look at the filters on the left. These are how you can more precisely refine your results. Refined by data source. 95% of our records have been described at the series level, but not all of those records have been digitized and added to our catalog. In this section, you can see how many records have digital objects. Those are pages that have been digitized. How many have the word that you're searching for, in this case George Washington, but do not have digital images attached to them. And you can see how many web pages on archives.gov include George Washington. You can also refine by level of description. See our video, What is the Catalog, for more information on the hierarchy of records. Please note that digital images will only be attached at the item or file unit level. You can also refine by type of materials. This is very helpful if you know what kind of record you need to find. If you're looking for a letter, select textual records, a poster or a photograph. Select photographs and other graphic materials, and so on down the list. Refined by file format. This is a more advanced way to search for records. Similar to the type of materials filter, if you know the kind of digital file you need, you can select a file format filter. Let's scroll down further and see refined by location. In this filter, we see all of our locations around the country that have records in the catalog having to do with the subject you searched for. It's useful in several ways. You can see where the bulk of the descriptions are. In this case here in archives one textual reference. It also will show you the extent of all the locations that have to do with that subject. And if you're coming in person, it might help determine which location might be a better fit to come and visit. Our final filter is refined by date. This allows you to filter your results by decade. But dates can be deceiving. Let me show you an example of how this is the case. Some descriptions in our catalog have dates that may seem confusing. Look at this series. Case files of pension applications based on service completed in the years 1817 to approximately 1903. You can probably expect to find Civil War service in this series. But the dates for this series are circa 1935 to circa 2002. Doesn't seem to connect, does it? Go over here to the details section. What you'll find is some more information. We'll slide down. And we'll learn that the creator, who is the Department of Veteran Affairs, compiled or maintained the series between the dates 1935 to 2002. That's when they gathered them together and this series was created. But they gathered together records that document the period 1817 to 2002. So be sure to check the dates, date notes, and other information in the details section to make sure you're finding the right kind of records you need. Some series or file units are too large to manually scroll through all the records attached to it. Often, you may know a name or a topic that you'd like to search for within these records. In this case, you can do a search within. If you slide down in the record, you can see that this series has over 1 million file units described in the catalog. In order to search through these 1 million plus records, click on search within the series. You're now in search within mode. In order to search for a specific word, phrase, or name, come to this box here. Remove the wild cards. Add the name or term you're searching for. Click the magnifying glass. And now we're showing that you search for the word Sheridan within this series and you have 91 results. A much smaller group of records from the 1 million records you started with. Our citizen archivists have been hard at work transcribing records. The texts they have transcribed are now part of our search engine. Here's an example in this series, records of divisions 1917 to 1920. These World War I records tell tales from the trenches. You can search within the series for words that may have been transcribed by volunteers. Click on search within the series. Navigate to the text box. Remove those wild cards. Put in a term you want to search. I'm searching for afraid and clicking enter. Now we've searched within these records and found 27 examples where the word afraid is in the record. Here's a quick reference for the most common types of search expressions and the operators that you can use to help you search the catalog. You can use Boolean operators and or not. For example, Harry and Truman will return results with both the term Harry and Truman. Truman not Harry will return the results containing Truman but not including Harry. We find the kind of search we use most often is exact phrase searching using quotation marks. This looks for the exact phrase inside the quotes. The catalog has an advanced search that gives you additional options to narrow down your search. You can find the advanced search to the right of every search box on the homepage and within the catalog at the top of the page. The advanced search page allows you to refine your search parameters. You can use each of the advanced search options alone or you can begin with multiple filters applied. Combine two or more from the same data source or use them in combination with the search term field at the top. To select multiple types within one filter, hold down the control key and click. You can also use this to deselect. You can also move to additional filters and continue using the control key. One of the questions we receive most often is about searching for an individual's name. On our page, National Archives Catalog Guide for Genealogists and Family Historians, we detail how to do a search. While most descriptions in the catalog do not include the names of all individuals found in that record, the National Archives still might have records about the person. Here are some tips for searching for an individual's name. You can search on the person's full name in first name, last name order. You can search on the surname only, you can search on variant spellings of the surname, or on variant spellings of the first name, including Americanized versions. Don't be discouraged if you can't find the person you're looking for with a name search. If you know an individual participated in a particular event, search for that event in the catalog and look within the records for the person you're looking for.


All right. It's two, and the room is already virtually full, so I think we can slowly get started. My name is Benjamin, I'm a developer advocate for the Zephyr project at the Linux foundation, and today I want to share, so yeah, not super happy about the title, but the short story is that I want to share some tips and pointers to things that might help you be more productive when writing embedded software in general, no matter what platform you're using. If you happen to use Zephyr and the Zephyr real-time operating system, the tips might be even more useful, but it turns out that it's actually just talking about some of the things that can help you when it comes to emulating, when it comes to trying to get and to improve your security story, things like that. So yeah, like I said, I'm Benjamin, I've been with the Zephyr project for a few months now, but I've been doing open source and IoT for many years, did a bit at the Eclipse Foundation, I was also part of the Azure IoT product group at Microsoft, I've been hacking around with lots of open source, open hardware stuff, this silly picture, some of you might have seen that before, like during COVID, I ended up tinkering with Arduino's and stuff and building some kind of artificial nose using like TensorFlow running on MCUs, that kind of stuff. But yeah, these days I'm spending a lot of time on Zephyr and like I said, it's a disclaimer and or good news because you don't have to use Zephyr to hopefully take away some interesting tips from this session. Some of the things that are painful whenever you end up writing embedded software and whether it is quite frankly as a hobbyist or more like in a more professional capacity if you're interested in like building actual end user products, there's many pain points but some of them are listed here, hardware can be a pain because like it's difficult to debug, it's difficult to have like efficient round trips when it comes to testing your software plus hardware might not even be available these days and you need to be able to maybe jump from one architecture to the other or from one silicon vendor to the other because the sensor or the piece of equipment that you were planning on getting has all of a sudden years of lead time because COVID and like silicon shortage have messed up a lot of things there. Of course resources are limited so you need at some point some tools, some ways to make the best of the kind of resources you have so I'm going to try and talk about some of the tools that can help their sometimes embedded is lagging behind in terms of like getting to a point where you do at least some kind of testing of the of your code ideally getting to the point where you do even like continuous integration maybe continuous delivery but like historically this hasn't necessarily been a practice necessarily implemented in the embedded world so I'm going to show also a few things there managing the provenance of your software especially if you end up putting some open source bits and some third party libraries into your embedded system how can you manage that efficiently and security of course like if you care about IOT of course the the S in IOT stands for security right we all know that and again some tools there. Starting with the hardware one thing that I think was really interesting in this survey that Avnet so the big electronic components supplier did think they did that about a year and a half ago a survey of their customers and their community but it's probably would probably be the same findings today the chip shortage chip shortage really changed in a big way the way people build their embedded products and embedded designs and looking at some of the insights there but like people if effectively they say that nowadays due to longer lead times which are not expected to improve by the way people like the way they pick up their their parts for their design is is pretty much driven by the availability rather than the preference and basically what that also means is that when you get started building a new solution a new product you might not even have the hardware at hand at all in the first place and or whatever hardware you pick up for your initial V1 your initial POC might be completely different from what you get eventually and what you manage to secure for for for going production so this is also a reasonably old screenshot but I could have updated it and I'm pretty sure I would have found occurrences of like at some point in time last year I was interested in getting myself this particular developer kit only to realize that the lead time was over a year which is that's and that's not not the only one right so that's but it could very well be that this is like the perfect solution for my particular idea my particular design and I really want to get started how can it still do that well over the past few years there's been lots of tools many of them actually being being open source and or reasonably open source like most of most of them providing being being made available in open source and I want to talk about some of them and show you some of the things that you may not know and I see a lot of people taking pictures so that so it's probably a good sign that there's some new new names maybe for for some of you but yeah like simulating your and emulating your microcontroller is one thing and that's I mean there's many ways to look at it I could have put maybe QMU on that list but sometimes you need to do more when you build some kind of IoT device there will be sensors involved how do you emulate your sensors how do you emulate the connection to whatever whatever it is you use for communicating with the outside outside world whether it is Wi-Fi whether it is Bluetooth what can be done there so in no particular order showing a bit of the tools so this one might throw some people off because this will feel very maker may very DIY oriented except that it's actually really powerful it's called it's called a walkway and should you be targeting arm silicon and or expressive like ESP32 kind of kind of silicon you will usually get pretty far actually with with walkway in terms of testing not only your embedded software but potentially also the interaction with sensors and or actuators displays sort of stuff so really quickly short demo of what it means from a sort of a general standpoint and as well as what would it mean if I were to try and use it for my Zephyr embedded development so let's say I am targeting some kind of ESP32 thingy again right from my web browser and or this could be something also integrated in an IDE such as VS code and maybe a bunch of others there's like there's APIs to do it more locally if you don't want or don't you don't feel comfortable running it from your browser but essentially left-hand side this would be in this particular case an Arduino sort of Arduino based kind of embedded application I can actually run it against the fully simulated hardware all the way to the point which I mean it might be small for some of you folks I'm going to try and make it slightly bigger what we see here on the simulated or emulated display is the result of our embedded app that's running and we kind of guess that it's doing not only like display and GUI things but it's also simulating and emulating connection to a virtual Wi-Fi so like the effectively if we were to look at the code on the left-hand side like there's effectively connection to SSID blah blah blah which is fully emulated in the browser and of course like I could be wiring up more sensors like here we have a push button and whatnot I could do I could be doing more than that and or one thing that I could do as well is opening up the whoops the the palette let me just try and find the shortcut actually I'm confused there we go the yeah the palette the command palette similar to what I would have in VS code and I will just look at and this is small so I'm going to read read it out loud but upload firmware and start simulation essentially what I want to do here is take a firmware that I have already built on my machine which happens to be using zephyr and I think this is going to be just like blinking on led so but just for the sake of the demo let's see like this is exactly the same elf that I would be deploying on my real esp32 except that here well it's running on emulated emulated hardware and we see the the blue led blinking or pulsating and we see in the shell we have the the the zephyr prompt I mean this is one way to to to emulate things and I I kind of like the the way how easy it is to do things like simulate the wi-fi connection it might not be your thing if you you're doing something more more complex than just a couple sensors and then things like that but it's it can take you pretty far something else is so yeah that was for the demo another really interesting tool open source it's called the re-node again if you're targeting all sorts of arm cortex or arm whatever really and a bunch of others it can also take you really really far so this one will work will run fully locally on your machine although you can also use it in CIECD as we will see later if you want to do some kind of like testing and things like that you can also run it in like a docker container sort of thing but yeah re-node is also pretty cool I have my re-node console right here which I will make as big as I can maybe yeah so you have it you have like a common line interface where you can instantiate machines like the description of what is the kind of board that you are targeting like is so in my case I will I already have the description of the scm32 defkit that I am targeting and then I want to deploy an app on top of on top of it and this is going to fully emulate the hardware like this is really so what we see here is one of the code samples that you would get from zephyr zephyr does many things but one thing that it does is that it provides you with the pre-integration with the LVGL embedded graphical user interface framework and so this is the sample of like using LVGL to do UI stuff to the point where I actually have like integration with my with an emulated touchpad I have of course the screen as well and I could I mean I could do many things with as if I were to really interact with the with the physical hardware and one thing that I also want to call out because I think it's pretty powerful to sort of modernize embedded development practices is the frame buffer that you see here that's effectively rendering some kind of GUI you can fully interact with it through an API including using the the testing framework that we know interfaces with because that's the robot framework and you can do things like I'm going to like run my my built embedded application out of my CICD pipeline like whenever someone does a commit I deploy the app on the emulated firmware I wait 10 seconds I take a screen capture and I compare it pixel by pixel with a reference image right and that way I test whether there's been regressions or not in my UI this is the kind of thing that that I mean that we know it makes possible and as of actually the latest release of Zephyr the integration with the robot framework and like making it easy for people to write the kind of tests that I just described is effectively supported upstream where am I wrong chrome where is my actual here it is something else that's this one is actually really really new but it's and it's also kind of cloud-based it's something that ARM provides and that that that runs in in the cloud and I actually only tested it and tried it myself a couple days ago but I thought it was worth mentioning because it happens to just work and it's kind of like similar in terms of experience to what some of the things I've shown with with zephyr sorry with walk we all with re node but essentially and I think I might have the demo yeah like right here right in my browser again like I would be simulating some kind of stm32 defkit and I would have access to the the shell I mean like whatever my zephyr application is doing I can interact with it through the console if it exposes some kind of console interface I can interact with the simulated fake environmental sensors so like I want to pretend that the temperature is 35 Celsius whatever this would be all running on on simulated silicon so that's yeah all those tools I mean some of them will one way or the other they will be frustrating and or they will not if like effectively behave 100% like the actual silicon but they can save you a lot of times and or helps you test a few things that you wouldn't have been able to test as easily potentially a few words on the inside that when you deal with embedded it's sometimes hard to like really optimize your application sometimes well you really want to make sure that it actually fits in what you have and or sometimes it might be more for cost efficiency like you want to effectively make your app even smaller and only to realize that hey you know what now that I've made it smaller I can target maybe a slightly smaller SOC I don't need as much memory and I can save a few cents here and there on my bomb so that could be yeah that could be the kind of things that you want to look at one tool that's really well integrated with and that works just out of the box when you're using zephyr but pretty sure you would be able to use it just the same with any other RTOS really is a pen cover and it goes pretty far in terms of providing you stats with regards to how your binaries look like in terms of like what is the the size code wise what is the memory that your code is going to use what is the what is going to be the worst case scenario in terms of how much memory you're you're going to use on your stack and sort of stuff so just yeah main point really of my talk is to leave you with a bunch of pointers many of the things that I'm mentioning are way more way better explained probably in the documentation but now at least you know they exist and so for using something like pen cover it's really straightforward you just build your app and making sure you turn on the compile flag config stack usage and then you just run the thing and just really briefly so we're done with a re-note now yeah here so building my app so whatever is zephyr hello world and I just want to show you some of the and this is really maybe familiar to some of you but sort of the the thought process when it comes to using those kind of tools I just built the thing and then now I ran the pen cover so it's already integrated within in the zephyr build system like and effectively my browser just already opened up with pen cover enabled one thing that I could use the tool for is I mean I just ran a hello world it turns out this hello world is doing some basic a printing hello world on the console eventually my real application going production like in and building a real end user product I might want to turn off any sorts of communication on the serial and on the uart all together and here with the tool I can really easily navigate to all the bits and all the all the all the modules that make up my app and I can really easily realize that a driver wise the serial thing it's actually take eating up one port for 1.4 case in terms of like code at least I know that whenever I want to go a smaller that's certainly one big area of improvement right and I can also like dig deeper into every pretty much every every module and see like what's the stack usage and things like that and I think it can it can really help and also for security reasons actually we're going to see that turning off and removing some some unused features and or areas of your of your embedded code might might be useful as well but yeah that's for pen cover if you don't care about the sort of the having something as detailed like you can also just rely on the more simplified reports that you can also get out of the box with the with the Zephyr build system things like getting overall RAM usage or RAM usage is also something that you can get through those options. Another thing that can help with regards to optimization and or making the best of whatever resources you have available is there is a tool that you may or may not know exist in Zephyr but I didn't know initially and I find it really convenient which effectively you turn on and it will automatically every 10 seconds or so it will look at how full the the stack for each thread ever ever was right and just telling you that hey you feel you've been allocating this amount of memory to this background thread that's going to acquire sensor data but you probably don't need all that much because looking at the actual execution you never used all all the memory so don't and make make it smaller right and so the this one actually I can also show really quickly in in in ReNode like I'm doing demos with everything simulated here I guess but yeah I have another sample which is yeah thread analyzer so launching an emulated application which is again a hello world with a bunch of threads and like I said every few seconds it would dump it would give you information with regards to A this particular thread used like 29 percent like thread A used 29 percent out of the one K that was allocated to it so maybe like if stays the same over the course of the entire life cycle of the application maybe that's that's too much and you can cut that in half just give it give leave a bit for for safety but that that's I mean that's super easy to turn on in the in the Zephyr build and just enable the feature similarly something that super easy to enable I mean oftentimes it would actually be there by default if you ran some of the existing code samples etc is the Zephyr shell just want to make sure that I call out that it's it's full of hidden gems sometimes in terms of really helping you so of course it's gonna make during your sort of prototyping phase it's gonna make your app slightly bigger but it's gonna also make your life much much easier in terms of yeah I have this this driver this sensor this i2c sensor for which I'm building a driver and my driver kind of doesn't work well you're gonna probably troubleshoot what's going on by just like interacting with your i2c registers like manually through the through the Zephyr shell or if it's SPI you do it similarly or you interact with the ADCs or if you have enabled any kind of like file system you can interact with the file system you have Wi-Fi in your design in your stack then well you can actually discover the SSIDs figure out your signal strength etc etc and it's extensible as well and if you are to build your own app it might be in addition to logging and then to debugging you might actually want to come up with your own commands so that you can make make your life easier there so that's yeah I guess that's another one something else CICD how to maybe again modernize embedded development there one thing that I want to call out because I think it's a really good example of how to get started with it is the example application that the Zephyr project is maintaining and so one of the things this app helps you do is sort of learn a lot about the best practices in terms of how should you organize your your source code and your source tree that yeah what's the best approach to have if you have your own driver like where should you put it and something else that it does is that it shows you how using GitHub actions but really it doesn't matter what what matters is that it shows you the few lines of script of almost if you will to fire up a docker container set up the Zephyr build environment Zephyr SDK Zephyr to change some one dots and then build the app potentially run the test sheets that have that have been that are part of the of the repo for this app and then get a result right build successful build failed test successful test failed so it's I mean I would really recommend that if you want to get started with Zephyr you start essentially with this particular application and then you start tweaking and changing it towards your your actual code but yeah what essentially that means is that if I were to go in the GitHub actions section I can I mean I can look back in time of all my like previous builds whether they were successful or not I can get access to the test results download them and I can even get to the point where I can download the pre-built firmware like that was entirely ran in in a CICD on a CICD machine independently from my own local desktop and this particular firmware I can try and test on the real thing the real hardware or maybe on ReNode and things like that so that's yeah I mean it's there there's yeah just just look at the other code samples and things like that to start maybe improving the way you're doing things something else so it might be I mean the more we go into the presentation the less I'm happy with the title that I give to the presentation in the first place it doesn't have to do with necessary productivity it's more about like you might not know these kind of tools exist and they might save you a lot of time and potentially money when you're doing something in a in a really in a more professional capacity I don't know if you're aware or familiar with the notion of S-bomb of course we talk a lot about bombs in the hardware world but like when you ship a product yes it has hardware but it's also pulling in lots of software components like I said earlier lots of them probably are open source in in in one way or the other tracking the provenance and like keeping track of sort of the manifest of what it is that you put in a particular revision of your of your product might be might be a problem there are tools and there are standards to do that like the spdx standard helps really sort of annotate and decorate open source code with all the metadata that helps track the provenance like this particular source file that ended up being compiled and built and linked into your application while it comes from probably from some kind of github repo so it has a sha associated to it so this is something that can be captured right and so that's something that actually is really easy to capture when you build an app built on zephyr you just again have to rely and leverage the built in built build system to just like do as instructed here which is whenever you prepare your you prepare a build you just need to initiate the workspace so that so as it has the spdx things in it and then you build and then you get a report and I want to show you really really quickly what what's what's the output there so killing the the pen cover thing just just showing you that it's really just taking you seconds most of the time to do to do this stuff so we yeah so I'm going to initiate the spdx thing build to do you build the same sample as earlier there we go so I built some kind of some kind of hello world but now in addition to my binaries and to my my actual application I also have some manifests that could be useful further down the road because they actually captured a lot of information which I mean I there's a tool that I can use to visualize it yeah let's see it's not there I think I screwed up the first step didn't I I mean it's all right I don't have to do this this particular demo let's see train again I'm doing something obviously wrong there yeah whatever the the idea is that in addition to your binary you would have captured in a manifest and in a very standard actually format you have the list of all the individual source files that ended up being making it into your into your application and whenever like six months down the road there is a cv and a vulnerability report for a particular open source component that you know that you're using you can know whether you're impacted or not because depending on you might not be shipping the exact same version but through all the metadata that's being captured there this is not something that you can you can be aware of and yeah last but not least things to help you build more secure so I'm like full disclaimer I'm no security expert but I like to rely on whatever tool I can find out there to help me at least be more aware of things that I could do better to at least improve my my my security posture when it comes to securing some kind of IoT or embedded device well it's essentially to over maybe over simplified things but usually one thing that you want to do before you effectively go production is make sure that you've disabled all the things that can make your device and your solution less secure like if during prototyping you've been using like lots of logging and you've been outputting lots of information on the on the console and things like that this is probably all those and you have like compilation like debugging symbols enabled and things like that you want to turn that off and there might be and again like I will focus on zephyr but I'm pretty sure it's the same in other places there might be features available to you in the framework and in the os that may make things more and more secure like enforcing like memory protection features hardware protections whatever so there is a tool in zephyr that maybe people don't know exists but that I find really really interesting to to help you sort of realize what it is that you might be doing wrong or that you might want to have a closer look at this one is also super simple to trigger just run your build like just build the hardened config target and it will give you lots of information with regards to things that you may not want to you may want to stop using for your end end product and something as simple as a config boot banner like if even if you're not familiar with zephyr I can quickly tell you what that is it's the kind of prompt that you would get first time you you boot the system if there is some kind of serial output it would give you like the the actual exact version of zephyr you're running this might expose some this is useful info for for a potential add occur because they they know that you might be actually running some kind of vulnerable version of zephyr or what not and I mean similarly like are you running are you using the console are you logging are you do you have the build output stripped in my case I don't but what the tool is recommending is that I do right I should probably be stripping the beginning information and it would also warn you if you are using experimental features in the kernel like you you might have very good reasons to do that but at least it's yeah it's it's probably good to for you to double think about that and make sure that it's really intentional whenever you're running that in production and with that I think I left actually plenty of time for questions some pointers there's many ways for you to learn more and to get involved but first link will give you that's here for what is worth but all the the binaries that I run against work we against re node I put them there just for you to just realize that yeah whatever existing binary can be easily floated around in in different emulation tools and it should essentially just work out of the box the community is really really active on discord so if following this talk or any talk really this week there's more that you want to discuss with the community please join the discord channel and yeah everything else did the usual contact info and with that I will yeah take questions if there's any and if there's anyone from the project that feels that there were some useful tips that I forgot we can also talk about that all right yeah just shout the question and I will repeat it oh there's a mic even better uh yes I think it's working oh it's working so uh so can we get this presentation somehow yes I should have probably uploaded it in the system I haven't but I will yeah just like in the next hour or so I will make sure that the PDF is there yes yeah that's the wall point like there's tons of pointers you you rather have them yes thank you there was one here thread you know you mentioned the thread analyzer and I've worked with it a little bit but what I'm missing in it and maybe there's some configuration to add that it only prints the the data once so if I have some application that's running and later on maybe I connect to do some sampling or something else and I want to see these threads I don't get that data anymore so I think it's by default it's like every 10 seconds or so and or you can trigger it manually but like just look for the k-config options around around it like it's uh yeah it should it should be more than once right otherwise it's not that useful because you yeah yes all right whether questions online I guess not I didn't see any let me double check before all right well with that thank you for your attention feel free to reach me online and I will post a slide yes


Now, right now, very powerful people in the dunya are trying to create a new world religion by combining all three Abrahamic religions. This is a major movement right now. The name of this new religion is apparently Abrahamiyah. And it will be an amalgamation of the core principles of Judaism, Christianity, and Islam. Such syncretism was tried in the past. The founder of Sikhism tried to combine Islam and Hinduism. There was a Mughal king in India named Akbar in the 16th century who made this synchronic religion, Deen Ilahi, it failed miserably. The Prophet Sallallahu Alaihi Wasallam, he warned us about these types of people. And we should pay attention. The principles and foundations of our theology and morality are clear. We do not allow ourselves, do not allow ourselves to be confused by these Dajalic agents who introduced the Shubu hat. So I don't know what it seems to me that part of the rationale behind creating this new syncretistic Abrahamic religion in the singular under the guise of tolerance and unity and kindness is to convince the Muslims who have already embraced this new religion that this coming imposter Messiah will be their Messiah. He will be the Messiah of the Abrahamic religion. Allahu Anam, Allahu Musta'an.


How do you think the Nestor Cortez branding has changed after the mustache? Night and day, night and day. I remember in 19 I was seen shaving here in 20 I was with Seattle had a full beard and it wasn't until 21 where I remember being in AAA and kind of being rebels down there I'm like we're just gonna leave the mustache and it's stuck and ever since that ever since that time it's changed me completely how the fans view me they obviously put some fun into it and put it say that I'm Mario so I think it's pretty cool to be able to interact with the fans and and and relate to them