Hello everyone, my name is John Hammond and this is another try hack me video today I want to be showcasing the dog cat room that came out just a few days ago, right? I think it was actually like April 17th and the time recording is April 22nd So we'll see how we do it looks like we have to join this room I've got it up here on my screen and I believe this is a free room so we can access it totally just fine I'm connected with my John Hammond YouTube account that is free And I guess I should clear out some of the stuff from my other video my bad Trying to knock a few out today and trying to get trying to get back to it So let's make a directory dog cat and let's hide over there Let's sort of read me files. We've got some notes that we can keep track of and I'll call this dog cat The IP address I just like to keep track of as a little environment variable or just a variable I could use and reuse pretty easily So let's go ahead and do this It says I made a website for viewing cat and dog images with PHP If you're feeling down come look at dogs and cats the machine may take a few minutes to fully start up Okay, so not a whole lot of answers or guided I guess a walkthrough here. It's more of a challenge room. It says what's flag one? What's flag two? What's flag three? What's flag four? So we are just off the races kind of on our own So let's do our own thing. Let's uh, let's go see if this machine is up I guess I'll ping this guy. Let's export this guy That and then let's ping our IP address good Is he up and available? He is okay dog cat a gallery of various dogs or cats. What would you like to see? I'd like to see a dog, please. Oh This is wonderful How many dogs does it have oh my gosh This is the real YouTube content you guys came for How we got any cute cats My girlfriend and I are gonna get a dog. We're that's is a ginormous image. Holy cat. I don't want I don't want that That's not a dog. That's just white space. We want to we want to get a sheet, but you know Okay Let's go find out what's really going on here if I look at the URL We've got view equals dog, which is kind of peculiar because maybe we could view some interesting things The view looks to be a variable which seems to be being set to kind of our option here If I set it to a dog or a cat Maybe we could view maybe the home page like index Only dogs are cats are allowed. That's annoying cat dog those work What about I Guess I can't like you can't do some local file inclusion all the way up to it's that we're password in this case Because I think it's probably adding a dot PHP extension on here So what this is doing though if it is adding a PHP extension Well, we could abuse or some of the PHP local file inclusion tricks and techniques where we can say PHP LFI filter Because we could supply a filter for What we might be looking for and that way we won't have it interpret the actual PHP tags. We could perhaps include a Any resource that we really really wanted to and encode it with base 64 so that way what it's encoded in base 64 We won't see the real Base 60 real PHP tags being interpreted and evaluated by the server We'll see them as text that we can go ahead and manipulate and access. So let's just steal the syntax I always go to this resource. I always have to Google find it Pillar all the things has it just as well, but I always end up looking for that I don't play darts comm application security site. So let's try to view That syntax for a PHP filter convert base 64 encode And I probably should have got the rest of it there I need to specify a resource. Yeah resource equals and then what we want to actually see so resource Let's try it for dog and looks like we have some base 64 encoded. So that would work for us Let's go ahead and echo that base 64 string into our base 64 decoder And it says image source dogs and a random Okay, it looks like there are 10 images and they're all JPEGs Interesting, let's see if we could actually access that index PHP now only cats or dogs are allowed Can I does dog have to be included in that? How does that work? maybe if we Ask for dog But we also went to a parent directory. So we were to move up. Could we still access index? Oh, yeah Yeah, yeah, yeah, okay. So index up PHP now has all of that So let's try and Echo that into base 64 tack D. Cool. Okay. So now we have the PHP source code Let's redirect this to an index PHP. Let's go ahead and sub all that so we can see it with real highlighting View cat or dog just as we saw and it has to contain the string dog or cat return string position And it gets oh and it also includes the extension if the extension is set with a get variable Oh, we can control that it will use that otherwise it will specify PHP oh Okay, so we could access a lot here Because if we can control the extension and it's not going to add anything else Maybe we could verify anything that we we could read out anything that we particularly wanted to let's try that we could It needs to have dog in the string, right? An extension could be anything It will include it so without using our filter now that we've got the source code of the page Maybe we could include dog up up up up up To etc password and let's actually use the ampersand to specify X EXT should be nothing and There were there we go. Now. We've looked at it set of a password so we could potentially leak out any files that we wanted to Maybe because we have local file inclusion Maybe we could access the log file of this web server and and see if it's seeing our requests or what headers are included Because maybe we could actually get our own PHP code executed we want to elevate what we have from our local file inclusion exploit or this vulnerability and Leverage it to remote code execution so we could do some more dangerous stuff Maybe get control of the box. So where would that be var? Apache access log Nope, okay. That's not it. Is it HTTP D Now we have to try and determine where we're actually seeing our logs Apache log files Var log HTTP D access log access underscore log Var log probably need access Dot log nope Apache to oh Okay, there we go var log Apache to access log now. We have a lot of results We can actually see all of our attempts here So var view dog etc etc etc and it includes our user agent my face is in the way So you can see that here with any of these actual user agents that I'm supplying is that it is keeping track of the syntax And if we were to specify our user agent, maybe we'd be able to actually Specify our user agent of PHP code that we would want to execute if we were to load this page Maybe it'll actually go ahead and execute that for us. Let's try that. I'm gonna actually do that in curl I'm gonna have a separate request so I can kind of make that smart for me I'll go to this page just getting the URL itself. I will include my user agent as a Header for curl with the tack capital H argument and we're gonna include PHP syntax in here So it's gonna be walk a walk per Question mark PHP right because it's the opening PHP tag and then we'll run the system command And we're gonna end up doing this with an argument that can be passed to the web server So I'll use that HTTP get variable the way we can access that is with a PHP variable But the PHP variable is prefixed with the dollar sign the same one that bash uses So if we're using a double quote here, we need to go ahead and escape that string with the backslash So that way it'll be able to say user agent equals PHP system backslash dollar sign And I'll use get with the underscore here and I'll specify C as the name of my string the argument that I want to use I'll close the parentheses to the system call and that and then I'll close the PHP tags and end my double quoted string So now when I go ahead and run this it should return just the page here Just the index that we were requesting is the home page But we should have placed this user agent into the Apache actual access logs that we were able to see with our local file inclusion So because that can read those PHP tags it'll execute PHP and it'll potentially allow us some command execution So if I go back to my web browser, we should be able to see this I'll go ahead and refresh the page and looks like we have a lot of core requests Okay peculiar and system says it cannot execute a blank command. That's good because we haven't actually supplied that C variable whatsoever So I you might you might notice I had to clean up this page I reset the machine a lot my p address is different because I broke it because when I was trying to get the syntax Right PHP would whine it would get an error And then once you get an error with this kind of avenue this this route that we're taking this attack vector is Once you bork the access log if you have a PHP error, it won't return to you whatsoever and Well now you've completely screwed yourself out of this potential attack vector because you can't get any more PHP in that code Because every time you try and read this file, it's gonna break So that's the potential danger and risk in doing this technique But now we finally got it right system is going to be able to execute some commands if we were to supply a C value so I'll try and go ahead and supply as Http variable I'll use my ampersand here c equals id and now we can actually see the output here We have dub dub dub data dub dub dub data etc etc etc so now we have code execution We've leveraged our local file inclusion to remote code execution So let's see if we can take this technique and go ahead and get a shell So what I'm gonna do is I'm going to start a little netcat listener I'll use netcat to lmvp 9 9 9 9 just quad 9 should work for us and let me just kind of verify that I can get to it I'll go ahead and check my IP address. So show ton zero. I am 10 8 9 12 I'll just steal that out here and I'll see if I can run that command 9 9 9 9 and Looks like it didn't go through to me. Do I have the netcat command available? We don't really know so other options we could try are using the bash technique We could try using Python as our reverse shell. So let's go ahead and go down some of those routes Let's go to pentest monkey reverse shell cheat sheet Let's grab a Python one and Just for syntax wise, let's see if we can actually get output from Python. I'll use Python and taxi I will do print Hello, or just a lot of a's actually So we'll see if we have that output seemingly not we can try that with Python 3 Still nothing so no output from them. I guess we don't have that we could try bash taxi Echo a so maybe we'll have be able to execute bash looks like we can in that regard So we could try that bash reverse shell just to try it just to see we might not actually get anywhere with that But I think it's worth to try because Python didn't seem to work out for us So let's go ahead and modify this string And I do want that IP address 10 8 9 12 And we're listening on 9 9 9 9 So let's go grab this string Try to see if we can actually execute that Maybe not through the browser, but hey We'll give it a go Looks like that failed didn't go to our reverse shell. We could try this with the curl. We could try with requests Just to kind of check all of our dots I'll try that because uh, this is kind of new. I haven't I haven't particularly done this Room just yet So forgive me for kind of waiting in the dark Let's go ahead and access this page I don't need that All that syntax here, but I do want to go ahead and specify these as arguments So we just want to get that URL and we'll say Params because we'll pass these all as get variables to with with a URL requests. So view can go ahead and equal that Extension can equal nothing because we're supplying our own extension. And let's just say c Can go ahead and equal our shell command Let's see if that will work for us So we do need requests to be able to do this in python. I will import requests and I'll do r equals requests Dot get on the homepage With our params equal to the params. I'll try and run this Seemed like it came through and no shell. Okay, so I don't have a reverse shell just yet what we could try and do is leverage this out to Maybe stage our own php reverse shell We could go ahead and simply echo a and just a test and make sure we can write and read things Let's just call a little test file Let's try to run this and now if I go ahead and access this log file Let's change that command to actually cat out test Okay, now we have that a variable there So we could potentially build our own php shell with maybe some base 64 repeatedly adding things So let's try let's get a php reverse shell. I think I still have mine. I think I still have a copy opt php reversal. Yep, let's just call this a Shell dot php in our current directory. So let's modify this. So we have our own ip address 10.8.9 dot 112 is that right? I think that's me I hate when I repeatedly forget these but it happens to me all the time 112 and let's go to port 999 9999 So let's go through every single line in here Let's actually clear these comments out because I don't care about them all that much So and let's let's actually echo each of these and start to build them into our script. So let's Let's let's build it out onto the file system. I'll show you what I mean Let's go ahead and kind of modify make make these go away so we can verify we can read our own shell So let's do with open shell dot php as a handle. Let's do handle dot read lines um, and let's just say Let's let's grab base 64 in here. So we can go ahead and base 64 and code some of these things Let's say lines can equal read lines and let's actually strip out all the new lines from the salty x dot strip for x In our handle read lines And now let's actually base 64 and code these. So let's do that just in the while loop so we can go ahead and print The lines that we have all as an array Bx is not defined. Oh, sorry. Yep. I don't need that b in there Looks like we have all of our lines as a array or a list. So that's good. Let's try to Do Change this so that we can base 64 dot b64 encode Each of these and now they're all base 64 lines. So that works well for us So now what we can do is we can actually make these arguments Real for us And four line in all these base 64 encoded lines. Let's specify the parameters can actually equal echo the Line That's all use a percent here. Actually, I'll just use format because I think python 2 has that format, right? Sublime text is set up with python 2 right now. So I know you'll hate me for using python 2, but That's that's just where we are base 64 line into and let's add it into rev shell dot php And let's include that so we do that repeatedly repeatedly repeatedly So we could build our shell and then after that's built Let's go ahead and We should verify what uh directory we're in before we go through with this Okay, we are in our www.html. So when we create a file with the php extension in the current directory It will go ahead and add it And make it publicly accessible for us so we can reach our reverse shell and pull that back So now after that let's go ahead and And base 64 attack d rev shell dot php Because that's the file name that we've created and let's redirect that to shell dot php So now We are adding every single line into a rev shell dot php file that will are originally base 64 decoded Then we'll go ahead and base 64 decode that shell So we have a shell dot php, which is the raw php file If we go ahead and request that eventually we should be able to go ahead and see Okay, if we echo or ls that shell dot php It should exist for us just by simply running our script and we'll have our reverse shell. Let's try it Sending a ton of requests to the web server building out our rev shell dot php file Renaming that or at least base 64 decoding it. So eventually we do have shell dot php None of these Are they being executed? Yes, they are Because we're requesting that page Just trying to think in my head like is this a valid technique will this work for us to get our reverse shell Taking a little bit of time I don't know how long it'll take so we'll pause Okay, he finished in just under an hour. So if we go back to our page, let's ls shell dot php Which does seem to exist if we were to verify that our netcat is still running What we could do is we could go to shell dot php and Called undefined function php set time limit on that guy. So our set time limit must not have worked Are we missing a new line there? Maybe that's the immediate function is failing. So I guess that Doesn't work well for us If I echo nothing to base 64 decode, does it work? Yeah, okay Maybe we could change this up and base 64 decode it as we're Developing the script. So let's rm rev shell Go back to our command to remove rev shell dot php Now if I ls Okay, I have shell dot php, which we know is broken and rev shell, which we'll need to add So let's go ahead and build this all out Base 64 decoding that output and adding it in as needed Let's wait again Okay, another one that took just a minute um, our rev shell should be Created so we should have rev shell dot php. There it is Let's verify that rev shell. Let's just cat it out And that is also removing our whitespace Why does it do that? It's not adding a new line We could try to echo an empty line into rev shell dot php Let's try that Okay, now that we've added a new line, let's go see if we can actually see that In our rev shell dot php Seemingly no new lines Let's try and run it regardless Let's go to rev shell dot php And that's loading and failing On line 95 Okay Okay, let's try another avenue. Do we have wget? Wget tag h no curl Curl tag h. Oh looks like we have curl. Okay. Maybe that will work. Let's spin up a server Python tag m HTTP dot server good and then let's Go ahead and rm shell dot php if we still have it and Let's download our curl to what is curl to download to a file? I think it's just tag. Oh Tag oh Yep, okay So curl HTTP colon colon 10 dot 8 dot 9 dot 1 1 12 port 8,000 shell dot php And let's redirect that to Or output it sorry we attack oh Shell dot php So looks like okay it retrieved it And now we should have a Shell dot php that we should be able to access That looks like it connected. Okay. Excellent. Finally. We have a shell Let me uh stabilize the shell. Do we have python taxi? I don't know why I chose ls to work. We don't have python Do we have python 3 python 3 is also not found? Okay, so I guess we Don't particularly need to stabilize the shell. I guess we'll be working Clearly export term equals X term now if I clear, okay, he's good. Let's see what we got now. We're moving around the file system We were in var www html and when I saw the output earlier, I saw a flag dot php So let's just cat that out. Okay There's our first flag We can go ahead and submit that And now let's Go navigate around the file system. Do we have netcat? We don't have netcat huh Well, let's just cat flag to Um, that has that strange name. So let's cat that out LFI to rcc. Yes. Thank you. We did that eventually I don't know why we What's flag three? So Let's try to pre-vesc. We don't have netcat. We know we have curl so we could download a little in peas let's um Let's move or copy or opt Lynn peas into this directory and let's move into devshm. Can I run bash?  Oh, I am in devshm.  I'm back in my Back in my thing now that we have uh devshm and we've got lin peas over in our web server Let's go ahead and curl that so HTTP 10.8.9 112 8000 and it's lin peas dot sh. So I'll save that as lin peas Dot sh Taking a sweet time looks like he's got it. So let's mark that as executable And now let's run lin peas dot sh and we'll t that to lin log just so we have a log copy of it and I cannot Why can I not execute that I made it executable? That's weird to me Catlin peas Is that not all of it? Okay, I guess we'll do some manual immigration. What can I run a pseudo? Ah Uh env What? Does that let me do oh it just displays everything Can I gtfobans that? gtfobans github Env Oh You just pass it as an argument So pseudo, okay let's Pseudo that again, and let's bin bash to get regular bash and now I'm root I probably didn't need to do root or bash so I would not have a shell. Let's just do bnsh So I have my prompt back Or I just don't have my prompt whatsoever. That's totally fine Let's go check out the root directory and there is flag three. So let's cat that out Different environments What is that referring to is this is this all this tech la? Uh, we are the docker environment. Okay, so when it's a different environment, I was kind of curious Did it put us in a docker container? And I guess we are in a docker container. So that doesn't particularly help Um, I guess we can look around and see what else might be odd without using lin peas Maybe lin enum would work or whatever the case may be. Oh opt has something called backups ls backup.sh backup.tar. Do we have that as a crontab? tacky Oh, we're in a docker container. So we probably can't see that.  So it might be running that I might be doing that What is a backup.sh? cat backup.sh Looks like it is tearing something from outside of the container. Okay, awesome And that container must be the mounted to kind of share that we're in. So what we could do Is add some Other netcat or virtual syntax or maybe maybe bash or whichever one might work Let's try with netcat Let's get this guy to see if we can get break out of this container Um, let me netcat telkellenvp 888 And let's modify this to now bring me to <IP_ADDRESS> 12 quad 8 And maybe if that is actually being ran We could get some stuff. There's no Super special characters in there. So let's add that to backup.sh Okay What is that root? Oh, no, that's the directory that was just made when I untart it So how does backup.sh look right now? Now it tars everything and has a netcat command to call back to me That better be the right IP address It is okay. So I guess I'll wait a few minutes and see if I get a shell back Kind of driving blind here We could try the bash technique as well Like if that command fails, then oh, oh, oh, oh, it worked Okay So now we're in the real file system and we have flag.txt Nice, nice. Okay. Cool. Wow. That took More than it needed to to get that done, but Okay That was dogcat So Finally did it, right So a little bit of recap, right We found the web page that was seemingly doing some file inclusion to be able to read a dog or a cat And we could abuse that we it was limiting our file extension That we didn't know admittedly at first But once we found that okay, we could do some local file inclusion with the php filter technique That way we could read the source code of the pages and we could see that we could specify a file extension If we didn't use the file extension and we left it empty so we could supply our own in the file name Then we would have our any any actual Like local file inclusion that we wanted to not just strictly limited to php files So we could pull it set a password so we could see the access log for Apache in the web server And that was the goldmine because then we were able to actually inject some php code in and get Remote code execution because php will execute and it's server side so php would allow us to Put some commands in and run our own commands and we tried some techniques I was bumping around trying to okay pull in a reverse shell Maybe echo one with with stupid echo base 64 techniques And then eventually we just curled one down and was able to pull one down off of our own website That we hosted so that was kind of neat and then Now that we had the reverse shell we try to pull some other things in to get lin p's some Manual enumeration working or automated enumeration working and that didn't work So we opted for our manual enumeration We could see that The dub dub dub data user or the user that we were running currently was able to run the env command or the environment command As root with sudo So we were able to use gtfo bins to see that as a privisk We could just simply fire up a root shell and then we could escalate Problem is we were still trapped inside of a docker container So we saw and we found we discovered that backups directory that was pulling some information in and out And running it manually on the host and that was fantastic because that gave us a route To get out of the docker container and actually get command execution on the real machine on the host itself And that is what that backups dot sh allowed us to do Eventually it called back Maybe that's running with a cron job or some scheduled task But with that we could find the fourth flag and we had root on the actual computer itself So holy crap long video a lot of mistakes a lot of learning I hope you guys enjoyed this video if you did like button comment button subscribe button, you know the drill Thank you guys. Thank you so much for watching. I'll see you in the next one. Take care


Gram-negative bacteria such as Pseudomonas aeroginosa and Escherichia coli can form biofilms on surfaces which protects them from environmental stressors like antibiotics and predators. These biofilms are composed of polysaccharides which provide an optimal environment for the bacteria to thrive. This article was authored by Gary Loverty, Sean P. Gorman and Brendan F. Gilmore.


Hi everyone, Joe for jaspyscasebreaks.com coming at you with 2022 Panini Origins Football International Blaster Break number 13. It's the last filler we got to do to unlock that zenith break coming up in the next video. Big thanks to this group for making this filler happen, appreciate it. There are the teams right here and let's do the break first. Let's roll out randomized names and teams one and three, four times. Different dice roll for the giveaway part, one, two, three, and four. Got David down to Daniel, four times for the teams, one, two, three, and four. All right, so here's the first half of the list right about there. And the second half of the list right here, no trade windows. Good luck. It's alphabetized by team and print and written. Nice, there you go, Jacob, thank you. Did we have a little, did we have a little financial interest in Martin Truex winning? Always nice. NASCAR, it's unlike, like, I like F1 for different reasons, but NASCAR is always fun to play, to make a play on, or two, because especially with these shorter tracks, you can sprinkle a little bit around some long shots and, you know, you get a record too, and then all of a sudden some guy that was like plus 3,000 is gonna, got Soss Gardner to 99. Got the motor ponies, it's always a fun one. Got Aiden Hutchinson to 299, Soss Gardner goes to Andy and the Jets, Aiden Hutchinson goes to David and the Lions. Got a Bailey Zappy for the Patriots, that'll be for Tristan. Any other quarterbacks here? No. All right, not too bad. Got some cards in there. All right, now the real prize is who's gonna win those, those Zenith spots. Let's gather everybody's names one through 32, and it'll be the top 10 after a new dice roll. Top 10 after three and a four, seven times. Good luck. One, two, three, four, five, six, and seventh and final time. Sorry, Tommy, very close, but not quite. 11 through 32, thank you for giving this shot. Appreciate it. Top 10 though, you're in the next break. Chris is in, so it's Jason, David, Daniel, Nick, Daniel, Jeff, David, Evan, and Nick with that last fought mojo. There you go, top 10. I'll see you in the next video for the break itself, jaspyscasebreaks.com.


Senator Al Franken plans to officially leave the U.S. Senate on January 2nd. The announcement Wednesday from a Franken spokesman should put to rest questions surrounding the timing of the Minnesota Democrats' departure and concern that he might reverse his planned resignation. Franken announced earlier this month that he would leave in the coming weeks and several amid several sexual misconduct allegations. Governor Mark Dayton's choice to replace Franken, Lieutenant Governor Tina Smith, is set to be sworn in January 3rd. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


All right, why don't you tell us a little bit about what you're doing with OpenStack and about your company? Yeah, so I'm Greg Hedgepat with Panterx, and we're using OpenStack as an orchestration layer to allow us to control instances of our video optimization software. So what we're doing is we're combining two forces here to help us deal with the scale and the complexity and the possibilities of video optimization, and specifically transcode. So one of the challenges we have is just the sheer scaling and CV requirements. So Intel has offered the Core i7 processors with the integrated graphics GPU. And so we're leveraging the GPU as we can see here to do nine simultaneous high definition transcode sessions on a single socket. To put that in comparison on an eight core Xeon chip, we can do two of those simultaneous. So having the GPU makes a big difference there? Oh, doing it on silicon and the GPU makes all the difference in terms of performance, power utilization, and cost. So our partner, Comtron, with our SimCloud platform, made this two RU designed to pack 18 of those Core i7 processors in it. 18 Core i7s in 2U? In 2U. Wow, that's amazing. Yeah. So what we're doing as well is because the GPU, we need to direct access to the bare metal. So this is where OpenStack really comes in to help us out. And to really point out that cloud control and cloud management with OpenStack does not necessarily need to mean virtualization through a hypervisor. So we're able to use OpenStack to control and spin up instances on bare metal. So that's what this is right here, is the OpenStack dashboard for control. And the idea here is this is going to allow us to scale in response to utilization of GPU, network conditions, and various environmental factors that can feed into this and then scale elastically to spin up and spin down additional instances. What types of customers are using your solution? Who are you really selling it to? So we sell primarily to mobile operators. Okay. So the crush of video consumption of all of the mobile devices, both the smartphones, tablets, and laptops with dongles and Wi-Fi hotspots, those are having a large impact on the mobile operators network. So what we're doing is we're putting our platform into their network to optimize that video for the right size screen, the device capabilities, as well as reacting to network conditions. Studies have found, and I'm definitely agreeing with this one, consumers are more willing to put up with a slightly less resolution, a slight less quality versus stalling in modeling. So we can go ahead and detect network conditions, reaching that threshold, and then transcode and optimize the video that would be supported by the network. Great. And behind the scenes, I guess OpenStack's helping you power all that. So that's great. Thank you very much for sharing a few minutes with us here at Structure.


Today is one of those days that one is extra proud being a Nigerian. It's one of those days when your belief is affirmed that this is a country of world-class talent, world-class ideas, and world-class execution. So we're here at the Duchess International Hospital. By both medical and aesthetic standards, it's comparable to the best hospitals in the world. And it's proprietors proudly and deservedly brag, and I quote, that the mission of the hospital is to reverse medical tourism by delivering the highest standards of care using the most advanced technology and treatments to give you the fastest, most convenient access to the best medical expertise available anywhere in the world. End of quote. And I concur, and I'm sure we all concur. There is, there's good reason to do so. The hospital has serious bragging rights. It comes from the Red and Singh family, a clinical health brand that has earned a strong reputation for high standards in healthcare, top notch international personnel, and many highly reputed Nigerian doctors in diaspora. And best of all, it's all Nigeria. So the opening of this state-of-the-art facility also celebrates some other facts. First is that we have all that it takes to become the place of choice for even medical tourists from developed countries looking to jump long queues for specialized procedures at home, or simply shopping for more affordable fees for first-class healthcare. Second, we have by far the largest number of middle- to low-income communities and individuals in sub-Saharan Africa, at least, who require affordable, high-quality healthcare. So there is a sound business case here. In any event, this is the 15th facility of the Red and Singh group, so there must be some business sense in all of this. And in any event, the chairman, Yemi Onobu Ali, is an Ijebu man. No. So if this didn't make sense, he certainly wouldn't be here. He'll be doing something else, trust me. Third is that with investments like this, seeking high-quality medical personnel, we can even reverse the trend of doctors voting with their feet. And we've seen that indeed several doctors who are part of this, the management of this facility are coming from different parts of the world. The reasons for voting with their feet are obvious. Better remuneration, better facilities. But again, only serious private sector investment in high-quality healthcare services, offering top compensation for its personnel, could possibly create an attractive proposition to reverse the trend. So the only way by which we can ensure that people stay, obviously, is to reward their services. And I think that this is a good way to start. So here at doctors, we celebrate the convergence of so many possibilities and such great promise. And I'm extremely proud to be a part of this phenomenal achievement and the great future that it pretends not just for healthcare services in Nigeria, but also for the general business environment. If you can believe enough in our economy to invest in 15 different places, then certainly, you must be doing something right. And there must be something right about the economy also. By the way, just looking at the ambience of the hotel, the well-appointed rooms, all in suite, and especially the cuisine, I saw what looked like a well-marinated lobster with lemon butter sauce, you know. This surely should be called the duchess, definitely should be called the duchess. I only hope you don't get people checking in before realizing that this is actually a hospital and not a hotel. So it is really my very great pleasure and privilege to officially commission the duchess International Hospital to the glory of God and for the benefit of all Nigerians and those who may seek excellent healthcare from anywhere else in the world. God bless you. Thank you very much. Congratulations.


You know it's a strange point in time when you're complaining about the fact that there's a fifth Indiana Jones movie when we have a 10th Fast and Furious movie and a 7th Mission Impossible movie coming out in the same year. Times are weird. Ooh, that's a hot mug, guys! Hey guys, this is my review for Indiana Jones and the Dial of Destiny. Now, for those of you who have watched my channel over the years, you'll know that I'm a massive Indiana Jones fan. I don't wear this hat just because it's a prop, but Indiana Jones, quite frankly, is my favorite fictional film character of all time. I've watched the original three countless times. I have watched The Last Crusade more times than I could count. It is one of my top 10 favorite movies of all time. It is one of the best film going experiences I've ever had. Quite literally, The Last Crusade is one of the best movies ever made. I will fight people on that. So when the Kingdom of the Crystal Skull came out back when I was in high school, I was super stoked. I brought this hat and everything. I then didn't watch it again for 10 years, and I still didn't like it. So going into the Dial of Destiny, I had the thought of, well, it has to be that movie, but then all of the hubbub, like the good, the bad, the ugly, that has come out about this movie before it came out, was sooo damning that I had to just have a hope that just don't be awful. And technically speaking, it's not. This film follows Indiana Jones in the very, very tail end of his career. He's really in a loss because the space race is going on. Astronauts just landed on the moon. No one talks about archaeology anymore.  So when his goddaughter, who was related to Toby Jones, who is in this very entertaining, yet kind of odd opening sequence with him fighting Nazis, that whole CG effect with him in his face is really cool actually. I have to admit, it's not bad. There are certain elements, particularly the eyes that they still have not got. It's got that dead eye kind of look, so that's a little bit disjoining, but I was okay with it until he opened his mouth. You remember that bit in the Irishman where Robert De Niro stomps that guy, and we all just laugh because it looks like an 80 year old man trying to pretend to be a 30 year old man stomping a person. That's kind of how Indy feels throughout this whole movie. I don't know why they didn't do this considering they did this with the Mandalorian and the young Luke Skywalker, but they didn't run his voice through an AI to make him sound younger. He sounds like old Indy while as young Indy, and it is the most disjointed experience I had from the whole movie. The opening that a lot of people have talked about is being a really great action sequence. While yes it is, it's pretty fun. It's so odd every time he speaks. It's just so disjoining. The film majority centers around Mads Mickelson's Nazi doctor, and he's after the Archimedes time dial, and Indy's trying to stop that with the help of his goddaughter, which a lot of people have gotten a lot of wham about because a lot of people don't like Phoebe. I'll admit Phoebe's done some odd stuff here and there, but she's a really good fleabag. One of the better parts of why killing Eve was so good. She's okay in this. I think she's all right. She's similar to that of Marion. She's similar to that of the Frohr line from The Last Crusade. I think that they work together okay. It's not exceptional. It's nowhere near on the same level as any of the companions that Indiana Jones had in the original trilogy. However, there is nowhere near as much cringe in this movie compared to Kingdom of the Crystal Skull. I cringe so much rewatching that movie. I cringe at Shia LaBeouf's introduction. I cringe at him swinging through the trees. I cringe at Ray Weinstone's character. I cringe at the entire falsehood that was an entire car sequence through the Amazon. This movie has two very long chase sequences, which for the most part are done practically. Sure, there's a little bit of added CG here and there, but the car chases are real for the most part. And even like Indy gets on a real horse and he rides through a subway and whatnot. I like that. I like that there was this focus on it because that was something that was just so absent from the last one. That total dive into the production style of the Star Wars prequels, especially 2 and 3, that Indy 4 did was just so disjointing. And this movie thankfully doesn't do that to the most part. There are some random elements to this film that drag out the runtime way longer than it needs to be. Antonio Banderas is in this movie, but you blink and you'll miss him. I don't know why he's even in this, so I don't know why they didn't bring like the captain from the first movie, the one who was on the boat who tried to hold Marion from the Nazis and whatnot. I don't know if the actor's alive or dead or not, but I thought he would have been cool to come back for this role, but the thing that this movie does have is it does have a sense of mystery. You are interested in what is going on.  I actually do very much like how the movie ends in terms of its climax. I think it gets really wacky, but in a good way. I enjoy that element to it, and I almost enjoy the sincerity of it. I did hear from a few sources of what the other ending was supposed to be, and yeah, if they had gone that route, they would have pissed a ton of people off. I'll talk about that at the end of the review. I'll do a little spoiler talk about that. But I like how it ends somewhat better-ish than Kingdom of the Crystal Skull. Truly speaking, Flash Crusade is the ending.  So to have your ending for the third time, it's a little dry, but there's nothing crucial about this movie that I can say is bad. Is it entertaining? Technically speaking, yes. Is it poorly made? Technically speaking, no. Is it fun? That is the biggest question. I went and saw this on a cheap Tuesday, and I kind of felt a little bit upset that I saw it in IMAX. I wanted to hear John Williams' score, because this might be the last time he does any work. I don't know. The guy keeps on bringing himself out of retirement. I think death is the only thing that's gonna stop him. I would watch this on the cheapest possible means possible. I still say it's a theater movie, but it's not IMAX. It's not AVX. It's regular. Go and watch it in a regular theater. Thank god it's not in 3D. I feel that this movie is missing one of the elements that just made those indie movies so good, and that was the fun. I think that the Dial of Destiny is a lot better than some people are saying it is, but it is nowhere near as good as others are saying.  Is it better than the Crystal Skull? I actually probably wouldn't disagree. I like this more.  I kind of went in with expected disappointment, so maybe that might have been the case. I think that the Dial of Destiny is subpar at best. It's okay. It is nothing exceptional. It's nothing worthy, truly speaking, of the Indiana Jones brand, but it could have been so much worse. And that is why I think it's okay, and that's the best I can give it. So in the end, I'm gonna give Indiana Jones and the Dial of Destiny a 3 out of 7. The reason why it's not in the positive is because I will not rewatch this. I just couldn't.  I will go and watch the original trilogy. I will not rewatch this one again. Not in the theaters, anyways. Now let's talk about the spoiler bit. For those of you who don't want to know anything, this is where the video ends. Tell me what you guys thought about it in the comments below. Don't spoil. Now we're going to talk about it. Okay, so the ending originally was supposed to be when they went back in time and they're amongst all the Romans and the Greeks fighting each other. Supposedly Indy was going to die there and Phoebe Waller-Bridge was going to take his hat. He was going to pass it along to her and then she was going to go and relive all of his adventures. This was kind of a proposed idea for a franchise. That would have gone over so badly. That would have just harnished everything. And they say that they didn't do it. They say that that wasn't going to happen, but immediately after that leak came out and the vitriol of internet talk that was about it, they just so happened to reshoot the ending. So I don't know if that is what was going to happen, but it does sound like they originally had an idea and they did not go with it. Just end it. Just end Indiana Jones, please.  He cannot do anymore.  Just don't do it.  Please. Please. As one needy fan to the people who own him. Just let it die. Just let it die.  Oh god. Anyways guys, that's all for me. I hope you enjoyed this review. If you did, leave a like and if you're interested more subscribe. Until then, see you guys next time.


Hey everybody, it's Hari Swaminathan from optiontiger.com just covering our day trade that we closed today on SPX As you can see here, we have a $400 profit on SPX We got into the trade around 941 and we bought this call at 4.7 And then we had to stay with it for quite a while and we stayed with it for till about 1045 We can see we sold it for 550 so not a whole lot 15% This was a very very choppy day as you can see on the ES It was just chopping around all the time. We are still managing some of our other trades But this is the day trade that we closed today for 15% $400 profit. Thank you So if you want a free trial of this day trading signal service, you can go to this Bitly link It's bitly slash day hyphen signals Now the day and the the D and the S has to be capitals and once you go there You can get a free trial you can you need to sign up there and you'll get a free trial and At the end of one week if you don't want to continue You can just send us an email at info at optiontiger.com and we'll give you a full refund So once again the bitly link is bitly slash day hyphen signals with the DNS in caps. Thank you


Hi, my name is Carla Arellano and I would like to give thanks, first of all, to Dr. Hirsch, the scholarship committee and most importantly to the Friends of Leisure World for giving me this wonderful opportunity and granting me this wonderful gift of a scholarship from the Friends of Leisure World Library Scholarship. I would also like to tell you a little bit about myself. It's my second year here at San Jose State and I am in the library science, masters of library science and my goal would be to become a public librarian with a concentration in youth services, so either a young adult or children's librarian. I would love to send many, many thanks to both Dr. Hirsch, Friends of Leisure World and again for giving me this opportunity, enlightening the burden of paying for tuition. Thank you so much. I am very, very grateful and I look forward to paying it forward in the future to other students that may be coming up. Thank you so much.


Matt LeBlanc catapulted to international fame for his portrayal of the charming and hilarious Joey Tribbiani on the smash hit sitcom Friends. For 10 seasons from 1994 to 2004, Matt enchanted audiences with Joey's lovable but dim-witted nature, laser-focused obsession with food, and constant search for love. Joey's catchphrase is like, how you doin' and cut it out became instantly iconic. So did his friendship with the other characters on the show. Matt's comedic chops and natural-like ability made Joey one of the most beloved sitcom characters of all time. With the fortune of successful actor, Matt went on to live in some beautiful properties.


Who wants to play a game? Great Yeah, we won't be having any insults. So Yeah, I need a volunteer Okay Come on. We won't be Playing with swords But we'll be playing with tic-tac-toe. So what's your name? Bert, great. You'll be Alice from now on Okay Yeah, so here you can start the game you can join the game that I start and Yeah, that's basically it so you can start the game maybe So here we can see That Alice started the game and There is a Bob in the the other browser. Let me find the cursor so I can join the game now Okay, let's see What what Bob is doing or what Alice is doing? Okay, so it's your turn so we can Play it take great Okay, yeah, we can we can start another one. Maybe somebody wins Okay, I started the one from for you, so I think you need to go back to games and go to the This game. Okay, now do your best. Yeah I'm the rubber you're the glue go on go on Nice, okay, great job Okay, so Let me set up the Wi-Fi and Continue with the presentation Just a second. Okay, it should work Nice Okay So there are two facts about multiplayer games Players expect a snappy interface and The other one is that players usually cheat and What does it mean is that the game logic in this in this example at tic-tac-toe? So there are a couple of rules to win a game to make a next move so the game logic needs to be implemented on each client on in the multiplayer game and Also because players cheat the game logic needs to be implemented on the server So it used to mean a lot of redundancy because then We have a rail server then we have a JavaScript application and then we have an iOS application and so on so on But now now We have the technology with opal or air be We can create Ruby applications in the browser So has anyone here used opal before? Great free people maybe okay, so opal or be is a Ruby to JavaScript compiler It's quite fast. It's actively developed. It's not that stable yet, but it works and It has some drawbacks, but it allows us to Create actual Ruby applications in JavaScript, which is quite a good thing Then There is Ruby motion. How many of you use Ruby motion? Nice half of you So Ruby motion is a Ruby to objective C compiler and from Like two weeks ago There is also an Android toolkit for for Ruby motion It doesn't work that great yet, but let's say in a year. It will work as good as objective C one It has close to the native performance because it's compiled to objective C runtime and to Yeah basically Java compiled classes For Android it's actively developed and it's quite widely used in production So there are also there are there are already working applications made in Ruby motion like 37 signals base camp for example There is also mruby and how many of you use mruby or use that? None, okay, so this one is pretty interesting It's basically supports ISO Ruby standard and it can be embedded into any C application or any C library So it means you can put it in into any kind of application that can be linked with C so With mruby you can potentially create applications that run on any platform on Windows on Android on Yeah iOS Linux whatever whatever Works so it works even on Arduino do a because it requires Quite a lot of RAM like 96 kilobytes So it wants to run on the plain old Arduino But it works on Raspberry Pi Arduino do and a couple of other embedded devices And yeah, so it's basically promising for Windows desktop applications but Are any of those? Ruby like things really a Ruby Well kind of there are some differences for example In Ruby motion, we don't have require at runtime. So everything is statically compiled and Apple doesn't allow us to Generate code at runtime So basically we get a warning when we require something There is no evil at runtime. We can still use metaprogramming, but not The one that involve parsing Ruby At runtime, but we can still use Defined method using block or and things like that So There is this difference with Ruby MRI that threads are actually working So if you port things from MRI to to Ruby motion and use threads before then you might find Some bugs that you haven't find found before and It doesn't have garbage collection. So it uses automatic reference counting in Objective-C so Memory leaks are actually possible. They're not that common right now, but if you use blocks and Events then it's possible to have one then there is Opal-Rb and This basically works in a browser and it compiles to JavaScript. So Requiring files also don't make any sense So every required statement is translated into sprockets directive if you use it in Rails Strings are like in JavaScript are immutable Symbols are strings unfortunately because the focus was on the performance of the language and There was no better way to implement symbols in JavaScript There are differences in couple of things like regular expressions are Implemented as JavaScript regular expressions, which are different from Ruby obviously and All numbers are floats JavaScript Yeah, but there is for loop already so when I gave the talk half a year ago for loop wasn't implemented, but it's They work on the language like they work on the compiler all the time. So For loop is already there. So that's a good thing With mruby Still no required runtime If you want to include gems they work in a different way So you need to actually compile a compile them into mruby library up front so The focus of mruby is on the size of the program the Maths won't want it to be Small as possible so There are a lot of things in ruby that are not in In mruby for example regular expressions are not there by default you can include a MR gem it's the version of gem for mruby to include the missing functionality But you cannot do it on during runtime you could Probably implement some system on top of that, but that's up to you And it's optimized for size and This is interesting because because of that it's often faster than MRI But that's a side effect. So the main question is that are all of those really a ruby They ruby enough so if we Don't think about the differences and get rid of them and see what's What is the common subset of those languages we'll have cross-platform ruby and the idea of making the Applications in cross-platform ruby is to Have the some core logic into in this subset of common code written in the cross-platform ruby and have different platforms use that so these do Any one of you recognize the shapes here or something like that? Does it ring a bell? Like the hexagon in the middle Okay, so it's basically similar concept to hexagonal architecture that uncle Bob is talking about He's basically talking about Extracting the core logic of the application and have Adapters for for example database so we can switch databases easily you can have adapters for GUI If you need to present everything in a different way So the idea is to have the application work in a command line the application work in in rails and just switch adapters if you want to use different ones but When it comes to whole platforms, it's actually not feasible to abstract all of that So how would you imagine to abstract the whole iOS? That's yeah, that's just silly so It actually looks like that The idea is to have like the small subset of functionalities for example Let's say we want to save something and we we need to save it in iOS We need to save our models in in androids or in the browser Then we can extract the saving functionality to some pattern like repository or something like that Implement it in plain Ruby other interfaces to that on different platforms and use it so The most interesting thing about that Are the interactions between all of those systems? The first and easiest one are the internal interactions So how do we implement communication between the cross-platform Ruby components? So there are different ideas Clean architecture hexagonal DCI DDD cowboy coding. Why not? This is your dreamland you can do whatever you want This is plain Ruby no database no GUI no apps no different well No internet Connection just plain Ruby classes you can do whatever you want there. It's It's a great place to be test our fasts in the in this domain and Yeah, it works great then We have different kind of interactions. So When we want to access the cross-platform Ruby components from the outside So we have the iOS application. We have the rails application and we have some small component that's Does something for us so sorry for example, let's say we have We have translator module that will provide translations for labels or something like that. So we basically Create the interface on the cross-platform site and then access it from iOS We access it from rails and we do it in the same way. So basically here. Yeah, it's the really simple simple idea so We just want to get a text for the label that is the same on iOS and in the rails application The other The other thing we could do for example in this way let's say we want to Know what users do with our application. So we implement something like kiss metrics or Something like that and we want to encapsulate that Into some kind of interface and use it on iOS and use it on rails. So we have different events. We have different user behavior, but the core Interface for Saving the events is the same so we can actually encapsulate that and use the same thing on both platforms the next thing is when we Drive our application from inside. So the code that matters is in the cross-platform Ruby site and we want to Access the code on the outside. For example, let's say We have iOS we have the browser and we have some kind of wizard that's have some panels and We want to animate them and if we encapsulate the different ways of Of implementing that on a specific platform in a common interface We can actually encapsulate the logic of Let's say this wizard Into cross-platform Ruby and then drive it in the same way from one place and the last type of interactions are asynchronous ones so let's say we have a to-do item and We have the method market as done and We want to save it afterwards on each platform. So the saving on the on the different platforms might mean the different thing for example saving in Ruby in Rails, it might be just Saving it using active record to the database, but saving it in the web browser might be actually Creating a post request to the Rails application And let's say we want to have the same interface for that so if we want a common interface with with interactive Applications Let's say let's say we have a mobile application We press to do and we wanted to have it in the background and be have the The user interface updated automatically so we need to have some kind of mechanism to Have asynchronous interface So we can implement that in three different ways So we can use the abstract in for interface. So the same thing as in the previous Previous slide when when we drive the applications from inside We can use some kind of notifications like events or key value observers or We can use abstracts aspect oriented programming So with abstract interface We need to modify our class that is in the cross-platform Component so let's say we We inject some kind of saver object that will that will do the right thing on each platform and Then after market has done we just do saver save method and On different platforms we could for example save it to database we could save it via post request or something like that and And This has a pretty This is a pretty good idea because like it's it has well defined interactions and it's useful when Use cases on each platform are similar. So if we want to save the to-do item on different platforms then Creating the same interface For saving them is a good idea, but then the core our cross-platform Ruby component needs to know about saving and saving might be the concept that it's pretty alien to To the domain that we have like we have a to-do application We have to do we we just want to mark them as done. We don't care about them being saved maybe So it depends We could have like a bit more freedom with notifications. So let's say we have a to-do we include some kind of eventable module that will provide us Basically triggering events on some listeners so So let's say we we just need to add a trigger for an for an event after well Let's say after mark has done we do the the thing and then trigger the The actual event so in this case We just need to on different on different platforms. We just need to provide the event handlers so Let's we can save it to database we can post it to API but this is a Bit better thing if we really want to core to not care about the The actual use case so we just Push an event and we don't care what happens next So we don't need the same interface on different platforms. They can do whatever they want after To do is marked as done Yeah, it is But it is hard to compose interactions, so yeah, if you have nested ones like Yeah, one event is calling the other and so on This leads to pretty complicated code. So yeah, that's that's the con and Yeah, this is the place when we need to be aware of member leaks in the Ruby motion because mmm The blocks are handlets handled in a different way in objective C and Ruby and if you if we are not Careful about using weak references and strong references there then we can introduce member leaks But it's not that bad If we want to real freedom We can use aspect oriented programming and in this case our to do class that is the implementation of the core domain logic Can be blissfully unaware of the surroundings? So we don't need to change it at all. So it's just mark has done but then We use some kind of aspect oriented library and We can Add callbacks from the outside so for example In the rails application, we would have this database to do server and We we would add a callback after marking to do as done with When the domain class does that and then we can save it to database and Similarly We can do that from the From the browser. So then we post to the service after adding the callback from the outside so this is pretty good thing if you wanted the core to well to not change at all and only Add some code from the external platforms, but then The external Pratt platforms need to know about specifics of the The cross-platform Ruby code So Whenever like the to do mark has done changes then we probably need to change everything on each platform So it's well, it's not not that good in many cases But it's useful when use cases are totally different on on every platform So when we don't need to save the to-do we just don't add a callback at all and it's and it's great so Where to keep this logic? We can simply create cross product cross-platform gems and how to do that It requires a lot of work a bit of work. Let's say because It's not really possible to take a random gem and expect it to work on Opal and in Ruby motion because of basically require and couple of other stuff, but require is pretty important so For opal We need to somehow tell sprockets where to look for files and then require everything as usual for Ruby motion We are not really allowed to use a require in any any file that is included in runtime so we move all requires to the gem entry point and We need to add all those files to To configuration of Ruby motion application so they can be compiled and included in the application And the good thing about that it actually takes 20 lines of code So if you're interested in that I made a blog post about that It's really simple to to modify a gem to be to work on Opal or be and Ruby motion and rails and Yeah, but it needs to be written in the common subset of Ruby. That's that's the thing Let me show you some code So the game that you that you seen at the beginning of the talk of the tic-tac-toe one. It's actually created in the cross-platform Ruby, so it runs in the browser the same code runs in browser the same code runs in rails and also on iOS so This is how the application is structured. So we have the One common directory that has different implementation for each platform So this is basically the iOS application This is rails application and This is the common gem that includes the functionality for rails for Opal Ruby and for Ruby motion So This is not actually the Only a tic-tac-toe game. Basically, it's it's a platform for any turn-based multiplayer game and There is some abstracts there are some abstract classes like game Board the move there is like a move maker move outcomes player and there is also Implementation of tic-tac-toe Game so this thing is written in plain ruby There is no database no GUI no such thing so we can test it pretty quickly. It's it works on every platform and that is good and Yeah, so and there are also Things that I call the interactors. So this is the thing that has All the actions that player does in the application Do you see it or Yeah So basically are there are different actions. So when you start a game We create the class We we create an object for game Depending of game type it could be tic-tac-toe or something else Then we start a game like this and Inside of the domain logic and then we use some kind of adapter to To handle the event for starting the game so because like starting the game could be handled differently on on iOS or in the browser or in Basically raise application. So the same thing with joining joining a game What else finding a list of games Finding specific game making actual move so This is actually like Taking taking the mover presentation putting it inside of the game logic the game logic validates the move it will like rise an exception if something is wrong and Then it will publish some kind of event to the adapter Well, actually call a method on the adapter to make This move Yeah, and that's basically it. So let's see for a second how it's implemented in different applications So in iOS We have this controller, let's say so we have like a games view controller. So this is the No, I can show you what's so this is basically Something that represents so Unable to connect the internet. Okay, obviously so this is basically controller representing the list of games and There is there are a couple of actions here to start a game to join a game and fetching all those games so We just take this interactor We put the rest adapter that will be responsible for handling different things in our game and then We just add some code on Events that interactor will will post so When the games are found we just scheduled the next refresh. So yeah, basically it's long polling for for the games When the game is joined then we we do some stuff like Yeah, we basically do Like platform specific stuff. That's that is driven from inside of the interactor. So this this cross-platform Ruby part of the application and So and the same thing happens in the In the opal application So let me just show you quickly So we have games view. Where is this adapter? Oh, yeah so we have the interactor here and The same as before we just need to call the interactor and then respond to an event that will and that it posts so from From this point of view, it's like the basically the same implementation on each platform. We don't need to think about What we need to do in the game logic when we start a game some things happen like Probably a board needs to be generated then some things need to be saved in the database or sent to send via internet But we don't care about that we just We just implement things that we need to Do on each platform so after game is joined we we want to go to another view like the view of the game and show the game to the user If the game is started we also change the view and Yeah, if the on this event where games are found we just refresh the list of games with with the new one And that's that's basically it. So the only thing that changes is this This rest adapter and this thing is is just a simple class that Needs to conform to the common interface so it needs to have a method like start game join game find games and so on and it basically makes a post request and On success it triggers an event like the game Started after after request was successful and so on so on So the same thing is implemented in iOS We have also the rest adapter. It looks a bit different because we have different libraries Some platform specific stuff, but we also do post requests here as well But the interesting thing is that we can reuse that stuff In a rails application so Okay Here we have database adapter which conforms to the same interface, but instead of like making a post request it just Takes an active record object creates it from database and Yeah, basically does The thing required for all validations and stuff so And after it's it's done. It also triggers the event so the idea is to have like the the same interface in the Interactor and use it in In the mobile application and in the rails as well So this looks a bit different than what we are used to Because we have the games controller and this is basically a create application So usually we would like take active records. We would like take params put like created in a database validated and so on but This is a bit different. So here we use only Interactors We use it in the same way so We start the game we put params that were sent from the mobile application Then the game Interactor does this thing like validates all the game logic and all that stuff then it calls the database adapter and data that base adapter saves everything that it needs to save prepares Database objects and then it publishes event that the game actually started So it's the same thing with game joint when we have the list of games and When we make actual move so It feels a bit different It definitely requires some Like everybody to come if you if you decide to go this way you need to like conform to the Different way of doing stuff so conform to use only the The domain logic and respond to events which is which looks weird on in rails controllers, but It allows us to use basically the same code on each platform and it's kind of good idea so The idea is if it's if it works Well, yes, it is. This is the proof so you can create applications like that. Is it feasible? Not sure depends on your on your application so It definitely adds a lot of coupling between between different platforms so whenever you change the logic of Of The core of the application you would need to change something In each platform probably but on the other hand if you have use case like that when you have Some logic that is really Duplicated between different applications like mobile clients or web browser application or rails Then it might be a way to go So Some people said that Ruby is dead. I don't believe that I Think Ruby is alive and It's taking over the world one platform at a time. Thanks


When it comes to purchasing a smartphone gimbal, there are many factors to consider as each gimbal performs differently and has their own unique features. In this video, we're gonna talk about the PowerVision S1, the world's smallest smartphone gimbal on the market. What makes this gimbal so special? Well, let's find out. So this video is sponsored by PowerVision and I want to thank them for sending me over the PowerVision S1 gimbal to make a review of it. I'm going to give you my first impressions, show you how to set up the gimbal, talk about what I like about it, how it performs, the price and my final thoughts. So with that said, let's get started. So what are my first impressions about this gimbal? So this is how it looks like when folded together. At first glance, unlike other smartphone gimbals that are instantly recognizable, the S1 could be mistaken as some kind of case, but it actually transforms into a fully featured smartphone gimbal. One of the main problems I see in most gimbals is that they are not designed to fit in your pocket, except for this one. The S1 is extremely small when folded together, smaller than the size of my hand, and fits perfectly in my pocket. And this makes it easy to carry around when traveling and doesn't take up much space in a bag. It also feels nice and well built. I like the look of it and I got the black color, but they also have other colors available, such as green and blue. You have a few buttons at the front, which makes controlling the gimbal with one finger really easy. Now let's look at how to set up the gimbal. Unfolding the gimbal takes four steps. The first thing you wanna do is knock and open the front door. Hello.  And then you can rotate the top and flip out this part over here. Now it might take longer the first time, but once you know the process, it will just take a few seconds. Now to mount the iPhone 13 Pro Max, I will be using the included magnetic clamp. Using the magnetic clamp helps to speed up the setup process. Traditional smartphone gimbals, such as the one I'm showing you right now where the phone clamp is built into the gimbal, the balancing time takes longer. For me, the faster I can set up my smartphone to shoot, the more likely I won't miss the moment. With the magnetic clamp, this is possible as I can easily attach it and leave it on my phone. And then I can quickly attach it to the gimbal in a matter of seconds. Now, important is that you align it correctly. There is a small tab to ensure that the gimbal can orientate the phone properly. The magnets are very strong, as you can see. And you really don't have to worry. It holds the phone securely. Now I think that every smartphone gimbal should have this magnetic clamp system as it does save a lot of time when shooting on the go. So let's talk about some of the other features I like on the S1 that makes this gimbal so great. The S1 has a hidden integrated tripod at the bottom. This is certainly a bonus point to give as I don't additionally have to bring a mini tripod with me. I can simply pull out these legs right here and flip out the arm. And just like that, I can place it on an even surface to record a time lapse, for example. Though there is a one quarter screw hole at the bottom if you want to add a mini tripod. But for me, in most cases, the little built-in tripod works perfectly. So the next feature that I find great on the S1 is the ability to charge your phone. Shooting videos can drain a lot of battery. And with the S1, you don't have to bring an extra power bank with you since it's included and offers a built-in wireless charger. If you need to charge your phone while shooting, which is often the case for me, you can easily do that using the USB-C port. The S1 gives an impressive 15 hours of battery life, which is more than enough for my shooting needs. So let's look at how the PowerVision S1 gimbal performs. You can use the gimbal without the app if you want. So you can start and stop recording either using the native camera app or Filmic Pro, which is great for those not wanting to use the integrated app that comes with the gimbal. But if you want to get the most out of this gimbal, the Vision Plus S1 app offers a wide range of functions. The most interesting one being the smart tracker. What really sets this gimbal apart from some of the other ones that offer tracking is that you don't actually need to use the PowerVision app to make use of the tracking. They have a feature called PowerFlow that allows you to use any other app. Once activated, you can use guest chairs to let the camera follow you. This can be useful if you're vlogging or need to record yourself alone and have the camera follow you. You can of course use the PowerVision app, which allows you not only to track a person, but also objects. In terms of stabilization, I'm going to put the PowerVision S1 to the test, get some great looking shots and edit the clips together so that you can see what video results you can get. As you can see, the PowerVision S1 did a great job of handling the iPhone 13 Pro Max. So how much is the PowerVision S1? It costs around $229, which is a relatively high price tag compared to most smartphone gimbals. But I think the overall portability of the S1, justifies the price as there is nothing as small and featured pack as this gimbal.  Now guys, if you want to learn more, make sure to check out smartphonefilmmaking.com, which is my epic online course where I will teach you everything I know on how to produce professional looking videos on a smartphone. Now to get started making quality videos with your phone, make sure to download my free smartphone filmmaking guide. If you haven't subscribed to my channel yet, make sure to do that as this will help me a lot. If you have any questions, make sure to let me know. Thank you so much for watching and I will see you in the next video.


I'm taking a class called Intro to American Literature, which is an American Literature class since English is not my first language. Sometimes I do not fully understand what the lecture is about, so I will always go to my professor's office hours and just ask her for clarifications and then she will be really helpful and she's really glad that I asked those questions because she's like, oh I wouldn't have known that you don't know those questions. So after her clarifications, I can write my papers better, so it's just a really helpful process.


Well, hello everyone. This is Byron King with Investor Intel and we have a rare treat today. We're going to talk with Simon Ridgway of a company called Volcanic Gold, which operates in Central America in the country of Guatemala. And Simon Greetings, I understand that you are you're in Vancouver, but your company works in Guatemala. For people who are not there again in a few weeks. Very good. So for people who are not familiar, give our listeners and viewers, give them the quick rundown of what is volcanic gold doing in Guatemala? Well, Guatemala is an exceptionally rich ideological terrain for exploration for gold and silver deposits. And one that's kind of very, very underexplored. So I moved to Guatemala initially with a company called Mal West that I sold to Glamis Gold. And I found a number of deposits in the country back in the late 90s and early 2000s. But then Guatemala, the government that got in power became anti-mining. You know, they were against foreign investment, they were against mining. So I pulled out of the country, but I was there with Radius Gold at the time. I was the CEO of President Radius Gold and the founder of the company. So I held on to the ground that we had there because we drill some holes in some prospects that I thought had a lot of potential, didn't get time to develop them. One of the mines we found, the Tambo mine, I had a joint venture on with Dan Kappus from Kappus-Cassidy. And he was producing gold and radius which was receiving a royalty from that production. But when that got shut down by the government, obviously he couldn't justify spending any money in the country any further. So I held the ground and went off working elsewhere with Radius.  Don't they have a new government down there now? Yeah, about a year ago, year ago last January, the new government got got in power that was pro-mining. They understood that the people of the country need work, that all these people that are joining the caravans to go to North America. It's not because of the violence, as we read a lot. It's because people want the life that we have in North America. They want a regular job. They want to be able to go to work in the morning and feed their kids. And so the government got into power was pro-mining, pro-foreign investment. So Radius was busy with a number of other projects in Mexico, a couple of joint ventures and some interesting discoveries. So as opposed to diluting Radius shareholders on this, going back into Guatemala again, I decided to volcanic would join venture Radius's prospects in the country. So we have a JV with Radius whereby we have the right to an intercept of the two granted concessions that Radius had, which are the Harley and the Banderas concessions. And we also have a first right on all the other ground that Radius holds and the replication of the country, which is a good part of the Eastern volcanic belt. I'm sorry, let's focus on that real quickly. When you talk about the Eastern volcanic belt, I mean, a lot of people, most of the people probably watching this, aren't geologists. They're not familiar with the geology of Central America, but there's a fascinating piece of geology going on down there with reconverging plates and you've got mountain building, you've got amazing rocks and the mineralization is very, very rich. And why don't you tell us about some of the drill holes that you've pulled out of the ground down there? Yeah, well, before we move on to the hits we've had on the Harley, I'll just touch on Cerro Blanco, which is a project I discovered some years ago and sold it to Glamis. I mean, that is now being built by Bluestone, the London company. I think it's grown to about three and a half million ounces with a hot spring deposit. And they're very rich. I mean, I'm not sure the grade on the new resource, but the underground grade was about 1.4 million ounces at eight grams. And then there's Escobar, which is about, you know, about 100 kilometers from Cerro Blanco. That is a very rich, ledzing silver deposit that was in production. And I think it'll be back in production again within this year. It's owned by Pan American Silver. They bought it. The government shut it down in the anti-mining period. And it's been shut down now for about two years. But I think we will have both Cerro Blanco and Escobar in production sometime, you know, in 2023. So there'll be two deposits and both of those, both of those mines are within 60 kilometers of the Harley property. So there'll be two mills functioning within, within trucking distance along paved roads. So this has got to put an exceptional location of the Harley. It has been a great discovery. We've been pulling holes such as, you know, four and a half meters of 139 grams gold and a kilo of silver. There's been some phenomenal hits on the property. It's still open in various directions. We are personally doing a resource calic on the deposit. You know, I'm not going to predict what is coming out. We've only got about 25 holes into it to date. But just given the grades we've been hitting in the holes, I think we're going to have a nice high grade resource and a nice high grade starting resource. Unfortunately, we still, we are having social difficulties on the Harley. And that's because some of the people from all those years of anti-mining governments in the country have convinced people, some of the people that mining is bad. So we're, we are working hard on the social aspects of the project, putting a lot of time into that. Give a quick description. What are you doing to, you know, rebuild the social license? Well, we spend a lot of time with the people in the towns for the holy property, for example, there's three small towns around the project. It is beside a fairly busy road and it would be an underground mine. So we're spending a lot of time, one having meetings with the townspeople, taking them to the hotel, having dinners in a hotel or in the office, you know, the warehouse where we are, and explaining the process of exploration. What exploration is, what it means to the population if we have some success with what we're doing, that there'll be jobs in the future. Trying to, you know, offset the negativity around mining, that some of the anti-mining groups that I won't mention any names on that, but they're, you know, that spread misinformation on, it's going to take all their water, it's going to create this huge disastrous area. You know, so we try to educate the population on what we're doing and what the outcome will be if we're successful. We also spend quite a bit of time, you know, trying to resolve their water problems, for example, and putting time and effort into helping them with schools, school buildings or things like that. You know, try to show them that us being there can improve their lives and not the opposite. Okay, so well, so you're an early stage explorer in a very underexplored region of the world with high potential, so tell the viewers and listeners out there about, you know, about volcanic, called your share structure and, you know, what you plan to do. Right, so as I said, on the initial discovery, Holly, we have a resource underway that I think is going to come in very attractive. We have about 44 million shares out presently and about seven and a half million cash in the Treasury. The Holly property and the Bandera's property are two concessions that were granted to the radius itself for a number of years that had some initial holes in. So we already had a bit of a discovery to follow up on and that's just grown since we got there, but we have a large land position under application in the country. So we are evaluating all of those and this was done by radius to the whole lot of regional geocamp across that whole eastern volcanic belt, the one that is as prospective as you mentioned. We covered that with streamed geocamp, did some follow-up with soils over a very broad area, so volcanic is taking advantage of all that work and following up that geocamistry and, you know, we're either pushing to get the concession granted on the areas that we like or dropping the concession back to the government on the ones that we don't find so interesting. So far, beside the Holly and the Bandera's, we have found three very attractive early stage prospects that we're pushing to get granted in concessions and we are working hard on the Holly property trying to expand this resource that I think is going to become very important. It's very valuable answers we're finding because like I said, you know, there'll be 35 kilometers down the paved road will be Bluestone's mill, 80 kilometers in a different direction, W Escobar mill, both producing, you know, from very similar rocks and very similar mineralization that we're finding at Holly. So volcanic gold, a gold explorer in a gold-rich area in a highly prospective country that is very much underexplored in the right place at the right time. With that, Mr. Ridgway, we thank you and we wish you well to you and your company and everyone with whom you deal down in Guatemala. Okay, and thank you very much for the invite to talk.