at Vernee here at Mobile Law Congress. Hello, my name is Joker, and I'm in charge of Vernee marketing, and it's very glad to us to introduce our new flagship in this year. This one is Apollo 2, and we could be the first to launch it with Helio X-30 chipset. So this is the future of MediaTek right here. It's 10 nanometer CPU, it's crazy low nanometers. ARM Cortex A73, 53, 35, with a, you even talking about six gigabytes of RAM? Yes. And eight gigabytes of RAM, even. Yes, and it's coming in May, right? Yes, it will come in May, and we will have a lot of customers and resellers want to sell this, how this is this year. And right now you have the Apollo 1? Apollo, yes, the model is Apollo. We launched this in last year, and the price is around $205. This is well sold in last year. All right, and then you also have some different ones over here. You have Thor, for example. This is very affordable, right? Yes, this is our first model we launched last year, and the price is around $100. And then you have Apollo Lite, X20, more affordable, full HD display. And this one is less than how much? $170. And all these can run special software, you're partnering with the company over there? I also want to introduce our new software partners, the Oxy. So I want to invite my partner to introduce their new app. So here you're going to connect the... Hello, so who are you? Hi, I'm Jeremy from Oxy. So we are partnering with Verny, and we're developing something that is turning your phone into a computer. So you take the Apollo phone, but you can actually use any of these we just filmed there, in the $99 one. So I'm turning on this, I'm turning it. And this is the next dock. Yeah, that's what we're doing here. Okay, so you've got the phone in remote, and I'm testing Oxy. And now you've got cellophones, but in addition, you've got a full office setup environment. You can start any Android app. This thing right here? Yeah. So you can start any Android app, you can run them as Windows? Yeah, any Android app, even if it was not specifically made for it, like YouTube, you can also have some office apps, like this is on the open office. You have a high-pressure phone, I see. Can you resize the windows easily? Oh, sure. How do you do? Going. This in the corner? Yeah, just in the center. Resize it. Nice. And this application right here, it's competent. Can I try? So what do you have up there? You have the percent, you have a menu, what do you have up there? This is just like that, so you've got the height. If you want to dim the light, the main phone, same time, you have Bluetooth management. What do you have there? This is the background, so you can change background. And then you have a... Can you click on a time? Right now there's nothing, but there will be a... Calendar? Calendar, yeah, exactly. Where do you have all the notifications? Notifications are coming up on the right when you've got on the phone. Can you go and check them? Or only when something happens? No, only when something happens. And for example, when you have a call, it's showing it, and you can... It's also showing on the phone, so you can still take the call on the phone, because the phone is completely independent from the other. So this is the Apollo phone, and you have... Is it using Type-C? Or micro-USB? Yeah, Type-C, yes, Type-C. Type-C? And how is it going out? Is it displaying or... Because you're so different? Yeah, for... Oxy will work with any connection, so you can use the wireless, for example. But here, we used a display link adapter, so it's compatible with USB-C, for example. And then we are going out with HDMI, and then to the next app. So right now it's displaying? This is displaying. And this is a display link dongle right here? It's displaying the adapter, yeah. But it could be actually nearly in the cable kind of, but it depends if display link is supported in the laptop. Yeah, yeah, yeah. This one only supports HDMI input. This one only supports HDMI. That's why we use this. All right. And turn your smartphone into a PC. Where are you based? We're based in France, actually, near Paris. Yeah, it's a new startup. We are one year old, actually. So we start to have stable release. It's available on some forums for testing on different phones. Soon for... Is this an app? It's not an app. It's a... Could you change the OS? Yeah, you need to... You add some API into the OS to add this kind of behavior, especially independent screen. But it's still compatible with every app. So is this a modified Apollo? You already convinced them to ship it on every Apollo? This is modified Apollo. Yeah, we hope we can ship it in a little bit. But I don't know. You modified the framework of Android, something you add to it, right? Actually, we modified, we add some API into the Android framework. Framework. Is it potentially included with Android 7 that you don't need to modify anything? Yeah, actually, Android 7 is... Technically, it's working a lot differently. We could... Some of the API we add are the same as the Android 7, but Android 7 is not enough. We need to still need to modify right now. It's still not enough? No, no. What does it mean? Google didn't learn the lesson yet? What is going on? I don't know. Why didn't you add those things in there? That was the question I had, actually. So, I still don't know. But you're doing it. Yeah, we're doing it. But you have to modify it for more. How much work is it to do that? Actually, right now, if we know, for example, right now we're based on Marshmallow. We know the modification to do, so we can port it on any manufacturer's code, or even AOSP. We have available on internet who have something based on the Cyanogen mode slash Linux OS. And we'll soon be available with Nougat, of course. So, this looks awesome and great. How's the performance? Because this is a DECA core phone, and this is going to be an X30. It's going to be very important to use all these 10 cores. And is it automatically in Android that some of the background windows use some cores and the other different cores? So, how does it work? Of course, as we have a simple app, our app is not using a lot. You have a lot of optimizations you can still do? We can still optimize, but right now it's really fast because our environment is just a small addition and it's not taking a lot of memory. And basically, the more memory you have, the more apps you can launch. And with 4GB on Apollo and I think 8GB on this one, you can launch any number of applications you want right now. And you can easily multitask. Do you have some gestures to go from one to the other? Not right now. We are more focused on the stability and the technical stuff. But right now we're going to be... So, what is the kind of process you do? You're based in France. Yeah. Do you travel to Shenzhen to partner up with people? Yeah, not me, but the director, Laurent Alago, went into China and met a B&E and they were really interested. So we partnered and they invited us to... Where are you based in France? Actually, we are based in Neuilly. In Neuilly? But we have some... You're from Paris? Yeah, it's close to Paris. And we have an office in Versailles. Versailles in the castle. Close to the castle. Not in the castle. That's a really great job. Really close to it. That should be the future masters of the world. It should be based in Versailles, I think. Probably great. Take over Microsoft and Mac and maybe even influence Chrome OS. Because who knows, there might be a full version of Chrome coming to Android at some point. And so how does it compare with Linux OS? Oh, that's actually a massive good question. So I would say, like, two sides. There is the... Andromium and a few... There is also what's the name? LinaOS and stuff like this. They are doing some apps. So you can start apps that are weird design to launch in it. Only a few apps, I suppose. Only a few apps because you need the developer to add some SDK. I'm not even sure it's available. So basically, they add to code each app. So they code a browser, an email. They have eight apps or something. So there is a lot, yeah, of course. Maybe they have eight, maybe they only have six. Of course, there is a browser, so that's useful. I mean, it's great, but then there's Remix and Phoenix. They also support full apps. Remix and Phoenix are doing something else. They are replacing the Android system. So with Remix OS, for example, you plug Remix OS on the screen and you've got Remix OS. And that's it. It's not working on smartphone right now. Of course, there is the new project they add, which is kind of similar to us. But Remix OS, like the one we know at 3D, is only working on maybe tablets, but mostly small devices that you connect to your TV. And yeah, that's the difference. What are you doing, Android? Continue. We're doing Android, continue. And we like to say, we do it better. You do it better than these guys, you think. That's what we're just to say. How many people are using this right now? Is only a new company, a few testers? Right now, there is a few testers on the internet on some French forums. And I think we have got maybe 100 installations. So that's not a lot, but they are giving us a lot of good feedbacks, sorry. And that would be great if you could, if you want to download it right now, you can go on some forums, for example, Android or for Android forums, French forums. But we'll soon put a website, a consumer website. I don't know the address yet, so get in touch. It's auksense.com, where you can download the different application for some tests. And then you need to download the ROM? Yes, of course. For specific phones? Yeah, of course. So right now, we have, I think, six, seven different numbers, at least, I would say, eight from flagships, like OnePlus, Note 4, LG. I don't think it's a big deal, you know? You just need to partner. How do you contact with Bernie? Yeah, of course.  Actually, I'm CTO, I'm a lead dev, so I'm not too much into the business. But Lauren went there and did a lot of contacts. We just need to connect and put it in the forum. Right now, we have a lot of contacts with a lot of manufacturers. So we're in discussion with a lot of them. And we hope that Oxy can be shipped with the maximum number of front brands. Yeah. That's very, very cool. And the next dock, they shipped all their backers, right? Everybody's happy with the next dock. The first time I see it for real. It's nice, right? Yeah, it's a bit like, yeah. Somebody needs to make a next dock with display built in. Yeah. Just connect to USB, nothing else. Yeah, or even with... MHL Slimport? Yeah, for Slimport, for example. We have some friends in Miraccess, which are doing... $2.99. Yeah. If you can see that, they're nice. But they are somewhere else, right? Yeah, just a bit on the other side. Cool. Yeah, I filmed those guys in CS. All right. We didn't film them in CS, we just filmed them. Yeah. So all you see is the most important. Cool. So there it is. That's cool. Maybe this is the way to use a non-processor and to use Android and to use these crazy fast processors for all the potential that they have. Yeah. Because you can never use that on a smartphone screen. It's too small. Yeah. And it has also some other beneficial. For example, if your phone is... You can keep it every time, so everywhere. So it's easier to synchronize. You won't get stolen and you can encrypt data very easily. So it's safer for fleet management. It's really easy for companies. You can do just a backup. With this, you don't sync your device, you do just backup. So you just backup your data.  It's okay. You just get a new one and you put back your data. You put back your data into the computer. Right now it's not as easy to do. Can you certify with GMS? GMS certification is still with your firmware? All that stuff. Right now we're working with VCTS. VCTS, sorry. We're working with VCTS validation right now. But as we're working with a community on Android right now, on V&E, V&E still we've got a play service right now. And for the user, as it's an open source project, it didn't ship a goal play, but you can install it. But we're working into having the VCTS validation and that's our goal. We don't want to change Android. We want to add something on it. That's the point of compare to RemixOS for example. What's your business model? How are you going to make money? It's not free, right? Good question. We want to work with companies like B2B, B2C for example, if we can do maybe some code funding soon. I hope so. Code funding, so you will maybe ship a phone with it pre-installed. That'd be great. Yeah, of course. Yeah. I don't know. Right now I can't tell right now. Yeah, we'll see. And then over here you shine a different demo right there. Let's go. Behind here, it's running on a projector also. Yeah, so it can also work wireless, so this is with VSTON, oh, normal battery. It works on the Miracast also. Yeah, this is Miracast, Wi-Fi display. So we work on the latency, so there is no latency with the mouse. Nice. For example, if you compare with, if you use it, for example with Comcast. Is the Miracast compatible dongle over there? It's compatible here. The dongle or the projector is Miracast, and that's it. Oh, it's a Microsoft wireless display. Yeah, it's a Microsoft one. Microsoft is working well with it. We also test action tech, are great also. We didn't try all the brand actually. So did the Google engineer come by the booth here? Any Googlers or Microsoft employees? Right now we haven't seen anyone. This morning I didn't see any employee from Google or Miracast. I think they hide behind shell companies, you know? Yeah, maybe. So you never know it's a Google one? Maybe, maybe, maybe. I don't know. And Apple, I'm sure they hear, like, oh my god, this is the future of OS X. I'm not sure, Apple. I'm not sure. Apple. Yeah, I'm not sure. Apple wants to do that because they are not, they are syncing device. Because you have an iPhone, you have an iMac, a MacBook Pro. You can sync them. Of course, if you can just buy one phone, you want to buy the computer. So that's not, I don't think they want to do that actually. Nice. All right. Yeah, we need to check the UI more. I'm looking forward to see how it's going. And you can easily click full screen? Yeah, we can put on the screen. For example, if we use, we develop some tools. For example, this kind of games have two joystick on it. So, for example, you have like two joystick here. You can load an app with developed on it. You can switch to bad mode. Basically, you found you have back all your control gear. This is the app. The screen, the touch, is sent to the app. So that means you can play with two joystick like this. And have it as a joystick controller. If you have a game using accelerometer on gyroscope, you can do a race like this. This is so great for games. How do you click full screen? We have like two modes. We have maximized, we have maximized, we have syncing. This is where we hide the time and apps. Right now, no, but we are working on it. This is completely full screen. All right. Have you tested every two million apps already at all? No, sometimes we find some incompatibilities, but we are working on it. Actually, for example, with Bowser, we had a lot of RAM for a long time because the Bowser was not adapt to the size of the virtual screen we are doing here. And now it's fixed. So we are working every day to do it better. But before we were sharing an alpha to internet, now we can call it a beta on even maybe not release candidate, but we have reached a point of stability. How many engineers? Right now, we are a team of four in Oxy.  So we have seen long before, but sadly it's not here anymore. And he's the CEO. I'm the CTO, and we have another person in the team. Cool. That's awesome. So maybe the future of OS is going to be French. All right. That would be great.


Yo what's poppin' people, welcome back to another video. Thank you guys so much for the support today. We got a little special guest on the channel. And it is a little special, a little special guest. A little special guest. And it is ol' big Steve. You haven't seen big Steve in a while and it's time to bring him back on the video. So if you guys wanna check out. Hashtag bring dad back. Hashtag bring dad back down below. We might need to get some bring dad bag merch on the website. If you guys wanna see that, let me know. But if you guys wanna go check out big Steve's channel, link down below. He's been vlogging a little bit about his car or his truck and he's done a lot of fishing videos with ol' Perry Murphy. Perry is hilarious. So you guys need to go check out his content on his channel and like I said, I'll link him down below. Like I said, I'll link him down below. If you guys are new to the channel, please hit that subscribe button. Hit the notification bell. Also hit the like button. If you guys have been enjoying the content.  And I just dropped some on the website so you guys need to go down below. Click the link, kickintheirbass.com. Brand new kickintheirbass hats. These are the originals that I dropped on the website and the ones that you see back here, these are gonna be dropping very, very soon. These are the big bass energy cryptic series hats. They're gonna be coming to you guys soon. It makes the ladies come running, man. I'm just telling you. And look at this right here. We also have some big bass energy lanyards coming very soon. Look at that man, that's hot. They look really, really good. We got some other things coming out very shortly as well. If you guys would also like to check out some t-shirts or sweatshirts, they're on the website as well. I appreciate everybody's support that's been purchasing some of the hats, some of the clothing, and overall just supporting me and supporting my brand. I really appreciate the support, man, and it means a lot. And if you guys go on to Instagram, post your pictures, tag me in it. I'll make sure I'll put you guys up on my story and I should look. Hashtag bring dad back. Hashtag bring dad back. Hashtag. Come on, you guys, help out the old man here. Got help out the old man. But anyways, today we're running a little challenge. We haven't done a Father, Son challenge in a very long time, so we're making it happen today. I actually ran by Walmart and I got some stuff. He doesn't even know what I got. I got a bag of stuff right there, but I also got some goodies in the back or actually have it in the garage. Have you seen it yet? No, but I have a feeling I know what's in the bag. What do you think it's in the bag, man? Some dancing rascals. Some dancing rascals. Why do you think that? Do you already look? No, because we always do the bill dance dancing rascals, because people like to see me in my big worms. What did you say about the dancing rascal last time? I think Bill Dance named this bait after himself, the big red worm in the dancing rascals. I think there's something behind that name. I think he's just not telling us. Bill Dance's ego is right here on the package.  Come over here and play with my dancing rascal. She never wants to play with the dancing rascals. I don't know what the problem is. So this is what we're doing today. I went by Walmart, big Steve wasn't with me and I got some supplies for today's video. I got a little baggy bag here.  All right, so this is what we got, big Steve, running another, whatever you catch, fishing challenge, live bait challenge. Whatever you catch, whatever you catch, it don't matter if it's a bass, a bluebill, a catfish, it don't matter. Got some split shots, okay. Got some pan fish hooks, showing the camera right there, yeah.  So that's all we got right there and then we got, you already showed the camera, the dancing rascals. And then I got two things in the garage I got to show you real quick, hold on. The big red worm dancing rascal. Play with my dancing rascal, please. Got this, a red coat, it's called the Sling Shop. Whoa, but that one's actually mine. Don't get too excited, that one's mine. And I got you a special one. I got you a good hot pink one. I'm gonna rock today, big Steve in the hot pink.   Every time we go fishing, you got an advantage. Yeah. What's that advantage? The advantage is I can't touch the fish that you have to, but to your disadvantage is I've always catch the first fish so you're busy taking the fish off because I'm busy whooping them.  I hope it happens, I hope it happens. But that's the thing, if you guys didn't know if you guys are new to the channel or you haven't seen big Steve on the channel much, he's actually allergic to fish. So we can't touch him at all. I've seen a lot of people comment like, Noah, why doesn't he use gloves? I don't know if you guys understand how allergic he is. Like he could use gloves, but the problem is like if a fish squirms, which it's a creature, it's gonna move and like splashed on his face or something. Like it could be really bad. The other problem is I can't get the gloves off when they have fish slime all over them. Cause then I'm like, he literally can't like any of the slime, like anything on the fish like he can't touch. So it's just difficult. I don't know. Every time he like hands me the fish and he like walks away and like hold it out to me. So I don't know. But for everybody asking like, why doesn't he just use gloves? That's why. Cause I mean, if it splashes anywhere, you can splash on your face at any time. Then we got to call the Bambalance. Yeah, we don't want to do that today. Yeah, let's go ahead and walk down to the pond. Actually, let's rig up first. We're going to go ahead, tire hook, split shot, bobbers on and get ready. Kind of digging that combo. I'm kind of jealous going back. Hi boys and girls. We were rigging up. It's got like this little tiny plastic thing on the end of it.  I was going to buy us some regular Zebco 33s, but they were like $30. What pound line is this though? You gotta tell the people. I don't know, we're probably like 10. No, it is 10 pound. It's actually surprising. I thought it'd be a lot lighter. 10 pound mono, I'm assuming. So this is what we got right here. These are regular pan fish hooks. These are actually really small, size six. And if you guys didn't know, let me show you. Little hooks right here. Let me see if I can focus in, man. Come on one now. Yeah, right there, you see that man? It's a little tiny hook. Come on. Yeah, no? Yeah, right there. Little tiny hook. If you guys are wondering why this is so long, it's because when you get it in a bluegill's mouth so you'll be able to actually get it out so you don't have to gut hook them. I actually didn't know that like a year ago. So, thought I'd tell you guys, but I'm tying this on right here. I'm gonna tie this bad boy on first. Like I said, size six pan fish hook. Gonna tie it with a basic uni knot. The old scissors, cut our tag in. Boom, just like that. And we just got some little split shots. These are just regular lead split shots. And then I got a two pack of these bobbers.  Just crazy stuff happening, but we're gonna go ahead and put, I'm probably gonna put two of these split shots on. I'll put one on and if I need two, then I'll put two, but I don't. It's hurt.  Look at that. It's like not even, man. It's that Walmart split shot, baby. Spit it. Put the old chompers on it. Oh, I think barely on there, boy. Let me see what you got going on. Let's see what you got going on. Oh, that barely did grab that line. It ain't coming off of there though. I put the horsepower on it. Can't see good now. Let's see how that eye's turning. I'm talking about, you can see get far away. You can't see how to get up right now.   That's how you trick them. You get the pretty ladies with bad eyesight. That's how you do this. All right, this is the thing. We're out of the experiment with this when we get down here, but I'm probably only going to put it up. If, I don't even think that's a foot. What did you do? I went like three, three foot, man. Why? You think those fish swimming around the top of the water or bottom of the water? Dude, it ain't that deep out there. So if it's 10 foot, I'm probably halfway.  That's what I'm going with right there. That's gonna catch me. Look at that. About a foot. When he's taking a whooping by the old pink rod, we're all gonna know why. Okay. You're gonna blame the bobber situation. Okay. Man, you're setting it for an elephant. We're gonna take all our stuff down to the pond. Steve's been catching something today.  The weather's a little wack. Last couple of weeks have been just weird and now it's really windy today, but it's gonna be fun.  At least I hope so.  Not gonna happen. I can't remember or not, but let's go ahead and get down there, make it happen. Hit that like button. Let's get it started. All right, so we just made it out to the pond. We have not been down here in a long time. We actually came out last night. We were just messing around in a... Oh, you didn't film that part. Yeah, I know. You didn't film that part. I don't know. What was that? Big Steve caught a good couple.  Definitely like an eight and nine pounder just swimming around here. I promise you, if we catch it today, he eats my big red one. All right, so this is the pond right here. It honestly looks a lot different from the last couple of times we've fished just because it's getting colder outside. Leaves are falling off. And there used to be a ton of brim beds right here in this corner. A lot of the fish that we were catching yesterday are right over here.  By the way, we're not just going for brim today. We're going for literally whatever, going for bass, anything that really buy a live worm. We're just gonna do the old fashioned today. You know, fish with some live bait, fish with some night crawlers and just have a good time. So anything you wanna say before we get this started? Pink sling shot, big boy behind the reel means total death annihilation to kick in their bass right here on TV. It's gonna happen. You're going down, baby. Hey, so this is the thing, what do you want? I might need your opinion too. I know how to make my rascal dance. All right, see how to wiggle your worm? I know how to make my rascal dance. If I didn't, you wouldn't be here. Yeah, so what, no, not even that. What's the challenge? Like we're gonna, all right, I think we should do like a couple different like little challenges in one big tournament. First person to three fish wins.  We're gonna cast at the same time. Can't be getting ahead of each other, but like I said, let's get a star. It's gonna be a good one. Hit that like button. Let's make it happen. He's trying to hurry and get a warm up for you. Listen, we're casting at the same time. At the same time. At the same time.   Oh, I'm putting the whole worm because I'm going for Nadine out there. Yeah, look at that. I'm gonna catch the big one. Look at that. Come here now. You gotta get it. Yep. Oh my God, you're going crazy. That's the winning ticket right there. Y'all know what's up. Right there. Look how long your leader is. This is, all right, this is another thing. We're gonna learn something today. I don't know which one they're gonna buy better, but you gotta have a long- Here's where the hooks are insane. My leader's up about another foot and a half faster. Two foot. Okay, let's see what happens. Two, one, go! Ha! Hey, this thing casts pretty good for $10. Oh, very first fish already. What is that? Is this a breath? It's a bass. It's a bass. Look how lucky this man gets. He just landed right on his nose.  Don't be talking.  You better take my fish off, man.  Gotta be careful. Oh my God, he's going. He's got it. Oh! Ah! You want me to take the fish off? Hey, look at him. Ah, that ain't him. He was going straight at the bank. You also have Noah. You also have Noah. What is it? All right. My fish has been in here for five minutes. I could have already caught a second one. A brand. Look at that, dude. Is that not crazy? Look at the colors on these fish. We got a bass and a bluegill right off the bat.  They do the trick. Shout out to Bill Dance. Bill Dance knows how to make them big big worms. I'm still waiting. Still waiting on my response and the Instagram DM. Bill Dance follows me, but he hasn't hit me back. Big Steve's first fish. Beautiful markings on him. Look at that lateral line on him. Pretty fish. Little bitty guy. Look at this one, though.  Look at this. Both of us got a fish right away. But look at the orange on this bluegill right here. So beautiful. All right. That's wonderful. What did you just do?  He's trying to hurry up and put it on another worm so he can beat you. You know what's funny? I already got a worm on there. Look at that beautiful bluegill. Got that little orange on there. Look at that. Yeah. Give him a little toss. Oh, Big Steve's rigging up. You know, this is what I'm gonna do. Look at this. Look at this. Right there. Look at this. Look at that right there. What you doing, Big Steve? Nothing happens there, Twinkie boy. What the heck? What was that? I missed that. You better hurry up. Oh, no! Epic failure. You better hurry up. Look at that. Another bluegill. They're out there. These dancing brassicles, too. This one's not as colorful. All right, let's see if we can lip them. We're gonna lip them like a bass, right here. Got to be precise. Look at that. All right, there, beautiful bluegill. Big mouth on them. You made me wait. Made you wait? What do you say? You're putting out another worm. Yes, man. How's it make you? Look at that. I got two. It's beautiful, man. Right now, guess what? You can't let me get a third. Oh! Oh, my gosh. He got one? Look at this, look at this. You gotta rig this up real quick. I'm not gonna throw it in until I take Big Steve's off the hook. I'm gonna be fair. That's two for the pink rod. Y'all know what's up, man. Oh, they're tad right now. They were super bright and now they're just, they're not as colorful. You gotta be careful of the fish slime, but that's Big Steve's. We both got two. I got fish slime everywhere. Don't touch my rod. So far it's two to two, right Noah? Yep. Cheese me. I'll not cheese you. You've got my fish and let him loose. I've already caught the other one. Oh, now you're fishing in my spot over here. Now you're fishing in my spot over here. Now I got my third fish on already. You gotta always watch your line. I'm gonna hurry and get the fish off of there so I can get back in there. Come on now. He's cheesing me. Oh, you're bobbing me.  You technically already won unless I just magically get a bite before this fish hits the water. Oh, I forgot. It's the first three fish.  A little bit of gold action on. Well, I guess I could say you officially won the first one. Pink rod won the first one, not the blue one. Yes, you could officially say I won it. All right, so Big Steve won the first challenge. You got the first two. I just get a repeat of that. Speak it to the mic, my son. Big Steve won the first challenge. Just so you know, Big Steve won the first challenge. You know what's up. With the pink combo, with the tag still on it. Why did we leave the tag? 998 special. Listen, man, I gotta take this off. I think it's my problem. I've used the Zeb, what do you think about it? It actually casts a lot better than I thought. Like it's not bad. I think if it had a little weight on it, you could probably have it coming out there. Cause the Zebco 33, that's like the original. And this is like an inexpensive one. This was like one-third of the price. And I'm gonna be honest, it's not that bad. So what are you thinking for the second challenge, Big Steve? Since you won, I'll let you pick. I think the second challenge should be the first one to get a bass. Okay, that's fair. Because of the blue gill. We already know their air. They're gonna be in our way. So the challenge would be, weed through the blue gill, and catch a bass. Catch a bass? I won't catch me a bass. That's up in here. Let's rig up a worm. We gotta talk about our strategy. Individually, I can't be giving you all my secrets. You gotta talk about our strategy. Wait a minute, I just won. Don't you try to fill my secret? So what's your strategy? I told you. You can tell the camera I won't listen. I won't listen. By the way guys, I apologize if the wind is just nasty. I don't think it's too bad, but I don't know. I was out fishing the other day and it was way worse than this. But then again, I'm not using my GoPro today. Look at that. That's one of my strategies, man. You gotta put yourself a good piece of meat on there. I got two worms. All right there, look at that. Mm-hmm. How are you doing? I got my dancing rascal. All right, we're taking a walk to the other side of the pond. Right here, right? Right. I'm gonna work on what I got. When did these trees get here? Are these all? They've been here all the time. What, they have not? No, they haven't. Look at all your old videos. These have been in the old videos. Oh. Oh, thank you. This is alive. They look old, they've been here since the day you leave here. This is the thing, I gotta get that long cast. Matter of fact, we're in just the bobber a little bit. We need to go a little bit deeper for this one. Just a wee bit, just a wee bit. Okay. Now we're gonna go over here in this pond. Oh my gosh. Oh, I hope that's a bass. Oh, I hope that's a bass. It's not a bass. Oh, if that's a bass, the challenge is over already. Not a bass. Oh yeah, it's a bass. It's a bluegill.  Look at that.  You think the bass would be monstrous. Dude, that is a huge bluegill. Oh, there goes your bobber. There goes your bobber. He's gone. He's out of here. Oh, I hope that's a bluegill. It's a bass. It's a bluegill. Oh, oh. It's a bass. Oh, it's a bass. No, it's a bluegill. Oh my God. All right. I thought it was a bass, but. So look at that. You got lucky. Look how big it is. Mine's still bigger than yours. All right. You can't cast yet since we both have a fish. We're gonna have to rig up and go for another cast. We're gonna weed through all these bluegills. I don't know. This thing's huge. Look at that thing. Look at this thing. It's bigger than your hand. You can lay that thing in your hand. Still got another one right here. That's literally perfect for a sandwich. Look at this one. This is a, this is perfect like live bait size. This is pretty big though. Still, still, you know, pretty large bluegill. Maybe that's what we should do next. Yeah. If you guys want to see a live bait video, let me know.  Try to catch some big bass. I mean, I know there's big bass in here. There's just a lot of small ones. And I feel like if we took this bait somewhere else, like, look at that. That's like, that's perfect. Dude, that'll catch a 10 pound bass all day.  Try, man. So we're here messing with those little worms. You ready? I'm ready.  Big, just same leader or everything? I put a little longer. I put mine a little bit longer to cast before, but. All right, I'll get a cast. Now we wait. Come on, big bass in it. This is the thing. There's so many bluegill in here. It's kind of difficult to try to weave through them. And we got to catch so many, then I got to take his fish off the hook too. Just kidding. Oh, my god. That's a bass. Got to be. Nope, it's a bluegill. Are you sure? Oh, that's a bass, dawg. No, it's not. Yes, it is. Oh, no. How's that happening? Oh, my gosh. I won the second challenge, baby. This is exactly how it needed to go. I wasn't going to let big Steve to owe me. Because I'm assuming this is the best out of three. Every time we have a three challenge, it always comes down to the playoff. Dude, it is every single time. I think you owe it every time. There's never one of us just to owe each other. And we don't even plan these videos out. It just happens that way. Here we go. Second challenge is over. Your boy, kicking their bass. Got the dub. So it's one to one now. Now that's the best out of three, right? Is that your best big bass energy right there? That's my best big bass energy. All right, here we go. Third challenge. Are you ready? I'm ready, dawg. This is the last one. It's one to one. So whoever makes it happen, we can't catch four fish. Can't catch five fish. We're going to catch three fish. Three fish? Three fish, a fish? One fish, two fish, three fish. Three fish, a fish. We're going to catch three fish, a fish. We're going to catch three fish, a piece. And the biggest one wins. So we can't catch four. We can't catch five. Three fish, a fish. All right, and we're going to make it happen. So let's go ahead and make it happen. We've got a cast at the same exact time. We can't catch four. Only three. And like we said, we're going to measure them. So if it doesn't, we're going to lay them against the rod. Like if we get a bass, that's always determined if it's the biggest. You ready? Go ahead. One eternity later. Well, we didn't catch any more fish. So it's a tie today. We're one and one today. So we're going to come back for a part two. If you guys enjoyed this video, be sure to hit the like button. Drop a comment down below on what you guys want to see for the part two episode and what videos you guys like to see with Big Steve. If you guys could, go check out his channel. Hit the like button. I love you guys so much. Peace. Mm-hmm. Mm-hmm. Mm-hmm. Mm-hmm.


Hello, folks. I was speaking to you from the rather small but very cosy fourth bedroom of my house at the moment by reason of all the rubbish that's going on in the world. So, talking about functional programming in JavaScript. My contact details are there on the screen at the moment. Feel free to grab them if anyone's interested. I'll try and put this back up at the end. I'm around on social media and available if anyone has any further questions slash abuse to her like me. So, I'll move on. A little bit about me. I've been doing software development for about 15 years now. Started off working for a little mobile application development company here in my hometown where I had to do stuff like develop a mapping system for buses, which was great because I had to test it by going for a walk around the local park repeatedly. I absolutely had to. It was the only way to do it. Then moved on to Capgemini where I worked on a system that made sure that everyone in the UK pay as their taxes and of course I've never had any abuse for that. The works, there was a big bookshop firm in the UK, proto labs, they're a manufacturing company for the US and Eurofins are now recently, I have become one of those contractors that your mum always warned you about. So, I'm working for all sorts of people at the moment. I'm a big fan of films, so I don't so much have a schedule as a programme of events. We are going with the slightly inaccurately named 6Ws who, what, where, when, why and how of functional programming. So, first off, who is it? I'm going to introduce three people significant to the history of functional programming. One of these guys is a software developer. See if you can guess which as we go around. But this first gentleman is Alonzo Church. He, I don't know if anyone can see my, can focus in my mouse pointer. I'll take your silence as a yes. Okay, wonderful. Sorry, didn't know how interactive we are. This is the first of these I've done. So, this gentleman is significant for a few reasons. Amongst them for us as developers is this guy, the arrow function. That's what this is. It's an arrow function. This is mathematics, though. This is from an old mass paper from the 50s. And the second is this guy here. This donate to parameter. It's the Greek letter lambda. And this is where we get the term lambda expression. This is Haskell Curry, who has something like three programming languages named after him. And we're interested in him for this, which I'll be getting to later. This is currying. Don't worry about what that means at the moment. Now this guy might well be our software developer. I can't imagine why we think that. This is John McCarthy. He developed arguably the first pro functional programming language in the whole world. Lisp in the 1960s. So what is functional program not the point of the last few years. The point of the last few slides was to point out that it's not new. There's nothing new about functional programming. In fact, I started digging into the math papers that formed the foundation of functional programming and they date back to the late 1800s. Honestly, I can't understand a single thing written in any of them because I'm not a mathematician. I'm an engineer. I don't understand it, frankly, but it isn't new at all. It's not like the latest version of angular reactor, whatever. It's not the latest framework that's competing with the others. It's old. It's been around for a long time. The first programming language dates back to the 60s and most of the heavy work dates back actually to the 50s. It's not actually a language. It's a paradigm. A paradigm is a style of programming in a way. If we want the metaphor of a guitar, then we may take our guitar and we may play many forms of music on it. We can play rock. We can play pop. We can play country if you have no soul, whatever. But the point is that you can take your language and do many things. So similarly with our programming language, we can do procedural. We can do object orientated. We can do functional and an awful lot of languages these days support all three. JavaScript particularly supports functional very well. And what is it also not? It is not imperative nor is it object orientated. Most of the folks that I found that struggle with understanding are the folks that have been doing object orientated for 10 plus years and find it hard to adopt to a slightly new style of work. It's not the solution to all of our problems, although I would argue it's the solution to many as hopefully I will demonstrate over the coming 40 minutes or so. It's also not difficult. I'd argue it's really not. It means dropping some preconceptions and learning a slightly new way of looking at a dev, but it's not necessarily difficult. So what actually is it? There's a whole load of concepts. A lot of these have got rather strange, complicated names, although what they actually mean generally isn't all that hard to grasp. Immutability. This just means that once you've set a variable, you can't change its state. In the JavaScript world, pretty much just means stick const on nearly everything and stop using that. All far higher order functions. This is something that folks in the JavaScript community have been doing for ages compared to folks over in like dot net and Java. This is passing around functions as if they were variables, either as parameters to a function as the return from a function. However, but that's all it is function as functions passed around as variables. It emphasizes functions, not statements. Now, what does that mean? A statement is something like an if it's aware it's for anything of that sort. Speaking as a rule of thumb and functional programming, if there is a question, the answer is usually functions, more functions. And that holds surprisingly true for a lot of situations. Referential transparency. This means that a function does not rely on anything beyond its parameters. And the consequence of this is that it becomes extremely predictable in its behavior. This means that given the same parameters, it will always return the same answer, no matter what, no matter the life of the universe, no matter the state of the system. Let's just switch it off. No matter anything. So this makes it very, very, very testable, very predictable recursion. I'm hoping we're all good on recursion. If we're not going to dwell on recursion much in this talk, but you know, yeah, it's an important pattern recognition will come to that. So this is kind of like a case statement with knobs on stateless. There's no state object orientated tends to rely on the paradigm of you've got your state object, you update it, and you keep touching the same state object. We don't generally do that in the functional world. There are reasons amongst them. And one of the great benefits it brings you is that things like async become very easy to support because you don't have a shared state between functions. There are other ways. Now the monads. Monads is the one that has a reputation for being an awful pain in the bum to understand. And certainly if you go looking on Wikipedia and some of the slightly more math sea sites, you will see these really horrid definitions of monad that involve f of G is G of whatever I don't really know. I don't understand. I'm not a mathematician. But according to Douglas Crockford, the curse of the monad is that once you gain the ability to explain it. Once it once you gain the ability to understand the monad, you lose the ability to explain it. So not really necessarily planning to. And it is not difficult, as I'm hoping I'll demonstrate over the over this talk. So where is it? Where do we find it? There are of course the pure functional languages. Never use them personally. I know some folks that swear by Haskell. I think it has got its uses all over. I believe there are some queuing systems out there that are written in airline rabbit MQ. I think that's an airline. The functional programming with each iteration of dot net that gets released. And it's working out pretty well. And they've even got a mostly functional language F sharp, which is an alternative to C sharp BB, whatever. And of course, JavaScript. JavaScript definitely does support functional very well. When is it? So when is it particularly good? It's good for data processing that is given this data turn it into this data. That's the sort of thing functional does really well. That's very pure. That's not requiring much interaction concurrent systems. That is where you want to stack a whole load of instances of the same function side by side. There's no shared state. So concurrency is very enabled by functional. High criticality because functional programs in general tend to be more robust than object orientated or procedural code. So if it's very important that your system go up and stay up, then functional might well be something to consider. Allegedly with stuff like airline. Once you've actually got it for to compile, then nothing on this earth will ever make it break. Now, I don't know. I've not tried that, but it seems entirely plausible. And serverless, if we're interested in serverless, mostly for the previous three reasons, that's, again, functional is the sort of thing that might easily enable you to get into serverless. So where is it not? Now, it's not that functional can't do these things. It's just that these are some of the areas where you have to make compromises.  They they're about we're about as dirty and impure as it gets to the computer world. Now, obviously JavaScript off is obviously often meant to be out on the front line with the user, but what we need to do generally is maximize the pure area of functionality and then minimize the amount of dirty human interaction. External interactions with other systems, same sort of reason input input, interactive with files because who knows that the file is there is not there, whatever this is all and high performance. Okay. I don't know why that. Oh yes, high performance systems because sometimes it depends. This might not be the case with JavaScript so much with some systems with some program language certainly like C sharp. Making it more functional may not necessarily be functionally the most performant choice. But this may not be the only concern you have when developing your system. Often we're more interested in testability in sustainability readability. If you're more interested in those things, which in fairness I would argue that most businesses are because most businesses are keen that the development efforts get done fast. Rather than anything else then again functional is still probably what you want. So why is it why, why are we interested. It's concise. You can now normally I would gesture wildly with my arms but you have to imagine that at the moment, but not you can compress pages of code down to just a couple of lines, potentially it's a lot more concise than old fashioned object orientated procedural code. It's more readable, mostly because of the decision that you've added in with compacting the code right down. And it tends to enforce the writing the code in an order of operations that's more logical and consistent with what we're actually trying to or trying to achieve a testable mention that and concurrency have mentioned that and robustness. Hey, and it's fun. I hope everyone will agree by the end. So this is an old fashioned bit of object orientated procedural code. Now, if I gave everyone five seconds to understand what on earth this was doing you'd probably struggle. And there's a good and that's because our order of operations is all over the place. There's all sorts of bits of code structure in there that are just there to be structure. It's it's a bit harder to read than say something. Oh, sorry. I'll go on to that in a moment. Sorry, slides for all to change that. Okay. But in functional we can just write this on about a line or so. So this is my test case. This is what I'm actually feeding into the thing. This is a test I what I'm actually doing is I'm taking a small little CSV of the titles of Doctor Who stories for those unfamiliar Doctor Who is the greatest TV series in the entire world. And this is the story titles from the first series in 1963, along with my personal rating of those stories. So what I actually want to get out of it is pass this down to data structure and then take out my favorite stories and then give us back the titles, which is what this lot is actually doing in a slightly convoluted way. And this is how we do it functionally. If anyone's thinking this is just an awful lot of out of the box. Yes, six functions then. Yeah, pretty much. That's what it is. And if you've been developing in this style, you've pretty much been doing functional programming for a while now. And what how we doing again at the order of operations is nice and simple and laid out in a flow split on new line, then split each of those lines on comma, do a filter where I'm parsing item two to it and then checking it to before, and then finally select out just item one easy. That's an awful lot more compact than the first code sample. It's a lot easier to read and understand what it's done. It's a lot easier to modify because we can easily just throw an extra line into this functional flow. It's obvious where to make a change in how and that's what functional programming is what we want to do in effect is put the rest of our language into this structure in order to continue. And I'll demonstrate using some of one of my favorite libraries I'll introduce at the moment and I did say that I would get into it the concept of currying. So, in a normal non-curried function, we let's say an ad we taken into that should be a bar. I may possibly have reused these slides from another language. We've got a bar A, a bar B, and we're just saying it goes to A plus B. So that's easy. Give it a 10 and 20, we get a 30. If this were a hypothetical curried ad and we gave it only the 10, does anybody out there want to hazard a guess as to what we get out as the value of answer two? Well, the answer in fact is that you get back a function because as often in JavaScript in functional programming, the answer is a function or functions. So if you give this curried ad simply one parameter, the 10, you get back a function which kind of demonstrating here, which has the one firm value filled in and the second still required. And that is a parameter to the function that's been returned. So by giving our ad a single parameter, we've converted it into an ad 10 function. And this seems a bit strange, but it is in fact very, very powerful. And then you can just give it the second one. You can call this answer two function, give it the second parameter and you get back an answer finally. So the way to that we can introduce this to JavaScript is by one of my very favorite libraries in the whole world. This is Ramda JS. I'm a huge fan of this guy. And most of the rest of the talk is going to be using Ramda, which I'm a big fan of this provides an awful lot of functions that are very similar to things that like underscore or low dash give you. But given a more a more distinctly functional and approach and using currying on everything by default. So this is an example of a Ramda function. This is one filling in all the parameters and here. So Ramda uses it and what you call a namespace are generally. I mean, when you're importing it, you can call it what you like, of course, but our is as good as anything. So our nth says, give me this array and I will give you the whatever is in the nth position. Nice and simple. So all it means is in the one position, whatever you're you're getting that item so zero one, it's that one. So we're saying one is the position data is the data. It gives back a capital B because that is of what that's there. So far, so good. But what we can do is we can only give it the one. We haven't given it the data at this point. So what that means is that get array one here is now a function. It's a function that given any array fed into it, it will give you whatever is in position one in that array. So now I've defined two arrays data one and data two. And I'm forming an array here down here, which is a quarter get array one here with data one fed in and the data two. So I'm reusing the exact same code to fetch the first item out of each. So we ended with an array at the end, which is a B and an F a B from this one and F this one. And I've defined in one position what the logic is for turning my array into the data that I want. And this is a ridiculously simple example. We wouldn't necessarily do this in the real world, but it's just to demonstrate the principle. And you could just easily slide it into my existing functional chain here, our nth one here, because everything in Ramda, unless you supply every single parameter to the thing, evaluates generally to another function. So this is my arrow function simplified without the arrow into a simple call to nth one. And what I'd like to do is to try and pop the rest of this structure into the same use the same approach to compact it down and hopefully simplify further what we're actually trying to do. But first, I need to introduce another structure that I'll be using. So I used to work for a US company. And being British, one of the things we would often do is discuss the weather, because this is no joke what British people do a lot. So the American folks would say and I'm not doing the accent because I can't and it's embarrassing, but they would say something like it's 100 degrees outside. Now, I would think 100 degrees. Ooh, that's hot enough to boil water.  But of course they mean 100 Fahrenheit. The system used as far as I'm aware, only within the US. So the formula for converting from Fahrenheit to Celsius is deduct 32 multiplied by five divided by nine. Because of course it is. Why wouldn't it be. But what we have is a series of operations here and each one is taking a value operating on it, storing that somewhere. And then the next line is taking the previous step, modifying it further and so on step to step to step like a relay race. Now, because of that, we've got an awful lot of code noise here. We've got all these consts that actually we're never going to use aside from just in this one instance this a is unused here is beyond here. We've got the return and so on here and strictly speaking all of this we don't really need. We could use a perfectly nice structure in Rambler, which I will be getting to. But first, Rambler does have an add subtract multiply divide it has all of these guys. So we can start throwing these into functional trees as well. These, of course, are all carried. So if we simply wanted to add or multiply, then it's very easy to create a quick curried version of those. If we do the add and call our pass only attend to it, then we add 10 easy peasy. We've got to add 10 function similarly with the multiply because the order of operations doesn't matter with these guys. But with the subtract and the divide, the order of operations is important. When I say subtract 2015 here, this is 20 minus 15. It's actually in the order that you would sort of say it when you're describing describing a mathematical operation to divide somebody is there 100 divided by five. So if we want to carry these guys, we probably want to actually change the order of operations or to carry a function other than. Let's provide other than the second one as our parameter to our resulting curried function. So Rambler has a feature here called R dot. It's an underscore underscore. That's actually two underscores. This is a function that is a special case. What it's meaning is with a subtract, I am supplying all of the parameters. I'm saying that the one that the curried function that comes out of it should actually supplies its parameter is the one I'm saying. I'm saying this is the whole. This is the bit that needs to be filled in by the next call to the function we're generating. So by doing this, I'm saying, please now get next person supply the first one. And then I'll give you the 15. So that in a fact means I've now created a, oh, that's wrong. That's wrong. I've now created a subtract 15 function. And down here again, I am telling the thing that this is the one that I want to be supplied later. So I've done just created a divide by five function. Easy. So then finally, we can put all of this stuff into my new Fahrenheit to Celsius converter using something called pipe. And pipe does exactly the process that you saw on the old version of this code. It's now bearing in mind, of course, as again, with almost everything around it, this is a function. So our pipe is a function that takes a single parameter, which is whatever it is that's been supplied in, which hopefully is a number. She probably want to actually do some validation of that in the real world, but I'm keeping things a little simple here. So our pipe takes a single parameter, which will be our 100 degrees. And then it passes it to the first function in the chain, which is a subtract. And we're filling in the blank here. So it's taking whatever that parameter passed in is filling it in there subtracting 32. Whatever the result of that is pipe will now push it into this one to multiply by five, whatever the result of that is will push into here. And then we'll fill that final value here and divide it by nine. This in its very simplest form is a monad in case anyone was interested. There's more to a monad than this, but this is the very simplest version of that, that concept, a relay race, just a series of operations, each one passing a value to the next after operating on it until finally we collapse out to a final value at the end. And returning to our our function here, this is our parser. So if we wanted to convert all of this into a rounded up structure, we can now use our pipe. Yep, there we go like that. So pipe says give me the value, then I will do our dot split. And again, all of these are carried functions. These all generally take one more parameter than you're seeing here. And that final parameter is almost always the value the data on which to operate. So I am splitting on new line, then I'm doing a map and our map is just the same as a map as we're used to it. And into that I'm passing the function our dot split. So split on new line split each line of that on comma, then a filter, which is filling it in long hand there. I'm actually creating an arrow to function to do that. There's probably a smarter way, but that's that looks good enough to me. And finally, our dot map where I'm passing it our dot and which is that means go through the entire array and select out the first item from it. And functionally, this is exactly identical to all the previous versions of the parser you've seen. You can run this through unit tests, you'll get the precise same result. But this is a bit more compact. And we're relying a lot more on code that someone else has provided for us. So moving on to another sort of example of the sort of functional structures we would do. This is a password validator. It's a password validator with a series of rules, but it's quite long. It's got a lot of repeated structure with these early return falses. And we could compact this down a whole load make this a bit easier to follow because I've seen how out of hand these things can get if you let them. I've seen functions of this sort that end up growing so much that they end up looking like family trees. And the functional structure will tend to restrict people in terms of how much of that sort of craziness they try. So we've got our rules. It must not be undefined and then convert to a string. And then we're saying it must be less than or equal to two. It must be greater than 10. It must not be just in Beaver because it must not. So that first bit is easy. That last bit, sorry, is easy. A function in Ramda to determine whether something equals just in Beaver is easy. That's just R dot equals. So this again is a carried function. So whatever you pass into is evil now it will evaluate it against this and to tell me whether or not it's it's the same. This is what we've actually generated behind the scenes. But if we want to find out if it is not that if we want to. If we want to reverse the logic of that function, then our compliment is what we would use. So our compliment takes a function that returns Boolean and then it returns you back a another function, but one which does the opposite of that. So this R dot equals checks whether we are equal to just in Beaver. But a compliment of that checks that we are not equal. So it is not X is triple equal to just in Beaver. Easy. And if we wanted to assert against properties, well, that's not too difficult either. This proper EEC does exactly that. It says that this gets back a function which asserts that the property B is equal to capital B. So if we were to feed this function, this object, we'd get back a true because it does have a B and a B. So that's fine. But the property that we want to assert against is length. And we don't want to say that it's equal to something. We want to say that it's within a range. Now there is actually another function for doing this in Ramda and that's prop satisfies. What prop satisfies requires is wouldn't you know it a function, which is the function. That's the predicate that we're saying has to be met in order for this prop satisfies to return true. So we're saying that whatever this property is, it has to be greater than two. Here we're saying that the property we're asserting against is length. So this now has returned a function which will check the length of any given object you pass to it and assert that its length is greater than two. And we can go a step further and just use R dot GT greater than and pass it to two. And we've got back exactly the same thing. So this then is the new version of my password rules. So I'm using a structure here called R dot all. Now all would be certainly very familiar to me from my C sharp days. And what all means is I am going to give a whole list of functions and I'm going to evaluate them one after the other. And given that any of them return false, then I will terminate the soul thing early and return out false. And in this case, what we're doing is this again is a single parameter function. This whole thing validate password is a function which takes a single parameter, which is our data, which will be hopefully our password. One second. Sorry. So and it's passing that same value one after the other into each of these functions I have generated. So the first is actually an R dot is nil. And this is our catch or check against whether the value, the variable is defined or not. And I'm doing the R dot complement of it. So this effectively means first check that this thing is undefined or whatever. And this thing means do the inverse. So what I'm saying is that I'm actually saying that all of these things have to be true in order to be validated. So this is in effect, it's not nil. It's not undefined.  And this is passing the type as it were that you wish to check it to be. And it'll tell you whether that's true or not. So I'm saying R dot is string. So we've passed in our password. We're checking that it's not undefined. Now we're checking that it's a string. So the rest of the predicates can continue safely on the assumption that this is a string. Because otherwise, once we start checking against length, it could be an array or who knows what. So prop satisfied, I'm saying greater than two and prop satisfied less than or equal to 10. So that's our lengths satisfied. And also that it is not just in Beaver because it must not be. So all of that gives us our set of password rules. But again, written in a fairly nice, fairly easy to read way. It's very easy to understand how exactly to modify. If if I were ever to throw in a new rule, it would literally just be an extra one line in this structure or maybe a modification. And it's, I would argue it's a lot easier to work with. I mean, there is a little bit of the overhead of this R dot business. But once you pass that, the rest of it's quite easy to work with. So another example requiring us to do some slightly different work. And this is something that probably an awful lot of us in the programming biz will be familiar with. And that's fizzbuzz. For those unfamiliar and I'm not thinking there's going to be many of you. This is a very simple game where we write out numbers. If one of them is divisible by three, we add fizz. If it's divisible by five, we add buzz. If it's divisible by both, like 15, we add fizzbuzz. I don't know why, but this, this is the go to coding exercise. I often get set in interviews, but fine. So how would we do this using our functional Ramda code? Well, first off, we'll need a map, of course. And we'll get on to exactly what the implementation of this cat. This is the thing that says given a number. Here's the output that I'm going to give you either a number or a string. I'll get into that in a second. But first we're generating a range. Now the range is saying generate me an array between length, which has values in it between one and whatever num is, whatever the, whatever the highest number that you want in my previous example, it's 20. So this is generating us an array of integers between one and 20. And then using map, we're feeding each and every one of those into this function here. So another structure to introduce, that's the if else. We'll be using that in just a moment. And this is handy little kind of like logical switch statement. And this again is a function and takes a single parameter like everything else. And it's saying first off, whatever the parameter is, pass it into the first item in the structure. That's in my case, it's R equals five. So what it's saying is whatever has been passed into this function here, pass it here. And this will tell me whether or not it equals five. If it does equal five, then pass it into this function and do the transformation. Now always means that's what it always returns. So always means disregard the parameter and just return this. So if it is five, we get back F I V E five as a string. Otherwise pass the parameter into this one identity. Now identity actually also means disregard the parameter. Well, no, it doesn't. What it means is take the parameter and just return it completely unmodified. So my little F L structure here is saying take a parameter, check whether it's five. If it's five, return back the text of five. Otherwise, if it was three, let's say, then return that back that three exactly as it was without touching it. So moving on, we've got we've got a pipe here and the pipe is using the if else. So this is a pipe. So it's passing the parameter. This is the thing that's called by the map in our previous line of code. So that means that this is operating on each item in this range array between one and 20. So the parameter to these is an integer between one and 20. It's operating on each one individually, one after the other. And it's checking them against these rules. It's saying first, is it divisible by three? I'll get onto that in a moment. And if it is do our duck concatenate, I'm putting the whole here to say my original item goes here and then we append fizz. Otherwise, if it is not divisible by three, then our identity, that means return the original value back unmodified. Similarly here, if it's divisible by five, then we concatenate buzz. So that's a pipe. And we are either concatenating a fizz or a buzz, or if neither of those divisibles were true, then we're simply returning identity and unmodified value. So that's all of our logic for doing our fizz buzz pretty much in that one statement. The is divisible by, by the way, looks a bit like this. And that's a pipe where we passed it. Math mod is our modulus of behaving in a mathematical way, which apparently the percentage in JavaScript doesn't always. We're saying pop the value there. Num is three or five as appropriate. And then we're saying return back whatever this was passed into equals compared here to zero. So there we go. That's a divisible by one of the last of my examples. So this is a card game that was introduced to me as pontoon. But apparently in the US, it's known as blackjack. I've also heard it called 21 and a few other names. But the basic idea is that you're taking cards one after the other from the dealer. If it's a number card, it's equal to that number. If it's a jack or a queen or a king, the value of that is 10. The ace actually is equal to either one or 11. I've simplified a little because I don't want to get bogged down too much. So I'm saying the ace is 11. And the idea is that you're taking cards to get as close to 21 as you can. But if you go over 21, then you've lost. It amused me as a kid. And if you wanted to do old-school, you'd do something like this. If statements, stuff all over the place. But all we're doing is the scoring at the moment. Our dot is because frankly, it's too useful not to. So there is an our dot contains because I don't want to do big long strings of ifs, looking at queen, looking at king, so on. When the answer is all the same, I just want to do one. I want to compact that out a bit further. The problem with our dot contains is it works in a slightly interesting way for what I'm used to. And that is that first you say the thing that should be contained in the array, then you pass the array, which is the other way around to what I kind of was kind of like. I would like the array and then I would like to pass in the thing to check it contains. So all of that just means that we need to use another r dot underscore underscore to fill in the, to tell it to fill in the blank here. But this is using another functional structure called which round is called conned, conned for condition. And each parameter to this, this whole thing is an array and each item in the array is itself an array, a two-part array. The left-hand side of each of these is a predicate. That is something that takes the parameter, evaluates it and then returns a true or a false. This true or a false is does this rule apply? So r dot is a number means if whatever the parameter is is a number, then simply return it unmodified. Moving on to the next line. We've got a slightly more complicated condition and that's a contains and I'm saying our blank is here. So we're filling in here and I'm saying look in this array, if our value is contained within this array, return 10. So it's an r dot always 10. Otherwise, if it's an ace and r dot always for 11. So this structure, this is pattern recognition. This is what it is where it's kind of like a switch statement, but with full-on functional expressions on the left-hand side rather than simply checking against value. And then on the right-hand side again, we've got a full-on function of some kind. This sort of structure is extremely powerful and can enable you to write an awful lot of code that would otherwise be complicated and long-winded. So if you want to imagine the sort of basic functional flow, we start with an item that's called a string. Generally speaking, the first option chance you get, you split it into an array of strings or string or whatever. Maybe you do a where or something or a filter rather to reduce the number, a select or a map rather to convert to something else. Finally, aggregate into a single value again. That's the sort of standard flow that we'll run through when we're doing a functional process. But this aggregation is the last step in the process that I haven't really touched on so far. There are some built-in simple aggregators. Some will do exactly what you think. Passage of an array, you get back the sum. Mean takes you an average. Easy. But we want to do something slightly more complicated. We want to take an array of cards in our hand. So in my imaginary example, I've got a 1, a 5 and a K. So that's 1, a 5 and a King. King's worth 10. So that's 16. And I want to convert all of this into a single value of the score. And that's where R.reduce comes in. So R.reduce takes a function with two parameters, the accumulator and the value. So the accumulator is the running total so far. And the value is the current item out of the array. It also needs to pass it the starting value, which when we're calculating our scoring cards is going to be zero. So when we run this the first time, the accumulator will be zero because that's here. The value will be the first item out of our array, which is a 1. And so we're saying that the new running total is accumulator. That is the old running total. Add the score of the card, which is over here. That's this function that we created, this pattern recognition structure. So 1 will go into scorecard. It'll actually match. There is a number come back as identity. So the new running total is 1. So then we'll call this function again. And the new accumulator is 1. The new value is now 5. And we're saying that that is equal to the old value. That is 1 plus the score. Now again, it will be 5. So that means that the new accumulator is 6. Calling this again. We've got 6 here and we've got K here. So when that goes into our scorecard, this will not match. So we won't do identity. This one will though, and it will match on King. So that means we'll bring back a 10. So finally, we'll get back our 16. Took me an awful long time to explain that, but didn't take me very long to write it. And once you're used to working with this pattern, it's not really all that difficult to throw these together. And if we want to go another step further, more complicated, we could do a pipe, which is first, which then first does our reduce, reducing our array down from this list of cards to a value. And then do an if else to say, if it's less than or equal to 21, we'll do identity. So that's your actual score. Otherwise, we'll do an always with bust. So in my imaginary example, if we pass in the 1, the 5 and the King, we'll again back a 16. Otherwise, if we have a queen in there too, now the queen will take 16 to 26. And that means that we will switch to being bust. Again, awful long time to explain, not much time to read or to understand. So this is the last bit. And then you can all relax. So I've got a hypothetical DB get of some description. I don't really know what it's doing. I don't really care. And it's getting a record based on an ID. And inside this is a data object of some kind. I'm imagining it's user data or something of that sort. And I want to say hello to whomever details I've just fetched, possibly the devil. And I will call first name on that and put it into a string. Now that's fine provided that this actually works, that we actually do have a record coming out of this. And this is not just undefined because otherwise this is going to explode. So there is a structure in functional programming that will allow us to do this sort of thing without having to sort in an awful lot of checks against undefined all over the place, muddying up the code and getting in the way of understanding what's going on. This is one way of implementing it. I've seen it done all sorts of other ways. But typically it's called maybe. And maybe is an object that just contains a value. Think of it as a thing in a box. So we've got our value. We're popping it inside the box. Maybe is the name of the box. And we've got two functions hanging off its prototype. The first is to get value, which is just take the thing out of the box and hand it over. And the second is bind. And bind takes a function. And what we do is we check whether this value is actually defined or not. If it's not defined, we will not execute the function. We'll just return another maybe with undefined contained within it. Otherwise, we'll return a new maybe. At this time, we will execute funk whatever this is with the value from inside our box popped into that. And that's what it would actually look like when you run it. So I'm saying my message is a new maybe and I'm starting with my ID. And I'm using bind and passing it in a DB get record. So X here is the 666 and that's going into there and that's executing. Now, if this worked, this means that this first bind would return a new maybe with whatever the result of that is popped into it. And then the new maybe would have a bind on it. And this would be the result of that. And then we could safely operate knowing that this is defined. It might not be a terrible idea to possibly put a try catch around it again just in case first name doesn't really exist. And then finally you call that value at the end to get the value out of it. But if on the other hand, this return nothing, then this type of this value would be true that would be undefined. And we're simply going to return a new maybe. So that means if DB get record return nothing, this bind will not run this function here. This function will never be run. But an undefined will be returned. So the value at the end will be undefined. And we can do something like at r.cond or whatever to decide what to do with it. But the point is that I've written my flow of operations in this single chain. And I don't need to start adding in lots of code to check against whether the previous operation worked or not. I can add in as many extra lines as I like. And all of these can assume that the previous step succeeded because otherwise the step will not be executed. And this is what a monad really is. This is the sort of thing that we really do with them. There's a whole load of other monads covering all sorts of other other eventualities. You could have monads which return different objects depending on whether previous steps worked or not. You could have monads that switch to containing error messages on the result that an error occurred.  So you may have been using some of these longer than you expected. So I've got about 10 minutes left, which is not bad timing at all. Does anybody have any questions at this point? Thanks a lot Simon. I am in charge of the questionnaire site. There are questions for you. Yeah, it's not scary. How many of them contain abuse? None of them contain abuse. All of those have been filtered away already. The first question is, for someone who knows programming C and Java, what do you think would be the best functional programming language? Any books you can recommend? Well, okay. I haven't done C since I was at university. That's longer ago than I really care to admit. Java though, again, I don't know Java, but I do know C-Sharp. So C-Sharp is actually a really good one at the moment for getting into functional programming. Because as I said right at the beginning, Microsoft now have a policy of introducing more functional abilities to their language as they go along. Things like the pattern recognition. It's not entirely as powerful as the structure I showed you there, but it's getting there. And I believe it's something they're continuing to work on. So I would actually recommend a book called, I think it's Functional Programming in C-Sharp by Enrico Buinano. It's published by Manning. And it's honestly one of the best programming books I've read in a very long time. I absolutely adored that book. And it's examples of how you can start doing functional programming in C-Sharp today using no extra libraries. And it explains things like the MONAD and the pattern recognition system so nicely that it's easy to work with. And the best thing you can do is don't just read it, grab out Visio Studio or whatever and do it. Because a lot of the difficulty in understanding functional programming often comes from the concepts and getting your head around it. And if you sit there and do it, I almost guarantee that after some time there'll be a light bulb moment and suddenly it'll all become just obvious. And certainly for me now, I get a little annoyed if I have to write everything out longhand, as it were. Doing it the old way rather than doing it the nice, quick, easy functional way. So that's my personal favorite book. There is functional programming in JavaScript by the same publishers. I haven't read that in a great deal of detail. It looked quite good, but it wasn't entirely what I was after personally. It uses underscore. So if you're familiar with underscore, you might find that one useful. But personally, Ramda is one of my all-time favorite libraries for almost any programming language ever. Also, I'd recommend checking out the Ramda website. They have extensive documentation on how their library works. Nice. We'll make sure that we'll get the links for the books and we can publish them together with the slides later on. Okay. Oh, I haven't got my camera on. So that you nice people. Hello. You're currently not visible, though. They can only see the questions. I can put you on screen. Oh, yeah. There are two more questions, though. I'm already married. I'm sorry. What do you think of observablehq.com if you've heard of it? I have not. I am really sorry and I'm literally writing down that right now because I'm so sorry, but I've never heard of it. All right. One last question, which goes more on the board, I guess. What do you think about Rust? Again, not heard of that one. Apologies to everybody. That's a programming language, I think, isn't it? So I do not like that in my car. I don't know anything about it as a programming language. So again, apologies. JavaScript and C sharp are predominantly all I ever work in. All right. That's all the questions we had. Thanks a lot for the talk for me as a Haskell evangelist ever since I first saw it. It's great to see that functional programming is catching on everywhere nowadays. In fact, I was having a chat with the summer interns. When I was in the U.S., I was having a chat with their summer interns and they were saying that in their universities now, functional is the sort of programming that they're teaching them. So I do get the fit. And certainly when I go to things like NDC Oslo and things like that, I get the impression there is more functional content each year compared to the previous. And people are starting to name check at least functional even in the non-functional talk. So it is definitely a very coming thing and something that's becoming extremely, increasingly important as the years go on. Yeah, it's nice. And thanks again for a great talk. And with that, I would like to thank our speakers, our sponsors and all our viewers.


Pennsylvania has a long-standing history of being an energy producer, having generated a lot of oil and gas in the 19th century. Until the arrival of hydraulic fracking techniques, the thinking was that Pennsylvania's involvement in energy was largely passed. That's no longer the case. Number of new wells that are being drilled throughout the state because of the Marcellus shale is very rich deposit, continues to grow. And with it, a series of questions. One is the economic opportunities for developing that resource and jobs that might go along with it. Linked, though, are questions of environmental protection, water, air emissions, safety kinds of factors. And because of the way policy has been set up in the U.S., these are really decisions that individual states, Michigan, Pennsylvania and others, are taking because there has not been federal policy yet. Pennsylvania appears now to be moving in a direction whereby they want to actively encourage the development of this resource. Have decided through actions taken in Harrisburg, the state capital, that they will not impose a tax, a so-called severance tax, which is in place in 25 other states where you actually tax the energy as it's being extracted from beneath the surface of the earth. Where this becomes interesting also is that just in the last few months we've been able to do a survey of public opinion over 500 Pennsylvanians on some of these various issues. And we found that while the public there is generally supportive of the idea of pursuing fracking, think both short-term and longer-term, it will be delivering significant economic benefits. There are a number of environmental concerns and actually strong public support for some level of taxation, regulatory oversight and disclosure, which actually puts the public view on this seemingly at some variance with the policies that are coming out of the state capital right now.


What's up, everyone? It's your girl, Kenty here from late in sports cards and I'm ripping a personal for Mike Oh, we've got a 2022 tops clearly authentic baseball hobby. Alrighty Mike best of luck Let's see if we can get you. It's been pretty hot too All right, here we go. Good luck We've got a Scott rolling for the Phillies on the acetate auto Scott rolling This one there Phillies like the acetate look two of these cards Alrighty Mike that will do it for your clearly authentic box. Congrats on this hit and we'll get it right out to you


Hello people of the internet, my name is Johnny and welcome to a video I was not expecting to make, but I'm honestly kind of excited for this. So as you may or may not know, we have a very long and very deep history with FNAF AR on this channel. And this time we'll hop in back into FNAF AR, but it's not exactly the FNAF AR you may be thinking of. It's not FNAF AR special delivery made by Illumix. No, God, no, not at all. It's FNAF AR made by U2s. So today U2s finally released their security breach and also the Nightguard Dock-o U2s. They just came out as of recording like 30 minutes ago. I'll leave a link down to the store page if you do want to get them, though I can't guarantee they're still going to be available by the time this video goes up. But alongside the release of these U2s figures, they also released a FNAF AR experience featuring these U2s figures. Now I understand this is probably all to promote the U2s figures, which I don't care about. I'm just excited to hop into a brand new FNAF AR experience. So again, hey, if you want to go pick up the figures, feel free to. I'll leave them linked down below. I'm not sponsored in any way to promote this or make this video and play this AR game, but I thought it was interesting. I had nothing better to do with my time today. Now I did briefly hop into the game just to see if it's worth a video and there's not a whole lot of content, but it's still something I wanted to check out with you guys. So without further ado, let's not waste any more time if you are excited or you're brand new to the channel. Please subscribe, hit the like button and let's hop into FNAF AR, but with U2s. And there it is, U2s presents five nights at Freddy's. So it's not called FNAF AR, it's just called U2s presents FNAF, but here we go. Let's hit start and I do believe we do get a phone call. Oh my God, inception. And there it goes. I do think we get a phone call from everyone's favorite phone guy. Now, unfortunately Scott doesn't actually talk. Hello. Hello. Hey, thanks for helping us on such short notice. The new line of U2s collectibles has been upgraded to include advanced animatronics. Now they can move, play, even detect who's around them. It's pretty neat. Of course, they're still walking out some of the kinks. Basically, the animatronics are so advanced, they can actually figure out how to get out of their boxes. That does not sound good. Luckily, they're still in demo mode. So if their light sensors are on, they will think they're on display and won't move much. Hit the light switches to keep the collectibles from leaving their boxes. If they do get out, well, just don't turn your back on them. We'll pick them up in the morning. One more thing, we've been getting some complaints that the characters play a little rough. I'm sure it's nothing. Oh yeah, I'm sure it's nothing too. Once they get out of their boxes and start scratching my face and jumping all over me. Let's hop into the experience. Hello, little friends. So we got Chica. Okay, I can't actually point my finger to you. We got Chica. We got Daco. We got Freddy. We got Vanny. We got Roxanne. And good friend Monty. And you can see all my stacked plushies over there. Wow, how cool. Oh my God, you're already getting out of your box. All right, don't do that. So we just flashed the light on them, it seems. Don't do that. Oh, are you guys moving? Are you getting out of your boxes too? Don't do that. Don't do that. Don't even know you stay on those boxes.  Okay, wow, you are too. Wow, hey, guys, you were not this active when I played this game earlier before the video.  Okay, oh, hey, Freddy. You're sitting down on the... Oh my God, I turned my back to Roxanne and now she's gone. Roxanne, peekaboo. Oh, hey, you're over there. Hey, what are you doing over there? Wait, don't go over there. Get back. Okay, well, now Chica's out. Awesome, who's running at me? Oh, wait, no doco's still in there. Oh, Freddy's gone though. Oh, Freddy, oh, hey, Freddy. Hey, main man, Freddy. Hey, just go back in there and it'll all be good. Roxanne as well. Please go back. Oh, hey, you're shutting down. Is that a good thing? Do I want that to happen? Doco's still chilling in his box. I don't know what's going on. I died, apparently. I made it to 3 AM. That was an interesting jump scare. All right. When I did this before I started recording, they like barely moved. Like I think they only got out once, like properly out of the boxes and around my office. Whoa, more inception behind Vanny. Why were you guys so active? Monty was chilling. Monty was my only friend during that experience. Oh, hey, you're getting out. Okay. Maybe I'm not doing it.  Lewis Doco's Dawkins, Doco's Games.  I don't know how making them think they're on display will help all the- Oh, hey, Freddy's getting out too. I also have limited power, which is something I should maybe pay attention to, but at the same time, it doesn't look like they close their boxes. So I don't get the point in like even keeping them- Keeping them on. I mean, I guess I can see what it looks like when you run out of power, but I also want to beat- I want to beat the video game. Oh, hey, Freddy. Hey, you're out. Awesome. Okay. Let's focus on you. Oh, hey, Chica's starting to get out. Don't do that. Well, it is 2 AM. So I guess I'm doing good. Well, you're already out of your box. So what's the point of having the light on you? Maybe I should focus on people who are not okay. Well, Vandy's out of the box. Monty, my best bud, best bro. Hey, little guy. Still chilling out in his- Hey, you're getting close. Doco, you stay in there. Freddy, you- Uh, uh, Roxanne? Roxanne? Where'd you go? Okay. We're just going to forget about Roxanne. Um, Whoa, stop that. Hey, what do I do with you? Get back in the box and you stay in the box. Whoa. Hey, Vanny.  You didn't go back in the box. Monty's my best friend during this. He hasn't done a single thing that I don't like. Maybe you all should be more like Monty. Okay. Hi, Doco. Hello. What's going on, Doco? Oof, Doco back again. Thinks he owns the place. Just coming out of his box. Vanny, too. All right, let's take a little bit- A little bit of time off Lewis Doco's. Um, actually, maybe we should- Okay, everyone's- Everyone's coming out. Awesome. Freddy? Monty's still chilling. All right. So, do you guys like not move if I just keep the light on you? Because I feel like I've- I've built up quite a lot of battery. Monty's still chilling. Is that box slowly opening, Monty? Is that what I'm seeing? I sure hope it's not slowly opening. Okay, hey. Yeah, so the light does nothing to stop them, it seems. When they're out of the box... Oh, what? When did you leave? Why am I so bad at this? I'm going to turn on lights. And I'm going to leave them on the whole night. And we're going to see just how much you guys move with the lights on. I will sit here until my battery runs out. But at least I know no one's going to leave their box. Thank you, Monty. I know it wasn't you. I know it wasn't you, but sometimes I have to be harsh. I'm sorry. And I'm out of power. One, zero. Ooh. Oh, Freddy! Oh, that's a cool touch. So only Freddy comes out to jump scare you. Oh well, okay, I take that back. Vanny's out too. I guess... And there he is. I'm going to try doing this.  And I don't know why you guys are formatted like this, where Chica's like right here and Daco's. Daco's just right there. Okay, yeah, no. Hey, Daco. Daco, you're still chilling. I'm going to keep the light on you a whole lot because you're about to get out of your box. Actually, sorry, you are out of your box. Vanny's about to be too. Okay, wow. I'm not even going to look at Monty because I don't think I have to. Oh, hey, Freddy. Got to look at Freddy, though. Okay, so we're running low on power. I will say that. Hey, Chica's out too. Awesome. 4 a.m. I think that might be death. No, it's not. Ooh, they've cornered me. Ooh, they've guided me. She's gone. I had the light on you so much though and my phone's running low. Are people going to believe me when I say I did actually beat this before I started making this video? Maybe I just have to look at them. Okay, so when it says don't turn your back, that doesn't necessarily mean you have to look at them. I don't know where Freddy went. I had the light on him a whole bunch. Oh, hey, Freddy. Found Freddy. Well, I think that's going to do it for me today. Not only is my phone about to die, but I've given this quite a few attempts and again, believe it or not, I did beat it before I started recording and the winning screen is not really anything too special so I don't really care a whole bunch getting it in this video. It's basically just a 6 a.m. chime. It has the classic, you know, 5 rolling into 6 and then there's a note from the phone dude that's like, you know, we must have missed you coming out of the building, but we're here now and it's the morning and yeah, it's like share on social media with your friends. Hey, you made it to 6 a.m. So yeah, I don't really care too too much about showing off the 6 a.m. feature in this video, but hey, maybe you can survive longer than I did. Go download the app again. I'm not paid to say this, but it's a pretty fun app and let me know if you do end up making it to 6 a.m. because I sure as hell didn't in this video, but thank you so much for watching this video. Hopefully you did enjoy this one off and who knows, maybe if you guys like this video a whole bunch, maybe I'll come back for a second video, try to get to 6 a.m. I don't know, but again, that's going to do it for today. Thank you so much for watching and I'll see you all on the flip side. Goodbye.


Welcome folks, we have the Dow Industrial Straighten down 22, NASDAQ is up 47, S&P is up 8.5. Gold. Gold contract down $3.40, trading at $17.73 an ounce. We have Silver down 26 cents, $19.58 an ounce, Light Sweet Crude up $2.31, $90.42 a barrel, notes and bonds. Ten year note, up three ticks, trading $1.18.27, the third year up four ticks, at 1.40.14 and King dollar. Check this out man, it's amazing the market's up, it's amazing gold's not down 50 bucks. King dollar folks is up 900 ticks, trading $107.73, bottom line, it's going to go for its highs man. You had a false breakdown town, it went down with conviction, came right back on the other side of the channel line, now you have strength inside the dollar. The Euro is trading at 100, oh look at that, one to one. The yen is out here at a price point at, where are you, yen's 135, British pound is at $1.19 to $1 a US dollar. We go over and take a look at the S&P, bottom line to get a sideways move out here today, so market kind of looking for option expiration, we haven't done anything out here, we didn't get to the low, so what you're going to have out here now is this, you're going to have, we hit a low yesterday, that low on the spy was $4.24.54, you did 63 million shares, now this is what it's going to be, this is really deviant right, because the bottom line is trying to get higher and see how it's getting higher with $30 million, we're going to do 40 million when we're down to 63 yesterday, so market wants lower price. That's in the spy, NDX100 is going to be the same type of setup inside the NDX, we take a look at the NDX, what you have here is this, yesterday we hit a low out here, $47 million, you can see we're only $27 million, that's a market that wants lower price, this gap I suspect is going to get filled, the gap that we're talking about is the August 9th gap, gold, we go to the gold contract, we take a look at the gold contract, and as I said with the dollar up 900 ticks, it's amazing that gold's not smoked, you have, you're down $3.20, you're trading $17.73, you don't have a rejection of lower price, but look at this volume, this is like insane, it's 115,000, I mean, yeah it's 115,000 contracts, okay, bottom line, you know, you're still going into $199 contracts, $198,000, that's $152,000, and then good old King Dollar, I mean this King Dollar is something else man, King Dollar right here, bottom line, you get the price spread going with it, it broke, it wants it to touch size, it's going to go after this $109,294, once again, stay right there folks, come right back.