about three or four years ago, around the time of my first Ruby conference, second Ruby conference, I had the idea of let's take every single gem that's in Ruby on Rubyforge and mirror it, open them up, extract all the metadata, and then do a talk about it. Luckily enough, that talk didn't happen. But it's about four years later, and there's a lot more gems, and I figured, why not do that? Unfortunately, I gave this talk the complete wrong name, because this is the anthropology, that is the study of humankind, not the study of gems. So, we have gemology, much better term. And what we're going to do is take a tour of the metadata and all the information that we have that's in RubyGems, and see what we can find, if we can find out anything interesting, and if we can actually learn anything from it. So, I have a project called gemology, it's on GitHub now, put it up in last night, and it basically boils down to a RubyGems mirror.  Alright, I know both of you, three. Oh, I haven't read yet. So, it's actually not too hard. There's this great new RubyGems mirror gem called RubyGems mirror. And basically, you can just download every single gem. The gem files themselves is about, I think it was about 40 gigs, if there's still this gem files. If you extract them further, I forgot someone posted how big that was, but I haven't extracted them all into one big directory now at once. So, you combine a mirror of RubyGems with a webbook. Does anyone use gem webbook? Alright, we have two people. How many people actually know it exists? A few more. Okay, go to your man page. You should do gem webbook dash dash help. So, part of gemcutter has the ability for you to subscribe to any gem publishing. Subscribe to a particular gem, or you can subscribe to all of them, and that's what this does. So, we have gem webbook, which subscribes to every single gem push that happens. Every single time a gem gets pushed to gemcutter, all the webbooks get called as appropriate. And I have one that sits behind Sinatra. It takes that webbook, throws a job on rescue. How many people use rescue? Yes, isn't that a great piece of work? It fetches the gem from gemcutter, which actually gives up being from cloud front, grabs it, downloads it to my slice, and then I have it on Rackspace, so it's in cloud files, stores it in cloud files, and then that kicks off another job, which extracts the metadata from the gem. So, how many people work at Eric's Doc this morning? Double Eric, of course. So, for those of you who don't know, a .gem file is really just a tar file, and it has two files in it, metadata.gz and data.tar.gz. So, the metadata.gz is a YAML file, and the data is just a list of all the files that are in the gem. So, it's a pretty simple and nice format. So, that metadata, that's in that YAML file, kind of people have actually looked at a RubyGem specification, like the full thing. Alright, so we've got a few more. There's a lot of stuff in there that most people probably don't realize. There's a lot of stuff in there. So, how many people use Rubyforge Project in their gem? Yeah, there's a few, yeah. There's a couple other interesting ones in here that not everyone knows. There's actually a license field in the RubyGem spec. No one uses it, or maybe two or three. Huh? No, we should be using it. No, I'm saying these are things that we should be using. There's some interesting stuff in here that would be helpful to use. Oh, of course. Then it makes it really easy. So, and then the other, another big one that people don't, some people do, not a lot. How many people know you can cryptographically sign your gems? Yeah, see, the same dozen people are using their YAML stuff. So yes, if you are worried about the security, or just the author of the knowing that a gem was signed by the author, yes, you can sign your gem. It's in there. But just why don't you look at the man for gem? I think it's called gem cert, and then you can look at it. It's best to use a felt tip kind of sign. Yeah, yeah, you can, felt tip works out really well, yeah. But there's all this data in here, and I really wanted to look at it and say, well, what can we find out from all of this data that's available for all of these gems? I mean, you know, the first one I thought of was, well, actually, one that's really important here is release date. Every time when you type gem build, if you don't send it in your spec, please don't, then the release date, the current date on your computer is stored in your gem. So the date you typed gem build is stored in the gem file itself. So let's start out with that piece of data and ask the question, how often do we, as developers, release gems?  Let's do it again. How many of you have a published a gem? Okay, keep them up. We're not done yet. We're going to find out how old you guys are. So who has only published a gem to gem cutter? Oh, wait, wait, sorry. I'm doing it in the wrong order. Drop your hands if you've only published a gem to gem cutter. Okay, who's published a gem since 2008? Seven. Six. Five. Oh, we still have four. Three. Okay, there we go. So you can't get any earlier than 2004. It's pretty much the rule. Although some people apparently have set their gems to have earlier dates. So that's one of the reasons. Yes, yes, there is a gem out there that says that its root was released in 2000. And now you've told us how to do it. Yeah, and now I want to tell you to never do it. It's just a wrong way to do it. So we're going to start with the metadata of a release date. So we're going to start out with something earlier. So gem, Chad, Rich, David, and Paul put together Ruby gems in 2000, or that was when 2003 was when it was born. The first Ruby gem server went live in I think approximately late 2004. So this is a graph of every gem that was released by day in 2000, through the end of 2005. Sorry, apologies. This is a little at the bottom. But basically at the bottom we've got months. On the side we've got gems released per day. Look out there. Between 2004 and 2005 there were 1,589 gems released. And repeat over there about 20 gems released in one day. That's a fair bit. It's not too bad. It looks like late February, maybe April, March 2005, we had 20 gems released in one day. How many of them were Easter eggs? I have no idea if any of them were Easter eggs or not. But that's at the end of 2005. Let's go to 2008. So we extend this graph and go into 2008.  It's doing pretty good. 2005 and 2008. Now we're approaching, this is now by month. Sorry, doing it by day doesn't work well in these graphs anymore. So we get up here. At the end of 2007 we're doing 500 gem publishing, 500 gems published a month. Which is not too bad. So between 2006 and 2007 we have 7,949 gems. As opposed to the 1,500 from the previous two years. So we continue on. So now 2008. We add 2008 to the mix and it's just skyrocketing. It's a nice curve here. We're doing really good. 2008 on itself had 9,000 gems. So every single year we're getting more and more. Every single year. So who knows what happened at the end of 2009? Anyone? Github? No, gem cutter goes live. Late November. Are these stats for Rubyforge or for Rubyforge plus Github? There's no Github date in here. This isn't actually downloads. This is publishing. Right. So yeah, this is the release date values. So this is missing all in any gems that people were just publishing on Github? Any gems that were only published on Github. Yes, that is true. So Github said they had as many as Rubyforge. But here's the really fun part. Late November, last year, I think about the 16th, gem cutter goes live. I think it had an impact, don't you think? Right here. This is gem cutter. That's the day it goes live. I mean, January to October of 2008, we have 13,334 gems published. That's January to October. So those are the Github gems? These are still just gems that are available. I don't know where they're published. They may not even move to Github. So I suspect that's a lot of that stuff. Because I can't imagine that everybody's waiting to write gems. No, probably not. But this is their release date. So this means the gems were repackaged. Right. So yes. But this is just the end of last year. Now we go to November and December of last year. We have 7,649 gems produced, which is more than half those produced in the previous 10 months. Which is kind of cool. But you think this might be ever in behavior if that was just gem cutter, or just all the important Github. It's not. This is through last night. Yeah, gem cutter. Since gem cutter has gone live, we have published 50,000 gems. That's individual releases. Any of your gem that has 15 releases in the past year, that's 15 individual gems. So give yourselves a round of applause. In other words, in the five years before gem cutter, we had 34,000 gems published. In the previous year, we've had 52,000 gems published. I think this is pretty cool. And it shows that the ease of publishing a gem is actually, there's a high correlation between gem cutter and the ease of publishing and more gems being produced. What if we take out RVM? If I take out RVM? RVM's not a gem. So this means we're publishing 150 to 200 gems a day, right now. Yes, Steve? Yeah, the highest point in up to 2005 was 20 a day. The highest now is over 200 a day, but we're never dropping below like 100 to 120. Why don't we count the next gems? Then we're down to like four. Now the fun part is if you take this and you're like, okay, so this is cool. We've got all these new gems. Does this same trend across batteries? This is first releases of a gem. So the first time a gem shows up, this is the same trend graph from the exact same period of time. You still get the gem cutter. New gem releases have also skyrocketed, which is kind of cool. First release of new gems. That shows the get-up on. Yeah, that first spike is probably the get-up on. Yeah, that very, very first one. But, I mean, even go down here, it's, hey, right now we're not too far below it. At 900 and some odd per month, you know, that's last month. We haven't even finished.  So we're right now having finished November over 6, 800 or something like that. Now here's the fun part. You take just the new releases of gems, but when we do these with first releases of gems, we can also figure out first time gem authors. So these are people that have never published code before. You know, or maybe they have, but they haven't done it as a Ruby gem. So first time gem authors, of course, we've got our get-up spike here. Man, that's a great point. I was trying to figure that out, but that is the get-up spike where it imported all the stuff. But we still have, these are first time authors. So I have to say this is kind of cool. We are encouraging mostly open source, all these are all probably open source license of some type, but we're encouraging open source publishing of gems at, you know, hundreds a month. First time publishing. I think that's actually pretty cool. This is an encouraging of people producing and showing their work to the world. I think that's pretty cool.  I mean, well, we see that they do it all the time here. But what day of the month do they do it on? I mean, this is kind of just a joke graph. It's kind of fun, but you look at it and you go, hang on, it looks like on the 6th of the month. So whatever people are doing around the 6th, 7th, 8th, 5th, that's when people push gems to jump cut. I don't know why, who knows. This one I don't really like as much as the next one. Tuesday?  Why do people publish gems on Tuesday? Do you have an answer? Okay, so... Do we release them on Tuesday? So what does the gather and most gems get released on the first Tuesday of the month? Yes, exactly, yes. So you put these two together and we get that most gems are released on the first Tuesday of the month. Yeah, it could also be... Oh, there we go. But it does show, hey, we as programmers, we actually do sort of cut down on the weekends. Not much, but we do cut down on the weekends. Yeah, that's just the release though. This is how we release. How many of those people are working over the weekend? Yeah, yeah, yeah, yeah. Everybody's working through the weekend and we'll publish on Tuesday. Yes, there you go. Yeah, so this is kind of an interesting name. I mean, I just kind of find this fun. This actually is the anthropology. Yeah, this is the anthropology of ruby gems. When do we put it? Yeah, so there we go. But the next part is, this is kind of all fun. It's, okay, when are we releasing, when are we releasing, how often are we releasing? And I think this is just awesome stuff. But let's switch to a different piece of metadata. What ruby gem version are we as developers using? So one of the pieces of metadata that it shows up is the package ruby gem version, published in the gem. And I forget, Eric, when did that go in? Okay, so around the zero nine ruby gems time frame is when the version of ruby gems was packaged into the gem. So we look at that, kind of break this down. On the left hand side, we've got a ruby gems version. And on the bottom, we've got the count of the number of gems that have that value. So we can see, you know, well, zero nine is, somebody was doing it in zero eight eleven. That's kind of interesting. Zero nine. But it looks like most people are using one three five, one three six, one three seven. But if you take this back to the previous slide, which is when are all the gems been released? It's been in the past year. One three five was February 2009, something like that? I forget, Eric. I don't know, but I looked it up. And these one three five, one three six, seven is about the last year and a half of gem release itself. So this correlates highly with the actual just general exuberance in publishing gems in the past year. But it's kind of cool. I don't know what exact dates on these are, but we can see that these are the versions. Somebody's publishing gems with one seven three one. That's you? That might be you. Okay, all right. So another question we might ask, how many, we've got free releases. How many people are publishing pre-release gems? I've done a couple. Yeah? Yeah. So with pre-releases, we have metadata of the pre-release. So if you look at the source code, basically the rule for a pre-release is if the version has a letter in it, it's a pre-release. That's how it's determined whether it's a pre-release. Yeah, there we are. Letter has a pre-release. So if we look at just the pre-releases and say, hey, our pre-release is taking off. Well, yeah, it looks like it. So people are doing it. I mean, this is Relief Month, so it looks like in October we had, you know, maybe 300 pre-release gems pushed. Now, another thing I didn't look, I looked into a little bit, but it's not in this talk, is how many people have dependencies on pre-release gems? Yeah, no, they exist. They exist. Believe me, they exist. Not sure, I feel about that. Oh, that's another, that's actually really good to look at. How many gems that are not pre-released themselves depend on pre-release versions? So I'll add that into the list of things to experiment with and look at. Thank you for the answer. So we have pre-releases, people are using them. How many people find them useful? Use them? All right, awesome. So we have extensions. Are extensions trending up or down? Are people doing more extensions, or are they doing less extensions? I see extensions. This is extensions. You can actually have Java extensions and C extensions and stuff like that. The way you determine extension is in the metadata, is basically there's an extensions field that you put a file in, and when the extensions run, it runs that file. So, in this case, it's CXTconf.rb. Or, I forget, there's two other ways even though the instance is just a rake file or a rake file, both of those can be in there and it'll just run. So, here are extensions. Actually, extensions have taken quite the skyrocket here in the past month, so that's kind of interesting. So extensions, not exactly the same explosive growth as we have with regular gems, but we do have quite the number of gems with extensions. Now, this is a little, there's another question we need to have as a follow on here. So extensions trend, and there's 4,460 gems in Ruby VMs that have extensions. Now, the interesting part is, so extension, if your gem has an extension in it, it really can only be run on Linux or Mac, or something, or that's got the build features because it's probably C code. It might be Java, you never know. There's one that requires Python. There's one that requires Python? Which one is that, James? Interesting. There's one gem that uses Python to build the V engine, and it requires Python in the extension. Hey, there we go. But the interesting thing is, if we've got 4,460 gems that have extensions in them, shouldn't we probably also have approximately the same number that are non-Ruby platform? So, we'll go into this. What platforms are gems being created for? Keep that other thought in your mind. So in metadata, there's platform. It's pretty much just there. You have to set it, and there's some crazy stuff in that platform value. So, as you can see, Ruby is the dominant platform in Ruby gems. Not really all that surprising, but that's not informative because that's just, it blows out everything else in the water. We've got what? 80,000 gems that have Ruby, and everything else is less than a pixel wide. So we're going to throw out the Ruby data and see what we come up with. Here is that the dominating gem platform outside of Ruby is x86 MS-132. So we have a growing one down here of Java. Yes. This is unique gem. So a different version of the same gem would be in here is twice. Yeah, this does not include just the most recent or anything like that. If it includes, it's actually harder to calculate on that. I'm working on the best way to do that. Every gem in existence. Except for the Ruby ones in this graph. So we can see that x86 MS-132 is, by far, the dominant platform outside of Ruby. Java coming in at plus second and x86 mean w32 third place. Which is kind of cool. That's some interesting stuff in here. We've got x86 Solaris one up here. Not sure where that one came from. If you are building gems, you should find some of the mean ones. Yeah, yeah. If you are building gems that have a native component, then you should be focusing on the x86 MS-132 one there. So Dr. Nick was talking about that and he's promoting that. So if anyone wants to make gems on Windows, you know you can talk to Dr. Nick. Take care. That was helpful for all of you. Hey, you open your mouth? I've said it to people your life. Some got lost in Australia. Now there's some interesting stuff in here. We've got some really small ones. We've got RPC Darwin, Spark Solaris. I mean universal.net. There's a gem out there that has as a platform a universal.net. So someone's making gems that will run on the CLS. And then of course we've just got MIPS, Allegro, Excel and the known. Those must be pretty old. But here's the thing. We've got 2333 total gems that have a native platform. And we've got 4,460 gems that have extensions. So take note of this people. We need to make sure that these numbers are starting to get closer and closer together. So are people making note of Ruby language capability? Incapability. This basically means are people taking note of the differences between Ruby 192, 191.8, you know, going on down. Because one of the fields that you can set is the required Ruby gems version and the required Ruby version. So if someone is publishing a gem, I've encountered this several times where the gem makes use of some language feature, like TAP, that's the one that I encountered. A gem included TAP in their code. I tried to run it all on 8.6. Didn't work, blew up. But there was no required Ruby version in the gem. So how was I to know that the reason this wasn't working is because the required Ruby version was not set. So if we look at this, these are the gems that count. But a lot of the old gems, this wasn't actually put in recently. Do you remember what was there on this one? So there's a lot of craft data in this piece. So we have zero and zero dot zero dot zero are the junk data in here. So we're going to throw it out. And it looks like people are using it. So we do have, the number one that people are using is setting the required Ruby gems version to 186. There are also other techniques. My gem is where, in a few places where I do have Ruby language, I just do it by having the code there. So if you aren't doing this easier, you can detect the Ruby version itself in your code and then make allowances to that one. But if you don't want to do that, there's just too many of them where it's all over the place. This is the one thing you can do. But people have been doing it since 186.7, 168. 186 is the big one. I do like the fact that we have gems being released that are saying that they need to be 191 or 192 or greater. So those I consider the considerate folks who are saying, hey, I'm using the newer language features. Don't install this gem if you're using Ruby 186. Which is kind of cool. I think those are considered. Now we're going to look at, this is the required Ruby gems version. So if you have code that requires a specific level of Ruby gems itself in order to function, this is what we see. And I forget if this is actually set specifically or if you have to set it yourself. And most of this, if you're using a development dependency, it does install the, set this directly to 136, correct? One, two, I think. One, two, okay. So that's the big one, two. Because these are all gems that are using development dependencies because that was a feature added. If you set in your specification a development dependency, it will automatically say your Ruby gems required version to at least one, two. So we can see that people are using, you know, the nice version, the bigger versions. But that's just kind of some of the interesting data that's just available in every gem. What we really want to see is whose gem is more important than somebody else's, right? So we're looking at dependencies.  Who knows what this is? You also know it is this. Yes, yes. Twiddle walk is the appropriate term. It's a twiddle followed by a walkup. Okay. Look at that. That's the term for that. No, no, twiddle walkup. This is a twiddle walkup. Now, this is a very important thing that you should all be using. Because if you have a gem and I say I depend on riddle greater than or equal to 1.3, that means you can use it if wibble3.0 comes out and it will install wibble3.0. Wrong. Wrong. What we want is twiddle walkup 1.2.3 or something like that. Which means I can use any 1.2 system and it will not install 1.3. So people, read these. Understand why. Take note, I'll give you a moment. You can, you know, shoot a photo of this page and read these two websites. It's really good. You know, appropriate versioning is critical and we're getting 50,000 gems in one year and the bridges are screwed up. You know, that's something to worry about. And to show you kind of how bad it is. Okay, so you can't see the bottom here but that really tall one. Wrong. This is greater than or equal to on runtime dependencies. I could. And I might. Now, one of the things that I'll get to this in a minute one of the things I want to do as a follow-on to this is, well, I'll get to it in a moment and talk about this. That's wrong. And these guys are nice. Yes, they're going to be happy. Read, we have development dependencies. We've got development dependencies that you use greater than or equal to. Okay, yeah, that's not really going to work. But the development or runtime they're using twiddle walkup are your friends. These are people that are considerate and understanding of the APIs that they depend on making sure that they're compatible with those upstream APIs. Some of you, we should all be understanding and figure out. So that's my dependency grant. Now I'll go to the runtime dependency graph. So this is what it looks like. Yeah, there's not much you can see there. This is every gem. Just the gem, not individual versions. This is the dependency graph between every single gem in RubyGems. The blue one is the one that's got the highest number that it depends on. It depends on? People that depend on it, yes. And my next few arrows are going to be in the wrong order. So that's not a no-goo-geary. That one's a no-goo-geary. It's actually active support. It's the number one gem that has a direct dependency.  So there's a couple others and there's like Abacus, A2WS. But the interesting one is actually I didn't think it was going to be active support. So that was a surprise to me. What did you think it was going to be? I didn't know, but I didn't think it was going to be active support. I was actually thinking it was going to be rake or something along those lines. But I haven't traversed these graphs backwards. I mean, who does active support depend on? So should that weight be transferred down to whoever active support depends on? So I haven't done any of that type of graph analysis, but I will. People don't risk rakes. They assume to. Nick says that they don't include rake because it's assumed. The other difference is that most people don't spot a rake jam to get the rake. Right. Yeah, most people don't stop raking. So the other one is that was a runtime dependency graph. And to draw it, the tool I was using is called Toolip. I was just playing with it. And the only way you can draw it is in three dimensions. So the other one is the development dependency graph. That's what this looks like. This is if you just include the developments. My GenDefense has a development dependency of this other gen. Yeah, it's so messed up. But the way this draws it is all those gems in a circle, they all depend on the one in the middle. So you can see that one with the red in it. Any takers on what that is? Say again? Oh, no. Juller? No. We'll get to it in a minute. RubyGems looks really highly connected, but they're not. This is how dependencies work. So what we have down here on the left-hand side is the number of gems Let's see. Let me try this. We have one gem down here that 150 other gems depend on. There's one. And this is runtime, so we know it's active support. But over here on the other end, we've got over 1,500 gems that are dependent on by someone else. By one other thing. So this is a nice long tail. But this also means these are 1,500 gems right here that are published that also need to be worried about their downstream folks. And then it's just a pretty much a perfect long tail that shows up right down there. Yeah, active support. So we do the same thing but with development. And we see we've got there's one or two gems down here that 120-some on other gems depend on. And we have a whole bunch over here 400 plus that have one person that depends on them. Those are probably components of some of these other gems. Yeah, so these could all be components. I mean there's 400 of them. I didn't go into the analysis of what they all were. But these are 400 gems that someone has said that this is a development dependency. Which is kind of cool. I think that's really cool. There's a huge slew. There's a large number of gems in here that people depend on for development purposes. This is the inverse. How many gems so if I have a gem, and I publish it how many gems do I depend on? So right here we've got well, let's do it this way. I've got one gem that has 40 dependencies. Now when I tell you what it is you're going to go, well of course it's the Rails Toolkit. Which basically says install this gem and you'll install everything that we need for Rails. That went way up with Rails 3. Yeah, I know. So this is just one dependency. You're not actually walking the graph. Yeah, I'm not walking the graph. This is just direct one degree dependencies. But what we have over here interesting is that first bar is zero. There are over 25,000 gems in Ruby gems that have zero dependencies. Actually that's cool. They declare zero dependencies. Correct. They declare zero dependencies. So that's very true. But we do have 20,000 that declare one. Which means that that's an explicit declaration of a dependency. Which is pretty cool. That means hey, I'm making an effort to say I am depending on someone else and here's who it is. So we've got 25,000 different zero dependencies. So, what did we learn during the talk today? What did you guys learn? Anything interesting? Yes. Yes, a lot of people are not using TwiddleWalka to require active support. That might be one. That's a good one. Any other good ones that someone got? We know what TwiddleWalka is. We know what TwiddleWalka is. Okay, I'm asking that you got it. Alright, that works. Finally, this is what I got in this study. I didn't think so. But the gem metadata has junk in it. All over the place. Author names. Okay, people. That's supposed to be an array. People are putting in like a CSV string. So you get author name comma, author name comma, and it just shows up. So it's kind of hard to figure out the author's names. Encoding issues. The YAML file that's in here is supposed to be UTF-8. Not all of the YAML files are UTF-8. I had to play some funky encoding tricks and try to use some stuff to actually read some of these because of the encoding. Somebody encoded their file as EmacsMule, which actually isn't even a... It's even using a code page. But there's a lot of stuff in here that's of different code pages, and depending on what version you're using, so there's very few, but the gem metadata has some encoding issues that we probably could work on. Developers lie. Nobody's published a gem that's in 2000, so that's the big one. What the value that's in the metadata that you have control of, sometimes you lie. So gem needs a win command and I'm going to start it. I think we have... Is anyone else here a Fedora contributor? Fedora Packager? Okay. I do that, and there's a great RPM link command. You've got your packaging as an RPM, and it gives you this list of warnings and things you're doing wrong and your specification, and files that are listed but are missing or that are in there but not listed, that kind of thing. So we need a link command that's going to go through and say, okay, here's the right files, all those sorts of stuff. Making the link command part of the gem build. It does complain about something, but not enough yet. Yeah, it complains about some things, but not enough yet. And sometimes it complains about too many things. All right. It lies, yes. So there's other things. Yeah, we can do different things like those, rating the gem's base and the quality of their metadata. There's a lot of stuff we can do, but a couple of the big ones, I'm sure you have a license in there. I mean, I didn't show it in here, but I tried to detect if a gem had a license in it, whether it had a license in the field or had a file that looked something like a license in the gem itself. I think we have 5 to 10,000 gems with no license in them. About the readme. I mean, I didn't check inside the readme. I was looking, that's another thing. It's a really simple one right now. Yes, in the readme. So making sure that we have a license in the gem. I want to know what the license is, so they can deal with it. Yes, there is a license field in it that can be up to 64 characters long, I think, but no one uses it. So you can do that or just include a file. So I think part of this link command, I still want to figure out all the other things we can go through it, but putting a license, making sure if you list files that look like tests, you actually put them in the test files section of the spec. There's a lot of people that have their tests, but they're not in the test files. They're just listed as included in the files. There's one case in particular where I have a live by home issue. Okay, a live by home issue. That's a different dependency. I've got a gem and it requires a TZ info. Does it care whether it's the TZ info gem or active support after the interview? And as far as I told you, no way to actually put that in a jumpsuit. To depend on TZ info? You basically say, I either need TZ info or TZ info. So you need a dependency on something that provides a capability. And that would be even more... Yeah, and an RPM is something similar where you can say, I depend on web server. And so if you've got internet, that's probably going to do it. Just to make some version range of TZ info, or some version range of active support. Sure, conditional dependencies, one or the other of this set. So the man talk is back there and we'll be good. So there's a lot of stuff more to analyze. We're just talking about a bunch of different things right here. And so there's more to analyze. I want to do a more in-depth graph analysis to figure out how two levels deep, three levels deep, see, is there a runtime dependency that depends on a development dependency to figure out these different graph analysis and see what you can come up with and figure out some interesting information. So that's pretty much it. Any other new moments for questions or more comments or more discussion? Yes. I just want to point out you recall a lot of things that we were doing wrong. I think it's bogged that O would be the third most biggest dependency for runtime. Why is O a runtime dependency? I have no idea. Eric? Before development dependencies there was a runtime dependency I just want to point out that there are a few of the older gen that were actually the older version of O so to me, Yeah, old versions of gem packaged with older versions of O because O injected itself as a runtime dependency because there was no development dependency at the time. I think a lot of the graphs and analysis that we did were really interesting for the most recent version of 2 so that we could see are things different than that. I definitely want to look at just the most recent version of gems. Doing that is a little bit more complex with the data structure stuff I put together so I may be blowing away my current database and re-importing it all. The fun part is to download the import and extract all the metadata from here on the 512 megabytes I was using to do the download and the import and the extract and that kind of stuff takes about 8 hours to do everything. One more critical piece I saw in gems people don't package your package directory you know the PKG directory there's a couple of gems there's more than a couple who package their package directory and in the package directory there's a previous version of the gem that they didn't delete from the package directory and because that gem was packaged with the package directory the previous version of that gem so once you get this recursive there's a couple gems that are 100 and some odd makes and I looked at it and it's because 1.2 is packaged with the 1.1 gem and the 1.0 and the 0.9 and the 0.8 well the 1.1 is also packaged with the 0.9 and the 0.8 so Epic nature yeah that's Epic nature and you say you don't do versioning yeah don't do versioning there we go so yeah I like to think Tom and Qresh they don't give you snapshots or their appropriate databases and I didn't use any of the data yet but I will how many, did you look for any circular dependencies within gems? I didn't look for them but they exist so the graphing tool I said are you circular independent? and it said yes but yes we are not a directed asyclic graph as far as dependencies are concerned but I'm going to find it and I'll probably talk more about it so thank you for your time I guess that's all I got


What's going on everybody it's Toss here welcome back some other videos so in this video We're going to be doing an overall market update taking a look at the Dow Jones the S&P 500 and the Nasdaq We're also going to be doing a trading update talking about what I personally did today in the markets as well as some stocks Need TFs that I'm watching and looking to trade here in the month of October in 2019 and you guys saw in the title of today's video How low do I think the markets are going to go? How low can these markets go? I'm going to be sharing with you guys my thoughts on that and giving you a brief history lesson on what happened about a year ago in the month of October in 2019 or rather 18 through December of 2018 and I'm sure a lot of you guys know what happened But for those of you guys that don't stay tuned here in a couple of minutes We'll get into that so if you enjoy this video if you find value in this video Feel free to go down below hit that like button and consider subscribing if you do want to see further content about the stock market Investing and trading this is the channel for you and let's get right into a guy starting off with the SPX The S&P 500 the 500 largest publicly traded US companies with around 22 minutes left in the trading session today This one is down $46 down 1.6% Absolutely abysmal day today in the S&P 500 and it was actually much worse a couple of hours ago If we look on the one day one minute you guys can see we actually hit a support at around 28 75 Which is around 20 points lower from where we are right now So that means at the lowest of the day the S&P was down around 66 to around 68 points, which is insane right and taking a look at where the price was yesterday We were almost at three thousand dollars in the S&P yesterday guys the high was at around 2992 and from the high yesterday to the low today at 28 74 That is a swing of nearly 4% in the S&P 500 and Under 48 hours, which is insane right if we zoom out a bit more to that four-hour chart Which is the six-month chart? I have a bunch of support levels here and a bunch of resistance levels drawn out so we can see where the S&P could Potentially be going next if we continue to downtrend right we clearly broke 2950 no problem whatsoever the the market plowed right through that right and After 2950 I've been saying the next support is roughly around 28 75 29 ish hundred right we clearly broke 2900 as well And now we're holding that 28 75 level very nicely as you guys saw from the one day one minute chart And you may be asking yourself what makes 29 or rather 28 75 a Support level well if we look a couple months back here in the beginning of May in the middle of May actually May 15 To be exact we peaked at this level at around 28 75 and we got Rejected right that made it a resistance But once we broke out of that level out of that resistance it became a support So the fact that we're trending above it is why it is a support right now And let's say we do break 28 75 on this weak catalyst this market catalyst of weak Manufacturing data which is blowing the market down right now Let's say we blow past 28 75 the next level. We may be going to is 28 50 This is about not much low lower on a percentage basis from where we are now probably around Half a percent to point seven five percent. That's how far that levels away. Let's say we break that You know, we may be going down to twenty eight hundred oh five roughly Which is around two point four percent away and a lot of people have a target on the S&P at around 2730 which would be another five percent gap down from where we are now and the crazy thing is guys that Five percent it may seem a lot, but we literally fell four percent in the matter of two days And I know a lot of you guys have heard this before the market drops a lot quicker than it goes up It's insane. Right. Just take a look at the data. It's right in front of our eyes right here We went from 28 60 up to around let's say, you know 2970 which is around a four percent move that took us about a couple of weeks to do and we literally lost that same value In two days, that's insane, right? So based off of that year ago performance this little history lesson Actually, if we zoom to the three-year week chart, you guys will be able to see it back in October Literally on the first day of October last year. This is like deja vu. This is nostalgia right here a year ago Literally guys the markets were at similar levels to where they are now or where they were yesterday a little bit lower from where They were yesterday and they dumped from 2932 if we zoom in a bit on this time time period from 2930 roughly all the way down to around 2395 that is that was a drop of nearly 20% in the matter of two months And this is when trade war began to escalate heavily right the tensions Everything was going wrong at this point in time and that was a massive catalyst in why the markets tanked if we look in the Performance at the performance of the S&P in the month of October last year It went from 2930 all the way down to I'd say around at a low at about 2635 so it lost about 300 points in the matter of that month and then things got a lot worse in the month of December so it's interesting to see that this is literally I'm not saying history is repeating itself But this could be the beginning of history repeating itself from last year's performance So if we do go lower than this level guys Expect 2850 if we break 2850 expect 2800 and that major level here is 2735 and it does seem like the head and shoulder pattern that I literally called out last week whenever that was you guys saw The video I was saying this could be the formation of a head and shoulder pattern It's literally playing out here in real time right before our eyes the left shoulders here The heads here and now the right shoulder is completing and as we get deeper and deeper Breaking below these support levels. It's going to be forming it really all the way up till we get to this level Where it'll be fully formed probably when we break this level to go down into the 2600s if that happens right hypothetically speaking now that would be a fully formed right shoulder So going to the Dow Jones industrial average here guys down nearly 500 points right now down 1.7% This one's getting hit very hard a lot of the Dow stocks a lot of industrial stocks are getting hit very very hard right now It seems like we broke 26 6 very strong support. We broke that no problem We broke 26 to today, which was the next support from it really This was a support due to it being an old resistance that we broke above a couple of months ago And now it seems like we are going to make our shot to 25,600 that's the next level I have right now on the Dow Jones the next price target that I am seeing Actually, that's false because if we look at this level here if we're really Looking at the nitty-gritty charts here. It's actually holding a support right now in The middle of this channel between 25 6 and around 26 to at the level of around 25 9 to around 26,000 and you guys can see if we go to the one day one minute It actually held that level of support in the middle of the day today And we've been seeing a bit of a breather in the markets Since the middle of the day, which again is holding that level of support from that four-hour chart that we just saw And if you guys see the performance of two days 48 hours of the Dow it hit a peak 27,000 yesterday now hit a low it hit a low earlier a couple of hours ago at 25 9 Putting that at a $1,000 difference guys that is insane a $1,000 difference in the matter of 48 hours Putting that drop from peak to bottom at 4% for the Dow Jones if we're zooming to the 20 day one hour It's showing a treacherous drop. That's no question, right? If we go back to the 180 some targets coming up again If we break this it's going to be 25 6 if we break 25 6 a lot of people have been talking about this target here target area It's going to be 25 4 and then ultimately guys if we do end up getting to 24 7 here, which was the level we bottomed that at the end of May in the end of May of 2019 If we do get there that's going to be pretty much the completion of the right shoulder here on the four-hour chart for the Dow Jones and of course if we do break that guys It's going to be very ugly needless to say but there will be a lot of deals in that particular Situation going to the Nasdaq now guys down 1.65 percent down 128 points hook 7700 that was no problem for the bearish to get us below that no problem whatsoever the next level of support We were looking at very prominent level was at around 75 90 to around 7600 This was a level we held a couple of weeks ago back towards the end of August This was actually an old resistance from back in the May to the June month So this was needless to say a very very strong level of support So the fact that we did break that we may be going down now to 74 50 7400 ish, which is the next major level of support that I'm seeing and if we do complete that guys and especially if we Break below it to maybe test 73 Which is one of the next levels that I'm seeing here That's going to be the completion of the right shoulder and the head and shoulder theory on the Nasdaq and honestly all the other Major Marcus that I had a week ago would be fully true at that point in time if that does end up Happening and if you guys look on the one day one min you can see we were at 77 Yesterday roughly 7700 now we're down to around 75 25 in terms of that low, right? We're seeing some bullish action here But overall the trend is still down making it a drop of around 150 to 200 points in the matter of 48 hours Which is pretty pretty massive so that is really the overall market update right now I see a lot of more blood in the water especially with this negative Manufacturing data we have the jobs report coming out on Friday if that's negative guys You know the market could definitely tank even more because that would just be another negative catalyst Throwing into the fire that is the last thing that the market needs right now And yeah, those are just levels of how low the market can go based off my analysis Based off the trend lines that I have drawn so let me know down below in the comments What are your thoughts on that? I'd love to know and let's get into what I personally did today And I'm sure a lot of you guys know you probably just just know at this point We have that connection that you know that I traded TV IX today and a little bit of sqqq These are two that I love trading whenever the markets are volatile and whenever the markets are going down, right? TV IX in a nutshell is a Volatility etn it goes up whenever the VIX is going up and whenever the markets are going down the VIX had a 10 percent day Today ton of volatility in the markets again. We saw the SPX down nearly 70 points at one point That's obviously going to pump up volatility thus pumping up TV IX So TV IX was an easy trade for me today Honestly when I saw the markets being aggressive to the downside more panic selling again You guys can see on the one day one minute not as bad as this dump yesterday Honestly, it kind of was pretty similarly bad because we gapped down which gave me the initial Okay, this morning. It gave me the okay that or rather than the signal that the markets We're not looking to recover up because if they were looking to recover up They might have gapped up a little bit They might have started to do something like this right maybe shoot up But we gapped down and we aggressively sold off right out of the gate which gave me the get go To go TV IX and typically whenever I'm trading TV IX guys I know a lot of you guys ask me this on DM on discord or whatever it may be I'm watching TV IX on one side of the screen for the most part and then SPX on the other side of the screen And I'm watching the 50 SMA Resistance for entry points on the SPX right if I'm watching the SPX and we're seeing a Resistance under that 50 SMA if it's getting rejected. It's not breaking out Which would be bad for TV IX, but it's getting rejected looking to dump That is the signal that I typically look for before I get into TV IX and you guys can see You know when the markets were dumping out of the gate. We saw a bit of a breather. We were testing that 50 SMA We didn't break out we dumped at this point in time 10 10 10 20 if we go to TV IX to see how it correlates You can see this was when we were pulling down then when the market got rejected by that 50 SMA We got that pop and this is where I made my money on T or on TV IX, right? And if we go to the little trend line tool here, you know, I ended up getting in I believe it was at like 16 oh seven Something like that wrote it up till we broke the resistance at about 16 30 ended up getting a 1.3 percent on TV IX SQQ Q very similar right did not get in on this because this is where I was trading TV IX But I ended up getting in on another little dip a little bit after the TV IX trade because I noticed how the markets We're still getting crushed right SQQ Q goes up when the Nasdaq's going down So the Nasdaq was getting hit tech was getting hit. So I figured why not? I'm feeling the negative downside here on these markets right now if I take a little loss It's okay because my TV IX gains from yesterday Which were around 4% and the ones from the previous trade which were at the 10 o'clock time period We're around 1.3% so I figured okay if I take a little loss I'm still cushioned nicely due to my profits from the previous trade and the previous day So I figured why not just take a little trade that I did end up doing well with that Again similar strategy right waiting for that 50 SMA Rejection but this time not on the SPX on the NQ right if we see the NQ You know pretty much the whole day up until 1 o'clock PM Eastern Standard The NQ was getting rejected by the 50 SMA and each time it relaxed a bit saw a breather to go retest it This was an entry point or possible entry point on SQQ Q Q if it were to get rejected it got rejected Right we clearly see that which opened up the SQQ Q trade where I ended up profiting right in this area I believe this was around like a 0.8% trade Nothing crazy whatsoever, but total on the day guys roughly 2% I've been on a pretty pretty good streak here Over these past couple of days. I'm really happy with how things have been going in terms of my trading So let me know down below in the comment section. What are your thoughts on everything? It seems like the markets are actually getting lower as we speak Let me just look at this very quickly up It seems like the bears are trying to take over here in the last five minutes of trading Let's see if we do get that full-on dump, you know into the last couple of minutes here But anyway, some stocks that I'm watching that are looking interesting are Chipotle Mexican Grill This is the number one stock in terms of stocks here guys Not ETFs not ETNs in terms of stocks Chipotle Mexican Grill is looking fantastic right now Right take a look at this consolidation on the one day one minute Then we'll zoom out a bit to the four-hour chart so you can see where it's consolidating on that time frame So look one day one minute. It's clear that 800 805 is a strong strong Support right that's no question if we go to the 184 hour You can see that support is actually on top of the 180 SMA Which has proven to be a support over the past couple of months So I'm liking this right although the markets are getting crushed sure that is a bit of a deterring factor here That might be something that might scare you away from taking a swing trade in Chipotle But think about it guys This could be a day trade opportunity tomorrow if we see some gap up in Chipotle Mexican Grill in the morning literally if it's gapping up to let's say 810 815 Well, it's already at 810 at this point if it goes to 815 This could be some momentum to the upside for CMG and a lot of the times guys This stock does well even when the markets are going down. Well today. It's down 20 bucks. Obviously That's probably because of the market in a sense, but it's consolidating very nicely here guys Right it's consolidating very nicely And it's worth just watching to see if we do get that little move tomorrow, right? If we get that little move tomorrow, especially let's say the markets Maybe see a bit of a breather here because the R side is oversold Maybe the market see a bit of a breather. Maybe they've run up 20 points tomorrow Whatever, maybe a lot of the large caps see breathers This could be a perfect setup for Chipotle in the morning out of the gate I'm just watching that as a potential day trade right Roku. This is another one That's showing some very nice Consolidation if you guys look at this support level here at 99 to 100 bucks We'll just call it a hundred bucks for simplicity. That's very very strong, right? That's very very strong You know the next resistance that I'm seeing is around I'd say maybe 108 right 108 And then we have another one at around 112. So this one guys with the consolidation on 100. We're trending up here We're actually up 30 cents today, right? That's pretty good This one could be setting up for a potential fill up to 108 Right, if we zoom into the 20 day one hour, you can see how prominent even more prominent that level of support is and the fact that We're slowly breaking above the 50 SMA and the EMA that's pretty attractive here, right? So watch Roku This one could run up to 108 and again if it breaks 108 maybe a hundred and twelve dollars on some momentum here It's already gotten crushed Maybe it sees a bit of a run up here before either dumping again for ultimately ahead and shoulders because take a look guys The left shoulder the head here. Let's say we see a little run up again Maybe up to 119 120 whatever it may be if we break these levels then ultimately dump even further That would be a left shoulder head and then again That would be the right shoulder forming if we run up and then dump from there So that's something that Roku could definitely be setting up for right now Let me just pull up my phone very quickly to see what other stocks I have written down here Obviously TV IX SQQQ those are ones that I'm watching obviously I talk about those in every single video So there's no really need to go over those even more especially because I just broke them down in the trading update Some other ones guys. Let's take a look at gold Good old gold here was up $15 or rather is up $15 right now up nearly 1.1% but it's still technically speaking here guys Excuse me down trending right now because we're still trending below moving average resistances both the 50 and the 180 SMA So ultimately before trading either GDX or Jnug which trade based upon gold You know, I'd like to see a breakout here on gold for it to get back into at least 1510 to 1515 at that point GDX is going to be recovering and breaking out as well Which whenever GDX goes up guys, we know this at this point 95% of this of us know this at this point Whenever GDX is going up Jnug is going up as well at a 3x rate So Jnug here guys could be a decent play. It hasn't really been doing really well over the past couple of days But maybe we can see another run-up like this like we saw towards the latter half of September in 2019 literally one week ago. So natural gas I know a lot of you guys want me to talk about this haven't talked about it in a couple of videos here because honestly I haven't been watching it. I'll be completely honest with you guys. I traded you guys You guys know that a couple of weeks ago.  The next level that I'm seeing that could be a support is going to be around 220 to around 223 that's the general area that I'm seeing right here that we could bottom out at at that point The our size going to be very very oversold And we might see a little run on you guys from there either to fill back up to 230 Or maybe break out and continue or start rather a rally at that point So until we see some more action On natural gas to recover. I'm not really going to be watching it Maybe further down side D gas play but to play D gas at this point. I'd need to see natural gas below 220 That's personally what I'm looking at and let's just take a look quickly at what the markets closed at S&P down 52. Okay, Nasdaq down 130. Oh my goodness guys today was very very bad Dow Jones down almost 500 points and some stocks guys The that that are affecting the Dow here Let's take a look at some of these caterpillar Down 2% today. Let's see some other ones here honey. Well, not necessarily that these are all in the Dow But this is just the these are just the stocks that are affected by the manufacturing data, right? We got honey. Well down 2% today 3m got squashed again. I'm an owner of 3m down 2% Let's see. Did Boeing do bad today? Probably. Yep down 2% Some financials that we were looking at Bank of America 2% Wells Fargo 1.2% not too bad there JP Morgan Let's see 2% in the red Goldman Sachs down about 2% So all these major institutions guys down about 2 3% today and again These are some that got affected by the manufacturing data the negative data that came out Yesterday so I'm going to end off the video here guys. Let me know what you thought about this What do you think about the markets? I'd love to know what you guys have to think if you found value in this video Feel free to go down below hit that like button consider subscribing if you do want to see further content for me and follow Me on Instagram join our discord group chat join our Facebook group all of those are linked down below So I'll catch you all in the next video. Thanks again for watching if you stuck till the end You are the real MVP peace out What's going on everybody


Hey guys! What's up? What's up? What's up? What's up? Let me make sure the quality is better. I'm glad that you guys tuned back into this video. I'm glad that you guys are here because I have some giveaway updates. Okay, so we did my giveaway about three hours ago. If you were here for that, thank you for being here for that. We did our giveaway about three hours ago. I do have some updates. Let's give a congratulations to our winners again. Let's get a hand clap for our winners one more time. Congratulations! Congratulations! Okay, now in my original video, I did state that the giveaway was for the continental U.S., right? I said that the giveaway was the United States. Do you remember that? Do you remember that? Okay, cool. So whenever giveaway winners do live internationally, and that was my mistake. I didn't realize that and that's okay because she's still going to win. But because of that, I'm going to choose another giveaway winner and they're going to get the same bag as this bag. Okay? So the next giveaway winner is going to get this bag because I made a mistake and I'm sorry guys. I hope you forgive me. I'm sorry. So in this bag, one more time, the volleyball, the oh my quad, and the iron band. So we have a third bag because I want it to be fair. You guys know that I like being fair and everybody, you know, wants to be completely fair. So I'm doing another another bag. Okay? Because we're all about the fairness here. We want everybody to have an equal chance and I will be having international giveaway coming up soon because we have Coco Volley all over the world and we want everybody in the entire world to be able to win. Okay? We want the whole world to win. That was my mistake. Okay? So we're going to try this again. We're going to do it again. Okay? But one more time. Give me the hand clap emoji for our previous winners. Woo-woo! Congratulations, winner! Woo-woo! Woo-woo! Woo-woo! Okay. So number three. Number three. Okay? Should I be dramatic this time? I don't know. This is even me and I need drama. The next giveaway winner is... Congratulations, Hannah B. So you're the third winner. Bollywood bag just like this one. So she'll be getting a Bollywood bag just like this one and I'm sorry for my mistake, you guys. You know, in realism, I want everybody to win. That is a winner. If I could realistically give everybody a gift, I would do it. I would do it. You know I would do it. Come on now. Come on now. I would totally do it. Do you guys want a Q&A? Do you want me to stay on for about 10 minutes or so? It's up to you. I just want to come to make sure that... remember I promote fairness and I want everybody to be fair. So I want all of the things to be fair and everybody to have an equal chance because we all deserve an equal chance. Woo! So yeah. Congratulations, Hannah B. So our three winners were... Let me check again. So we had... let me get all the cards out so that way we can see all the cards. Oh no, I already put the cards away. Okay so all of our three winners were... four, number one. One more time. Number one, we had Natalie Wolbert. Number two, we had Mama Steve. And then number three was Hannah B. Yay! So there's three giveaway winners. Yay! I'm excited about that. So I apologize again. I'm sorry. I didn't mean to do that. I didn't intend to do that. I am so sorry. But I'm glad that you guys are back here. If you have any questions, we can do a quick Q&A. So yes. No, it's okay Mama Steve. It is okay. Like I said before in the first live stream, I make mistakes all the time. Nobody's perfect but it's when you come and you rectify those mistakes. That's what counts. Right? That's what counts. So these giveaway bags were awesome. They were awesome this time. Yeah, it is totally okay Mama Steve. So yeah. Any volleyball questions or questions about Coach Coco? I'm a middle blocker for a club in middle school. Which position are you? So when I was in high school and when I was in college and I played club in college, I played... hold on one second. I played middle. Um, middle now is not... I still play middle. No, Mama Steve, you're okay. I played middle for a long time but I like outside more because I like to hit. I like to swing. I like to swing on it. So I like to swing. So I enjoy playing outside quite a bit. I'm a setter. Oh, jail rules. I've been working on my setting for quite a while. Have you seen me set? Now, I got a really good compliment one time and this guy told me my hands are like butter or they're like I have surgeon hands because I can set really well. Position for a short girl probably somewhere in the back row and try liberal but don't let that stop you. I've seen some girls who hit really well from the front in the short. Yes, I have a question. I'm pretty okay with volleyball and I'm learning to get better at the session. However, what do you do if the ball never comes your way? Is that because you're playing and they're not hitting it to you or is that in practice?  Yeah. Yeah, it's a lot of quick movements and stuff like that. Yeah, that's fun. Middle, it's definitely fun. What do you bring for volleyball tryout? I have a video on that. You should try out. You should try it. It's 18 things you need for volleyball tryouts. Are you an outside hitter in our life? I made a failure for you. I'm not saying off. Yay, send me a letter. 5-7. So I set and I'm a right here. Oh, you're lefty. You know what? In a perfect world, cocoa would be ambidextrous. I would just go for the swing like going to go right, go left. That would be cool. Ooh, if I could do that, that would be awesome. What should I do if I make libero? So are you asking like how to play liberos or the libero? Would you like me to briefly go over all the positions and their specialties? Give me a thumbs up, because I could do a brief, a really brief, really, really brief version of the specialties and the positions. Would you guys like that? Yes, yes, yes. Should I get paper and do this? I have a white board, but I don't know where it is. Okay. Very quickly. Are we paying attention? Are we ready? Okay. I think I have a paper. Okay. Let's get this paper out. Okay. Okay. Briefly. Okay. This is the net. Okay. I'm going to label it net. Okay. Now. Okay. So I'm not going to do this because it's going to be backwards. The outside position. Does everybody know what outside is? Give me a thumbs up if you know what outside is. An outside hitter, which is left front. Left front is the outside. The outside hitter is usually the strongest hitter on the team. And let me tell you why. The outside hitter is usually the strongest hitter on the team because it is easy for the setter to set outside quicker and easier because it's just a natural setting position. So the outside usually has better power hits. They can hit angle across the court. Angle across the court is, if you're hitting this way, hitting angle across the court, they have a better version of, they have a better way of seeing the court. So outside hits them all a lot more. In the middle front, these are all base positions. Base means just the home. The middle front, we have the middle blocker.  The middle blocker is the best blocker on the team. The middle blocker will transition and transition and open up and help block. Okay. They are really a defensive position. They do hit quicks a lot. They hit slides a lot. They hit a very lot, a lot of specialty hits. Okay. We have right side. Okay. Right side. Right sides are usually left-handed. They're usually left-handed. Why do you think they're left-handed? They're left-handed because they're approaching the court from this way and it's easier for a left-handed person to approach the court this way. Yeah. That's why they're right side. Okay. Hey Natalie, congratulations Natalie for winning. Congratulations. So, okay. So one more time. A slide is a play. We're going to talk about play soon. Okay. Left back. Left back. Left back is a passing position. Remember everybody rotates. Everybody in volleyball rotates. Everybody has their specialty in their job. Middle back are the libero. You heard how I said, I said or because not every person that plays middle back is the libero. Okay. The libero wears a different color jersey. It wears a different color jersey than the rest of the team to be able to distinguish her against the other team. Okay. So, middle back or the libero, usually the best passer on the team. They're able to receive a lot of balls. They're able to defend well. They're able to receive tips and coverage because they are quick. Okay. And they are able to maneuver around the court really, really well. Right back. Also a supplementary passing position. Any questions? Wait. And then setter. Setter always gets the second ball. The second ball. Okay. So the setter always gets the second ball because that's just the way volleyball is. The setter is a very, very, very important position. Usually setters are captains of teams. And that's just because in a game, there's a dynamic where the center kind of controls the flow of the game. So the second ball is the ball comes over. Somebody passes it. That ball is now the setters. So the only reason why wouldn't be the setter is if the setter calls help and she can't reach it. Okay. I think I'm going to do a back set video. What's your good position to put your hands into set? All right. Is everybody paying attention here? Okay. Now a lot of the time I see a lot of youth and a lot of young players who are new, who set like this? Who does this? Give me a thumbs up if you do this because this is really popular. They do this. You see your hands, see my hands are flat and they go just like this. It's okay if you do that. That's okay. Just like this. Now remember when we're setting ball shaped, ball shaped, ball shaped. Do you see my hands? Now it's easy. Okay.  We used to do that. Okay. But volleyball changes often. Have you guys noticed that volleyball changes a lot? So if you still want to do window and then open, remember we're not doing window, we're keeping it here. We're opening up like your hands around the ball. So I'm going to use the giveaway ball for example. Do you see how my hands are shaping around this ball? The ball's not flat. Just like that. I'm letting you guys have to go to bed. So this is a quick one. This is a really quick one. Yeah, it's time for me to go to bed. Now that we have a little mini Q&A, the next live stream will possibly be Friday and it will probably be a live stream of me playing. Can you give some advice, please? I really need a person who, okay. What do you want to do? You have no pain. Bye-bye, Mama Steve. What can I do if I don't have anywhere to practice volleyball in the winter? Okay. Look at your local recreational center. Look at a YMCA. Look at the YWCA. Look at private coaching. Look at parks and recreation. I would really talk to your parents about helping you find volleyball. It's out there. Believe me. It's out there. It is out there. You just got to, you got to really look and find it. It's okay Payton. It is okay. Do you want me to tell you something that's inspirational? Michael Jordan did make his junior varsity basketball team when he was in school and he's one of the greatest basketball players in the world. He's missed over a thousand shots in his career and he's still the greatest basketball player in the world. Okay. Okay. You're four of them are fast. Okay. So what is it? First let me ask this like a rain drop. What do you want to play?  Don't let anybody decide that for you.  I see your question, King Soprano. Don't let anybody tell you or discourage. Find out what you want to do and then find out ways to make that happen. Let me see King Soprano's question. Okay. Once a good time to volunteer the volleyball team any time you want through. I started in 10th grade and it was terrible. I was baby coca. It wasn't no good, but you know what? I practiced hard and I got to where I am now. Bye bye Peyton. So we're about to go now. I'm about to go to bed too guys, but I just want to thank you guys for coming to my update. Thank you for allowing me to rectify the situation. So now I have all of the winners. I'll contact all of them. Make sure you like, comment, subscribe. See you guys later. Have you joined the forum yet? Because you guys have the opportunity to talk to each other and learn from each other's experience and share advice. Give me a thumbs up if you're on my forum because I might join go up on there tonight and start talking a little bit, you know. So if you don't know what the forum is, I have a forum now. I have a Cocoa Valley blog where I write blog posts. So when I don't update on YouTube, I will update on the blog so we can talk about things on the blog. Okay. www.CocoaValley.com. Okay, go there.  You'll see blog in the menu. Click blog in the menu and then the page will come up and then you'll see where it says members and then you can join the forum completely free, completely free. That way you guys can talk to each other. Okay. Join the forum. Enjoy it. You know, and I'm about to leave, but let me ask you this. Have you shared Cocoa Valley with one of your teammates? Because I share Cocoa Valley with a lot of volleyball people. I know my volleyball friends, all that. Have you shared it with your volleyball friends? Because I share with mine. I hope so. We want the community to grow so strong and so big and we just want Cocoa Valley to be a place, a safe space where volleyball players can come and talk about volleyball things and feel like they have a community. And I really hope that you guys being here, feel like you sent to the community. And that's what I really strive to do. I love, I love, love, love, love, love when you guys talk to each other in the comments. Love it. I love that. So I'm glad that you guys do that. I love that you guys share and talk to each other in the comments. I appreciate that. I am going to go on the blog and check some things out. Let me just say Elle Bear. I heard she elbow. She might be over-extending, over-extending. Hey, Kiggs, I'm glad you feel like it's a community. I really, I really want to have a warm and welcome inviting. I want you to come to my channel and feel like you're being hugged. That's what I want.  I hope that's how it feels for you guys. Because that's what it feels. I feel that so much immense love from you guys that it is so indescribable. It's an indescribable feeling. So I hope that you guys have a great, great Valentine's Day. It's almost over now. Great Valentine's Day. And congratulations to all of the winners. Okay. And you guys have a good night. I will let you know when the next stream is. See you guys later. Bye-bye.


My name is Joel Mathis. I'm an education specialist with the Wisconsin Technical College System, focusing mostly on programs. I mainly route and assist with the approval process for programs that are submitted to us from our 16 technical colleges. I compile all of the necessary documents before sending them to the Ed Directors for review. I also update programs in our portal system. It's fun to kind of see a program go from that concept review phase all the way to being fully offered and then updated throughout its lifespan and to see that students are enrolled in those programs. I think we have a really great technical college system and to know that real people are going to take these classes and are going to gain an education in the field that they are passionate about or just want to take so that they have a career that they're proud to wake up and go to every day. That definitely is really impactful and meaningful. I think we are successful when we're all working together when we're working with the colleges to you know hand in hand to offer the best programs for our students and I think we're most successful when we have student success as our focus and the positive outcomes of our students as the main goal. I think that's definitely one we're the most successful.


My topic is Android application framework. So most of you have seen this architecture. So I am focusing on how the application framework is intact like native libraries. So JNI bridges the gap between native libraries and activation framework. So first we will see JNI is having a native interface and then Android application framework and the activity manager, content provider, notification manager, resource manager and package manager. So what is Java native interface? So basically it is a part of the course JTK and provide a framework for interfacing the native libraries and codes. And it allows Java code to call C++ functions and C functions and vice versa. So why do we need JNI? Basically the low level devices access are not provided in Java. We cannot access the low level device. So like some system calls, so for accessing those devices we need to implement C++ functions in our Java programming. So one more thing, it increases performance by implementing the rigorous tasks in native languages. So as the assembly languages are low level languages and it obviously improve the low level device access. And we do not need to write the library code again. We can use existing ASL library. So it will also now pros and cons of JNI reuse, allow access to useful native code and it also improve efficiency. We can use any language, whichever CC++ or assembly and the cons is portability, platform dependent because use of C and C++. And extra we need to create serial libraries for implementing JNI. So this is a simple example of JNI. First we have to create a class, this is a hello world example just very easy. First you have to create a class hello world.java and that class first you have to declare a native method and you have to declare only prototype of the method and just call the method in main method. And the system.world library, it loads the hello world library at the dynamic runtime. So this I will explain later how it is happening. Now we have to compile that hello world.java. So it will generate a hello world.class file and one more task we have to generate hello world.h the c-ridder file using java h minus jn and i. So now this is the content of java hello world.h. This is the prototype of the method, print method. This is automatically generated. Now we have to implement the print method in c. So the implementation of print method in c is this. We have to include hello world.h and the print hello world and return. So now we have to compile the c implementation that we have just. So we have to create a shared library, the hello world.so. So further there is a command cc compiler minus shared minus i. You have to include the jdk library and the linux libraries. And just pass the hello world.c and minus o hello world.so this is minus reference output file. And now we have to run the java hello world. Like we have to run the program using java interpreter and the program will print the hello world. So this is just the, so like when it instantiates this hello world, new hello world. So the program generates the, means loads the hello world library, this is the flow chart. Like first you have to create a class, that digression atom method, hello world.so and then we have to compile that class and using that class file we have to generate the header file and then implement the print method in c and compile the c. And that will generate the hello world.dll or so whatever shared library. And then we have to run the program using java interpreter. Now come to the android application framework. So the android framework is a set of APIs that allow developers to quickly and easily write apps for android phones and tablets. So the application framework has the following components, the activity manager, window manager, content manager, package manager, resource manager that manages all the devices and applications. So what is android application? Android application is a consist of one or more components that are defined in application manifest file like when you create android project, there is a file android manifest dot xml and that file you have to define each activity, service, content provided task, whatever you are implemented in your project. So we will see each of them. Activity manager. So activity manager manages the life cycle of application and provide a common navigation back stack. I will come to back on back stack what is it? Activity. So activity is an application component that provides a user interface with which user can interact to do something. So it is just a user interface like when you write a code for activity, it will create a user interface and we can perform any task by calling some service or some other activity. So the application also contains multiple activities that are coupled with each other. So these are the callbacks for activity life cycle. Oncreate says it is called during the life time, activity life time and it says activity is created and it initializes all the resources that is required by the activity. Now all start, execution of the activity can start at any time, system put it on the top of the stack. So your activity now is on the top of stack where you just have to start the activity. So when you on resume, like on resume says activity result to the user and has focus. So like if you playing a song on android phone. So on start means it is just an your user interface is displaying on the phone but the songs is not playing. But on resume your songs is playing and on pause says focus is lost and potentially the activity will set down save data means the focus is lost but means you are switching to some other activity. So the focus is lost but the focus is on to the some other activity. So the duration between on resume and on pause, in that duration the activity is running. So on a stop says activity is no more on the top of a stack. So it is some below the activity, the top activity or anywhere on the start says activity does not exist in the system anymore or the resources granted by the activities can be freed. So this is the activity life cycle. First you have to launch the activity then on create initialize all the resources of the activity and on start it will start the activity now after that on resume. So here the activity is running after on resume and then some another activity comes. So this activity can be paused and goes into the background and here on pause like here I have some activity comes in the foreground and I have paused the grant activity and go to the next activity. Now if the user closes the foreground activity then we return to the same activity again. Now on a stop the activity is stopped and the focus is lost and the focus is gained by some other activity on restore the activities finished and the all resources are freed. So there might be some something wrong with the activity like if some another activity comes and it requires more memory.  Well it is killed and again when you now when you close the current activity then it will again on create call by call then it will again the whole life cycle is processed. So activities and tasks. So a task is a collection of activities. So this is basically activities in the background and then foreground focus and on and I will come to that later also. So a task is moved to the background as a whole and all its activities is stopped if the user starts new and related tasks. Like task is a collection of activities. So if the activity is stopped and activity is stopped if the select if I started a new task that is not related to the previous task then the activities related to the previous task all are stopped. So it is also possible that different instances of the same activity can be present in different tasks. So like this is the package APK package like the task in context of APK package. So the APK package has a process and the processes have activities, content providers, services. So there might be two or three APK packages like if two applications are want to communicate with each other. So in the context of task there is possible that activity of one application can interact with the activity of another application. So that task may be anything. So intent and intent filters. So intent activates the activities, services and broadcast receivers. So intent basically sends a message to the activity like activate and deactivate the activities and it can be used explicit way or implicit. So implicit way depends on parameters, action, data, MIME to receive other component request. Components it will register filters at activities framework. These like you have to register the components in your project somewhere so that it can receive component request. So when launch an intent object frameworks will match and find the qualified component. So you have registered the components already in activities framework. Now when a request comes it will match the component in the framework and leave them for the users to choose which component to be run. So this is just an example of intent filter like android name, intent accent view, added pick what do you want, the category and the data. Service. Service it is an application component performs long run operation in the background. It does not provide user interface it is running in a background. So it can take two forms started and bound. So when an application component starts it by calling a start service. And bound is when an application component binds to it by calling bind service. So this is the service life cycle. Initially when we call to start service. So there are two life cycles, one for start, one for bound service. So when we call to start service the service is created and on start command it will start working or running. Then the service is stopped by itself or client to client can also stop the service or it can also stop by itself after some time. And the on destruct all back called and the services are down. This is unbounded service, this is bounded service. So now call to bind service. On create the services created after that you have to call on bind that will bind your service to some client or some other application. Then the clients are bound to the service in that area and all clients unbind by calling unbind service. After the unbind you can destroy the service. Example, so like if you are playing a song in your pillar. So pillar internally uses some services for pillar the song. It is like if I develop the application for mp3 player. So I am not writing a code for exactly mp3 player it is use some native library code. So this is the code, how am I access the code it is called the service. So when I play the song the services, the application will bind to the service and when I stop the song and exit the application the application is unbound to the service. That is the back stack. So I previously told you, the activities are arranged in a stack like the back stack in the order in which each activity is opened. So initially we have activity 1 and this is in the foreground like the activity 1 is called another activity, activity 2. So the activity 1 is goes to background and the activity 2 is on the top and it has a focus. Now activity 2 has called another activity, activity 3. So activity 2 goes on the background and activity 3 has a focus and now when activity 3 is destroyed and the focus is upon to the activity 2 it will navigate back. So this is the navigation back stack. So content providers, so content provides enables applications to access data from other applications like we have seen contacts in our mobile. So contacts the application and we will access our contacts through some memory. So this all is done by content providers. So it is the standard interface that connect data in one process and the code running in another process means the process to process communication for data accessing. So content providers exposes a unique URI used to query at an update, delete or delete data. So it provides a URI through which we can query, add, update and delete our data. So the format of URI is like this, a standard prefix, content, the authority part and the path to do determine what kind of data is being requested and a specific record being requested if any. So I will see an example of this. So if we want to show all contacts, so the URI is like this content, call and double slash contacts and people. So this is also the information of all the people. If I want to show people whose ID is one, so we just put the one in front of people. So the first part is content that is always 6, second part is contacts. It may be anything content provider's name. The third part is people like what type of data I want to access. The fourth part is the ID if I want to show a particular record. So this is standard IPC overview. So this is the kernel and the process. Now there is a binder that preaches the gap between kernel and process and that the binder manages the parcel and knows how to access data from parcel and what to do with that data. So the parcel is an interface and that is implemented by bundle and uses intent receivers and activity methods generally. So or you can also create our custom objects for creating our own services or like interaction like activity to activity interaction. So this is just an inter-process communication how it is happening. Marshaling is happening at the parcel. The parcel interface, marshal the data and then pass to the parcel means the marshal data is called as a parcel and then binder knows what to do with parcel and how whatever it is. So IPC parcel labels. A parcel label is a class which can marshal its state to something binder can handle namely a parcel. So this is we have seen. Then the standard Java civilization has semantics parcel labels do not need. So supporting full serialization would mean wasting CPU cycles. So actually the Java serialization needs has semantics and it is a lot more complex. So we cannot use Java serialization here. So that is why we are using parcel labels. Now IPC bundles. So bundles are the type safe containers of primitives. That is C like primitives int, string, etc. So we have a integer or strings. So the bundle will contain all these with their actually it has a methods get, end, put, end, get string, put, string like whatever. So through this it will preserves the type of the data. Then the simple data types passing API uses bundles like think of on-freeze as passing data to your future. So the on-freeze caller I did not mention previously. So it says like when you are doing something like filling a form or just sharing your contact and at that time you receive a call then you need to save the data somewhere. So the on-freeze will do all this. The flat structure permits optimization like memory mapping. So the notification manager, it enables all application to display custom alerts in the status bar. And it can take any like any forms like turning on or flashing LEDs on the device or alerting the user while flashing the backlight, playing the sound, vibrating or just a pop-up window. The resource manager, the providing access to non-code resources such as localized strings, fixed layout files, images, etc. And there is a, it can be two forms of resources, default resources, so to be used at all less of the device configuration and alternative resources designed for use with a specific configuration. So like we have seen a lot of stuff. So that an APK is a binary archive containing compiled albic code and the non-compiled resources such as images, other information for installing the applications like libraries or anything other information. So every APK should be digitally signed. It is not necessary however and it is not mandatory that the signature validated by CA. So these are the references.


Are any of those true? No. Hey smart Christians welcome back.  The issue is or the question is are they telling the truth? Now first of all it's possible that a person can genuinely believe that they went to heaven or went to hell and came back and that they then have a purpose for coming back. Many people who say they went to heaven when they say they came back they came back to let us know about how great that heaven is and then many of the people who say that they have gone to hell and have come back have come back to warn us about the torment that awaits anyone who has not come to Christ. These accounts are not just specific to the Christian faith. There are people in other different faiths that have the same sort of accounts even atheists and it's always something different. Now is that true and what does the Bible say about that? We do have some passages that kind of shed light on this a little bit. Now I want to stick with the New Testament because there are some Old Testament examples, well some Old Covenant examples, examples that happened under the Old Covenant where there was someone who died and then came back. We think about Elijah, we think about Moses, we think about Samuel, but right now since the death burial and resurrection of Christ does that happen?   Recall the story of Lazarus and the rich man in Luke chapter 16 and we'll start at verse 27 and this is the rich man saying I beg you father to send me to my father's house for I have five brothers so that he may warn them lest they also come into this place of torment. But Abraham said they have Moses and the prophets let them hear them and he said no father Abraham but if someone goes to them from the dead they will repent and look what he says he said to them if they do not hear Moses and the prophets neither will they be convinced if someone should rise from the dead. So here we're told that even someone coming back from the dead to warn them they still won't repent if that's if the word isn't enough then you coming back from the dead won't be enough either and that if it was true then then wouldn't it be true now and so that kind of colors the way we would look at someone who would say something like that that they came back from the dead again not to say that they don't believe that they died and went to hell or to heaven again you can feel a certain way and that it not be true. Remember we are told in Hebrews chapter 9 verse 27 says that just as it is a point to man to die once and after that comes the judgment and so that seems to state that once you die there's judgment you are going to give an account at that moment and it doesn't seem like you're going to be coming back from that after that after death then comes a judgment and then also add in what Paul says Paul says in 2nd Corinthians chapter 5 verse 80 says yes we are of good courage and we would rather be away from the body and at home with the Lord and then other verses say to be added from the body is to be present with the Lord meaning that once you leave this shell this body once you die then you go to be present with the Lord that is if you are a believer. Now you don't get to heaven if you're not a believer so if anyone is making any statement about going to heaven having not become a Christian first well that's that's one reason why you would automatically discount that but then even here if you are a Christian you're not coming back to earth for any reason there's nothing that you could possibly tell them that is more than them having the gospel. Now I know what some people are going to say they're going to say what about Paul didn't Paul go to the third heaven well let's look a bit closer and see if we can find an answer in chapter 12 verse 2 he says I know a man in Christ who 14 years ago was caught up to the third heaven whether in the body or out of the body I do not know God knows and we could stop there the issue is was Paul taken up to heaven did Paul see heaven now he says either in the body either physically he went or as a vision out of the body well I'm going to say that what Paul was given was a vision and not an actual bodily experience for one Paul's body could not go to heaven because Paul has a corruptible body Paul has a sinful body and when we go to heaven we either go as a spirit or we take on an incorporeal body given a brand new glorified body well Paul hadn't been given that at that point and so what Paul I believe is saying is that this was very real and God is giving him basically a glimpse of what is going to come now does that mean that that's going to happen with anyone else well first of all Paul is a little different this is Paul after all but what people are saying that they have seen and what Paul is speaking of are two different things Paul is saying that he's gotten a glimpse of what's to come but I don't think Paul received the full glimpse a full view of what heaven is like unlike these other folks who are saying that they actually went to heaven and saw it maybe they even saw some people there maybe they saw God they saw they saw one of the Old Testament saints or one of the New Testament believers but there's another passage that I think that Paul says that would shed even more light on this and kind of make this even clearer now remember when Paul makes his statement in 2 Corinthians he's speaking about something that happened 14 years earlier so the passage that we're getting ready to read is after what Paul stated this is in 1 Corinthians and in chapter 12 verse 9 he says but as it is written what no eye has seen nor ear heard nor heart of man imagine what God has prepared for those who love him so what Paul is saying that no eyes or ear have seen uh who those of us who love the Lord what the Lord has in store for us so for someone to come back and say and this would even apply to Paul no one has been able to see this again this is after Paul's account this was after the time that he said that he uh was taken up in in in this vision and so even Paul is still stating that no eyes have seen nor or nor ears have heard uh that includes him and so for anyone else to say that they have seen or have heard uh anything from God while in heaven and then was sent back again how did you get there uh in the body that you're in and if they say it was a vision again Paul just addressed that and then certainly if a person would were to say that they went to hell and came back well no uh you go to hell you're staying there you go to heaven you don't want to come back you're not coming back and so I think it's a pretty safe bet to say that though someone may have had a what they felt like was a real vision a real occurrence that it's not true uh and here's the truth if the scriptures aren't enough to convince you of Christ if the scriptures aren't enough uh to convince you of the reality of hell and heaven well then someone going to heaven or hell and coming back that won't do it either amen