That should be like full HD. That was not full HD. Yeah, there we go. Full HD. Okay. All right, I'm just going to use my laptop. Hello, everybody. I'm just getting started. I'm Ian Nash, and I'm going to be talking today about embedded JavaScript microprocessors and how I found running JavaScript on microprocessors actually makes sense and is possible and cost effective today. I am a software engineer in New York City working at Oscar Health, which is a health insurance startup there. And in college, I studied computer engineering, but now I mainly do software. And in my free time, I like to tinker with hardware, which means that I don't have university labs accessible to me anymore and I have a very limited set of parts at home, but I still like to tinker and buy random things and then figure out once they come in the mail what to do with them. And it's nice not to have any deadlines or pressure or expectations and just kind of mess around with things. In high school, I built a pick human aware like foam missile launcher. It just started like little darts, and it was a program I did with a college with a lot of structure and I had a professor actually helping out with a lot of the code and I would have had no idea where to start or what to do without most of the stuff already solved. And that project took about, I would say, 30 hours to complete in a group of three. And then my latest microcontroller project is a live heart rate and motion streaming sensor. It's almost like a Fitbit, but it gives you updates every 10 to 50 milliseconds. I'm trying to optimize that a little bit. And a lot of the control code for that is actually written in JavaScript and it's a custom microcontroller with some sensors soldered on and a battery pack. So it's really cool to see like, I don't need an oscilloscope for that. I just needed like a soldering iron and just ordered parts that came in the mail and just kind of assembled them together. So yeah, this is a reference of what I started out with. It was a big project that had a lot of electrical components and a lot of moving parts and wires. That was fun. Now it's just a little board with everything all soldered together. So I'm going to go over a little bit about my journey and where I kind of started working with microprocessors in JavaScript and what brought me to something that kind of works. And then I'm going to go through a step-to-step guide on actually how to make this possible and to build a JavaScript project on ESP32. I have a demo here. It's probably not going to work. I took a lot of screenshots. If it works, great. You guys will see a Wi-Fi network and you can get the temperature. If it doesn't work, well, you won't see a Wi-Fi network. So yeah, we want to show the current temperature on a web page. That's kind of going to be the goal in the tutorial project I'll go through. Raise your hand if you've worked with Arduino before. Who's heard of Arduino? Okay, awesome. So about half of you guys. Arduino is a library and IDE around the Atmel Mega. And the Atmel Mega is a hobbyist-friendly open-source chip. And it's one of the first easily accessible hobbyist chips that really take off in popularity. And it started a huge microcontroller maker movement. And it's great. You buy a board. You plug in it over USB. You download an app and you can just start writing C code. And it's much, much more intuitive than previous tool chains where you'd have to go to a vendor's website. You would have to download a huge toolkit. You would have to know how to run compilers. And you would have to write custom flashers in certain cases. So it really lowered the barrier to entry. And raise your hand if you've ever worked with an ARM SDK or any sort of microcontroller SDK before. Cool. Okay. Just curious. So yeah, this is kind of in my journey. In high school I started with PIC and college I did a lot of Arduino work and then did a lot of bare metal ARM and some more technical microcontroller stuff. But I think what I studied and what I do for fun with microcontrollers are actually two different areas. So a lot of this technical stuff I learned I don't use because other people have kind of figured that out and I can just build the fun parts, mainly in software. So this is a bit of an example of what PIC code looks like. And if you see here, it's pretty incomprehensible what all this stuff is and there needs to be some comments. And then here there's actually an entire bit mask. So you have to know the actual architecture of the chip and you actually have to calculate how many microseconds it takes for each clock cycle of the CPU. So just measuring that out and calculating it takes a lot of time. Arduino makes it a lot easier. This is a still C code, but you can say pin mode, trig pin output instead of TRSC 5 equals 1, TRSC 2 equals 5, TRSC 2, 5 equals, etc. And then in the loop here, you can just write delay microseconds and then you can get pulse in, which will give you a variable of the distance between you and the object. And this is in reference to that missile launcher where it's going to spin around and then when it sees someone coming to range, fire a little foam target. And now this is an imaginary JavaScript API which you can make real with some of the stuff that will be going through in a couple minutes.  You can require a pre-built module, initialize it with the pin. And you can use event-based programming instead of loops. It's because you need to manage timing and events really carefully with a single core processor. But with these newer processors, they're hundreds of times faster than the, say, the Arduino so they can actually multitask to where you can say, I just want to do this on a timeout of 10 milliseconds, and the processor will figure out how to give you that real-time signal on its own. So the ESP8266 is a chip that a lot of hobbyists started using with the Arduino. And it's a little microprocessor board. It's like a couple of dollars. And the problem is, is developing on it, you have to download tools from the vendor. You have to work with a custom compiler and read through a lot of C code and write a real-time operating system plug-in to even just use the libraries that were there. So one of the benefits, a developer came out with a tool called ESPRINA, which is a JavaScript interpreter to run on these devices and really interact with the low-level signaling and real-time operating system. So you don't have to manage all the C code. And it's an interpreter. So you load the firmware on the device and then you send your JavaScript code over a serial port, over to the board over USB. And then your board will run the JavaScript. You don't need to download any custom tool chains. You don't really need to do any sort of complex compilation. But I really wanted to get started working with that. And a new chip came out that people are talking about. It's the ESP32. It's an expressive 32 model. And it is a low-cost, really rich interface chip that includes a Wi-Fi radio, a Bluetooth radio, a dual-core processor, and a kind of open development tool chain that made it easy for hobbyists to go in and write extensions or rebuild previously existing tools to run JavaScript on microprocessors, targeting this microprocessor. And the other cool thing is there are tons and tons and tons of development boards with different bells and whistles, such as batteries or screens or different voltage pinouts where you can really find a board that suture needs to develop something and not have to build much custom hardware. And you can really just start plugging in sensors to a degree. So the board I'm working with and the board I have up here is the Lowland 32 by Waymos. It's one of the original, I think it's the second board, and there are spin-offs of spin-offs of spin-offs. So you have to be pretty careful when you're buying boards to find a developer that's made a name for themselves with designing their boards. The design of this board is pretty good for development, and one of the great things is you can just plug a battery into it and you don't have to run it over USB or build a custom battery control. It has all the battery control and charging and safety chips already built in. And it also has four megabytes of RAM to load your programs. That's actually a separate trip from the microprocessor. So it's 3-0. It comes with a little IDE. If any of you are familiar with the JavaScript IDE or any sort of like learn-to-code IDE, it's really similar. On the left, you have a repo, which is a read-eval-print-alooop. So you type commands, it'll say output. You can run this code here and it'll output the console of the code just like Node.js or the Chrome Web Inspector. So it's a really familiar interface. You click here to connect to the board over USB and you write code. This code here, it sets up a data bus using two wires on pin 17 and pin 5. And then it requires a module, connects to the display, and in this function it prints out a message on the display that's just hello world and then writes the display memory to the actual screen. Because here it's like Canvas where you draw stuff onto a canvas and then you need to print the buffer and load the canvas onto the page. Sprino is full stack JavaScript. And a problem with that is a lot of the lower level libraries that communicate, for instance, to the screen are actually doing all of the underlying calculations to draw the image and to send the commands to the string to the screen in JavaScript. And that causes a performance penalty and it really hits the limitations of some of these chips where you really have barely enough processing power to do that. And I was looking for an easier way to do this where you could just work with modules and write the drivers in a lower level language and then have a higher level language on top of that, very similar to React Native. And there's an OS for these boards, which I was really surprised about. Like it's an OS that does all these things but it seemed too good to be true. And it's called Mongoose OS. And Sprino was pretty frustrating for me where it was a limited environment. It was sometimes unstable. It kept crashing. I was trying to make a demo today and then I used a newer version of what I had before and it started crashing. And when one of these processors crashes, it crashes. It prints out its entire memory buffer and then just says abort and restarts the program from the beginning. So you have to read the memory and it's not worth it. So it's easier to just try to fix the crash and comment out the lines of code until you find where that crash happened and then kind of dig into it. But it's really time consuming and it happens a lot. So it made me sad. Mongoose OS though is a toolkit that combines IoT cloud integration and it's pseudo commercial to where if you want proper security, if you want over there updates, you have to pay them for that. But it also is really good for... Most of their stuff is open source and it has a really good developer environment and it's much more solid than what's volunteer community driven because it's actually a commercial product that they're selling. So if you build something with it, you need to publish your code. That's the GPL license. But for hobbyist projects, that's fine. And you can bolt on any of the stuff they have on your own too if you really want to do that. So setting up a simple environment for development, you need to set up a serial port, match voltages on your sensors, and assemble the boards and make sure you choose the right board. So this is kind of the prerequisites to even getting to software is to buy a board. My recommendation to get started with this stuff, I'll get back to what board to buy and some more of the specifics, is just to build many simple projects. So instead of trying to start something where you build a Wi-Fi web server that shows you the temperature and has a display for it, that's three or four components and so many different types of protocols and modules that can fail. It's easier to just start with building a temperature sensor. That's it. Print it to the screen. Copy and paste the demo code. See if it works. Plug in all of the sensors. Check the connections. And that way you won't get frustrated with trying to do everything at once. And in hardware it's harder to debug and see where things break. So really becoming familiar with the sensor, the protocol, and how to wire it is pretty helpful. Then for instance you could go at a heart rate sensor or at a motion sensor. And one thing to be aware of when you're buying sensors is protocols. A lot of sensors will give you an analog protocol, but most sensors these days have a three or four wire interface that has a digital protocol that's much easier to interface with and all of the really finicky analog and electrical engineering type. We have a signal and we want to get that signal to have some meaning. Happens on the sensor, not on your board. So you can just talk to the board and say what's the temperature. And it'll tell you number in Celsius instead of what's the temperature and it'll give you a range of numbers in an analog format. So three of the things that the Mongoose OS provide me that we're going to cover for this temperature sensor project are RPC calls. Raise your hand if you're familiar with what an RPC call is, a remote procedure call. Great. So remote procedure call is just a really fancy way of calling a function that doesn't actually run from where you're calling that function. So you can write a function or write a bit of a program that runs on a server and then call that from a client just like you would call a function on the client. So it's a layer that allows you to communicate between devices in a fairly natural way. And then Sesanta is a web server for microcontrollers. It serves web pages. It serves RPC calls. And it integrates all of this stuff together in a really easy to use format. I'll cover soon. And the last thing is MJS. It's a microJS interpreter for Mongoose. And one of the things that makes MJS different from Esprino is MJS doesn't try to do all of those low-level calculations in driver rights. It delegates very quickly to a C API. So it's going to hit the board with a command that says, get the temperature. And then it'll respond back with Celsius instead of Esprino where it'll send a message to the board saying, give me device 10 on this bus. Give me the device 10 initialization voltages. Give me the device 10 temperature range. Set temperature range. Set temperature. And the problem with that all happening in JavaScript is it has a lot more overhead. And if you can do that in C and have a lot more control of each cycle of your processor, which still matters, even with the faster processors, then it's easier to test that code. So if there's an issue with your JavaScript runtime, it'll come out more frequently if you're using the JavaScript runtime for all the operations instead of using a C runtime. Mongoose, another thing that's great. It's really easy to install. It's just like installing NPM. It runs great on Max Linux. I'm sorry I don't work with Windows. I would tell you it runs great on Windows if I've tried it. And you can just add a Ubuntu repository, and it'll install. Or you can run a Bash script, and it'll just install on your computer. If you're on Linux, no need for any drivers to interface with these boards. If you're on Max, you have to download a driver from the manufacturer. But it's really easy. And it brings you into this interface in Chrome, which is a web browser interface, where it gives you a step-by-step on how to initialize the board. And when I first got these boards, I plugged it in, and I tried to talk to it. And I tried to talk to it at different speeds and protocols, and it just started giving me gibberish. And then I finally figured out, OK, I'm talking to a Python interpreter. And then at one point, it's like, OK, well, what if I don't want the Python interpreter it comes with? And then I had to download another program called ESPTool, which lets you flash it, but it's a command line program. And it's very tedious to set all the parameters correctly and make sure the flash goes correctly. This just does it for you. There's a console down here that tells you all the details, unless it fails, which it sometimes fails, but it's not too often. You can debug it. But it gives you a really nice step-step-step into entering the environment and setting up your board. And you can get to that within five minutes. It also gives you an environment to write code and to save it onto the board. So you write your code here, and then you can save it onto the board, and then it'll run it just right there. So an example of code that you can write in the Mongoose environment is this is a very simple piece of code that will create an RPC handler to turn on or off an LED based off arguments coming in. So here is GPIO set mode. This is very similar to a lot of the other libraries that I mentioned earlier, and I don't think I covered this too well. So what I'm going to do is I'm going to project the board and kind of explain some of the different components. Give me one second. This may or may not work. I'll give it a try here. Thanks, Apple, but no. I didn't think it would be this hard. No, I don't. OK, fine. All right. So this chip right here is the ESP32 processor. It's kind of the guts of this whole thing. Let's see if I can zoom in a bit. Here we go. And it is a processor, and it has all the Wi-Fi architecture in it and all the Bluetooth. And below is Flash. This is the memory that's going to need to store the program you write. So when you write a web page or JavaScript, it's going to get stored into Flash, along with the parts of the JavaScript runtime. And the Mongoose libraries and a lot of the other JavaScript interpreters handle that for you. And then this chip right here is the USB interface chip. So it's going to interface the board to your computer, because the processor doesn't really talk the same language or voltage as your computer talks in. And this will create a USB driver that will give you a really low level communication to the chip that's a standard for a lot of this stuff. Really important buttons, the reset button. In many cases, if a chip's finished, you can just mash it a bunch and it'll go back to the last program. And then here are the battery charging circuits, as mentioned before. One thing to be careful of with these chips is a lot of the pins are numbered, but they're numbered in the way as an engineer would. So the chip has pins that start 9 to 45, 44, 12, 13, 10, 11. It makes sense when you lay out the chip.  So these aren't very developer-friendly boards. And unfortunately, that's what you get for using cutting-edge beta stuff. It'll be better soon. There's already really good documentation to make it better. There's a vendor in the US called SparkFun that has developed a slightly nicer board. And even if they didn't really develop a slightly nicer board, they developed a slightly nicer guy. Now, this is really overwhelming, I understand. But if you want to work with this stuff, you kind of have to learn, get some pieces of it. But the great thing is with these boards, a GPIO means General Purpose IO. And a lot of these pins on the board can do lots of different things. And these libraries will figure them out for you. So you can plug in a sensor as long as the voltage is correct. If it's 3.3 volts, you can plug it in as long as you don't plug in the power backwards. And plug in a pin and just see if it works and move it and see if it works. And the software will say, you can't use pin 34 for a DAC. And it'll just tell you that.  I'll put it on pin 26. So there's really better documentation coming out. But unfortunately, it's still work in progress. It's not completely solved yet. So for this, I'm just going to cover how this temperature sensor hooks up really quickly. If you see here, there are only three pins. It uses an interface called one wire. One wire is what it says. This is data, output. That's going to be the temperature. Positive, that's going to be power for the module. And negative, that's going to be ground for the module. I know this is a lot of electrical engineer stuff. But if you want to get started with this, this is kind of the direction to go. And there's a lot of tutorials out for Arduino on this stuff. So if you look here, I've color-coded the wires. 3.3V, that's going to be our power. 16 is going to be our data. And you'll see where that comes in in a second. And then in this mess of things at the very bottom, there's the ground. So you can connect it directly to the board. And you don't need to make your own power supply since the board has all the power supply circuitry already built in. Let's see here. OK. The one wire protocol, if you're trying to debug a protocol or learn how this stuff works, the best study resources are actually in universities, I've found. A lot of university tutorials and intro labs are better laid out than Wikipedia. And then if you try to look at the manufacturer's website, it's so highly technical, it's something else. So that's a really good way to get started with a lot of this stuff. What I want to do right now is go through the JavaScript side of things. And if you have any particular questions about how to hook it up and the wiring and a lot of the electrical engineering, look up our Gino tutorials. I'll have my contact information at the end. And if there are any specific questions, I'll be glad to answer them. This right here is going to GPIO set mode. So this is what I was talking about earlier, where those pins can do lots of different things. This line of code will actually figure out that pins.led, which is going to resolve to 22 in this case, it's going to tell it that it wants an output pin, a really simple type of pin for the LED. And it's going to set it and figure that out. And if it fails, it'll give you a message, which is really good because a lot of stuff before never really did that and never really gave you the perch for that. rpc.addhandler setled. This is going to listen for a message called setled. And then once it gets set to LED, it'll run this code, which will write to this LED that we've set up here if it's going to be offer on based off an argument to the function. So it's a pretty simple function in JavaScript to turn off around the LED based off of a remote call. Now we're going to get to the code that is running right now on the board for getting the temperature. It's a little more complex, but it really has the same type of structure. So at the very beginning, we're setting the pin to 16. And 16 is actually the number that corresponds to the board. A lot of other development environments and boards don't do this where you have to look up giant tables and figure out the internal versus external ports. Thankfully for this, the boards are labeled in a way that makes sense so you can just use it right in the code. And then here, this type of sensor is a DHT22 model. And DHT is a built-in library that will allow you to interface really easily with the DHT model sensor on the one wire protocol. So all of that protocol spec I showed before, it's all handled on the board hardware level. And then all of the communication like messages descend and different back and forth is handled on the driver level. So it's really great to have all that figured out for you and you can just call it with a really familiar JavaScript API. And there are tons of different modules out there that have been developed for heart rate sensors, LED displays, LCD displays, motion sensors, error quality sensors. And if you can't find one, you can find one and change it a little bit usually. So a lot of that really difficult legwork has been done tons of times and this will just let it be easier for the next time and let more people really access this sort of hardware. So the get temp handler, it's going to call the DHT sensor and the get temp method, the get humidity method. This will return two numbers. If we don't get a number, it's going to just return null to the user. If we do get a number, it'll actually just put it right in the response. So this is actually going to give us a JSON response, the key of temperature, the value of a float that's a temperature, humidity, and then value of h that's a temperature. So when I call this get temp handler, it will return to me either null or numbers for the temperature on the client side. And the way you interface with that is really simple JavaScript and HTML. Let's see if I still have it up here. OK, I don't have it here, but it just calls a post URL and then gets JSON back. It's a fairly simple web API. I'm sorry I messed up the slides. I copied and pasted the wrong chunk of code. OK, I can skip this. All right, one of the cool things about the Mongoose toolkit is it allows you to create configuration for your project. So you can rely on other libraries by including them just like NPM modules. You can put in a schema for your configuration, and it will automatically come up with a different configuration and load in all the modules. And there's even an incredible button, which if you've ever done firmware development before, it's kind of amazing. It sometimes works because it requires an external server. It takes a little while, but it usually is consistent. So you'll write an entire project.  What it does is it'll call into Mongoose OS, runs this data center that will compile all of the libraries you want into a firmware. And then you click a button, it'll upload the firmware to the device. And these are the low-level C libraries that I was talking about. You have to build toolkits for. They do all the toolchain stuff for you.  You build the firmware. You load it on the board. And then you can just start writing JavaScript. So it really, really lowers that barrier of entry, just like React Native does in many ways. So an example is in the Mongoose OS libraries, you can see that there are tons of libraries available. And they're all in GitHub. So let's take a look at one of these libraries. And something that's fairly interesting is it has a source folder. And this source folder includes the C driver code, which is fairly low level. It's not that bad, but it's pretty low level. It has to deal with timing delays and protocol level stuff. And then there's another file in here, which is what the magic of MJS is. And this is a JavaScript bridge. So this is the JavaScript portion of the API. And one of the really cool things about Mongoose is it does a really seamless transition between writing that C driver code and then writing that JavaScript driver code, which is pretty cool to see low level driver code, JavaScript code next to each other, a nice web UI, and it just works. And one of the really cool things you can do here, let me just plug in the device. So I'm going to hook up the device right now, actually, and go through the connection. So right here, device setup. You can see the first part's done. It found that I plugged in the board. I just plugged it into the USB port. And then it's going to try, let's see if it has access to the internet. It's going to try to load the code on that board right now. So if we go here, it's going to load the files from the board. OK. Nope. I'm going to restart server. Don't worry. I'm not going to spend too much time as it doesn't work. All right. So I'm going to go here. Yeah. So it worked this time. So it discovered that I've already loaded the demo JS project. That's the firmware for the ESP32, which is the board. And if you just install the software, you can get to this point. Installing software, plugging in the board over USB. It's quite easy. And then this last step I'm not going to do because I don't want to connect to the Wi-Fi network here. I want to make a Wi-Fi network. So I'm going to click done. I'm done with a little setup wizard. And then you can look here at the device configuration. And this is where all of the files running on the board will let you set up different servers. And this is the beauty of the Mongoose OS, is it will let me set up a web server. And all I have to do to set up a web server is in the Wi-Fi section, I enable an access point. Access point, enable true. You set the SSID, the password, and all of those things. And it will just create a wireless network for you. And it'll serve up HTML files that will then be able to call RPCs.  Raise your hand if that seems pretty doable. OK. Let's step back a bit. Create a web page to call a JSON URL to return data. Does that kind of sound more in the scheme of things for JavaScript land? OK. So this is that interesting bridge where you can run an embeddable web server and you write JSON configuration. And this stuff here is actually the defaults. This file is my override. So these are the only things I had to change from that giant configuration. So this is a Wi-Fi connection from a host that shouldn't be there. And this is the access point. So the SSID is temperature and the password is how hot is it? And it'll use the 16 pin to connect to the temperature sensor. So if I hop on. Yes. OK. Yeah. Close this out. Yeah. So that's all I have. Go forth and create. I know that was a lot. What's the URL for the JSON thing? So the URL is if you go to <IP_ADDRESS> on that Wi-Fi network. I think I'm on the wrong network. Does it work? I think the wire got loose. So that's an error because I didn't handle the edge case of it not connecting to the temperature sensor. So it was able to serve the web page and it was able to ask for the temperature. But I never wrote the error case for if the temperature sensor didn't return temperature. Yeah. You connected this thing right here. So if you connect to the temp Wi-Fi network, we'll see how long this lasts before it crashes. Yeah. Any questions? How's it doing the web server? So the web server, this is actually the configuration for the device. I think it's connected. Yeah. It's connected. So right here it's getting an HTTP URL. It's not Node.js. It's all custom high-performance low-level C code. But it's easily configurable. So yeah. You guys are hitting get temperature. You're running into an error state. And hey, you're loading a web page from a $6 chip powered over USB talking to my computer. So yeah. Any questions? So you say that it's a better way. So technically, I can actually look like a customized web page on there. Yes. There are limitations. You have four megabytes for everything. So no images. No crazy JavaScript frameworks, guys. Like this is very low level. Yes. Why use JavaScript? OK. Because C is pretty finicky. One of the nice things about JavaScript is with a temperature sensor demo, I could just put a call back there. And all of this stuff eventually hits C. It's very similar to when I'm conceptualizing something. I have this high-level code. I can write out that high-level code in JavaScript. And these processors can handle JavaScript. They're already running a real-time operating system. And JavaScript's really just coordinating all of the C low-level code. So it lets you think more about the thing you're assembling instead of all the little bits and pieces. It's like when you use a JavaScript framework that just gets a URL from a server, which of all the particular getPost URL headers and cookies, all that's really managed for you. And that's the idea here, where you can write 20 lines of JavaScript, maybe a C module, or just grab C modules from other people, and get up and running in an hour instead of eight hours. Or in many cases, when I've written custom C, I have copied the wrong timing constraint from another file. And just somebody's trying to DDOS this. What are you guys doing? Oh, yeah, the RP. There's no security on this. You guys can log in and change the password and the network. And I think you can actually load JavaScript on this. Extra points to anybody that does that. But I mean, if you guys break into this and try to take over the world, just unplug it. Yes. What about callbacks? Sorry. Yeah. You can use most ES5 features. What you can't use are any features. So most all language features for ES5 are supported. But what you can't do is you can't use Canvas. You can't use, like, Ajax Request. You have no access to any libraries that a browser would give you. It's very similar to Node.js, where you have to require things to do most everything. So you have to require all the libraries you need to do most everything. I don't think generators and yields are implemented, but a lot of features are there. It's not that hard to write a pretty decent JavaScript interpreter. The hard part is how do you make a interpreter connect to that hardware and work with the board? Yeah. Yes. What does it basically look like? There's a jealous case in this byte code in Java. JavaScript is not actually becoming byte code. When I was editing that file right there, if I click Save, it would actually send the JavaScript as is to the board. And the board is running in Live Interpreter that will go through the code, parse it, and run it all in real time. So there's no compilation, no byte code, no translation. It's just running that exact file on the board. So when I go to this view here, the device files, it is what it says it is. These are the files on the board. Oh, here's my horrible HTML if anyone's interested. So now we could see the full error, and then maybe you could add a sad face to it. And then if I click Save and Reboot, it'll put it onto the board, reboot it. This is the board rebooting. It is an operating system, so it prints a lot of stuff. And yeah, so that file I just changed got uploaded to the board as is. It's not compiled or packaged or changed. What's the get temp supposed to return? Get temp is supposed to return an object with the temperature in Celsius and the humidity that looks just like this. So it's supposed to return JSON. It worked earlier. The wiring quality is not high. So I think the connection is loose or something. Well, what I could do is this. I think that's valid. Yeah, it looks like it lost connection with the device. OK, now it's back up, reconnected. Any other questions while we're monkeying around with this thing? Can you do what? No, you can't run a Node.js server. So the server you guys are seeing and connecting to is a C low-level high-performance server. In some ways, Node.js acts as an interpreter, and MJS is an interpreter. It's just a different interpreter, but I don't think you could run full Node.js. There's really no reason to, because it's designed for a different environment. So Node.js, in this particular case, is MJS. Yeah? So MJS actually means it's part of the firmware. It's not something that you load in after the fact. Right, so MJS is a part of the firmware. It's an interpreter written in C. So the firmware is going to be an interpreter of all of the C-level libraries. And then the HTML and JavaScript and stuff, that gets loaded on after the fact, on to the memory in Flash. Is there a timeout? Yeah. So there's an error state, and if it hits a timeout, it'll call the error state of that callback. I just didn't implement any error states for the sake of clarity and laziness. And please don't ask me how to test this. I have no idea. Any other questions? Cool. Any more questions?


Python 2.7 is going away with macOS 12.3. This is something that Apple deprecated years and years ago. Deprecated means we are telling you that it will go away at some point in the future, but we aren't taking it away yet. Everyone expected it to be macOS 13 coming out, you know, beta in June, presumably release in September. It is now happening in macOS 12.3, beta right now, release imminently perhaps. And this is going to break some things for sure. A lot of developers have relied upon having Python in macOS. There is a very good reason for Apple doing this, in my opinion, and clearly they agree, many things for which people use Python are built with Python 3 in mind now. If you were taking a Python class, you would almost certainly want to be running Python 3. The transition from Python 2 to Python 3 was a mess for the Python team, and I don't think they're going to do it again. Like I don't think there's going to be a transition from 3 to 4 or anything like that, but I could be wrong. What do I know? I'm just a guy with a microphone, a podcast, and I don't even have a website anymore. But 2.7 is different than 3, and 2.7 has been built into macOS, basically, I think since it's inception or some version of Python 2, and now it's 2.7. And it can be very confusing because you go to the command line and you'll type Python main.py or something and then it crashes and you're like, oh, right, I have my Python as Python 3 main.py or whatever. And so Apple decided, yeah, we're causing too many problems by essentially bifurcating this. We have Python 2.7 for everyone, and then, except for the people that actually use Python, they have to install their own and deal with us shoveling this legacy thing into their laps. We're not going to do that anymore. So that's why they're doing it. However, there are some apps out there that rely on Python because it's a very powerful language and why wouldn't you? And of course, if you're going to release an app for macOS in the past, if you could get away with using 2.7, you would. And that way you knew that it was there and you didn't have to bundle it with your app or anything like that. Developers will now have to bundle whatever flavor of Python might work for them with their apps. And they will have to do it real fast. So don't be surprised if there are things. I've already gotten emails from this home automation software, Indigo, I want to say Iridium. I don't know what the name of it is. Begins with an I. I think it's Indigo. Let's call it Indigo. And they sent out a thing to their mailing list like, be careful. We don't, we aren't, we aren't sure when Apple is going to release this. So we can't tell you that we're going to be ready with our update that patches this. We thought we had a whole lot more time kind of, you know, those types of things. So you may not know what apps these are. Hopefully developers will tell us. But they haven't, Apple hasn't given developers a whole lot of heads up that like the end of life is, is happening. Like it, this is a surprise to a lot of us. It's a good surprise in the long run, but and it's many years overdue, in my opinion, but still, you know, the very end was sudden.


number 14 for you and we'll rattle through the lineup for you riders up at tapes so Anders Thompson coming here in in Denmark that's a replacement Jason Doyle will come out of gate number two for Australia gate number three for Ty Worfenden and Great Britain and Matze Janowski for Poland going from the outside Anders Thompson coming in here to replace Nicky Patterson once again. Henrik Muller and Nicky Patterson joint team managers have made the change. Thompson looking for better form now certainly Denmark have got better in the latter races that's for sure. Worfenden looking for points this time as well failing to score last time. Here we go then, tapes up, Dawls made a great start from gate number two. He hits the front Ty Worfenden electing to go very very wide in that first corner he relegates to the back Matze Janowski coming through into third place Anders Thompson they're hanging on in second place this world cup you just can't predict it wow it's fabulous out in front now Dawl hits the front oh it's gone wide over locks the bike that allows Anders Thompson through can Dawls straight line yes he can wonderful speed one of the inside bars himself back to the front oh that's awfully tight Dawls on well to hang on he has and Anders Thompson he's got that bike hooking up but Jason Doyle's coming back at him Anders Thompson has to get out of the way he knows he's got to otherwise he's going down and now Janowski's joining the party on the inside Doyle he's just cut him off there and now Anders Thompson can he get him run around the outside. Jason Dawl now under huge threat from Anders Thompson Dawls ridden so well here it's been a fabulous speedway race no doubt about that and Jason Dawl in second place these two teams were out of it earlier on now all of a sudden they're dominating the sweet way world cup Jason Dawl played a captain's role there absolutely inspiring race that was what a breathtaking race that was that was speedway international speedway at the top draw that really was and Ty Wolfson missed out there Jason Dawl three points for Australia Anders Thompson coming in there for Denmark picks up two points Matthew Janowski in third for Poland and Ty Wolfson then misses out for the second time this evening now that is a surprise but for Jason Dawl a stunning ride for Australia look at it now look at it that's crazy it is unbelievable what's happening here this evening everybody this is some world final we've got for you 23 points for Poland 22 there's nothing in it yeah all the tour coming into this meeting was just how even these teams were and it did look like at one point early doors that Australia and Denmark were out of it was going to come down to Great Britain and Poland it's gone upside down now as we can see in this race Australia out front and Anders Thompson coming in and grabs two big points for Denmark Janowski was trying so hard we haven't seen this sort of racing from Janowski in the Grand Prix and he needs to find that but Jason Dawl so determined up the inside look how tight he's gone he's run into that corner so Ty Anders Thompson did the right thing he had to get out of the way because there was no stopping Jason Dawl there no totally committed to hitting the front and managed to do so it was breathtaking speedway there in heat number 14 exactly what we want to see in a world world cup final


I'm also gonna be going over what shorting a stock is, what a short squeeze is, and how the subreddit r slash Wall Street bets stuck it to the billionaire hedge fund managers and how this might end up being a turning point in world history. So I'm gonna be breaking this down like a story and like all good stories you have to start at the beginning and you have to talk about the main characters. Now GameStop is a video game retailer who relies a lot on foot traffic and because of that they struggled quite a bit during the pandemic. And billionaire hedge funds like Melvin Capital saw that GameStop was struggling and they decided to short the stock. And shorting is basically where you bet against a company. So let's say that a company's stock is this pen. Now right now let's say that this pen is worth $10 and in one month you think that it's a little bit overvalued so it's gonna be worth $5.  So you take this pen right here and you go to a different place and you sell it to them for $10 because the pen is worth $10 right now. Then if everything goes to plan in one month when the pen is worth $5 you buy it back from that other place and then you give the pen back to me and you pocket the difference which in this case would be $5. So you basically made $5 out of thin air by betting that the worth of the pen will go down in a month. You didn't necessarily give any value to anybody or provide a service. Now something that shorting a stock isn't really morally right just because of the fact that you end up breaking down other companies in order to enrich yourself. And this is basically what these hedge funds did with the GameStop stock. It was the most shorted stock on the stock market.  What up everybody? This is gonna be the first video of the kitty corner and the market has kind of forced my hand on this one. The first stock that I'm gonna talk about is GameStop and I know it's a polarizing stock. Some people won't even tune into the stream right now when they hear that I'm bullish on GameStop at the current price point. It's trading about four bucks right now. Now you might ask why in the world would one single man plan to go all in on GameStop stock when all of these hedge funds are trying to short it? Well, shorting is a common practice that many hedge funds have used for a long time where they kind of just gang up on a single company. And then whenever the media and other people see that everybody's ganging up on that company, the stock tends to drop and it's just kind of a downward spiral. Many think that hedge funds actually do this on purpose and they have secret connections to a lot of the media outlets that basically shill for them. But it is technically legal just because of the fact that they're sort of just talking to other hedge funds and they all decide to short the same stock. Now, going back to the pen example, let's say you get this pen, you borrow it from me, you sell it to somebody else for $10, but then one month later, instead of going down to $5, it jumps up to 20. Then what happens? Well, the problem here is the person you borrowed it from, me, I want my pen back. And the only way you can get it back to me is if you buy the pen from the person you sold it to for $20 and that means you end up losing $10. Now theoretically, when it comes to shorting a stock, there's pretty much infinite risk because that stock could just keep going up and up and up and up. So if the pen goes up to $300, for instance, that means that you just lost $290 even though your initial investment was only 10. Now let's say theoretically there is a pen company where there's only 100 pens in the world and each one is worth $10. A hedge fund doesn't like this pen company for whatever reason, so they come along and they decide to short the stock and so they borrow 75 out of the 100 pens and then sell each of them for $100 to a third company. So let's say that this third company also does pen lending and they wanna sell their 75 pens to a fourth company. That means that there is 150 total short positions even though there's only 100 total pens. Now this would mean that over 130%, in this case, 150% of the total pens available are being shorted and that's basically exactly what happened with GameStop at about 130% of their total stocks being shorted. Now this is an extremely simplified example but this can basically lead to an endless cycle of borrowing and selling and borrowing and selling with a bunch of different companies involved. Now if the stock doesn't go back down in time then the company can either sell their position and take the loss or they can pay interest on the stock because they think it will go down in the near future. But when Wall Street bets bought in on GameStop they had zero intention of selling and what ended up happening is so many people bought in on the stock that it started to rise instead of go down. And this is just simple supply and demand.  So deep value bought GameStop stock in around July of 2020 and by the time January 2021 came around it was already $17 from the $4 it was in July. Now that alone would have been enough of a win because that means that it pretty much quadrupled and in that short of a time span that is really good. And on Christmas day deep value on his YouTube channel Roaring Kitty posted this video. Cheers, happy Friday, happy holidays. I hope everyone's having a great week. Surprise, GameStop's up about five X from when I uploaded those videos over the summer. So that's great to see when you have a thesis and by and large it unfolds as you hope that it could. That's nice. So it shouldn't be taken for granted doesn't always happen. So hopefully by now you know what my thesis is how that downside protection has kind of felt like it's been locked in but how there remains that tremendous potential upside right and now you see Cohen getting more activist buying into the 16s. Hopefully that gives people an idea as to what is possible down the road. And on top of that over the holiday GameStop digital sales went up about 300% and investor Ryan Cohn decided to modernize GameStop so that it wasn't so reliant on foot traffic. Now at this point the hedge funds had heavy losses but they thought that they could outlast Wall Street Bets so they decided to hold onto their short positions. But little did they know they were dealing with professional hold-illers with diamond hands. And Wall Street Bets wasn't just interested in making money they also wanted to stick it to the billionaires. And this is where the short squeeze comes in because in order to cut their losses as the stock price went up some of these hedge funds started buying more stock. Now this is a dangerous game because yes it mitigates some of the risk but at the same time it's probably going to cause the stock to go up even more because again supply and demand. There's a lot of people who wanted to buy the stock but nobody was selling. So the more the price went up the more the shorts were getting squeezed out of their position which made the price go up even more. Now I know this is really complicated to understand so again let's go back to the pen. So I let you borrow my pen and then you went and sold it to a third party for $10 thinking that the next month it was going to be $5 so you could buy it back from them, give the pen back to me and you would have made $5.  Unfortunately for you again the next month it goes up to $50 so it's even higher this time but you continue on with your short position thinking that it's going to fall eventually. Then the next month it goes up to $100 and at this point you've lost so much money and again it could theoretically just keep going up and up and up to infinity so what you decide to do is buy back some of your shares at $100 just to mitigate the risk. And if it keeps going up it's going to be so expensive that it's going to bankrupt your company and so what you decide to do is just go ahead and buy the pen back at $100 and you take the $90 loss. But not all of the positions were liquidated and every single time a hedge fund decided to buy back one of the pens or one of the stocks then what ended up happening is the stock price went up even further because of the fact that there were more people buying than selling. Now you might think this was a bad idea to lose out on the $90 for some of these hedge funds but actually it turned out that it wasn't because just a few days later the stock price went up to over $469. And that means that Roaring Kitty's initial investment of $755,000 turned into over $48 million. What?  And on top of that many members of the subreddit that also decided to hold ended up making millions. When the media caught wind of this they covered it and of course when that happened the stock price went up even more. Now this is where Robinhood comes into the story and Robinhood is one of the easiest apps that you can use to buy and sell stocks. They claim to be an app that is for the people they wanna open up investing for the common man and the common woman. However on January 28th Robinhood made the decision to suspend the ability to buy shares of GameStop and that ended up helping out the hedge funds. The stock which was at over $400 plummeted to $120 within just a few hours. Now they claim that this was to stop market volatility and protect their customers but what ended up happening is the hedge funds benefited. So obviously a lot of people found this to be a little hypocritical as Robinhood is supposed to steal from the rich and give to the poor and it kind of seemed like they were doing the opposite. Now as a result of this cover up the Streisand effect kind of kicked in and everyone went in on Robinhood. And when I say everyone I really mean it. Like all the politicians from both sides of the aisle business owners, celebrities, common people everybody went in on Robinhood hard. Robinhood then got downvoted on platforms like Google Play and Google had to delete over 100,000 negative reviews. The Discord server for R slash Wall Street bets and the subreddit itself were temporarily shut down. This caused the Streisand effect to kick in even harder and what ended up happening is a class action lawsuit. In fact several class action lawsuits were filed against Robinhood. Meanwhile many on R slash Wall Street bets are still holding firm with those diamond hands. Because at the end of the day this wasn't just about making money I mean everybody could just liquidate their position now and they would have stuck it to the big hedge funds but what they really wanted to do was turn the tables on these hedge funds and give them a taste of their own medicine. Now to be fair there were other brokerages besides Robinhood that blocked the trading of Game Stock and AMC and they do have some reasonably fair arguments for why they blocked them because it's not as simple as just you know they were trying to help out the hedge funds. There is more to it than that however Robinhood pretty much took all of the blame and this is an absolute PR nightmare for them. They are now getting sued, they have users leaving them left and right, everybody's leaving them a bad comment. It is a horrible situation for Robinhood. Now at the time of recording this video Game Stock is still over $300 and I think I can kind of speak for everybody here that it's not just about the money. I think lots of people are trying to buy this stock even outside of Wall Street bets at this point just so that they can kind of stick it to the big hedge funds. For the longest time these hedge funds have been using these tactics where basically it's just strength and numbers. A bunch of them will gang up on a company and sometimes it's for a good reason and sometimes maybe it's not for such a good reason and then again there's some speculation that they kind of coordinate with different politicians as well as the media in order to really gang up on these companies and it creates a situation where it's just very toxic and the company is almost always gonna have their stock go down. But this one time the little man was able to stick it to the suits and I think a lot of people are really happy about this. At the very least it's extremely interesting and I think this might start future trends. If you think about it this is kind of an incident where investing got decentralized so instead of all these big hedge funds these really powerful people all ganging up on one company a bunch of people, a bunch of random people decided to get together and they had an idea and they sort of ganged up on the hedge fund. Is this going to start a future trend? Nobody really knows. Right now game stock is still over $300 and AMC looks like it's also climbing. I will definitely be keeping my finger on the pulse of this entire situation. It's great to see the little man get some chicken tendies, get that W against the big guys every once in a while. But let me know what you guys think down in the comments below. I've heard some really good arguments on both sides. I do think that most people are pretty happy that this happened overall. And check out my other videos right here. I made them just for you. Go ahead, hit that subscribe button, ring the notification bell, comment down below, like the video, share the video and I will see you guys next time.


Everybody forced here ripping 2022 three and two baseball first off the line ten box case number one That's a division's case check out the results right there and here we go. Good luck everybody You can always check those are late in sports cards comm Anytime All right, photo. So as you don't know photo three and two Has the red parallel so you get one red parallel in the in the three card pack that'll be numbered to six Sometimes it's number different like like five to six to eight And then you get some red in case cards both of the in case cards are red first off the line parallel So which is really cool And then again those are numbered some are numbered to like five some to six some to eight so always low number. Here we go Look So like the most color matches in baseball, I think So many teams of red All right, okay. We got napple joy Cleveland 77 of 99. That's al central red Bryce Harper or three of six nice NL East And an all-hands team for the al East Brooks Robinson six of 50 Al central rookie patch red first off the line Joe Ryan eight of eight Nice one for the American League Central Other good rookie pitcher. They have a lot of them this year And a dual-patch auto Alan Trammell al central those are game used for sure man. Those are awesome five of five Good stuff. Is it Tramiel is Alan Tramiel? Yeah Okay, because Taylor Tramiel who's hearing is Tramiel and this is Tramiel. Okay, pretty sure Tramiel for the al central nice Yeah, by the way guys, I'm not gonna recap this one. This is gonna be a pretty quick break not gonna recap this break Pretty much. Yeah You watch if you watch if you watch it in a if you watch it back you just scroll to the next box That's one of the next box real quick. Okay. God big Mac 55 and 99 al West Red Maddox one of six al or NL East excuse me NL East sultans big poppy 27 of 150 al East That is a I hate to admit this but that is a nasty Yankees patch on the Louise Hill Hey Numbered six out of six al East discussing part of the end on the NY Ease man, I hate to admit I hate to admit got Jersey auto Steve Carlton three out of five for the NL East Yeah, dude, I hate to admit it.  That's a pretty cool one moving along into box number three polar Pete NL East 22 32 red photo Alec Thomas rookie NL West five out of six sultans Spencer Torquilson al central 22 of 150 That's why I was like this is tough to say but uh a Dual patch laundry tag and just looks like a regular patch Josh young al central prospect Josh young Six out of six dude hits tanks Yeah You go al west and a rookie auto of hunter green nice red color match Day one rookie auto NL central four out of six Spreading the love around in the break. That's why Ortiz is my favorite all-time This is like the most important player in Red Sox history, and he's also just One of the nicest people like the nicest dude big personality Always always trying to have fun prospects Andy Pages 10 of 99 NL West Red and Frankie Corsetti for the AL East one of six And David Ortiz sultans again 78 of 150 this time AL East NL West rookie jumbo patch Seth beer And you go four out of eight on the set beer NL West and an AL central Jersey auto Tim Anderson three of five Player warren Tim Anderson box five now halfway point He's good on the broadcast here with a rod and Frank Thomas not the broadcast but the The pre game post game Fox shows It's funny how small Frank Thomas makes poppy look yeah Thomas is gigantic Got bleached Jordan. That's Blake's teammate 28 of 32 AL East Shipper Jones NL East four of six And a wanderer all rookie team 53 of 150 AL East He just showed off his like card collection on Twitter. Did he and they got like a bunch of likes and reads This quad relic Julio Rodriguez part of laundry to pop partial laundry tags There we go player warren J rod three of six AL West congrats Go and a patch on a number 205 of a Ryan Pepe on for the NL West Prospects for the Dodgers there napple joy Cleveland 19 of 32 AL central Red Gary Carter for Montreal that goes NL East Montreal five of six Those are the nationals Mike trout 50 of 50 future first ballets AL West Reggie Jackson AL West full count swatches all bat relics there three out of six nice Reggie and A day one auto of Jack a lighter There you go AL West six of six I pulled all I pulled the one of one of this actually and it was a green ink auto. I Don't know why I was like that's cool though Nice lighter for the AL West He does not have a lot of autos out there yet. He doesn't have his first bowman yet Gotta get him on a card few more boxes Brandon Crawford NL West 93 of 99 Red Oswald Paraza prospects Number one of six AL East And all rookie team Mackenzie Gore 86 of 150 NL West nice dual patch a relativist Martina is AL East four out of six Player worn blue jays patches there Well, Elvis Martina is a good one a redemption now Wow plus one auto red Redemption O'Neill Cruz Wanderfranko NL Central AL East Random at the end Wow good luck on that one NL Central AL East. I gotta sweat it out for a couple minutes here on this one I'll give some break credits whoever doesn't win the random versus for bad beat on that one Oswald Paraza prospects AL East 18 to 25 Strider rookie NL East one of six and A Jeremy Pena all rookie team AL West 23 of 150. We've got Bo Jackson full count swatches Three out of six for the AL Central Nice bow. That's pretty sick game game used And Khalil Watson lone star signatures NLE's beautiful patch there one of five Khalil Watson Yeah, that's gross dude the patch is crazy Khalil Watson two more boxes Yellow it's number two out of three for the NL Central Red Josh is a winder or winder three of six for the AL Central and A sultan's shohai otani 38 of 50 AL West big show Jumbo bat rally Ronald Acunha jr. NLE four of six and Sam Bachman quad patch auto for the AL West nice prospect hit there two of six Beautiful patches Last box of the day and guys Sam is live in about an hour More group breaks.  That's a gross patch See in a second here. Oh god, that's gross prospects Payton battenfield AL Central 98 of 99 Hey, there's only two cards in this one Curtis me two of six the AL East. Yeah, I'm not all this next card. Yeah This next one's disgusting. No AL East with the Maryland patch Mike Bowman rookie seven of eight for color The Orioles Maryland logo That's sick. There you go AL East and close it out AL Central rookie day one auto Bobby wit jr Big wit five out of six Al Central big card on the back for you enough sweating. It's random time Okay, good luck to the AL Central or sorry NL Central and AL East plus one auto red redemption Odeo cruise wander Franco I'm gonna roll the dice and that'll be how many times are gonna random. It's gonna be an eight We go eight times here. Good luck to the both of you again NL Central AL East Whoever's up top after eight gets the card one two three four five six seven and Eight it's going to the NL Central NL Central and that'll do it for the break everybody. Thank you again I will give bad beat credit to the AL East in the break talking just a moment


in my opinion, humbly with all due respect, what's going on in Gaza is the equivalent of BLM in the States. What do I mean?   A lot of it is Islamists, fundamentalists. There's no, there's no marches, there's no protests, but Israel defends itself after October 7th, and I've seen you condemn Hamas for October 7th, but you've also sympathized with the Palestinians as you should. But all of a sudden, that's the biggest story in the news. Why the distinguishment? Brace yourself, friends, because we're about to experience a lot more conservative brain rot. So you just listened to conservative PBD podcast co-host Adam use the black on black crime trope against Palestinians in an effort to downplay the ongoing genocide taking place against the people of Gaza. Now I could explain the difference between violence among peers and state sanctioned violence against people, but I don't have to do that because Bassem use of handles this question perfectly and even calls out the racism embedded in that question. Why can't Muslims say? There's a difference between comparing conflicts, civil war, and then allowing another country to bomb you from the sky every single day for 100 days. You cannot compare the both.  So let's Israel. This is exactly what I'm saying. No, no, this is what I'm saying. I asked a question. You're reading into my tone. You have absolutely no sympathy for the Palestinian killing because that's not true. Don't put words my way. No, no, no, seriously. I have 100% of sympathy.   These are called either proxy wars or civil wars. But you this is different because, A, the America is not standing behind Saudi Arabia, voting every single UN resolution like like Israel. Israel is killing Palestinians. And nobody can do anything for them in the UN or the Security Council, right? You can talk about how Saudis are killing the Houthis or the Yemenis or how Iran. But when they go to the Security Council, America doesn't use the vote, the veto. You know how many vetoes did America use since the inception of the Security Council? How many? Tell me. 88. How many of those were they used in order to protect Israel from a veto? 56. Oh. The superpower of the world over 50 years used more than 65% of its veto power to protect one country. You cannot compare both. Perfectly said. We are talking about power dynamics here and a power imbalance in particular and imperialism. And I don't know if you caught it, but they revealed how ignorant they were to this fact. And I want to play it again just in case you missed it. How many of those were they used in order to protect Israel from a veto? 56. Oh. Isn't that amazing? Yes, America exercised its veto power on the Security Council zero times to protect Israel. What? Imagine thinking that. Imagine being so uninformed that you've never heard that the U.S. has been running cover for Israel for decades. It's just, it's baffling to me. They're so uninformed. And as a result, they're basing their arguments purely on emotions, whereas Basim Youssef is speaking about facts. So you begin to understand why the host Adam here used the argument that he used, because he doesn't have facts, so he's trying to deflect. This tactic is used in debates to just change the conversation. And I see why he wants to talk about this on his own terms, because he knows nothing about the Palestinian struggle. But in order to understand why he specifically invoked that argument against Palestinians, the black on black crime trope argument, we first need to understand why conservatives played the what aboutism game in the first place, whenever institutional violence against black Americans comes up. So in an op-ed for Teen Vogue published during the 2020 George Floyd protests, Jamila Nishid addresses the dangerous black on black crime myth by pointing out some basic facts. First and foremost, black Americans are three times as likely to be killed by police compared to white Americans.  Third, there is a direct link between racism and poverty that's enforced institutionally to stifle growth of black people. So what does this all mean? Well, if you are statistically more likely to be impoverished because you're black, well obviously you're going to live in a more poor neighborhood. Poor neighborhoods are usually overpoliced or at a minimum police more than affluent white neighborhoods on average. And if there is just more civilian encounters with police in black neighborhoods because they're overpoliced, despite comparable levels of crime, by the way, that is just going to lead to more arrests in black neighborhoods because it's basic math, which also explains the higher rate of police killings against black Americans compared to whites. Now when you put aside statistical realities and factor in just human psychology, well, police are conditioned to racially profile black Americans more than whites because they are literally trained to look for crime exclusively in poor neighborhoods where black people and people of color disproportionately live. All of these things are interconnected and when black Americans try to educate white Americans about these institutional biases that lead to state sanctioned violence, well, they're hit with a what about black on black crime. But that's not what we're talking about here. That's an entirely different conversation. But here's why they use that non sequitur.  Race isn't a factor. And that's intentional. Using language like black on black crime perpetuates the myth that intraracial violence is specific to the black community.  This tactic has been used to justify the mistreatment of black people since the abolishment of slavery.  Think about that. Crime within black communities is comparable to crime within white communities.   This type of language is an attempt to justify the killings of Brown, Taylor, Floyd, Philando Castile, Eric Garner, and the ever growing list of black victims of police brutality. It takes the blame from the officers involved and places it on the victims simply for being black. We're not asking for special treatment. We're asking for equal treatment to call the fallacy of black on black crime.   And the goal here is to justify violence by the oppressor against the oppressed all in an effort to victim blame and make it seem like the people who are actually perpetrating the violence have no choice. It's a matter of self defense. That's literally what they're priming you to believe. So since these people who they've deemed violent are the ones who started the violence, violence against them is therefore justified. So if we take what we've learned about the black on black crime myth and apply that to the situation in Palestine, you begin to get a sense as to why Adam invoked the black on black crime trope.  It is explicitly racist and a twisted way of thinking that doesn't take into account the history of colonialism and imperialist violence against Palestinians. Now, another way that Adam tries to victim blame Palestinians here is by reducing the situation down to a matter of economics. But you're going to see Bassam use of try to explain why that's not that simple, right? It's not as simple as saying, well, why don't they just like pick themselves up by their bootstraps and do better? Now, as Bassam use of is trying to explain this, he gets interrupted and you'll see why the bottom line is this, what I've seen in the Middle East, it comes down to socio economics, then you sprinkle in a little Islam is Islamism in there. Why is every rich country in the Middle East have no problems, but all the poor countries are suicide bombings, terrorists, Gaza had the opportunity to invest billions of dollars into infrastructure and into infrastructure, but they built tunnels and bombs. But my question is no, no, here's my here. You're wrong. You're wrong. Gaza has not built tunnels and bombs. You're wrong. You're wrong. You said like as if they just there was like some sort of a prosperous source of economy. And all of us, I said, took that and put it on in terms, what you're missing here is Gaza since 2006 is under blockade. And even the medicine, even the water, even the electricity is controlled by Israel. They don't have. I'm not asking you about Gaza. I'm asking you, but no, you want to focus on Gaza and then you want to turn it back on Israel. I'm asking you specifically. Let's not talk about Israel. If that would make you a little bit nervous.  No, that's not what I'm saying. That's exactly what you say. No, they're just like poor people killing each other and we're just like there watching. No, I'm sorry that, dude, I like you.   Okay, this is the third time you've used the racist word. I've never said that once about you. Your undertone is very, very, very offensive. So when I read stats, you don't like my tone. When I read stats, you read the stats basically telling people like you see because they're rich. They got this to themselves. The rich people are better. The poor people are okay. So we can have to kill them every now and then. That's not what I said and you're putting words in my mouth and it's actually super disrespectful. I'm reading stats to you. I'm saying how can we uplift the poor countries in the Middle East? How can we turn- Remove the bluekate. That's number one. No, no, no. I said the Middle East, funny guy. Remove the bluekate. I said the Middle East. You're talking about Gaza. So you see the problem. The conservative here, Adam, is trying to pinpoint certain economic indicators to address them in a vacuum. But that's not how the world works. Statistics without context are meaningless. It goes back to the black on black crime trope, right? And Basim is trying to contextualize the situation here. Gazans have no self-determination. They can't choose to invest in their economy. 80% of Gazans relied on foreign aid before the siege. They have no control over their own water supply and electricity. No freedom of movement. They are in an open-air prison. What do you expect out of them? How can you possibly victim blame here? But as you saw, Basim was cut off when he tried to educate Adam. And I suspect that the reason why is that he didn't like that Basim was kind of undermining his point here. And on top of that, he probably also didn't like that his racism was being called out. But Basim did what he needed to do. He shut down this notion that Palestinians are somehow responsible for their own subjugation. That is madness. But Basim entertains Adam's argument here for a moment and talks about other Middle Eastern countries. And let's see how that goes too. I'm naming all these countries that are thriving. Qatar, Bahrain, UAE, Israel, Silicon Valley of the Middle East. What can be done with the countries that are quote-unquote shitholes? Okay. Give me a country like a shithole. Give me an example. I'm looking at the unemployment rates in all these countries. Give me one country. Afghanistan, Syria, Lebanon. Why have I understand that it became a shithole country? Because they endorsed the Taliban. They did. They did. Isn't that a little bit of a reductive way to tell history? Because at the beginning, there was no Taliban. And then the Soviet Union came in. And then America came in, supported the Taliban, make them bigger than they were. And then at the end of the day, they supported, if you remember Rambo 3, Rambo 3 was supporting the Taliban. So Taliban was really cool. And even they were, they were even hailed by right-wing Christians as freedom fighters, anti-communists. And then what happened? America, some people like the Richard Wilson Wall wanted in to come in to put some schools that now, now, now we spend, we spend all of this money of tanks on weapons. We don't need to put them schools. What happened? Taliban flourished all because of America interfered, made it shitty, left everything. Taliban forged it. And then America went in again, spent $2 billion making it even, two terrarium laws made it even worse. So when you tell me like a country is not surviving, it's not because, oh, because they're bad people then on it. You have to come into the root cause.  Go to Syria. Mic drop. Devastating arguments here by Basim that Adam just can't counter because facts matter. Now if you keep watching, Basim explains that the countries that Adam deems as shitholes have become battlegrounds for proxy wars between larger powers. These are details that literally matter. You can't disaggregate specific statistics from the overall situation. The context matters here. And it is the height of Western chauvinism to blame these countries for the predicaments that they're in while not acknowledging the ways that our government destabilize these countries. Geopolitics matters. Imperialism matters. The context matters. And that's what Basim is providing Adam with here. And it's not just the Middle East that the United States has destabilized. U.S. imperialism has destabilized so many Latin American countries, so many. And after destroying these countries, ironically, Americans then have the audacity to turn around and complain about immigration crises that our country created in the first place and then fear monger about the potential for terrorism on the border. Excuse me?  I am begging Americans to have just a tiny bit of self-awareness for once. Most of us can't actually comprehend the fact that most of the world views us as the bad guys. And that's what you kind of see here with Adam, right? It's cognitive dissonance. But as frustrated as I felt watching this, since Adam was obviously arguing in bad faith, I did feel a lot better after looking at the comment section because it seems like Basim Youssef was actually getting through to the PBD viewers. Here's some of the most popular comments that I saw. Quote, Adam called Basim intellectually lazy after he gave him a whole history lesson about his own people. Exactly.  So this is clearly a regular viewer who is conservative, I'm assuming, since they watched the show. And yeah, they're one over by Basim. Basim with others made me look at this whole thing differently. Once you research how much influence a foreign power Israel has over the U.S. and U.K. politics, you will be stunned. Thank you, Basim, for another informed interview slash debate. Adam came across like an unformed bully. Basim came across like an educated and also wise person who speaks logically. Adam has single-handedly put a stain on the reputation of the PBD podcast.  Adam is the definition of you don't need to be smart to be successful. This one is just brutal. Did Adam come straight from APAC camps? How was he indoctrinated so badly? I don't think it was possible for Adam to look more like an establishment fool than he already did, yet here we are. I'm embarrassed for Adam, well done, Pat, for letting this one play out and letting Adam expose himself yet again. And trust me when I say this, there is so much more where that came from. You would be hard-pressed to find a single comment in support of Adam. And I never thought that I would say this, but reading the comments under a YouTube video from a conservative channel actually gave me hope. What's happening here? I mean, the comments section just, they were with Basim Yusuf. And I'm sure that many people like myself showed up just to see Basim. Still, you can't deny how powerful Basim was throughout this conversation. And he changed minds. Like, there's no doubt in my mind that he changed minds of people in the PBD audience, which is important. Now, there's so much more that I would like to address from this podcast. For example, there was a weird moment where Patrick Bet David chose to take a phone call from Chris Cuomo on air and disrupted the entire conversation. Like, why would you do something like this? It's incredibly unprofessional, but since it's Chris Cuomo, it's like, hey, I know Chris Cuomo. Let me answer the phone for him. It just, it was really weird. So I had to point that out. He also tried to portray Trump as a dove on foreign policy, which is just delusional to me. But I mean, if we keep going, we're going to be here all day. What we talked about here in this video, in my opinion, is the most important because the way that Basim discusses Israel, Palestine is how you want to discuss it as well. Because this is the blueprint that you need to actually change hearts and minds and shift the dialogue here, which matters the most, in my opinion, currently when it comes to these types of debates. So I'll link you to the full thing just in case you want to watch it. But if you're going to watch something from Basim Yusuf, I would actually recommend the full length interview, interview that he did with Pierce Morgan. I think that one was much better because he's able to articulate himself better at length without getting interrupted. But overall, just getting back to Basim Yusuf in this interview, he is an amazing communicator and he is proving in real time that facts still matter and educating and informing people can still win them over. And that in my opinion is cause for optimism in my book, because I thought that people couldn't be won over with facts. And it was all just opinions formed based on emotions. But Basim is disproving that in real time. And I think that's a that's cause for celebration in my book. I get the bars low, but I'm optimistic because of it.


We do not want to sit around and wait our goal, and it's especially in recovery is to have that recovery happen It does not happen unless we pick up you the debris in the case of a state program It starts with that ROI the ROI right of entry gives crews working on the consolidated debris removal program The legal right to enter the property to begin the debris removal process phase 2 of Cleo Besides the obvious the burned remains left behind by a wildfire Contains many toxic contaminants like lead arsenic mercury asbestos and more. I think a lot of people Do not realize how difficult it is to properly remove fire debris There's a lot of containment in the soil and the foundations and cars Some survivors don't sign the ROI and that's their choice but handling the phase 2 debris removal themselves Is more difficult time-consuming and costly? It really is a program that we do not charge you Anything other than collecting the insurance proceeds, and I think we do it the best in the nation I I know we do it the quickest the ROI isn't easy to read for Side it and you're on your own road to recovery and we'll do the work You'll have less stress. It'll cost you nothing and you'll likely reach the finish line faster For more information go to wildfirerecovery.ca.gov