Biomolecule, a biomolecule or biological molecule is a loosely used term for molecules and ions that are present in organisms, essential to some typically biological process such as cell division, morphogenesis, or development. These include large macromolecules or polyanion such as proteins, carbohydrates, lipids, and nucleic acids, as well as small molecules such as primary metabolites, secondary metabolites, and natural products. The more general named for this class of material is biological materials. Biomolecules are usually endogenous but may also be exogenous. For example, pharmaceutical drugs may be natural products or semi-synthetic biopharmaceuticals per day may be totally synthetic. Biology and its subsets of biochemistry and molecular biology study biomolecules and their reactions. Biomolecules are organic compounds and just for elements oxygen, carbon, hydrogen, and nitrogen make up 96% of the human body's mass. But many other elements such as the various biometals are present in small amounts. The uniformity of specific types of molecules, the biomolecules and of some metabolic pathways as invariant features between the diversity of life forms is called biochemical universals or theory of material. Unity of the living being is a unifying concept in biology, along with self-theory and evolution theory.


So my project explores basically the border of physical and digital really that kind of space where it's not absolutely clear whether it is physical or digital and I use scanners for this. So for me the project it's really an evolution of let's say long term development. So it's a continuation but at the same time some of the approaches they were sitting in my folder for a very long time and I didn't know exactly what to do with them. I was always aware there were some interesting techniques that I was experimenting with but now a few months ago I took them and started to explore new directions with them and it also kind of blended and merged with the projects based on real-time 3D scanning for virtual reality. My installation it's fairly complex technically I'll be using maybe seven 4D LiDAR sensors, many computers, many graphic cards and it's really a challenge to put all this together and make it work because with these technologies it's not really plug-and-play situation. It's stressful but at the same time I'm looking forward to see the final complex thing, the final build together. So yeah it's most let's say technical challenges such as optimization of the graphical performance of my system because I'm using hundreds of thousands of spatially distributed pixels every 30 times a second from multiple sensors and the graphical performance when you interpret such data as lines, cubes in space with maybe some transparencies and different type of graphical relationship it's fairly complex and needs a lot of computing power. But there is also let's say conceptual and theoretical challenges in both installation or both let's say approaches the four-dimensional real-time scanning as well as my portraits to kind of resolve the relationship of detail into or with let's say the system itself how can I present with the scans that have extreme resolution over 20,000 pixels how do I present the detail or if I even can present the detail in these kind of digital images. So there are different kind of questions I'm dealing with and I think ultimately the answer will come just before the exhibition opening as I see the things finally set up in space. There will be basically three installations kind of linked together so the first one will be the new portraits that I've been working on recently and that will simply be just a portrait screen on the wall. So this screen wall installation basically takes four dimensions and turns it into orthographical two-dimensional representation of that reality and the third installation will be virtual reality set up again using the lighter sensors to basically turn the physical space into its digital version. So if you would have the VR on and you would look at your hands they will still be there but they will be in this liquid situation where these displacements and deformations and transformations and layering turn this digital version of reality into let's say a representation of my expression of this interpretation. I would like to invite the audience to really explore their relationship with space and time through my installation because everyone has different views, different perspectives but my installation really invites you to explore your own relationship to movement, to delay, to stretch of time to the flux of space and time so I would like you to really explore your body in that setup not only your body but also how your perception of time evolves throughout the installation as it will also capture time in interesting ways. So I invite you to come to Pragovka on the 17th of June and explore my installation called the inverse in multiple dimensions.


today about my project called Edge Elixir, which is distributed graph processing in Elixir. I first touched Elixir code maybe six months ago on an unrelated Phoenix project and now I'm standing here, so I guess I'm all in on Elixir. So today with this project I wanted to really dive in and learn more about airline OTP, the virtual machine, some of Elixir's unique features. So I worked with graph processing systems for a few years and it's something I thought would translate really well into Elixir. So for this talk though I won't assume you have any background knowledge on graphs or distributed systems or different Elixir features, I'll explain everything as I go along. And the next goal that I sort of had for this talk was to start talking a bit more about using Elixir for distributed data processing. I come from JVM, Java, Hadoop, big data world and we never talk about airline. Maybe it's time to start talking about airline for big data in Elixir.  This is a graph talk so maybe it'll inspire you to start using some graphs in your work. I love graphs and I'm going to try to convince you that you should love graphs too. And then I'll talk about distributed graph processing once we have big enough graphs in our workload, how we can scale up our processing to match that. And that's where the Pregel model comes in and there's a few other models and existing frameworks that were built on top of this. Again mostly in the JVM world. But I think Elixir makes a lot of sense for this and that's why I started this Edge Elixir project and I'll show you how to use that and then dive into how I implemented it. And then take your feedback. I know there's some people in this room who will instantly find some more Elixir-y ways to do some of the stuff that I've done so I'm definitely open to hearing about that. Just so we start off all on the same page here, I think it's kind of obvious to everybody but I'm talking about the kind of graph where you have a representation of some objects and the relationships to each other, not a graph where you plot something over time. So social graph is what comes to mind for most people. And in a social graph you have vertices, a vertex which represents a person and then an edge, also called an arc sometimes, I'll just say edge, that represents the relationships that those people have so for example friendship in a social network. And to be clear, vertex is sometimes called a node in a graph but in this talk since we're talking about distributed systems, a node refers to a computer running the Erlang VM only. And graphs can also have weights applied to their vertices and edges and they can be directed or undirected so following the path of an edge could go one way or it could go both ways. And that's important for certain types of graph algorithms. And graphs are awesome because we can model a lot of different problems as a graph. Social network obviously pops to mind immediately. The web graph, there's a lot of stuff in science that uses graph models. You can solve constraint satisfaction problems using graphs. I mean the list just goes on and on. And once we model our problem as a graph we can apply all kinds of well understood machinery to these graphs. So you can look at the topology of the graph, you can check distances within the graph, you can color the graph to solve different kinds of problems, you can measure centrality. So how many, for example, edges go through one person to find out if that person is important within the network. You can cluster the graph to pull out different communities of interest. And once you have this, your problem model is a graph and you have all this machinery and it makes solving problems really intuitive and I think really satisfying. But our graphs can easily become too big for one computer, could be too big for the RAM, maybe too big for the disk, or it's just too slow, you're doing something that's CPU bound and you want to do it faster. You want to scale it up, so of course the first step is multi-core, but then you need to think about distributed computing clusters. So as our problem size grows we can throw more computing power at it. And so in Elixir I find everybody's talking about distributed chat apps and that's cool, but it's kind of easy. So some classes of problems are really easy to parallelize or distribute. If the node doesn't need to know anything about any other node to do its job, that's the best. So with a graph it's not immediately obvious how you can split your graph up across a computer cluster while keeping communication overhead low. So traveling over the network is infinitely slower than accessing RAM and you want to avoid that. And so one of the big models for distributed graph processing, there are others, came out of Google years ago called Prego and it does graph distribution by message passing and it had a few different goals. The biggest one I think is that it should have one system for just about any graph algorithm. You have an organization as big as Google, everybody's writing a different graph algorithm. You can't rewrite the entire stack every time. So they came up with a programming model, it's known as think like a vertex, where you implement one function and you see the view as if you were a vertex and that function is applied to every vertex in the graph and I'll go over that. And the next goal of course is that it should be fault tolerant in a big cluster, nodes are going to be dropping out and you need to be able to recover from that and it should be scalable of course. I ripped this diagram off from the giraffe which is a framework for graph processing from their docs but I think it does a good job of explaining how Prego works. So you have this compute method and you can apply it to, or it gets applied to every vertex in your graph. Here we have a really simple graph, just three vertices. You can pretend there's split over the network over a cluster somehow and maybe just three different computers. And you want to find out based on the weights that are applied to those edges, one and three, what the weight is to go from the first node to the last node. So it's single source shortest path, you can say that four times fast. So at the first step you see this vertex and you see its neighbors in your function and you say okay, the weight to my neighbor is one and then every vertex does that and it's broken up into synchronization barriers that they call super steps. So across the entire graph this is done for every vertex and then they accumulate messages that they want to send to other vertices. But these messages don't get sent until every vertex has been computed and then you hit a synchronization barrier and then you send all the messages along. And so that the next vertex you get an incoming message that its neighbors weight was one and you keep doing this until some defined endpoint and you get that the weight from your source vertex to your destination vertex is four. It takes a little bit to wrap your head around what's going on here. This is just one algorithm. You can basically do any graph algorithm using this model and a lot have been implemented already for you to look at if you want to start doing this. And there's a few open source frameworks that use this model. The most popular are Apache Giraffe and GraphX which is Apache as well. And there again JVM-based Java or Scala. And they're built on top of Hadoop, either Hadoop MapReduce or Yarn or Apache Spark. And these are basically distributed systems frameworks for JVM. And both of these projects I've used Giraffe more than GraphX but they're both mature projects. Full featured, deployed at scale in huge organizations for huge graphs but they're also terrifying. Giraffe itself just the core giraffe is like 50,000, 60,000 lines of code. And they're complicated to deploy and configure. I've spent more time looking at XML configuration than I care to think about. And so it is a sort of a theme in big data communities where we're all talking about building on top of Hadoop and Spark and all of this and we almost never talk about Erlang and Erlang OTP and all the experience they have building distributed systems. And I'm not going to derive these projects. They're well engineered and they're incredible projects. But when I first learned about Elixir and Erlang OTP, this is the best Disney reaction gift I could find. I know that either Disney or my Hadoop friends are going to yell at me for that. So yeah, I think Elixir just works really well for building this kind of problem. The Erlang VM and the Elixir language and standard libraries have just about everything we need to implement really concisely out of the box. We don't need to build a lot at all. And Erlang OTP has decades of distributed computing and knowledge baked into it. So yeah, let's use that. So the toolbox that we're going to use to build this project out, first of all, we have Digraph which is in the Erlang standard library. It's a graph representation that's already built in. It's backed by ETS which is an in-memory concurrent data store. And you can build a mutable graph right away. You don't need to think about building how to store a graph in memory. It's already there. Next we're going to use global from Erlang which is just global name registration across the entire cluster. So when you have a fully connected cluster in Erlang, you can call things on any node. This has some scalability issues that I've just become aware of for larger clusters but as I understand, OTP's team is working on. Main server, so that's for message passing and holding state. And then in elixir side of things, we're going to use behaviors and protocols to build extensible graph input and output. So this is sort of what the application, the OTP app looks like. So on every node, you have this edge elixir app running and connected to it is the whole graph persistence app on ETS and digraph. And then underneath that, we have a gen server which I just called the super state supervisor and it manages the synchronization barrier and it also spins up the compute function for every vertex in its vertices that it's responsible for. I may have forgot to mention that the graph is split according to some partitioning scheme that you can choose so you can split the graph up across your cluster. So to build an edge elixir based app, first of all, just in mix we pull in the app and start it up. There's some configuration to do. All of these have default values but I'll just show them here. So the partition scheme and the graph format are how you choose how to split the graph up over the cluster. These are based on a behavior and there's some default implementations included in the library, just really simple ones. So partition scheme called edge cut, basically it's just, I'll show you the algorithm later, but it just cuts the edges and puts vertices on each cluster equally. And then the graph format, so there's a million graph format specifications. This is just comma separated source vertex, destination vertex, and that forms an edge. Just a CSV, basically. And then we have a thing called max super steps which some algorithms might need to use where you want to finish up your job after a certain number of iterations. And then here's an example of computing page rank on a graph in edge elixir. So edge elixir is a behavior. You use it and it expects as an option when you pull it in a graph input. And I implemented this as a protocol. Graph output as well, but I don't show it here. Just use the default to print to standard out. So this is a protocol. It's a few built in. There's file. So you can load a graph that's just sitting on the disk. There's also URL, so you could load a graph that's sitting on a distributed file system like HDFS, for example. And so why did I do this as a protocol when I did the rest of the configuration as a behavior? Well, you can imagine maybe you have a string or a binary in your elixir code somewhere else and you could transform that into a graph. So you just include it directly as graph input and implement a protocol implementation for it and it'll dispatch to that implementation without any other work. So I think that's kind of nice. And then the edge elixir behavior expects you to implement a compute function. It takes three parameters, the vertex that you're computing on, any incoming messages to that vertex and some options like the graph size and things that you might need to use in your algorithm. And to compute page rank, this is just as simple as it is. This is pulled directly from the paper. You can just sum up all of your incoming messages and basically, if you don't know what page rank is, it sort of ranks your importance in the graph based on how important the people are that you're connected to. So we basically apply some coefficients to our incoming importance or incoming page ranks and then we update that vertex's value using update vertex which is part of the public API for this library. And then we send a message out to all of our neighbors saying what our new page rank is divided by how many neighbors we have.  So how to run it. There's other ways to do this but for the simplest is just to use IEX and pass in an Erlang configuration and in the Erlang configuration you can say which node should be in your cluster and you run this on every node, give it a name and Erlang will wait until every node has started before it runs your program. So it's completely distributed. In other packages you usually have a head node that has to be live to spin up the other nodes but this is completely distributed so it's a nice advantage and it's really simple just from a couple lines of configuration for the Erlang VM. So how does the library work? As I mentioned earlier there's graph input and output. So first of all before we do anything else we read the graph in and your graph could be stored anywhere, it could be in any format so we have graph source and graph format and they don't need to know anything about each other you can implement these behaviors and say you have some graph stored on some crazy file system in some crazy format you can implement that and then you partition the graph across your cluster. The default one that's included is just edge cut and it's vertex ID, mod number of nodes so it just equally spreads your graph out across your cluster. And then if your vertex belongs on the current node that's running the graph reading code it just stores it into the digraph. So the hardest part of this is the distributed sync barrier. So OTP doesn't really have anything exactly like this built in it usually assumes that a node can do whatever it wants and at any time without worrying about keeping in sync with other nodes but for this you need to wait for every single node for example to finish loading the graph before you can do the next thing or you need to wait for every node to finish the current super step before you can move on to the next super step. And so you need a distributed synchronization barrier. Global has a global lock system that could have worked it's not exactly what we wanted because it's assuming that you don't you know it's for locking data so it doesn't have race conditions if you're modifying something but we could have probably corralled that to work to do this but I thought just a really simple gen server could do the trick with the assumption that there are no nodes coming online after you start your processing. Another assumption of course is that the graph is static it's not going to change during the processing. And so when we start up this gen server the name there is a global name so that's registered across the entire cluster and we started up with a barrier count of zero and in our code we call the barrier function and then it does this multi-call, gen server multi-call which is a synchronous call to every barrier in the callback, barrier callback and what we do is we just see if the we increment the barrier count and if it's equal to the number of nodes that are in our cluster then we know that every node is hit the barrier and we can do something like a new super step or after the graph has been loaded if it hasn't then we just return and so this works because multi-call is synchronous it waits for every single node to respond and right here we just say okay if we've hit the barrier from every node in our cluster then we can do something together in lockstep every node in your cluster and then the next part of this is message passing and of course that's sort of just what gen server is so we have a public API that you can call from the compute function called message neighbors and you can send messages to all of that vertexes neighbors or you can send a message to a specific vertex if you want when it receives a message in the gen server it checks the partition that that node resides on because we have access to this partitioning function and it sends it to the correct node in your cluster so we're trying to reduce network overhead there and then the messages are just stored in the gen server state until we hit the next super step and then when we run compute for every vertex on that super step we just pass in the messages as part of an argument for that compute function and so finally the last step is to actually run compute on every vertex in your in your graph and for this we're just going to spawn the compute function locally so you know even if we have a huge graph we just throw all these functions out to spawn and let the VM handle the scheduling it'll automatically you know put everything on your multi-core CPU and since each compute function doesn't talk to another compute function it just sends messages back up to its supervisor there's no worried about when a computer is going to run you just you know unleash them all and let the VM handle it and then when we hit the sync barrier then the messages get passed to the next round of compute functions so this is this slide is really short just because this part of the the job which is actually you know one of the harder parts to implement in a lot of other systems is just really simple I never had a chance to run any benchmarks but there's been a lot written about how fast you can spawn a process in elixir and it's a lot faster than booting up JVM and your entire app stack so I there's a few things I didn't get a chance to to finish in this project so one of the the things that prego implements is as an aggregation so you can keep track of some global state during your your computation and a lot of graph algorithms use that but it's it's really easy it's just that's exactly what gen server or agent is for and there's a few other functions that you could implement in the behavior so one is if you try to hit a vertex that just has dangling edges like the edges the the destination nodes are all on another computer some algorithms need if this need this function to do something with that vertex like delete it and then the biggest one is really better fall tolerance so when you boot it up using the run method that I showed earlier it waits for every node to come online and then it starts your task your your app but we can improve so if a node drops out during one of the super steps for example with some more advanced VM configuration you could restart the entire thing but you'd be starting from scratch so what we want to do is have at every super step flush the the digraph state out to disk or something just so you can start again from that super step if something bad happens that's what pregels does for its fall tolerance but I haven't implemented that yet so that's that's my talk I put everything up on this website edgelixer.net you can grab the code I think I haven't I haven't tagged a release yet that's there's I think the build is broken but very soon you can you can use it and I'm definitely open to questions and feedback and pull requests and anything else hi Nathan can we see what kind of graphs this code produces well it doesn't produce like a what what's the output of this the output yeah so the output right now is just a digraph so you don't get a visualization of the graph you'd have to do that in another system what you get is just like the so when you configure it one of the configuration options that I didn't show it here is graph output right now the only thing I have implemented is standard out so it just spits the graph out to the command line what you get during the computation process is basically you're updating the values that are attached to each vertex in each edge so for the page rank example each value would start at zero for or or some other value and at the end of the process each value would be the page rank for that node if you wanted to you could implement the protocol for the output and write it back to disk or pass it on to some other program to visualize it or something like that does that answer your question so I have two questions the first one is so a couple of years ago three four I did some work doing simulations of distributed distributed graph algorithms and one reason I didn't go with using or lying to run the simulations was difficulty of generating quality graphs like just random graphs like I want to put some random small world graph for example you know I was just getting all those out of i-graph so what would what what's the solution from your point of view for like generating some random graphs for some good graphs for input into your into your system is there something in or lying that does that I haven't looked at that so all the graphs that I tested on are either public networks like the karate club network and you can grab a bunch from the internet on different social networks so yeah I haven't looked at generating graphs I know that you know that's something that's been done a lot in r with ERGM and i-graph of course I think it's a totally different problem almost so yeah I haven't really looked at it but necessary to run the yeah definitely I don't assume where you're getting these graphs from and the second question is one of the things that I was looking at for the building the distributed algorithms was using finite state kind of an internal finite state machine per node just to make sure that the node kept in sync with its neighbors and thus since every node is in sync in a message passing sense with each of its neighbors it kind of deletes the need for any kind of central lock yeah did you look at that or did you find it difficult in that kind of solution yeah so I know besides the pregel model there's other ones like graph lab and what you suggest sounds interesting but uh yeah this is just what I was familiar with uh I'm sure I'm sure there's other and and the field is moving you know quickly I'm sure if you read new papers on it you would find some better way of doing this so this is really just a learning exercise for me more than anything uh not necessarily the best way to do distributed graph processing anyone else uh where in the world we can see this graph processing what's who basically a client who would pay for that that's like a straight question uh well I mean this stuff came out of google facebook and that sort of thing uh but like I said there's so many different feel so many different areas where you can use graphs to solve problems uh I don't I don't use it in my own day job um but uh I mean even if you're not facebook or anywhere near that scale uh you can probably find something to do if you work with a lot of complicated models of something science maybe I'm not sure yeah yeah probably like uh constraint systems so yeah anybody from engineering background can suggest some complicated physics I always approach this from an academic point of view so I don't know uh yeah also uh yeah uh wireless sensors um the way which can be low power uh you want to you want to make sure that you don't overuse any one individual uh sensor so you can uh you can direct them to uh send information through lower used sensors anyone else okay thank you all right thanks a lot


Kerry Lake, so I'll be honest. I don't know much about her But I know that she doesn't take shit from the Democrat media and at the left to regularly call her a fascist Which basically these days means you're not a Marxist and you love America in 2016 Kamala Harris Amy Klobuchar and Hillary Clinton Everybody on the Democrat side said the election had problems. Miss like they're definitely has been some of that But I want to say of course I strive but unfortunately for you. It's different when Democrats do it The election had problems. Miss like there definitely has been some of that, but I want to say in 2000 Al Gore Conceded in 2004 John Kerry receded and conceded in 2016 Hillary Clinton conceded and we didn't see that in 2020. That's the difference except it's not much different Basically, everyone was mostly accepting election results up until the year 2000 when Democrats went beyond normal Objections and actually tried to overturn the results by Decertifying Florida for Bush. It didn't work But Democrats still claim the election was stolen rioted at Bush's Inauguration and even attacked his motorcade which is something that had never happened before which you can see a video of if You head on over to Twitter and give me a follow in 2004 after Bush won again There wasn't any inauguration violence, but there were protests and Democrats again tried to overturn the results by Decertifying Ohio this time despite Gore and Kerry conceding it didn't matter because from there on out Democrats and their state media referred to it as the Bush regime Implying that he wasn't legitimately in the White House, and if you look at polling Democrats never accepted Bush as a legitimate president Then Obama wins and nobody calls the election stolen fast forward to 2016 And well, you all know what happened. They denied the election results They denied Trump was legitimate and generally did everything they could to undo the results starting with impeachment Which they started calling for literally before he even took office Hillary Clinton Conceded but then spent the next four years and even as recently as two weeks ago Calling the election and Trump illegitimate. I believe he knows he's an illegitimate president He knows he knows that there were a Bunch of different reasons why the election turned out the way it did in 2016 Hillary Clinton conceded all of this election denial, which is now escalated was driven by Democrats and their media But this is how Dana Bash describes it miss like This is exactly how Democrats and their state media mouthpieces have been able to keep this election denier narrative going for the last two years By ignoring or downplaying their own blatantly hypocritical past actions Hillary Clinton conceded and we didn't see that in 2020. That's the difference. And so the question is saying are you undermining faith in elections? by saying that The 2020 election was stolen when there's absolutely no evidence to support that Dana in 2018 Stacey Abrams never conceded. She still hasn't I don't hear CNN calling her an election denier We have the right it's protected with our first amendment to question our government and to question elections No question. We still have the first amendment Yeah, we still have the first amendment and when you start seeing the media cancel people for questioning their government Then there that's when we have a problem. I totally agree about the first amendment You and I are benefiting for the first amendment as we speak so I couldn't agree with you more on Exactly They love Stacey Abrams and cannot equally apply their standards to her for various reasons Lastly, they keep insisting that unless Democrats win then democracy is over Biden even recently claimed that the next election might not be legitimate in both cases Suggesting that the only way democracy or an election is legitimate is if Democrats win How is that not sowing distrust in the election system or denying election results before they even happen? Of course, it is but have no doubt that in their heads It's different somehow because they're the ones doing it. All right That's all I have to say about that hit that like button and leave a comment to continue the discussion. Thanks a lot


Good morning from Las Vegas. It's theCUBE live at AWS re-invent 2022 with tens of thousands of people. Today really kicks off the event, big keynote, and I think it's probably just wrapping up. Lisa Martin here with Dave Vellante. Dave, this is going to be an action packed week on theCUBE, no doubt. We talk with so many different companies. Every company is a software company these days, but we're also seeing a lot of companies leaving software that can help them operate more efficiently in the background. Yeah, well some things haven't changed at re-invent. A lot of people here, back to all the 2019 highs, and I think we've exceeded those. Two hour keynotes, Peter DeSantis last night, talking about new Graviton instances, and then Adam Salipsky doing the typical two hour keynote. But what was different, he was a lot more poetic than we used to hear from Andy Jassy, right? He was talking about the universe as an analogy for data. I loved that. Ocean exploration as a security piece, and then exploring into the Antarctic for better chips. So yeah, I think you did a good job there. I think a lot of people might not love it, but I thought it was very well done. I thought so too. We're kicking off a great day of live content for you all day today. We've got Eleanor Dorfman joining us, the sales leader at Retool. Eleanor, welcome to theCUBE, it's great to have you. Thank you so much for having me. So let's talk a little bit about Retool. I was looking on your LinkedIn page. I love the tagline, build custom internal tools best. Talk to us a little bit about the company. You recently raised series C2. Give us the backstory. Yeah, so the company was founded in 2017 by two co-founders who were best friends from college. They actually set out to build a FinTech company, a payments company, and as they were building that, they needed to build a ton of custom operation software that goes with that. If you're going to be managing people's money, you need to be able to do refunds. You need to be able to look up accounts. You need to be able to tech fraud. You need to do know your customer operations. And as they were building the sort of operation software that supports the business, they realized that there were patterns to all of it and that the same components were used at in and at done and had the insight that that was actually probably a better direction to go in than recreating Venmo, which was I think the original idea. And that actually this is a problem every company has because every company needs operations engineering and operation software to run their business. And so they pivoted and started building Retool, which is a platform for building custom operation software or internal tools. Good pivot. In hindsight, actually probably in the moment as well, it was a good pivot. But you know when you talk about some of those things, refunds, fraud, KYC, you think of operation software, you think of it as just internal, but all those things are customer facing, right? So are we seeing sort of this new era? Is that a trend that you guys, your founders saw that hey, these internal operations can be pointed at customers to support what a better customer service, maybe even generate revenue, subscriptions. I think it's a direction we're actually heading now, but we're just starting to scratch the surface of that. The focus for the last five years has very much been on this operation software and sort of changing the economics of developing it and making it easy and fast to productize workflows that were previously being done in spreadsheets or happy workarounds and make it easier for companies to prioritize those so they can run their business more efficiently. And where are you having your customer conversations these days, thinking of operation software in the background to Dave's point, it ends up being part of the customer experience. So where are you having your customer conversations, target audience, who's that persona? Mainly developers, so we're working almost exclusively with developer teams who have backlogs and backlogs of internal tools requests to build that sales teams are building manual forecasts, support teams are in 19 different tools, their supply chain teams are using seven different spreadsheets to do demand forecasting or freight forwarding or things like that, but they've never been able to be prioritized to the top of the list because customer facing software, revenue generating software always takes prioritization. And in this economic environment, which is challenging for many companies right now, it's important to be able to do more with less and maximize the productivity, especially of high value employees like engineers and developers. So what would you say the biggest business outcomes are? If the developer is really the focus, productivity is key. Productivity, it's for both, I would say, developer productivity and being able to maximize your sort of R&D and maximize the productivity of your engineers and take away some of the very boring parts of the job. But so I would say developer productivity, but then also the tools and the software that they're building are very powerful for end users. So I would say efficiency and productivity across your business. Across the business. Historically, operations is where we focus to IT and code. How much of the code out there is dedicated to sort of operations versus that customer facing piece? So I think it would actually be, it's kind of surprising. We've run a few surveys on this sort of, we call them the state of engineering time and focusing on what developers are spending their time on. And a third of all code that is being written today is actually for this internal operation software. Interesting. And do you guys have news at the show? Are you announcing anything interesting or? Yeah, so our focus historically, you sort of gave it away with one of your early questions but our focus has always been on this operations, this building web applications, on building UIs on top of databases and APIs and doing that incredibly fast and being able to do it all in one place and integrate with any data source that you need. We abstract away access, authentication, deployment, and you build applications for your internal teams. But recently we've launched two new products. We're actually supporting more external use cases and more customer facing use cases as well as automating cron jobs, ETL jobs alerting with the new Retool Workflows product. So we're expanding the scope of operation software from web applications to also internal operations like cron jobs and ETL jobs. Explain that, explain the scourge of cron jobs to the audience. Yeah, so operation software, businesses run on operation software. It's interesting, zooming out, it's after something you said earlier as well, every company has become a software company. So when you think about software, you tend to think about here, very cool software that people are selling and software that you use as a consumer. But Coca-Cola, for example, has hundreds of software engineers that are building tools to make the business run for forecasting, for demand gen, for their warehouse distribution and monitoring inventory. And there's two types of that. There's the applications that they build and then the operations that have to run behind that. Maybe a workflow that is detecting how many bottles of Coca-Cola are in every warehouse and sending a notification to the right person when they're out or when a refill is very strong, but you know, when you need a refill. So it does that, it takes those tasks, those jobs that run in the background and enables you to customize them and build them very rapidly in a code-first way. So some of the notes that you guys provided say that there's over 500 million software apps that are going to be built in the next few years alone, that's tremendous. How much of that is operation software? I mean, I think at least a third of that, if not more, to the point where every company is being forced to maximize their resources today and operational efficiency is the way to do that. And so it can become a competitive advantage when you can take the things that humans are doing in spreadsheets with 19 open tabs and automate that. That saves hours a day. That's a significant, significant driver of efficiency and productivity for a business. It does, and there's direct correlation to the customer experience, the user experience. Almost certainly. When you think about building support tooling, I was chatting on the with Godot Wi-Fi support on my flight over here. And they asked for my order number and I sent it and they looked at my account and that's a custom piece of software they were using to look at the account, create a new account for me and restore my second Wi-Fi purchase. And so when you think about it, you're actually even just as a consumer interacting with this custom software all the time. And that's because that's what companies use to have a good customer experience and have an efficient business. And what's the relationship with AWS? You guys started, I think you said 2017, so you obviously started in the cloud. But I'm particularly interested in, from a seller perspective, what that's like. Working with Amazon, how's that affected your business? Yeah, I mean, we, so we're built on AWS. So we're customers and big fans and obviously like from a selling perspective, we have a ton of integrations with AWS. So we're able to integrate directly into all the different AWS products that people are using for databases, for data warehouses, for deployment configurations, for monitoring, for security, for observability. We can basically fit into your existing AWS stack in order to make it a seamless integration with your software. So that building and retool is just as seamless as building it on your own, just much, much faster. So in your world, I know you wanted to, in your world, is it more analytics? Is it more transactional? Sort of, it's a both? It's all of the above. And I think what's over Thanksgiving, I was asked a lot to explain what Retool did with people who were like, we just got our first iPhone. And so I tried to explain with an example because I have yet to stumble on the perfect metaphor. But the example I typically use is DoorDash is a customer of ours. And for about three years and three years ago, they had a problem. They had no way of turning off delivery in certain zip codes during storms, which as someone who has had orders canceled during a storm, it's an incredibly frustrating experience. And the way it worked is that they had operation team members manually submitting requests to engineers to say there's a storm in this zip code and an engineer would run a manual task. This didn't stale with DoorDash as they were opening in new countries all over the world that have very different weather patterns. And so they looked, they were sort of confronted with a choice. They could buy a piece of software out of the box. There is not a startup that does this yet. They could build it by hand, which would mean scoping the requirements, designing a UI, building authentication, building access controls, putting it into a sprint, assigning an engineer. This would have taken months and months. And then it would take just as long to iterate on it or they could use RETUAL. So they use RETUAL, they built this app. It saved, I think they're saying up to two years of engineering time for this one application because of how quickly it was. And since then they've built, I think, 50 or 60 more, automating away other tasks like that that were one out of spreadsheets or in JIRA or in Slack notifications or in emails saying, hey, could you please do this thing? There's a storm. And so now they use us for dozens and dozens of operations like that. A lot of automation and of course, a lot of customer delight on the other end of the spectrum as you were talking about, it is frustrating when you don't get that order, but also the company needs to be able to have the tools in place to automate to be able to react quickly. Because the consumers are, as we know, quite demanding. I wanted to ask you, I mentioned the tagline in the beginning, build custom internal tools fast. You just gave us a great example of DoorDash, huge business outcomes they're achieving, but how fast are we talking? How fast can the average developer build these internal tools? Well, we've been doing a fun thing at our booth where we ask people what a problem is and build a tool for them while we're there. So for something lightweight, you can build it in 10 minutes for something a little more complex that can take up to a few weeks, depending on what the requirements are. But we all have people who will be on a call with us, introducing them to our software for the first time, and they'll start telling us about their problems and in the background, we'll be building it. And then at the end, we're like, is this what you meant? And they're like, we'd like to add that to our cart. And obviously, it's a platform, so you can't do that, but we've been able to build applications on a call before while people are telling us what they need. So fast is fast. I would say very fast. How do you price? Right now, we have a couple different plans. We actually have a motion where you can sign up on our website and get started. So we have a free plan. We've got plans for startups, and then we've got plans all the way up to the enterprise. All right, and that's a subscription pricing? Subscription model, yes. So I get a subscription to the platform, and then what, is there also a consumption component? Exactly, so there's a consumption component as well. So there's access to the platform, and then you can build as many applications as you need, or build as many workflows. When you're having customer conversations with prospects, what do you define as Ritual's superpower? You're the sales leader. What are some of those key superpowers that you think really differentiate Ritual? I do think, well, the sales team first and foremost, but that's not a fair answer. I would say that people are a big differentiator though. We have a lot of very talented people who have a ton of domain expertise and care a ton about the customer outcomes, which I do actually think is a little more rare than it should be. But we're one of the only products out there that's built with a developer-first mindset, a very code-first mindset, built to integrate with your software development but also built with the security and robustness that enterprise companies require. So it's able to take an enterprise-grade software with a developer-first approach while still having a ton of agility and nimbleness, which is what people are really craving as the earth keeps moving around them. So I would say that's something that really sets us apart from the field. And then talk about some of the, what developers are saying, some of the feedback, some of the responses. And maybe even, I know we're just on day one of the show, but any feedback from the booth so far? We've had a few people swing by our booth and show us their Retool apps, which is incredibly cool. That's my absolute favorite thing is encountering a Retool application in the wild, which happens a lot more than I would have thought, which I shouldn't say, but is incredibly rewarding. But people love it. It's the reason I joined is I'd never heard someone have a product that customers talked about the way they talked about Retool because Retool enables them to do things for some folks who use it and enables them to do something they previously couldn't do. So it gives them superpowers in their job and to triple their impact. And then for others, it just makes things so fast. And it's a very delightful experience. It's very much built by developers for developers. And so it's built with a developer's first mindset. And so I think it's quite fun to build in Retool. Even I can build in Retool, though not well. And then it's extremely impactful and people are able to really impact their business and delight their coworkers, which I think could be really meaningful. Absolutely. Delighting the coworkers directly relates to delighting the customers. Those customer experience, employee experience, they're like this, they go hand in hand and the employee experience has to be outstanding to be able to delight those customers, to reduce churn, to increase revenue and for brand reputation. And it also, I think there is something as someone who is customer facing when my coworkers and developers, I work with build tools that enable me to do my job better and feel better about my own performance and my ability to impact the customer experience. It's just this incredibly virtuous cycle. Retool.com is where folks can go to learn more and also try the subscription that you said was free for up to five users. Yes, exactly. All right, I guess my last question, well, a couple of questions for you. What are some of the things that excited you that you heard from Adam Slipsky this morning? Anything from the keynote that stood out in terms of- Did you listen to the keynote? I did not, I had a customer call this morning. Okay, so they're bringing- East coast time, east coast time. One of the things that will excite you, I think is they're making it easier to connect their databases. I would very much excite me. Aurora and Redshift, right, okay. And they're making it easy to share data. I don't know if it goes across regions, but they're doing better integration. Amazing. And you guys are integrating with those tools, those data platforms. So that, to me, was a big thing for you guys. It is also, and what a big thing Retool does is you can build a UI layer for your application on top of every single data source. And you hear, it's funny, you hear people talk about the 360-degree view of the customer so much. This is another, it's not a primary value proposition, but it is certainly another way to get there. Is if you have data from their Zendesk tickets from in Redshift, you have data from Stripe from their payments, you have data from Twilio from their text messages, you have data from Datadog where they're having your observability where you can notice analytics issues. You can actually just use Retool to build an app that sits on top of that so that you can give your support team, your sales team, your account management team, customer service team, all of the data that they need on their customers. And then you can build workflows so that you can do automated customer engagement reports. I did a Slack every week that shows where our top customers are doing with the product and that's built using all of our automation software as well. The integration is so important as you just articulated because every, you know, we say every company is a software company, these days, every company is a data company, but also the data democratization that needs to happen to be able to, for lines of business so that data moves out of certain locked in functions and enables lines of business to use it to get that visibility that you were just talking about is really going to be a competitive advantage for those that survive and thrive and grow in this market. It's able to, I think it's first it's visibility but then it's action. And I think that's what Retool does very uniquely as well is it can take and unite the data from all the places, takes it out of the black box, puts it in front of the teams and then enables them to act on it safely and securely. So not only can you see who might be fraudulent, you can flag them as fraud. Not only can you see who's actually in danger, you can click a button and send them an email and set up a meeting. You can set up an approval workflow to bring in an exec for engagement. You can update a password for someone in one place where you can see that they're having issues and not have to go somewhere else to update the password. So I think that's the key is that Retool can unlock the data visibility and then the action that you need to serve your customers. That's a great point. It's all about the actions, the insights that those actions can be acted upon. Last question for you, if you had a billboard that you could put any message that you want on Retool, what would it say? What's the big, ah-ha, this is why Retool is so great? I mean, I think the big thing about Retool is it's changing the economics of software development. It takes something that previously would have been below the line and that wouldn't get prioritized because it wasn't customer facing and makes it possible. And so I would say one of two billboards if I could be a little bit greedy, one would be Retool, change the economics of software development and one would be build operation software at the speed of thought. I love that. You granted two billboards. Thank you. Those are both outstanding. Eleanor, it's been such a pleasure having you on the program. Thank you for talking to us about Retool. Thank you. Operation software and the massive impact that all of meeting it can make for developers, businesses alike, all the way to the top line. We appreciate your insights. Thank you so much. For our guests and Dave Vellante, I'm Lisa Martin. You're watching theCUBE, the leader in live emerging and enterprise tech coverage.


Hello. Thank you for coming to our presentation session. And I'm Seungwoo from Samsung Electronics and your resource channel. And today, we will introduce our 64-bit corner bring up on our Samsung TM2 board with the V8 architecture Exynos 5.433 SoC. Before starting the main subject, I want to introduce ourselves first. And here, the channel is the corner maintainer of the Excon driver, the external connector, and also the Exynos cloud, and also the device frequency. And in our Tizen corner team, Chanwoo is one of the maintainer of the Tizen corner. And me, the Seungwoo is the corner maintainer of Exynos DRM driver. And on Tizen corner team, I am also one of the maintainer of Tizen corner. OK, this is today's agenda. First, I introduce about what is the Samsung TM2 board. And also, I will share some of our working under our 64-bit corner. And after that, Chanwoo will share more information about what we do and our experience under some issues under our 64-bit corner. And then maybe we have some time for Q&A and discussion. OK, then what is the Samsung TM2? It's simple, the Tizen Mobile 2. Samsung Tizen Mobile 2. It is the mobile reference board for Tizen. It uses the Samsung Exynos 5033 SoC. And the SoC is based on V8 architecture. And of course, it supports 64-bit. And it's short history of our development under Tizen Mobile 2. In early stage, Tizen starts supporting 64-bit under ARM Juno board. It's a bit big board, so not properly working with mobile reference of Tizen. So we started mobile reference board development under September 2014, when the Exynos 5033 SoC is announced. And then just after that, we started Tizen support all the things. And nowadays, on Tizen 3, the TM2 board supports almost all functionalities, just except for modem. Because modem has many proprietary codes, so not yet supported. And it's based on the Tizen Git repository. But we are also working on the mainline 3 and the first patch posted on the mainline just after we started the development. And the first patch was posted by Chanu. And in these days, also the patch for the TM2 board is also in mainline, not yet merged. OK, this is information of our Tizen Git repository. The corner is based on the version 4.1. And based on the 4.1, there are more than 1,300 patches are applied for our Exynos 5033 SoC and the TM2 board. And actually, the number is captured by one month ago. So it's almost 1,400 nowadays. And also, more than 250 patches are already posted to mainline. And even more than 100 patches are merged. OK, it's short information of our Exynos 5033 SoC. Maybe it's first version of the SoC from Samsung-supported architecture VA.  And its display has a maximum WQHD and WQXGA. So we have two both types, TM2 and the extended TM2, the TM2e. And it supports GPU on Mali Midgard. OK, then I need to introduce something about Tizen. I think you already know about Tizen Project. It resides in the Linux Foundation. And the Tizen is a project for the supporting software platform for multi-device category, including mobile, wearable, and TV, and IVI. And in these days, we are starting for the IoT area also. All the categories of the devices support some range of API set and based on their common API set. If you have more interesting about Tizen, then please check the Tizen web page. OK, this is a screenshot from TM2 with the Tizen mobile platform. One is a simple menu screen, and the other is a hero map screen. And in our corner with a 64-bit corner shows better performance than a 32-bit corner of the same architecture, more than 20% improvement on the CPU benchmark with the drystone benchmark tool. It's almost similar with ARM's reference information. And then what we do for ARM 64-bit corner really? OK, first, it's just our information about ARM V8. It, of course, supports 64-bit memory address space. So its memory map is 64-bit. And on the ARM V8, for the firmware control, it supports PSCI interface with this difference. OK, first, we support 64-bit memory address mapping. If you are using the recent controller, then you don't care about this. But in legacy, maybe it just sends the 32-bit address map. So it should be fixed to 64-bit. In our case, we need to fix. OK, also, we need to fix drivers on the early ARM architecture to support 64-bit. Many of them already support 64-bit, but some of them have some issues. For example, the external side, IOMMU, the C-SAMM, originally only support 32-bit, but the version five of the hardware support the more secret address space. It's just easily on the hardware side, shifting the old page entry values by four bits. So the driver need to be updated for support version five. It is already merged to mainline. And the other case, S5P MFC driver case, it is the video codec of Exynos SoC. And maybe the original code was bad, but it has some fixed base offset of the MF system core, so we need to fix it. And the other thing is, I think it's user mistake. It uses some fixed size pointer casting with 32-bit, so we need to fix it. And it's not really kernel bug. In early stage of ARC64, there was some GCC bug in LightSift. So on the for loop with the light rotation, the result was not same with our expectation, so we need to fix on the kernel side with some workaround code. But I have checked under these days. And fortunately, it is already fixed from GCC side. OK, and after development, I applied to runtime checkers Kassan and Ubisan, the sanitizers. They are originally started from Google on the user space. And on the kernel side, the former Samsung engineer Andrei Riavin applied to the X86 architecture. And thanks to the Rinaldo team, it is applied to the ARM64 also. And in Kassan, the kernel addressing ties can detect the out of bounds access and the user F2P and the memory address related bugs. And it's one of our example we can detect with Kassan. In the initialization array, we need some null element, but there was no null element, so it accessed the out of bounds area, so it detects. But fortunately, kernel already have a guard area in the array. So the original code was not really have some bad things, but anyway, I fixed it. And the other thing is also user F2P free detection from Kassan. The original code condition was some typo, so there was some bad access memory. So I need to fix the condition. OK, the other runtime checker is Ubisan, the undefined behavior sanitizer. It detects some undefined behaviors like sift out of bounds or overflows. There is some example from the DWMC. And there was some sift exponent to large value for the sorry to be type, and I need to fix. It is already merged into mainline. And the other case is also sift exponent, and the code has a wrong offset in the array, so the code is fixed. This is fixed from our Tizen kernel. And from now, Chanu will introduce more things. So my name is Chanu Che. I will give a presentation continuously about what we do for. I'm 64-bit for CPU cores. The first PSCI, I'm originally provide the PSCI to support the power management. The PSCI support the standard and common interface for the power management. In the legacy device driver, we should know the specific and nonstandard code depend on each vendor associate. It is difficult to support the power management. So if we use the PSCI, it makes the power management support easier than before using the legacy device driver. The PSCI supports the following scenarios, suspend, idle, and CPU half-flow, and system shut down and reset. But PSCI does not support the DVFS, such as CPU and GPU frequent scaling. Also, the PSCI handle the exception level. So each AAC32 and AAC64-bit architecture has the exception levels. So usually, Linux kernel is operating on the exception level one, which was. So sometimes, we need to send some command to another exception level. So we use the SMC or hypervised command. SMC is the secure monitor core. For example, if we want to turn on the secondary CPU cores, we should use the SMC. In the legacy device driver, we should handle the SMC core directly. But if we're using the PSCI, there is no any specific. Just we call the CPU on functions so we can get the turn on the CPU. So I added some example for the suspend with the PSCI. In the legacy device driver to support the suspend, we should add some specific function, for example, actions on the suspend function. This function includes some different and non-standard. This code depends on each brand or source. But in the PSCI, provide some standard function. We just use this function without any specific code. It makes the power management support easier than before. And next, I added some CPU half-flow example with PSCI. In the legacy device driver, we should add some specific functions for the SMP operation structure. It means that each function includes a specific code. It is difficult to support power management, and we need more time to support it. But PSCI provides the only standard function. This function does not include any specific function. For example, when I was developing the TM2 board with the ActionOS 5.433, so I tried to turn on the octa-cores on the latest kernel. So I just added the device tree node according to the documentation of PSCI. There is no any specific code. Just after kernel booting, I got successfully all octa-cores turned on. It is very simple. We can save the many times to support the power management. And next, how can I support the big needle cores? So recent reflection models has the big needle cores to support the high performance scenario, such as VR, AR, and gaming scenario. But Linux kernel include only IKS in kernel switch to support the big needle cores scheduling. But in kernel switcher does not use all cores at the same time. So we should use the HMP. The HMP is provided by Linano. So if we use the HMP scheduling, so we can use the all cores at the same time. It means that we can support the high performance scenario on the hardware device. But HMP is only supported kernel version 3.10, and HMP is verified on the ARM32 bit. So in our project, I tried to support HMP on the kernel version 4.10 and for the ARM 64. So I just added some simple test for the HMP. This Schismatch event marker created six threads. And I used the ARM DS5 profiling tool. In the first case, without HMP, this result showed that the performance regression happened due to the CPU contention. CPU contention means that if there is no enough CPU resource, CPU contention happened. But in this case, this hardware has the octa core, and Schismatch only create the six threads. It means that the mainline kernel does not support the big needle cores effectively. So I offline the HMP patches. I tried to test again. So I got there is no any some CPU contention issue. It means that we can use the all cores at the same time to support the specific scenario. As I always say, that gaming and VR scenario. And next, this chapter, what are the challenges on TM2? This chapter includes the two subjects. The first one, 32-bit, process running on 6-bit kernel. So as we know, the 64-bit kernel supported all features for the 32-bit. It means that this kernel has the low compatibility. But sometimes the issue happens when we use the 32-bit user press on the 64-bit kernel. So in my project, I will explain these issues and I will explain how to fix it. The first, personality 32-bit setting. So as I always say, the 64-bit kernel supports all features for the 32-bit. But 64-bit kernel provide different information to the user end according to the type of running process. According to 32-bit or 64-bit user process. So sometimes the user process needs to use this information provided by a kernel, such as this kernel is supported with FB. So I added some examples on the next page. In this page, the Unity engine on Tizen platform checked whether some mode is supported or not supported. I tried to execute the cap pro CPU input command on the 64-bit kernel. This result does not include any some features. But 64-bit kernel supports some features. It means that if we get the same information, we, 32-bit user process, should use the person on the bar. It looks like 32-bit IO control. So I added some test result. So in this case, I used the 64-bit kernel and 32-bit user process. So I tried to execute the username command and cap pro CPU input. We can show that this result. But in the same case, I just tested it with person on the bar, 32-bit IO control. We can get different result. When I execute the cap pro CPU input, this result includes some mode. It means that frankly, I have planned to skip this page because this is more detailed knowledge. So I will explain it. So this page includes how to support some mode on the 64-bit kernel. If we use the person on the bar, 32-bit IO control on the 32-bit user process, this kernel checked this IO control. And so compared on the bar, PSR on the bar, extra bit, macro means that the ARC is 32-bit, CPSR bit. So if we, the 64-bit kernel, to support some mode, if we, 32-bit user process, use the person on the bar, 32-bit IO control, the compact PSR, T-bit, is set. So if this bit is set, the kernel changes some instruction to the ARC 64-bit instruction in the kernel, right? It is the new kernel, handle this method for some mode. So also 64-bit kernel has the configuration of a compact configuration. When we enable this configuration, 64-bit kernel supports almost features for the 32-bit user process. But sometimes issues happen when we developing the TM2 board. So first, if we want to handle the 32-bit IO control on the 64-bit kernel, we should add the compact on the IO CTL functions. And the 64-bit IO control is handled by unlocked IO control. And next issues, sometimes even if we use the same IO control on the 32-bit and 64-bit user process. But there is the different size IO control according to the type of user process. So I added some example on the next page. This page just showed patch information how to fix it. So on the next page, I added some code. The first example, so I added compact IO CTL function points to support the 32-bit user process. Also, in the next example, even if we use the same IO control on board 32-bit and 64-bit, but there is different size. So we should support these issues. So we added a new IO control, but it is the same operation. So next, sometimes alignment issue happens. So we should fix these issues, aligned pad method. And next, sometimes ML payload issues when we're using the 32-bit user process. So to fix this issue, we should use pi of 64 C flag. So if we add this C flag, the ML on the user process use the ML, so kernel space use the ML 64 functions. So for example, Mesa and Wayland always this C flag to support the ML issues. And this chapter, I explained the issues required to the discourse on May 9. It means that some issues depend on the only 64-bit kernel. Other issues depend on the both 32-bit and 64-bit kernel. The first issue, FPP CMD segmentation fault, this problem is still remain on the May 9. So when I developing the TM2, the segmentation fault happened after the CPU wake up from suspend state. But this fault only happened on the 64-bit kernel plus 32-bit user process, such as UW or Betsy user process. So I tried to find it. So when we reviewing the auto options, there is no any issues. So auto options, if we use the auto options, to change use the FMOV assembly command instead of move command. The FMOV is the plotting point. FMOV is used for the FPP CMD features on the ARM 64-bit. So FMOV is the plotting point assembly command. Also, FMOV use the specific register. So D register is only used on 64-bit. So I dumped this register of D to try to find the curse of this segmentation. So in the result, on the failed case, I got this result. The right case, the D register has the garbage data on the failed case. So I tried to sum code to handle the FPP CMD register on the mainline code. So FPP CMD thread switch functions handle the FPP CMD registers. This function covered two cases. The first one, the red line, when context switching happened, but there is no any current thread pointer, there is no change about the thread current pointer. This function just keeps the D registers data. But on the other side, this function always loads data from memory for D register. It means that this FPP CMD segment port happened on the first case. But this issue is not every time. This issue sometimes happens. It means that this function does not consider the suspend to RAM situation if we when use the 32-bit user process. So just in our project for the temporary solution, we just use the always load data from memory for D register. So I fixed this issue. But for the fundamental solution, which FPP CMD thread switch should consider the suspend to RAM situation for the 32-bit user process. This issue is not happened on the 64-bit user process. Only depends on the 32-bit user process. And next issue, I'm generally timer issue happened on the 64-bit. The Linux kernel needs the clock source for timekeeping. So Linux kernel use the clock source and scared clock. The clock source is to provide a time, a time name for the system. And scared clock is used to schedule and time stepping for the over the print K. So I'm provide the timer IP. The IP name is I'm generic timer or I'm architecture timer. So this timer has the two counter, physical counter and virtual counter. You can use both counter. But I'm 64-bit kernel recommend to use only virtual counter because the only is both virtual counter to user VDSO. So when I tried to use the virtual counter, I got some issues. So I failed to synchronize the time stepping between the CPUs when putting the log. You can show some issues. So I tried to find it. So if we want to use the virtual counter on the 64-bit kernel, we should initialize the counter offset register on the boot loader. If this register is not initialized, the each core gets a different random offset. So we get some pain issues. But in our project, we just do not use the VDSO. So we just use the physical counter. But in the mainline kernel, we can use the physical counter because some patches removed the physical counter usage. So just we need to add some code. So yeah, just maybe another case, another on the hardware. This issue may be, yeah. And next, in the mainline kernel has deadlock issues between regimap and common clock framework. When we use the regimap subsystem and clock prepare functions, the deadlock is halved. This issue is still remain on the mainline. So I added some example. Samsung S2MPS MFD device. So the MFD device includes the PMIC device and clock device. PMIC and clock device share the one iscale line. But PMIC and clock device use the different clocks. So first, on CPU zero, PMIC device rocked the regimap, buttex A, to write to the ISC first. And context switch happened on CPU one. I'm sorry. On CPU one, clock device called the clock preparer. But clock preparer used only one clock in the common clock framework. And clock device rocked the buttex A to write the ISC first. But this buttex is already rocked because the two device shared one line, one iscale line. And context switch happened on CPU zero, rocked the buttex B of the clock preparer because the clock preparer used only one clock. So the deadlock issue happened. So fix the deadlock issues. We just use the clock preparer should be on probe time. And on runtime time, we should use the clock-enabled function to handle the clocks. Because clock-enabled function used the spinna instead of the buttex. But following two patches were posted to fix this issue on the main night. But it is not a fundamental solution just temporarily. I tried to check the on-regimap side. The regimap subsystem has three device, MMIO, SQC, SPI. So on the SQC, regimap MMIO driver used the only spinna for the speed. The regimap SQC and SPI driver used the Utesu for the locking system. If we use the just regimap MMIO, if we use the regimap MMIO, there is no any issues. So if we change the locking mechanism to the spinna, there is no any issue. But also it is not a fundamental solution. So as I said that just we use the spinna, it is not a fundamental solution to fix this deadlock. Because there are many similar cases on the main night corner. So we need to locking ideas. So these patches were posted by many lists some weeks ago. This patch has the new locking idea. So as I always say that the common clock prepare function only one club of clock. But this patch is a new locking idea. Use the each clock controller. Use the own buttex lock instead of a glauvala. So if after applying this patches, maybe this issue will be fixed. Next, there is dependency between power domain and common clock framework. When I was developing the TM2 board, graphics hardware model does not work after CPU wake up from suspend to ramp. It means the reason is that graphics related clocks initialize after wake up from the suspend state. But common clock framework already supports the handling for the suspend to ramp to save, restore, and clock registers. But common clock framework does not prevent this issue. Because sometimes the hardware's clock domains belong to the power domain. So already some device, we can register device to the power domain as a child device. But in the main night, common clock framework does not support the runtime theme. So it means that the clock controller is not able to make the dependency with the power domain. So this diagram shows the clock hierarchy in the Action 5.033. So as I said, some child clock controller, if child clock controller bellowing to the power domain, the clock controller should handle the clocks when power domain state is changed. The other side, the power domain state is changed. The child clock controller should know that this changes the state. So in our case, for the temporary solution, we use the notifier chain. But it is just temporary solution. So how to fix the issue, the clock common framework should support the runtime theme interface for the power domain. So the Marek is in our team members to develop the TM2. He posted the following patches to fix these issues. After applying these patches, maybe this issue will be fixed. And the ARM 64-bit kernel does not support the decompression features. So we can not use the G-imaging. But if we want to use the compressed image, we can use the decompression features of U-boot bootloader. So in my project, we use the decompression features of U-boot bootloader. So I explained some more issues. So this page includes some issues to support the TM2 on the mainline. So I tried to post the patches for the action of 5.433 and TM2. Also, you can check the old history and patches of TM2 on the Tyzen Git repository. So I will, I prepared some short demonstration for the TM2 with the Tyzen. This is just to the handling the TM2 board. It shows some of our schedule page. This is our presentation. And then it's a web-share samples with Aquarium, 40 fishes with 40 or between 40 to 50 FPS, 4,000. It's not showing well. But it's seven or eight frame. And then it's last year's ERC YouTube from our team. And it shows with the hardware video codec. And the last item is showing a pass from Tegel Airport to Meritim Hotel from the Google Maps. OK, let's finish the demo. The Exynos 5.433 has a Mali mid-guard GPU. And we use Mali user binaries. OK, thank you for listening our presentation. And if you have any question, then please let me know. Any questions or any discussion point? Actually, the TM2 board is sending to Korean University for researching support. But there is no plan for sending boards to other. Maybe you can contact our OSG group for getting more devices. Any other question? OK, it seems no question. And OK. You mean that the best way about the PSCI for hacking? So yeah, the PSCI, as I already said, supports the standard interface. So frankly, if some SOC supports a fully PSCI, the latest corner provides the PSCI 3 versions 4.1, 4.2, 1.0. If each SOC supports a fully 1.0, there is the simple to support power measurement. So frankly, Exynos 5.433 does not fully support the PSCI. So example, as I already said, I tried to turn on the octa-core. This SOC fully supports for the CPU half-low. But when I tried to support the suspend trend for the Exynos 5.433, but this SOC, even if SOC supports the PSCI, there is any specific code to support the power measurement. So I think that some architecture, the hardware architecture, supports the fully PSCI. So I think that we should save the many times for the power management. OK, time is already finished. So we are still here. So if you have any other discussion point, please let us know during the conference. Thank you for listening our presentation.


Hello and welcome to this presentation of the STM32 Universal Synchronous Asynchronous Receiver Transmitter Interface. It covers the main features of this USART interface, which is widely used for serial communications in embedded systems. The USART is a very flexible serial module that supports asynchronous UART communication, SPI or Serial Peripheral Interface Master Mode, LIN or Local Interconnect Network Mode. It can also interface with ISO, IEC 7816 smart cards and IRDA devices. It also provides certain features that are useful when implementing modbus communications. Applications making use of the USART benefit from the easy and inexpensive connection between devices, which only requires a few pins. In addition, the USART peripheral is functional in low power modes. The USART is a fully programmable serial interface featuring programmable data length, parity, number of stop bits, data order, baud rate generator and configurable oversampling mode by 8 or by 16. You also have the option to use basic RS232 flow control with CTS or Clear to Send and RTS or Request to Send signals. The RS485DE or Driver Enable signal is also supported. The USART supports a dual clock domain allowing wake-up from stop mode and baud rate programming independent of the peripheral clock or PCLK. This allows the peripheral clock to be throttled along with the core clock without disrupting communications. The USART features a multi-processor mode which allows the USART to remain idle when it is not addressed. In addition to full duplex communication, single wire half duplex mode is also supported. The USART also offers many other features including auto baud rate detection, receiver timeout and support several modes which will be described later in the presentation. This is the USART block diagram. The USART clock, FCK, can be selected from several sources. System clock, peripheral clock or APB clock, the high speed internal 16 MHz RC oscillator or the low speed external 32.768 kHz crystal oscillator. NRTS and RX are used for data transmission and reception. NCTS and NRTS are used for RS232 hardware flow control. The Driver Enable or DE which is available on the same IO as NRTS is used in the RS485 mode. The clock output or SCLK is dual on purpose. When the USART is used in synchronous master mode, the clock provided to the slave device is output on the SCLK pin. When the USART is used in smart card mode, the clock provided to the card is output on the SCLK pin. The USART has a flexible clocking scheme. Its clock source can be selected in the RCC and can be either the PCLK or peripheral clock which is the default clock source or the HSI16 LSE or system clock. The registers are accessed through the APB bus and the kernel is clocked with FCK which is independent from the APB clock. The USART receiver implements different user configurable oversampling techniques for data recovery by discriminating between valid incoming data and noise. This allows a trade-off between the maximum communication speed and noise clock inaccuracy immunity. Select oversampling by 8 to achieve higher speed up to FCLK divided by 8 where FCLK is the USART clock source frequency. In this case the maximum receiver tolerance to clock deviation is reduced. Select oversampling by 16 over 8 equals 0 to increase the tolerance of the receiver to clock deviations. In this case the maximum speed is limited to FCLK divided by 16. The maximum baud rate that can be reached is 10 megabaud when the clock source is at 80 MHz and oversampling by 8 is configured. With other clock sources and or higher oversampling ratio the maximum speed is limited. The frame format used in a synchronous mode consists of a set of data bits in addition to bits for synchronization and optionally a parity bit for error checking. The USART supports 7, 8 or 9 bit data lengths. A frame starts with one start bit where the line is driven low for one bit period. This signals the start of a frame and is used for synchronization. The start bit is followed by 7, 8 or 9 data bits. If parity control is enabled the parity bit is transmitted as the last data bit and is included in the data length count. Finally a number of stop bits 0, 1, 1.5 or 2 where the line is driven high end the frame. The standard frame was described in the previous slide. This slide shows an example of 8 bit data frames configured with one stop bit. An idle character is interpreted as an entire frame of ones. The number of ones will include the number of stop bits. A break character is interpreted as receiving zeros for a frame period. At the end of the break frame two stop bits are inserted. The USART supports full duplex communication where TX and RX lines are respectively connected with the other interfaces RX and TX lines. The USART can be configured to follow a single wire half duplex protocol where the TX and RX lines are internally connected. In this communication mode only the TX pin is used for both transmission and reception. The TX pin is always released when no data is transmitted. Thus it acts as a standard IO in idle or reception modes. This means that the IO must be configured so that TX is configured as alternate function open drain with an external pull up. In RS232 communication it is possible to control the serial data flow between two devices by using the NCTS and the NRTS output. These two lines allow the receiver and the transmitter to alert each other of their state. The following figure shows how to connect two devices in this mode. The idea is to prevent dropped bytes or conflicts in case of half duplex communication. Both signals are active low. For serial half duplex communication protocols like RS485 the master needs to generate a direction signal to control the transceiver or physical layer. This signal informs the physical layer if it must act in send or receive mode. In RS485 mode a control line is used. The driver enable pin is used to activate the external transceiver control. DE shares the pin with NRTS. To simplify communication between multiple processors the USART supports a multiprocessor mode. In multiprocessor communication it is desirable that only the intended message recipient should actively receive the message. The devices not being addressed are put into mute mode. The USART can enter or exit from mute mode using one of two methods, idle line detection or address mark detection. The USART can also communicate synchronously. It can operate as an SPI in master mode with programmable clock polarity or CPOL and phase or CPHA. The clock is output on the SCLK pin. No clock pulses are provided during the start and stop bits. The USART can be used in smart card mode based on a half duplex communication. The clock is output to the smart card on the SCLK pin. It supports the T equals zero protocol and provides many features allowing support for T equals one. Both direct and inverse conventions are supported directly by hardware. The USART supports IRDE specifications which is a half duplex communication protocol. The data from and to the USART is represented in an NRZ or non-return to zero format where the signal value is at the same level through the entire bit period. For IRDA the required format is RZI, return to zero inverted where a one is signaled by holding the line low and a zero is signaled by a short high pulse. The SIR transmit encoder modulates the non-return to zero or NRZ transmit bit stream output from USART. The SIR received encoder demodulates the return to zero bit stream from the infrared detector and outputs the received NRZ serial bit stream to the USART. The USART only supports bit rates up to 115.2 kilobits per second for the SIR end deck. In normal mode the transmitted pulse width is specified as 3 sixteenths of a bit period. The USART receiver is able to detect and automatically configure the BOD rate based on the reception of one character. The received character can be a character starting with a bit at one. In this case the USART measures the duration of the start bit falling edge to rising edge. Any character starting with a 10XX pattern. In this case the USART measures the duration of the start and of the first data bit. The duration is measured from falling edge to falling edge ensuring better accuracy in the case of slow signal slopes. 0X7F character frame. In this case the BOD rate is updated first at the end of the start bit then at the end of bit six. Or a 0X5F character frame. In this case the BOD rate is updated first at the end of the start bit then at the end of the bit and finally at the end of bit six. In parallel another check is performed for each intermediate transition of the RX line. The USART supports a receiver timeout feature. When the USART doesn't receive new data for a programmed amount of time a receiver timeout event is signaled and an interrupt is generated if enabled. The USART receiver timeout counter starts counting from the end of the first stop bit in case of one and 1.5 stop bit configuration. From the end of the second stop bit in case of two stop bit configuration. And from the beginning of the stop bit in case of 0.5 stop bit configuration. The USART is able to wake up the MCU from stop mode when the USART clock source is the HSI 16 or LSE clock. The sources of wake up can be a start bit, address match or any received data. Several events can provide an interrupt. The transmit data register empty flag is set when the transmit data register is empty and ready to be written. The transmit complete flag is set when the data transmission is complete and both data and shift registers are empty. The CTS flag is set when the NCTS input toggles. The received data register not empty flag is set when the received data register contains data ready to be read. The idle line flag is set when an idle line is detected. The character match flag is set when the received data corresponds to the programmed address. The receiver timeout flag is set when there is no activity on the RX line for a programmed duration. The end of block flag is set when a complete block is received. The wake up from stop mode flag is set when the wake up event is verified. The DMA request can be generated when received buffer not empty or transmit buffer empty flags are set. Several error flags can be generated. The overrun error flag is set when an overrun error occurs. The parity error flag is set when a parity error occurs. The framing error flag is set when a framing error occurs. The noise error flag is set when a noise is detected on the received frame. The auto-baud rate error flag is set when the baud rate measurement failed. The USART peripheral is active in run and low power run, sleep and low power sleep modes. The I2C interrupts cause the device to exit sleep or low power sleep modes. The USART is able to wake up the MCU from stop 0 or stop 1 mode when the USART clock is set to HSI 16 or LSE. The MCU can be awakened from stop 0 or stop 1 mode using either a standard RxNE interrupt or a WUF event. In stop 2 the device is not able to perform any communication. In standby and shutdown modes the peripheral is in power down and it must be re-initialized after exiting standby or shutdown mode. The STM32L4 devices embed 5 instances. USART 1, 2 and 3 have a full set of features. Instances 4 and 5 do not support synchronous and smart card modes. This is a list of peripherals related to the USART. Please refer to these peripheral trainings for more information if needed. General purpose, inputs and outputs, reset and clock controller, power controller, interrupts controller and direct memory access controller.