The character of Momonosuke is increasingly becoming one of the most interesting parts of the current Wano arc. Whilst we've been watching his steady development to become a strong warrior like his father, when exactly will we see him live up to his name, and what exactly will this look like? Hello my Nakamitachi, this is Joygirl with a discussion of our favourite peach boy, Kozuki Momonosuke. Before we begin, I do need to warn anime-only fans that this video will involve discussion of content that the anime has not yet caught up on, so please feel free to watch some of my other videos and then return to this one at a later date. As for everyone else, I think for as long as I've been discussing One Piece on YouTube, I have said over and over again that I am waiting for Momo to step into his own and have his shining moment. And like I mentioned in the most recent chapter review, the sneaky yet steady focus on Momo in recent chapters has gotten me thinking for quite some time now, but particularly so after chapter 1008. So I think this is the perfect time to discuss this topic of Momo's role in Wano. Momonosuke's glorious moment has been hinted at for a very long time now, even before the Wano arc. And now that we're in the thick of the Onigashima raid, it's starting to feel like we will be seeing it soon, especially considering how Oda has been sliding in Momo scenes to suggest bits and pieces of information relating to his devil fruit powers, not to mention the mysterious ability which we saw in chapter 1008. So this video is to expand on ideas that I have regarding what Momo's role will be in Wano and what we may be seeing from him in this arc, as well as what this may potentially mean for Momo post Wano. A lot of my ideas I have been mentioning in some of my other previous videos, but not always to the level of detail that I think this topic deserves, so you will see me call back to a lot of these other discussions which may feel like a lot of shameless plugs, but you don't need to go back to watch all of them, although you're more than welcome to if you feel like it. Anyways, starting with what Momo's role will be to save Wano. As I mentioned before in my chapter 997 review, I think Momo will be the one to stop Onigashima from landing on the flower capital. And there are a few ways or components to make this happen. Firstly, his devil fruit powers. As we know, Momo ate the artificial zoan devil fruit created by Vega Punk using Hokkaido's lineage factor. However, ever since our introduction to the man-made fruit in Punk Hazard, it has been consistently called a failure, which is interesting as from what we have seen, it doesn't seem like Momo has consumed a defective devil fruit at all. The first question we need to ask, what makes Vega Punk, the inventor himself, consider this a failure? How would the scientist have known the fruit was a dud without seeing the aftermath of someone consuming it? In the case of the artificial smile devil fruits, only 10% of those who consumed them were granted zoan abilities, with 90% of the fruits being duds. However, the only way through which someone is able to know whether one was defective or not is if it is consumed and seeing whether the eater was granted the abilities or not. Prior to actually eating the fruit and then seeing its effects, there seems to be no way to tell if one was a failure or not. Unless the artificial smile devil fruits were created by Caesar Clown and not Vega Punk, I think the same logic would follow that unless the artificial fruit which Vega Punk created was eaten to be tested, he wouldn't know whether it was successful or not. The argument could be that the scientist created a number of these fruits using the exact same formula and because all the others were defective, he could conclude that this one was as well. In which case, we would then also have to question, why then was this devil fruit saved and isolated in a secret room instead of being discarded? I mean, for something considered a failure, it seemed to be very precious in the way that it was carefully stored in a glass case. Now, let's compare the effects of Momo's devil fruit to the other artificial devil fruits which we have seen.  But in this way, it seems like Oda has set some precedent as to what dud devil fruits are like. Those who consumed the defective smile devil fruits not only lost the ability to swim, but also the ability to express any negative emotions, only being able to smile or laugh despite their true feelings. Even amongst those who ate the successful smiles, their abilities are still differentiated from normal Zoans, as in the majority of cases, smile fruit users can only transform parts of their bodies rather than using the complete Zoan or hybrid forms. However, Momo does not display any of these side effects. He's able to transform into a full dragon as well as possess additional abilities akin to that of dragons such as the use of flame clouds. Perhaps the only way in which Momo's ability differs is the obviously smaller size of both his dragon form and his flame clouds, as well as the fact that unlike other Zoans who intentionally morph into their Zoan forms, Momo's transformation is instant and involuntary as they seem to be triggered by his emotions. In this way, Momo's artificial devil fruit could be considered a failure only if the aim was to create a devil fruit which is a complete replica to Kaido's devil fruit powers and would allow its user to rival the Yonko in size and strength. However, I think these limitations have more to do with Momo's inexperience than with the mechanics of the fruit itself. Rather than the fruit being defective, I think it could be attributed to the fact that Momo has only recently consumed the fruit and as a result has not yet learned to control it. Not to mention that Momo almost had no prior knowledge as to what a devil fruit is or how they work. Think back to a younger Luffy whose inexperience and lack of prior awareness of devil fruits limited his ability to use his. Similar to Luffy, I believe that Momo's devil fruit powers can be improved through training because we see in Chapter 1008 that Momo himself says that he is better able to control his devil fruit abilities than when he first met the Straw Huts. And here I think this is how Yamato can be of use. Through his seeming knowledge of how dragon abilities work, Yamato can help Momo train and better utilize his devil fruit. In which case, if it is true that the only defect of this artificial fruit is that it has not yet reached its full potential to match Kaido's abilities and this could be attributed to Momo's inexperience, then this is huge news for the Alliance. If Momonosuke, who has the blood of Kazuki Oden, is able to fully master the devil fruit modeled after Kaido, the strongest creature in the world, he would be a massive help to the Alliance as Momo himself recognized in the latest chapter. And the fact that this was indeed mentioned seems to be hinting at what is to come. As to why Vega Punk would have deemed it a failure? Well, that's another discussion entirely, which I do have some thoughts on and can be discussed at a later stage, particularly if we get more information as to where the genius scientist's morality lies. But for now, let's get back to Momonosuke because even if Momo harbors this great ability, there's still the fact that he isn't able to control it yet. In saying that, I can't see how this may be resolved. In recent chapter reviews, I've been attempting to track where Momonosuke's group is heading. And though we haven't seen the Mystery Figure since chapter 1004, going by their last known location, the Treasure Repository, I think it's possible that we will soon see a run-in between Momonosuke's group and the Mystery Figure. Now, the layout of Onigashima and the Skull Dome is still a little hazy, so we can't say for sure. And please correct me if I'm wrong on this, but this is my understanding of some of the key locations for this discussion. The Treasure Repository is on the second floor, but external to the castle. We were also told that it is behind the tower, which seems to have been referring to the Right Brain Tower, in which case we know that the Right Brain Tower is connected to the outside of the Skull Dome too. I've mentioned in my review of chapter 1006 that I think Momonosuke's group is heading towards the entrance to go outside of the Skull Dome. And seeing as the Mystery Figure was no longer inside the Treasure Repository when the Scabbards woke up, unless they moved extremely quickly, it's also likely that they are now also outside, which means that Momo will soon be running into the Mystery Figure. And why is this significant? Well, it's speculation at this point, but it does seem like it will be certainly significant, as in chapter 1008, the location of Momo's group is withheld from us, with Oda only labelling them as Momonosuke's group without telling us their location, which is strange considering we've been given this information in previous chapters. As to how this ties back to Momo's Devil Fruit powers, I think Momo will be soon running into his mother, Toki. As you already know, unless you are very new to this channel, I am a strong believer that Toki is alive. And if this is the case, and I am also correct about the locations of these two groups or individual, that will mean that Momo will soon be running into Toki.  Now, if not Toki, my next bet is that the Mystery Figure is Hiyori, in which case I think this will still work as Momo has also been separated from his sister for a long time, but the emotional weight is obviously more prominent if this was Toki, not to mention that Toki is my top candidate after all. Anyways, we have seen on more than one occasion that Momo holds the words of his mother close to his heart, that he is his great father's son, and that he will one day carry Wano on his shoulders. What if we see a moment where Toki reminds him of this once again, resulting in Momo literally carrying Onigashima on his flame clouds to save his country? Whilst this would be a beautifully poignant moment which I would just love to witness, I am still stuck with some reservations to do with Momo's strength. Though having the strength of his parents would no doubt bolster Momo's strength, we do have to be realistic. I mean, this is a whole island we're talking about here, which Momo would have to ensure it stays afloat. Kaido is the only one known to be able to do this, and he is the strongest creature in the world after all. In saying that, I can see some other factors coming into play so that we can resolve this, which leads us to another of Momo's abilities, which has also come into focus in the recent chapter, The Voice of All Things. As I mentioned in the chapter 1008 review, I think that the comment Momo made revealing his knowledge of Luffy's current situation is linked to The Voice of All Things. Now, it's possible that Momo is using his Observation Haki as it was revealed in a Vivricard that he is an Observation Haki user, but considering the suspense created due to this scene, I don't think the explanation for Momo's ability will be quite so simple. Another popular idea, which I read in the comments section, seems to be that this has to do with the connection between Momo and Kaido through the Devil Fruits, which I do like the sound of, it certainly would fit the attention that Oda has drawn to Momo's comments, but I don't think that this is likely. If Momo is able to see things through Kaido's eyes due to sharing his lineage factor, it does make me wonder why he hasn't been able to see other moments. For example, when we find out that Onigashima is being lifted up by Kaido, Momo asks Yamato what is happening rather than seeing for himself what Kaido is doing. This same reasoning could be considered to suppose that Luffy also having the ability to hear The Voice of All Things means that he and Momo are able to communicate to each other. Again, I think that this is unlikely because it does then beg the question of why they didn't use this ability earlier. In saying that, my idea as to how Momo can sense Luffy does have to do with The Voice of All Things, as I've mentioned previously. And I won't be getting into the discussion of whether this ability is another advanced stage of the observation haki, though it is possible, the fact that we already have future sight makes me think that this isn't very likely. Anyways, whether it's a specialized form of haki or not, it still means that Momo is able to sense Luffy through The Voice of All Things, which is what I want to focus on. As we know, The Voice of All Things is the ability to hear the voices of inanimate objects and animals who aren't able to speak the human language. What is particularly interesting is that of all those known to hear The Voice of All Things, it seems Momo holds the greatest ability over it. Aside from Shirahoshi, whose ability to communicate to the Sea Kings seems also to be a case of her being able to perceive The Voice of All Things, Momo was the only other character and the only human able to converse with another creature using this ability. Whilst Luffy is also able to hear the tormented cries of the ancient elephant Zunisha, he says that it won't listen to him, and indeed, it was Momo's order which Zunisha listened to. What is more, it also seems that Momo was not only able to hear Zunisha, but was also able to make use of the elephant's sight and could see through Zunisha's eyes to witness Jack attacking Zo, something which we haven't seen on any other occasion related to The Voice of All Things. On top of the fact that Momo seems to be most in tune with this ability, we also know that he stayed behind that Zo to speak with Zunisha further, partly to find out more about The Voice of All Things, meaning that Momonosuke may have learned how to better use this power. In Chapter 1008, he says that he is better able to control his devil fruit. Who's to say that he hasn't also improved his ability to sense The Voice of All Things? As we know that this ability can also be used to hear inanimate objects such as ponyglyphs, so is it then possible that Momo is using The Voice of All Things to communicate with the Onigashima skull? All the objects or animals we have seen this ability used with have a recurring theme, in that they're all related to the mystery of the previous ancient world. Onigashima would fit quite well into this theme when we consider the giant skull and the sword which marks the mysterious island. Furthermore, the skull seems to resemble the shape of the head of ancient giants when we consider its size, but most importantly, its horns. As we know, all died 500 years ago and knowing that giants have a much greater lifespan than humans, it seems that ancient giants likely existed before and around the time of the void century. In this way, it seems that Onigashima and the mystery of that giant's skull is likely also connected to this period, meaning that it seems very possible that Momo would be able to hear the voice of the Onigashima skull, which is how he is able to know of Luffy's current circumstances. Also, I think it's possible that the skull's voice became louder as the battle on top of the rooftop intensified and Momo climbed higher inside the castle, thereby getting closer to the brains of the castle. We've seen this before in Zo, where the closer Momo got to the whale tree, the louder the voice became. And if it is the case that Momo is able to hear the Onigashima skull, I think that this will be taken a step further and we will see Momo use his ability to talk back and actually give orders. More specifically, orders to keep the island afloat and prevent it from dropping onto Wano. We do have a little problem here in that, at Zo, Momo was speaking to Zenisha, a living being who was able to take action, whereas here, we're dealing with an inanimate object. However, I don't think this renders the possibility impossible. I can picture a similar moment to Fishman Island, where Shirahoshi's cries were able to command the sea kings to pull the Noah from falling. In Wano, Momo would be able to use the voice of all things to communicate with some other creatures to help him keep the island afloat. At this point, it isn't too clear what these other creatures could be without the candidates getting pretty wild. For example, the Mountain God, which we saw in Odin's flashback, could come back into play here and being a massive creature considered a deity, it could help shoulder the weight of the island from falling.  It could even be the now fully grown Koyama or maybe even both parent and child. We also have the numbers who are admittedly in Kaito's crew, but we could see that they come under the control of Momo and the Alliance, although as we haven't seen anything to suggest this yet, this possibility does seem quite unlikely at this point. Or considering that the island itself seems to be a very mysterious and sacred element, perhaps Momo can talk directly to Onigashima. And if we were to get really crazy, which you do know that I enjoy, we could consider the skull of Onigashima which looks similar to that of an ancient giant's head. In my video regarding the possible candidates for the Odin figure of chapter 1007, I discussed the significance of the sacred tree at Onigashima which are known to house spirits in the Shinto religion. And whilst this didn't come into play regarding the Odin mystery, perhaps it could come into play somewhere in this arc. What we could have is the spirit of an ancient giant which was being held by the sacred tree, now free after the tree was cut down. And so Momo may even be able to command an ancient giant to help keep Onigashima afloat. However, as I discussed in that Odin video, I'm not too keen on the idea of spirits coming into play in one piece. Anyways, whatever it is, whilst in previous predictions, I've said that Momo would be keeping this island afloat through the use of his flame clouds, what if he can make use of the voice of all things to do so, or maybe a combination of both. I think this would be a really cool way for Oda to tie up a lot of things together. The payoff in setting Momo up to have an awesome moment, as well as the mystery surrounding his artificial devil fruit, whilst also making use of the voice of all things, which could even shed some light as to how Onigashima originated. Also, if we were to focus on the voice of all things for a little longer, I think Momo making use of this ability could even affect his future character arc following Wano. Because I think this would increase the chances of him leaving Wano to make further use of this ability. In the video where I discussed the potential of a new Straw Hat member at the end of the Wano arc, I discussed how Momo could be a candidate, as even though I don't think it's super likely, it still wouldn't be completely off the table because he could leave Hiyori to lead Wano, seeing as she is more age-appropriate. However, even if Momo doesn't join the Straw Hats and he does stay behind our Wano, this would be a very handy ability to have once he became a Shogun. Imagine if no one has to report anything to him and he's already able to know everything that's happening through the voice of all things instead. I'm sure after this arc, Wano will become a location of interest for many different groups, perhaps most notably the world government, and having this ability and Momo's proficient use of it would be very useful. But that brings us to the end of this discussion. Thank you for listening to my thoughts on the topic and please let me know where you think Momo's character arc will take him in Wano by leaving a comment below. Please don't forget to subscribe if you haven't already so that you can keep notified of any other discussions we have about One Piece. This is Joygirl and I'll see you again soon.


Okay. Welcome everybody. Thank you for showing up. So my name is Doji, and so this is Sini. Well, I work for Red Hat in the Platform Toolchains group, and I mostly work on static analysis framework to perform analysis on binaries so that we can analyze, ABI's and so on and so forth. So Sini, what are you working on? Hello. Good morning everyone. So I work in Fedora team. Before that I was involved in Libabigil directly, but now I mostly do some Fedoratomic host and Fedoracora stuff and also contribute sometime to the Libabigil project and how we do ABI verification in Fedora. So that's what today's talk is about. And one thing I'd like to tell you that Doji has been my mentor for a long time, and he helped a lot. So yeah. Okay, let's start. So today we will be talking about these stuff. So you will see how exactly we are doing ABI verification in Fedora, how exactly the design looks like and what are the internal tools which we use for the ABI verification and analysis exactly. And then we will look into how we are doing in Bodhi, the gating of the packages update during the Bodhi update run and then the future directions. So our ABI verification design in Fedora is based on the Taskatron. So how many of you know about the Taskatron? Okay, cool. So if you don't know, Taskatron is a framework which helps you to run the automated tests. And we use it in Fedora to run some tests like RPM lint, RPM grill, depth check, and also for the ABI checks. So how exactly we do? So whenever you do a package build, so how many of you have done ever package building in Fedora? Okay, that's cool. That's really nice. So whenever you do a package build in Fedora, so not scratch build, it's a non-scratch build. So once it succeeds, there is a Taskatron task gets triggered. Among them, it's a Task ABI check. And what exactly it does, it takes the package which you just updated and then it takes the last table update, updated package available in the Fedora and then it will perform the ABI comparison between them. And during ABI comparison, it takes the shared libraries which is available inside the packages and it will do the comparison from the previous version of the package library and from the latest one which you have just made the build. So once ABI checks runs, you will see the results like failed, passed, or need inspection. We'll talk more about how exactly we categorize this failed, passed, or need inspection in the later slides. So for now, the package maintainers can see the results of this test, how exactly it is like passed, failed, or need inspection and the logs of the test results, what failed or what's there. So for that, you really need to go and add yourself to this notification and you will see get an email for that, the package test run and you can check how to fix it, the log contains all the details also. If not, if you are going to push that update into Bodhi, the package some set of test runs if you recently have done or maybe in late before that, you will see there is a tab inside the update package, Bodhi updates any package, there is a tab called automated test. So that's where you will see ABI check test as well. For instance, we have this link at the down Bodhi.FedoraProject.org slash update. So you have this tab here which has all the automated tests and somewhere you can find, I don't know, the ABI check tests here. So it passed. So it says that there was no ABI change. So it depends how exactly the test run. If it has some ABI changes, it will show it here otherwise you will see no change. So that's good. Now we will talk about how exactly the design of the two links look like which we use for actual ABI analysis using the lib Abigail and I will hand over to Dochi for that. Okay, thank you Sine. So a few years ago when people wanted to know if a library update contains ABI changes, people would use tools like NM, I don't know if you guys are familiar with that, tools to go look inside the health banners and see what symbols, health symbols are in there. And the kind of changes we could see back then were changes like a symbol disappeared. For instance, you had one symbol which was the symbol corresponding to a function name and boom, that symbol disappeared. And that's an ABI change if the symbol was obviously used by some applications. But then we wanted to have more precise information related to the meaning of those symbols, right? Actually programmers don't even want to talk about symbols. Programmers talk about things like functions, variables and their types. Symbols, that's too much of kind of plumber stuff, right? When you change the type of a parameter of a function as a programmer and if that impacts the ABI, then you want to have reports in terms of what you changed like in terms of types, structures, structured data members and so on and so forth. So to be able to give that kind of information by looking at the binaries themselves, we came up with a framework which name is ABI Generic Analysis and Instrumentation Library, ABGEL. And so that's basically is a library that knows how to, yeah, incidentally we were to starting this project and ABGEL was also the name of the wife of the other guy, but anyway. So it just stuck, no one came up with a better name, so we just kept that one. So that library, which is a C++ library today, knows how to load an ELF binary and of course it's debug information because we need the debug information to be able to know which kind of things we're looking at inside the binary. Debug information will tell us that, oh, from here to here what you're looking at, a variable. That variable has a type. The type is a structure, blah, blah, blah. So we need to analyze debug info just like any debugger or, I don't know, things like Valgrind or and so on and so forth would do. So we load that and what do we do with that? We build an internal representation of the exported interface, right? Just like what a compiler would do, but the compiler will do that from source code and we do that from the binary. So we build an internal representation which is a graph basically and some nodes of the graphs are types and interfaces. Interfaces meaning either public functions like exported functions that are not static, for instance, in C or global variables, you know, things that applications can use, you know, from the binary. So we build an internal representation of that. And then the library also has facilities to compare two graphs, two internal representation. And then once we've compared that, I mean, like think about it as what GNU-DIF does, right, on text files. But one of the big differences of what we do compared to GNU-DIF is that once we have the result of the comparison, we just don't spit it out. We also build an internal representation of the changes as well. You know, not every single change needs to be, like, emitted, reported as is. Let me give you an example. You have, for instance, I don't know, two functions. The first one is name is foo, let's say, yeah, all the functions are named foo, someone. And the other one is, you know my example, right? Bar. So, and the two functions have, take a parameter, which is, I don't know, in C, a pointer to a structure, for instance, I don't know. The structure's name is s. And suppose that we run an ABI comparison between the two versions. So this is a super fancy library we have, right? And we come up with a new version of it and we modify s, the structure s. So suppose that the report says that, okay, in function foo we have a change and that change is, well, it's s that changed, basically. And because of that, it did impact foo, right? Do you want to know by default, for instance, that bar has also an ABI change and that change is due to s? You can say yes, but usually most developers who came up with ABI, ABI div result at the beginning told me, ah, this is noise. You told me about the change of s on foo. I don't want to see the change of s on bar either, you know, like by default. The second one is redundant, okay? So whenever we have the internal representation of the ABI change, what we do is that we analyze that as well and then we will flag stuff, like redundant stuff or, you know, changes that are not meaningful. For instance, let me give you another example. If you're analyzing a C++ library, for instance, and you change some data members, moves from being public to private, I don't know, or the other way around, okay? This is a change and we see that in the debug info and we detect that. But is that really an ABI change that is meaningful at first sight? It doesn't really, you know, break things, basically. Some programmers would want to see it, right? So we will put that in another category, which is a category, you know, which says, okay, it's a change but not very important. So we do all these things on the graph of ABI changes as well. So this is where we're different from something like new div, you know? We also work on the changes. And at this point, we give a chance to users to say what they want to see as changes and what they don't want to see. For instance, you can have a second function, a third function named baz, I don't know, so full bar and the third one is baz always. And for a reason, baz is exported, you know, as an elf artifact. Programming model in your project, baz is private to you. It's only meant to be used by other libraries that are part of your project. So baz is public from an elf perspective, but exactly. You don't put baz in header files, for instance. So you don't want to see changes on baz, even though it's public. Yeah, programmers are weird sometimes. So for that, you can write what the Valgrant people called a suppression file, right? Saying, okay, this function, I don't want to see any changes related to it. We call that suppressions. And so suppressions will be taken into account when we are analyzing the graph of ABI changes. Okay, so this will be at that point, basically. And then we have passes. It's basically compiler stuff. We have other passes that will walk through this graph of changes and will report those changes. Okay, so you see the pipeline a little bit? So this is what we do. Sometimes it can take a lot of space and time, because if you look at it from a tool chain perspective, what we do here is just like what linkers do. Okay, we look at the library, the .so file. And from the .so file, we break it apart and we look at every single translation unit. You get that translation unit that made up this .so file. And from those translation units, we build a common model, right? So just like what linkers do, except that linkers don't look at types, right? They just look at relocations, symbols, and so on and so forth. When you start looking at types, things can become really messy and super big, okay? So that's the main difference between us and linkers, but they're similarities. So based on that library, we came up with different tools directed by the feedback we got from you guys, from users. So we came up with a tool named ABI package diff, which takes two RPMs today. Someone added DBN support, so it works on DBN packages as well, anyway. And for those RPMs, we will look at, you know, the binaries or only the shared libraries. It depends. I can look at both that are in those RPMs and we will perform comparisons, ABI comparisons on them. Of course, for that, we also need the debug info RPMs, okay? And these are, so it looks, things always look simple when you put them on slides. But think about it a bit. The debug info is usually stripped when we use our, you know, RPM pipeline. The debug info is stripped out. So we, that's one thing. And secondly, it is compressed. You know that, right? We use a compression scheme carried by a tool, which name is DWZ. So it's an ad hoc compression scheme that we use. I say we, I mean the tool chain people. So what Lee Babigel does here is that it also has to decompress this debug info. So debug info that will take, I don't know, like one gigabyte of space decompressed. Right? So decompressing that has, you know, bring challenges because we have to, you know, try to reduce the memory consumption, you know, to not make things explode. There are interesting things there. So we do that. Bug info. And then we also take the develop RPM packages into account. Because remember, we were saying that you can have some exported functions or global variables that are not meant to be, like, consumed by applications. They're meant for internal purposes. How do you know that these are internal stuff and not public APIs? What we do is that we look at the header files, okay? And we try to be maybe too smart for our own sake. Because one of the main purpose of what we are doing here is that we don't want to look at the source code. We really don't want to do that. We want to look only at binary files. Do you get why? Okay, the reason is that, I mean, there are some profound implications to that. Because today, when you look at the source code, you cannot know what the binary form is going to be. Because in C and C++, we are subject to the tyranny of the preprocessor. Which means that there are stuff missing from the source code. You know, there is information missing. Meaning, for instance, the value of the defined, you know, of macros. You don't have that when you look at the source code. So you have to know the build system stuff. So once you start willing to parse source code, you get into a rabbit hole. Because you need to be able to parse the build system. And we have auto tools. We have mess and we have, you know, it's super messy, the world of build systems. So we just want to look at the binaries, right? And then, well, then you have the binary form, okay? But then, now we want to look at header files to know what the public interfaces are. So what we do is that we are going to, when we analyze the binaries, we look at an interface. And in the debug info, there is information in there saying where, in which file, this interface has been declared or defined. I'll repeat that. When you have a structure that is defined in a header file, a foo.h file, that information is present in the debug info. So you see that struct S is defined in foo.h, okay? And then what we're going to do is that we're going to go get, see if we have foo.h in the header files in the develop RPM. If we do, then foo.h is part of, you know, the public interface defining header files. So we know that S is part of the public interface. That's how we do it, you know, without having to parse the header files. So we need the develop RPMs. So once we have that, we will auto-generate some suppression specifications, saying that whatever is not in foo.h, we don't want to see its reports. So this is how we integrate all this in the pipeline, okay? To reduce, of course, noise in the final reports. Then people were not happy enough. They wanted to do weird stuff, programmers again. So we came up with a tool which name is ABI DW. What does it do? It emits a textural representation of the ABI of a binary. So suppose you have a binary. You want to know what is the ABI of that binary, and you want to save that ABI into Git without having to save the binary into Git, right? Because nobody wants to save binaries into Git or something. So ABI DW just pits out an XML file. We call that in a format that we call ABI XML. So you can just take that boom and stick that into Git. And then afterwards, there is another tool which name is ABI DIFF, which can take an ABI XML file and a binary. So you will compare the ABI of the binary against the ABI of the ABI XML file, which is the baseline ABI, for instance, for you. And that is useful for people to build ad hoc ABI checking stuff that they can run during the build system. There are some upstream projects today that have a make check ABI target that is run regularly. And so they use this kind of stuff, OK? So many people do have different use cases in mind depending on their project. And if we don't have the tool for that, I mean, it's OK to come to us and say, what if you guys could come up with this kind of tool and we will try to write it if possible. And if the libabigail library doesn't have the features needed for that tool, well, we'll just add it because we don't know all the use cases in advance. And there is also Fed ABI package DIFF, which is intended for Fedora specifically. As you can imagine here, using ABI package DIFF can be tedious. You have to get the two RPMs you want to compare. You have to get the debug info RPMs.  So we said rather than being fed up, use Fed ABI package DIFF. And yeah, I do my best for jokes anyway. So this one is quite cool, even though it's written in Python, nobody's perfect. I didn't write that. But anyway, apparently, writing it in Python was mandatory so that we could use the Koji interface or something. There are always bad reasons to use Python. Anyway, but it's a cool tool. Seriously, I like it a lot because you just say Fed ABI package DIFF, you give the name of a package like, no, Fed ABI package DIFF, you say from Fedora 27, for instance, and the name of the package you've just built, right? The RPM, you just like HTTP something.rpm. And so Fed ABI package DIFF is going to compare the ABI of the HTTP package you just built against the stable one from Fedora 28. You don't even know the version. You don't even know where it is. Just go grab it even if you can do some nice stuff in Python, apparently. Anyway, and it works. So this is typically one of these things that we didn't think about in the beginning and Fedora users met us right. And we have other tools as well, but I won't bother you guys too much with those for now. So, of course, today Task ABI check, so the ABI verifier of Fedora uses ABI package DIFF. As a matter of fact, it was because of ABI check that Cini wrote ABI package DIFF to begin with. So always this, you know, use case-driven approach that we have. We don't do intelligent design that much.  Anyway, so what we do is that, you want to talk about this one? Yeah, okay. We just compare, so the new package against the old one, as you guys know. And because this Task ABI check uses, uses the TaskAutron infrastructure, there's some lot of nice magic in there to get, you know, the debug info packages, the develop packages. I call that all the ancillary packages needed to do, to perform the comparison. And it's all magic. Boom, TaskAutron infrastructure gives us everything. And we can perform the comparison without TaskAutron knowing exactly, you know, what's happening. And so, yeah, it's kind of, you know, well integrated. And I, for instance, just to give you an example. At the beginning, we wanted, well, I wanted, I like multi-threaded stuff. I like doing stuff in parallel.  Is it, you know, like multi-threaded, blah, blah, blah.  TaskAutron just calls it and we perform, you know, like, if, I don't know, if your, your RPM has like five libraries and you have at least five cores, right, on the machine, then the five comparisons are going to happen in parallel, you know, this kind of stuff. So it's pretty, pretty neat. So as you know, we get the public interfaces from the DEVEL package and we provide, you know, expression automatically based on, based on that now. So as a result of this, you have to know that, I mean, ABI comparison is a gray area kind of thing. We cannot say, you know, we cannot always say if a change, an ABI change is good or bad, basically. It depends. There are some that are, you know, bad, like, I don't know, a function disappearing, a public function that is in the interface that disappears. A type, I mean, like, for instance, a return type of a function that changes completely. We flag that as not good. But there are other changes that are weird. So the first kind of change, when we know for sure that they are not good, your test failed, failed, sorry, the status of the test is failed. But then suppose you have a structure, I don't know, which gets changed. Like, you remove a data member from it and you add a new data member to it, right? And the size of the structure doesn't change. Is that good or bad? Hard to say. So we flag it, we detect it, and we say that this kind of change, it needs inspection. So these are the kind of gray kind of things. And then there is something I wanted to say here is that if you keep seeing these kind of changes consistently for your project, you know, and in your opinion, there are better ways to categorize these things, come to us, and even for your project, we can figure out a way for these needs inspection kind of changes to become either failed or passed. Is that clear what I'm saying? Yeah, because we need to evolve that way based on your feedback. I don't just say, ah, the tool said this, ah, this, okay, I'm not gonna use any F words here, but okay, this tool, yeah, no. Yeah, Fedora, yeah, yeah, of course. This Fedora tool, yeah, thank you. No, seriously, come to us and we'll try to figure out something. This is how we grow and get better. All these static analysis tools need to, you know, start with input from users. So this brings us to the body updates getting project. So as you guys know, at some point, well, I mean, even at some points, people wanted to use more automated tests to get package updates through body.  I mean, using this ABI check as a gating, right? Yeah, so, and we have pretty interesting results. Thanks, Ochi. Yeah, so we already have the test running in body updates. In the web interface before. So this, with the current approach, what happens that package manager, package maintainer can go and see in the body test results, whether ABI check has passed or not, or he can go and see in the email notification that the test has passed or failed. But there is no way that we are saying that, okay, go and fix it. Maybe maintainer can go and just ignore it. And we might have seen a lot of, some of at least email threats on Fedora Devil that this package has been updated and there was ABI change and it has not been announced and that leads to a lot of package being failed. So we tried to do in Fedora to get the body package updates using the ABI check as well. So in January end, I think we started getting the package updates with some other tests. There was the ABI check as well. And in this, what we do is that whenever a package is pushed and the updates is available in body, if there is a failure, then it will stop it from being pushed default. It needs to be inspected by the maintainer. He needs to fix it or he can go and weigh with. That was the approach, but it didn't work out and it just failed. The reason we look at it. So basically what happened that we got very quickly some feedback that the tests which are running ABI check is getting them. It's like there was loss of false positive results coming up and they cannot really push the updates available. And then the reason was we look. Yeah. So what happens that in the shared library we drew ABI comparison for all the shared library available in the package. And the issue which we faced was there were a lot of libraries which were considered as private libraries as well as the maintainers. For example, if you go to the LibreOffice package or anything, there are some shared library which is supposed to be used for the internal purpose. The private libraries is like, yeah, it is being used for just inside the project and it is not supposed to be used in the other applications. So these changes were really not supposed to be getting the package from being pushed to the stable. So what we did was we stopped the gating based on ABI check as soon as possible and then we started looking into how to fix that. So there was really no way in the ELF binary to say that this is a private shared library or a public shared library. All are like just a shared library. So we came up with an approach after some discussion that if an RPM package says that we provide these SOs, so we consider only those as the public shared library and the rest of the library would be the private shared library which is supposed to be used only inside the application and got implemented into the Lib Abigail itself, ABI PKG TIFTOLIQ. And another was it was a minor stuff which I think we may start or we came to know about while doing this fixes. So we were, so suppose if you have an RPM package update and there are some sub-packages, so if you don't ship devil or a header packages into that which means that we should assume we don't really want to use your application to be consumed by another packages. So if you're not shipping any devil package, we are considering it as private. Any shared library is shared as private. We do not consider it as being used consumed. So that we implemented inside the task ABI check itself and these are the two things we did and Lib Abigail 1.4 which was recently released contained the fixes of the first issue and it's now again ready because these were the main issue which we saw so far. So maybe we can enable again the gating of the Bodhi upon the task ABI check. So initially it was I think enabled for all the packages but maybe this time we can start with gating some of the packages or obtain basis like some maintainers who wants to opt it. They can obtain and see how it goes. So yeah it's just open to suggestions what we should be doing. There's one more stuff like if you really not satisfied with the current separation which we do like not considering the private libraries and if you still want to suppress some of the libraries or any inside symbols as considered to be private, you can write your own ABI specification. There is a you can have ship dot ABI ignore file inside your package and you can ship it and Lib Abigail and the two links or top of it will take care of it and it will not show you as any ABI changes as a false positive. So that's all and we'll look into the future directions. Yeah future directions. So first of all before even getting into the specifics of what we wanted to do in the future and so on and so forth. I wanted to say again that it's do not please do not be shy. I mean come to us. There are many things that are project dependent. For instance, so Matthias is here in GTK and G object based project in general. There is something that's been in the back of my mind for some time that we need to do and we haven't you know done yet which is that okay you know by default today we only look at interfaces that are public you know not static and we get the types that we look at from those interfaces. These are the roots of the graph that we built. But then in GTK and G object stuff you have some static functions. So they're static. They're not seen outside the binary. For instance the class stuff you know that we should look at because these things defined some of the types that are used in the GTK application and so on and so forth. But because the function that use these types are static we don't see those. So someone can break these things you know these V functions that end up like V functions in the class structures. So I think we can do something like you know detecting that we're looking at the G object thing and look at those static functions as well rather than just ignoring them. We can do that but it's project specific and we have to you know like yeah define how to do that. So yeah it's important that we get to have these discussions even if you know we're like bandwidth stripped. We can still design what we want to do and then when I have the bandwidth I'll you know work on that. So please get you know come to us and so we can do stuff for your project. We even supported ADA recently like if we do that we can do many stuff right. There are some people like who want us to support Fortran. Yeah anyway so yeah we can do a lot of stuff. So first of all I think one of the first thing that people are asking for is speed improvement. We get these like all the time but it's never enough like for instance if you want to analyze Firefox you know. Okay so basically what I think I would like to look into now is doing things more in parallel. It looks like well at a deeper level. So I told you that we're building an internal representation okay but we're loading two binaries usually because we are comparing stuff right. We're loading two binaries but at some point we are building just one graph even though we have two binaries because there are two graphs but we try to share many things. So if for instance we're loading the first binary okay we did load the first binary. We're loading the second one and we see a type which name is INT integer. We've seen INT in the first binary too right. But this time the two INTs are the same. What do we do? I don't build, I won't build another INT you know. That is memory waste. So I will reuse the first INT you know. So even though the two graphs are different they were used there are some nodes that are...


Welcome to the last set news to get top stories in crypto. That big amount of bite-sized pieces today. Just like the thumbnail suggests, there's a lot of things going on behind the scenes, which people need to be aware of about how great the crypto market is actually doing, as opposed to what is being said. So first up, bullish cryptocurrency exchange prepares to launch and go public on the New York Stock Exchange. And this is going to be spearheaded by one of the former presidents of the New York Stock Exchange. And you have to make mention of this, is that this exchange is not just a general rule of exchange like a coin base or like a Kraken or something like that. They're going to be combining the best aspects of DeFi, as far as like gaining yield, the exchanges, the liquidity, and bring it all together so big money players can actually get into it. And this is just one story where you really need to pay attention to. Because if not, you're going to get fooled. And we talked about this yesterday about how these different institutions and entities out there, they want to make it seem we're on shaky footing when in actuality, we're on the precipice of really going mainstream and being big as far as the crypto market. And this is one of the stories that we talk about. So we'll take a look at that. And then also on the fact that I know that the market is very boring right now, but this is when all the money is made. I'll explain that as part of the last parts. And this is when we really should be front running all these different big people like Scott Menard from Guggenheim and JP Morgan, all the ones that are spreading fud and whatnot. And lastly, I just want to talk real quick about Graham Steven and his channel being deleted and what's going on and how he can prevent that, which is the same thing that I did to prevent my channel from being deleted. And we'll talk about that last, but first, take a look what's going on into the market. So today it is the 10th, 11th, geez, 9 a.m. I'll pass the Texas time. Look, usually every Sunday there's a big dump, but ever since the Bitcoin miners have gone out of China and all the different Asian markets have been shackled with what's going on and not being able to trade, we don't see too much of a dump on a Sunday. Sometimes it comes on a Monday or Tuesday and it's just like a little bit of a pullback, but Sundays are actually pretty decent and everything's just kind of going a little bit sideways. So market cap is 1.41 trillion. So we may have, you know, got a hundred billion here and there, but who cares? That's not what we're here for. We're here for the 10 trillion market cap. Let's just be honest. And the difference, I'll take a look if there's anything up today. Right now Bitcoin price is almost $34,000. Let me blow this up so you can see it. 24 hour change. We've got Bitcoin 0.53, 1.66 for Ethereum. Anything big? I don't really care about the small stuff. Tether, nobody cares. 2%, 1%. No, not really. So enjoy a Sunday as a trade sideways. Ooh, tear a Luna up. So what are you going to do? 7% for Cosmos interoperability. Gains favor. All right. So that's what's going on the market. Again, not a big deal. I know it's boring and this is when nobody really cares, but this is when you really need to pay attention. And which leads me to my first point, the bullish exchange on the New York stock exchange. So real quick, I'm not going to go through the whole article. It's pretty self-explanatory, but just some main points. This bullish exchange announced its plan to go public on the NYSE Friday through a merger with Far Peak Acquisition Corporation. Far Peak is a SPAC or a Special Purpose Acquisition Company. You're going to hear that word a lot. So just get used to it. Special Purpose Acquisition Company, and they do a lot of great things to acquire and get things as far as publicly traded stuff. And this was a quote, bullish plans to launch a revolutionary, regulated crypto exchange that offers deep predictable liquidity for investors to generate yield from their digital assets. What does that mean? Get that in a second. Far Peak CEO, Thomas Farley, a former New York stock exchange president, will become the CEO of bullish and block one CEO, Brendan Blumer. Blumer, I don't know. Will be appointed as chairman. And just real quick, remember this old adage, it's not what you know, it's who you know. And Thomas here probably knows a lot of people with a lot of deep pockets. So I think this is a match made in heaven. We'll see how it all works out. But the thing that interests me is just about what he said in this interview. And we're going to go over two sound clips, ones a minute, ones like 45 seconds. I just want you to listen to what he says and how different it is. And also take a listen as to where he thinks crypto and digital assets are going. This was the most telling for me as to where we are going. Remember, former president of the New York Stock Exchange is talking. Let's take a listen to what this guy actually says, because I guarantee you a lot of people are listening to what he's saying. I mean, for your viewers, this is an opportunity to invest early in a digital asset market structure business. I believe it had a lot of rewards. I'm going in as CEO of this business full time. Certainly any business with significant potential worth also has significant risks. And I encourage your viewers to study those as well. But I think this is a big idea Look, digital assets are here to stay. The smartest people in the space are saying they're here to stay and we're going to grow and build as different problems are solved. That's essentially what he's saying. So when all these different other people are like, ah, it's going to go to nothing, it's going to go to zero, it's going to be a crash. To me, if you're looking at the small swings day to day, yes, this is very stressful. Yes, there's a big difference between one day 20 to 40%. That's not why why you should be here. And I can't give you investment advice. I'm just this investment opinion. So I should really have said, this is why I'm here.  And here we are with a huge disruptor in the industry. As far as everything we can probably think of crypto and digital assets. So I will not interrupt. Let me let this guy speak some more. The hearing talent is going into digital assets. Digital assets are solving very important problems. Anybody that tells you they know exactly how it's going to turn out is lying or delusional. But in general, you're going to see more and more interesting use cases, more and more dollars going into the space and being able to provide predictable liquidity with a $9 billion balance sheet and teaming up with the, you know, this visionary entrepreneur who I refer to feels like feels like a really great opportunity to me. Brandon Hash and viewers view bullish in relation to the companies they may be more familiar with, like a Coinbase or Binance, etc. Yeah. So bullish is really focused on passing a lot of the beneficial interest to those that actually provide the underlying liquidity that creates the network effects of exchanges. As Tom mentioned, we're combining kind of the market architecture of DeFi-based concepts and bringing that to the high performance central limit order book. So we're kind of kind of bringing together the third party bids and asks you would normally find on traditional centralized exchange, but then augmenting it with that deep liquidity that acts as a portfolio rebalancing function for those that are depositing into them. So right there, can you imagine if you were traditional money and you're trying to get into cryptocurrency, like, I don't really know about this stuff, these exchanges and there's hacks and there's different things and I don't really get it. They're like, well, more present New York Stock exchange is in here and I'm not talking about yield and getting that and providing liquidity. Well, I do that as far as a market maker, maybe I should get into this. It's just that simple. I mean, really if you think about it, now there's a long ways to go, but I think this is definitely a step in the right direction. I'm excited this is actually happening. So yeah, providing liquidity, it's not like Coinbase or Binance is, well, Binance does it a little bit. And then of course Coinbase says Coinbase earn or whatever they call it. But yeah, if you're looking to gain liquidity and you have a massive amount of money, I would just go into crypto because it seems like everybody's getting into it anyhow. So this might be the next big pull for FOMO and investors. And then lastly, I want to talk about, this is the last piece that's going to fast forward to 250 and right around here. And what this is is about, we talked about this in the channel. I know people don't like it, but it's true. We need regulatory clarity and this is why. Just take a listen. It's a non-blockchain company such that can't simply just list an ERC-20 Ethereum compliant governance tokens, get the whole pain of going public. Was that ever thought in your mind, Brendan, that there is a way of raising money without using the traditional financial markets? Absolutely. And it's a great question. As you mentioned, the crypto thesis is all about allowing people to have economic exposure to the projects that they're associated with. And so that was really important to us. And that's why we're going public, simultaneous with our launch. But it comes to why did we choose to actually do this on the NYSE as opposed to just issue a token? There's a lot of regulatory uncertainty around the status of some of these tokens, which creates some jurisdictional hurdles and exclusions of certain types of parties, and a lot of just regulatory uncertainty for the company, but also the investors. So we thought that this was a tried and true avenue that would unlock new types of capital for the business, but give retail investors the most protection and access to holding a piece for our company. Yeah. So I mean, that really just all comes out of that. Like, if there was regulatory clarity, I bet a lot more businesses would really get into it and go, oh, we can do this and this and this because we know exactly where we stand. We have equal footing. Nobody wants to start a new business. Then all of a sudden you get sued. It's like going, okay, I'm going to start a fast food restaurant and we'll call it McDowell's. And then like McDonald's is like, no, you can't do that. Well, we have the golden arcs, not the golden arches. You're like, no, there's regulatory clarity here. I mean, as far as like like trademarks and franchises, you can't do that. And of course that would protect a lot of people. It's just, it's a, it's not a great example. But you know what I mean? Like if there is more regulatory clarity about what is a commodity, CFTC, what is the security, the SEC, and what is a currency office of the Comptroller of currency, then maybe you can actually figure it out as far as businesses and get things going, get things started. That is just my two cents, which leads me to my next point. I think that this is a step in the right direction. And when we take a look at what's going on, it's a good thing that these are happening. But again, we take a look at what's going on around us. We talked about this yesterday about how these entities try to fool you because they're trying to bring this price back, I believe, and this is just a guesstimate, about what they could actually get or dip their toes into. Look, I mean, would you want to buy Bitcoin at 64,000? Wouldn't it be great if you just buy it at 10,000? That'd be pretty cool, right? Well, it's hard for me and you to do that. But it's not too hard for like a Scott Menard over there at Guggenheim to say, hey, there's no reason to own Bitcoin. It's kind of, it's kind of ridiculous. Also, it's a, it's a tulip bubble that he just talked about recently, which is very odd because we talked about this yesterday is that he also said five months ago that he believes cryptocurrency could go as high as 600,000. He's talking about Bitcoin. And he told Bloomberg that it could be right now it's worth 400,000. This was months ago. And then, of course, now this is recently. I don't, I believe one of the reasons is because they want to pull that price back and they're not dumb. They're pretty smart money. They've been in this game for a while. They can manipulate things. That's just how it goes. They manipulate markets as far as like precious metals. Speaking of which, JP Morgan comes out and says, hey, this grayscale Bitcoin unlock, which is going to happen July 19th to the 28th, actually a little bit before then. But they're like, it's going to drop dramatically. It's going to just really just mess with the market. $10,000 incoming. And I try to do this on the channel every time is that you have to understand with grayscale, they're selling their shares. They're unlocking the shares of the Bitcoin trust. It's kind of like an ETF, but not really, and they're not selling any Bitcoin. So don't fall for that. Don't fall for the fud of what Scott Menard talks about.  Thank God they're getting out of there. Come to Texas. We got a great state. And you take a look at the other things. That's why I think things are going pretty well. And then this leads me to my next point. The market's boring. So we just saw that everything's kind of choppy and moving sideways. That's what, look the institutions, that's what they want. They want just to move sideways and not go parabolic so everybody can get in and raise the price. They don't want that. They want it to go down. They either want it to go sideways or preferably down. And this, my friends, is really where all the money is made. And I've said this before, and it falls on deaf ears because as the market slows down, so does my channel and so do people listening to crypto people like myself.  This is so boring. And I'm trying to shake people like this is when it's made.   So really in all honesty, we got a front run. We have to front run these guys. All these institutions, this is when the money is made, moving sideways. This was in 2016, 2017, 2019 and 20. I didn't get to invest in 2016 because I wasn't, I didn't really realize what was going on, but I invested towards the top like everybody knows in this channel. But as things move sideways, I made a ton of money, a ton of money, just dollar cost averaging when everything dropped down at the ground. I wasn't a great investor, but I learned one thing and that is never buy at the top. And usually the ones that make the most of my money are the ones that just dollar cost average, value cost average, or just get into the middle.   It's 100% free. I made it 100% free. I made it so anybody can get into it and understand exactly what crypto and digital assets are and how to be a little bit more smarter of an investor. This is only investment opinion, not investment advice. And I hope people will actually listen to me this time. And that's when money is made. So it's either when it's choppy or it's kind of going up a little bit, but that's the best time. So let me just think about it in the comment section. Hopefully you're here and dollar cost averaging like I am, but that's up to you. And then lastly, I just want to just really quickly and I don't really, I don't really watch this guy, but apparently like millions of people do. So good for him. So there was this video by Andrei, I can't say his last name, but he's got a lot of subscribers too. Anyhow, and he just talked about how Graham here is going to lose his channel because of all the different, let me see if I can find it. And you probably have seen these comments, all the different spam comments. Not like this. That looked like this or something like this. And you'll see it in the, in the comment section like, Hey, you want to talk and whatever else. So if you noticed in my channel, we don't see that. You don't see that. I mean, you'll see it like for like maybe 30 seconds and it gets wiped away. And a lot of people don't get it. Even on my old videos, you don't see it too much. And this was a huge problem for me three months ago or so. And I had actually asked people to what their resolution was. Nobody had an idea, but then I was reached out by a company, actually a couple of guys, and they said, Hey, we can, we can fix this for you because that's what we do. That's what we're, we're going to start it up and see if we can do it. And it eliminated all the, all the comments or most of the comments. And it's called YouTube guard, ytguard.com is linked in the description. Obviously, this isn't for you, but what it does make sense is this. So I reached out to all the YouTubers that I knew as far as like crypto influencers and ones that I didn't know. And I reached out to them. I go, look, here is this program. I've used it for a month now. And in the beginning, it wiped out 70% of spam comments.  And it's good to spare your, your subscribers from getting screwed over and scammed and everything else, because beforehand, people would actually DM me and go, Hey, I thought it was you and I sent them some Ethereum and it didn't really work out. Those are scammers. And I can say this every single time on the video, but it gets repetitive and boring. And then people like, well, I didn't see that last part because I didn't say the end. And then of course I got screwed over and it's just a big long thing.  That's really what it comes down to. Yes, this Y2 guard is expensive. Yes, it's a little cumbersome to get going. But these guys help set it up. And that's a bummer, but it is what it is. So I'm going to do a video over on Dan clips about this, this whole thing. But if you know of any YouTubers, send them to YTGuard.com. And I don't give any money from, from these guys.  They give me a discount for my monthly rate if somebody mentions Dan, but they don't give me any money. But I use them all the time. And that's why the comment section is a lot cleaner than, than a lot of other places out there. So look, that's it. That's all I want to talk about. And if you liked the video, first of all, thanks for, for going all the way through my rants. I appreciate it. If you liked the video, give it a thumbs up and a like. Also consider subscribing. A lot of things we talk about are very time sensitive on this channel. Over on Dan clips is more of the advancements in crypto and projects and different crazy stuff like this and more live streams. So we'll do, that's over there. But that is it for today. Thanks so much for watching. I appreciate it. See you on the next one.


Hello, and welcome to this video by me Chris of films by Chris. That's Chris of the K link in the description and If you've been following my channel for a while, you will know that I do like to do hardware projects In fact, I have a second channel that's geared towards hardware and I love the ESP 8266 chips. These are little tiny Chips that have Wi-Fi in them. They're like a buck fifty to three bucks depending on what model you get and think of it as like Like like like well originally they were being used as Wi-Fi modules for arduinos And they'll someone realize that you can actually program and do a lot of stuff with them without the need for the arduinos so for a few bucks you can have a Wi-Fi enabled arduino type board and I use them all of my house for different things and one of the things I use them for is I have water pumps on the side of my house You know for my water system and I've already had one pump go bad because it was running constantly by accident so I hooked up two of them one to each pump and Every time they turn on they hooked my Wi-Fi and they log that they've turned on and if they run more than a certain number of minutes Originally I did five minutes I think I've knocked that down to two minutes because they shouldn't be running consistently longer than that it starts sending me alerts to my phone Well And I set it up so I can log into my server because it's all logged on my server and I can do I can just type in Pump and it's gonna give me Outputs here of every time the pump in the ground run which the pump in the ground should not be running very often as you can see it runs Maybe Six to eight times a day and that's to fill up the tank on the side of my house But then there's a pump in that tank which is called pump to here, which as you can see runs a lot more In fact, it is only 10 a.m. It's already run a lot in fact I think it's running more than it should be which is nice that I have this data here to look at that because there is a Bladder tank that when I turn on the water in my house the bladder tank should run for a little bit and pressurize the house before that pump turns on But I feel like the pumps turning on almost instantly when I flushed my toilet or turn on my sink And I really should looking at because the reason I had one pump go bad in the ground is because I had a bladder tank Go bad and it caused that pump to constantly be running and It cost almost a thousand dollars Actually, sometimes I got a good deal from what I've been told that I caught the cost me under a thousand dollars to get that last one replaced The pumps themselves are six to eight hundred bucks plus labor to have somebody go down there and replace it So I really should be looking more into this, but I wrote a little script. That's will it's a very inefficient script We're gonna look at it But it's called pump and it's for the second pump although I can easily modify it for the first pump but Pump to graph and I'm gonna run that as you'll see what takes a while to run But it's gonna give me like a graph for each day the usage for that So I can see if a day is at a whack or not and there are some days in here that you'll see are a little out of whack And I'll explain that in a moment But here we have this nice little chart for each day going back in history. I have the date The number of times it ran and a little bar graph So I can look for ones that are super long or super short and try to figure out why Or if I can see over time it's running more and more and more there might be a problem and again I this script is very inefficient. I looped through a file multiple times to get these numbers and Could definitely you should be able to run through it and count up the numbers going through the file once I've done that in the past but it was just quicker for me and it's It took what 10 15 seconds for that run. It's not something I'm running often But I thought we just look at that so I'm gonna go into this This file here and we're just gonna have a quick overlook on how I'm doing this So first thing in here. Well, first thing is that we have it's a bash script So we have our shebang line And then copyright information this code is up online. We have The a variable for our temp file then we have our main file Which as you can see at the bottom of the file here is our first function that's run It says welcome generating data and then it's gonna get the dates and what it's gonna do here It's gonna look at the file where I currently have all the logs for pump to save Then it's gonna grep for 20. That's kind of I just threw that in there in case there's any error lines I didn't want that to mess up my files here So it's looking for lines to have to zero in it since all of them should have dates of 2000 something and then hopefully I must have put that in there because I must have had a Jumbled line in there somewhere that was screwing stuff up So that's just to verify that at least there's a 20 in that line Hopefully grabbing lines only have dates in them then we're gonna cut based on the Pipe character and grabbing that first character So if I was against run pump or in this case pump to you can see what I have I have a time date stamp here for each time it's run and then I have the printed out date and time just Make it easier and again. This isn't a database. I'm just dumping everything into a plain text file So what we're doing here the next part of this is grabbing everything on this side of the line So let's grab in those date stamps So let me go ahead and go back into our script here So it's grabbing that time stamp and then converting it and getting just the date in a format of year dash month Dash day and dumping that into our temp file, which we've already established up here is in our temp directory now After that the rest of it is gonna happen in the main function I probably should have put it in a another function, but here we're going to say we're gonna cat out that temp file We're gonna sort unique it which is going to give us One line for every date that's in the log again Not the most efficient way to do this and then we're going to go through and look at each of those dates one at a time We're going to get a count by looping through the file. We're going to so we're gonna take the first date Let's say it's January 1st 2017 it's gonna go and basically we're going to again. I don't know this this I'm catting and grepping which is a bad practice. So really a better way to do this would be This get rid of that so that that's a little more efficient So we're going to be looking for a Line with the date so line is the date that we just grabbed so one date It's going to grab all the lines in our file that have that date and it's going to give us a count Then it's going to print the date and The count so if it ran 50 times a day is gonna say January 1st 2017 50 times and then it's going to and it's gonna give it three Digits in that number so even it's 50 It's gonna be zero five zero if it ran hundred times would be one zero zero if it was one time over to say zero zero one And that just allows our output to be properly four minutes So it's not staggered and what I mean by that If I ran that art this script again You're gonna see here What I'm talking about Again ten or fifteen seconds for it to generate all that data because it's looping through that file multiple times and again, so We have the date and the count and the reason if we didn't have this zero here This would be staggered in which would throw off our graph and we want everything up to this point to be the same length Ups in that semi-colon so that that's what that's for we're giving it that three digit because hopefully Hopefully my pump isn't running over a thousand times a day. That would be bad So looking through that and then we're gonna take that count and we're going to put an equal sign for every Number in that account and the dash end here is saying don't put a new line. It's gonna say put an equal sign No new line loop through it will do that if it's 50 times If it's one time go through one time and then after all that we say echo and a blank line Just to give us a new line and after it's all done in exit So it's a very simple script a very inefficient script and I'm not recommending to do it this way again. I had a a Years ago my buddy James who you've seen in videos in the past. It's been a while and we were talking about efficiency of scripting and Like writing stuff in bash scripts versus C. He's big into C. I'm big in the bash I knew a very little C. I know just enough to get by with C and I we wrote a script we're like, okay Let's just loop through something and count something so we decided to grab we found a copy of the Old Testament New King James Bible online and we wanted to count how many times each word Happens in there and put them in order and originally I did it like this and it took a little over 10 minutes I think for it to run doing something similar to this Which he was very surprised it ran that fast doing it this way And then I rewrote it again to where it counts it as it goes through and it only took like a minute and a half So so it could definitely be improved, but 10 to 15 seconds to something I'm gonna look at every couple of months just to keep an eye on stuff This is good enough. Anyway, I'll try to remember put a link in the description to this script online And of course, you know, just so you can look over it. That's it I just wanted to I wrote the script and I thought that I would share it with you And that's it, you know, there's better ways to make graphs and charts in fact There's I saw a github page that actually will create colored graphs in the shell You know different types of graphs, but this is how I did it with my basic knowledge in a few minutes So I do thank you for watching. I hope you enjoy this video I hope that you visit my website films by Chris comm that's Chris the K link in the description Also leaked to my patreon page patreon.com forward slash male X1000 if you want to support me Can I support me through PayPal on my website in the support section? I do thank you for watching liking sharing subscribing commenting all that stuff Thank you for watching again, and I hope that you have a great day